2002-01-22 21:23:46 +01:00
|
|
|
|
/* Built-in and inline functions for gcj
|
2005-02-12 16:21:14 +01:00
|
|
|
|
Copyright (C) 2001, 2003, 2004, 2005
|
2002-01-22 21:23:46 +01:00
|
|
|
|
Free Software Foundation, Inc.
|
|
|
|
|
|
Make-lang.in, [...]: Replace "GNU CC" with "GCC" in the copyright header.
* Make-lang.in, boehm.c, buffer.c,
buffer.h, builtins.c, class.c,
config-lang.in, constants.c,
convert.h, decl.c, except.c,
expr.c, java-except.h,
java-tree.h, javaop.def,
jcf-parse.c, jcf-write.c,
jv-scan.c, jvgenmain.c,
jvspec.c, keyword.gperf,
keyword.h, lang-options.h,
lang-specs.h, lang.c, lex.c,
lex.h, mangle.c, mangle_name.c,
parse-scan.y, parse.h, parse.y,
typeck.c, verify.c, xref.c,
xref.h: Replace "GNU CC" with
"GCC" in the copyright header.
* check-init.c, gjavah.c, javaop.h,
jcf-depend.c, jcf-dump.c, jcf-io.c,
jcf-path.c, jcf-reader.c, jcf.h,
zextract.c, zipfile.h: These files are
"part of GCC". Also say "GCC" not "GNU CC".
From-SVN: r60747
2003-01-01 16:10:03 +01:00
|
|
|
|
This file is part of GCC.
|
2002-01-22 21:23:46 +01:00
|
|
|
|
|
Make-lang.in, [...]: Replace "GNU CC" with "GCC" in the copyright header.
* Make-lang.in, boehm.c, buffer.c,
buffer.h, builtins.c, class.c,
config-lang.in, constants.c,
convert.h, decl.c, except.c,
expr.c, java-except.h,
java-tree.h, javaop.def,
jcf-parse.c, jcf-write.c,
jv-scan.c, jvgenmain.c,
jvspec.c, keyword.gperf,
keyword.h, lang-options.h,
lang-specs.h, lang.c, lex.c,
lex.h, mangle.c, mangle_name.c,
parse-scan.y, parse.h, parse.y,
typeck.c, verify.c, xref.c,
xref.h: Replace "GNU CC" with
"GCC" in the copyright header.
* check-init.c, gjavah.c, javaop.h,
jcf-depend.c, jcf-dump.c, jcf-io.c,
jcf-path.c, jcf-reader.c, jcf.h,
zextract.c, zipfile.h: These files are
"part of GCC". Also say "GCC" not "GNU CC".
From-SVN: r60747
2003-01-01 16:10:03 +01:00
|
|
|
|
GCC is free software; you can redistribute it and/or modify
|
2002-01-22 21:23:46 +01:00
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
|
the Free Software Foundation; either version 2, or (at your option)
|
|
|
|
|
any later version.
|
|
|
|
|
|
Make-lang.in, [...]: Replace "GNU CC" with "GCC" in the copyright header.
* Make-lang.in, boehm.c, buffer.c,
buffer.h, builtins.c, class.c,
config-lang.in, constants.c,
convert.h, decl.c, except.c,
expr.c, java-except.h,
java-tree.h, javaop.def,
jcf-parse.c, jcf-write.c,
jv-scan.c, jvgenmain.c,
jvspec.c, keyword.gperf,
keyword.h, lang-options.h,
lang-specs.h, lang.c, lex.c,
lex.h, mangle.c, mangle_name.c,
parse-scan.y, parse.h, parse.y,
typeck.c, verify.c, xref.c,
xref.h: Replace "GNU CC" with
"GCC" in the copyright header.
* check-init.c, gjavah.c, javaop.h,
jcf-depend.c, jcf-dump.c, jcf-io.c,
jcf-path.c, jcf-reader.c, jcf.h,
zextract.c, zipfile.h: These files are
"part of GCC". Also say "GCC" not "GNU CC".
From-SVN: r60747
2003-01-01 16:10:03 +01:00
|
|
|
|
GCC is distributed in the hope that it will be useful,
|
2002-01-22 21:23:46 +01:00
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
Make-lang.in, [...]: Replace "GNU CC" with "GCC" in the copyright header.
* Make-lang.in, boehm.c, buffer.c,
buffer.h, builtins.c, class.c,
config-lang.in, constants.c,
convert.h, decl.c, except.c,
expr.c, java-except.h,
java-tree.h, javaop.def,
jcf-parse.c, jcf-write.c,
jv-scan.c, jvgenmain.c,
jvspec.c, keyword.gperf,
keyword.h, lang-options.h,
lang-specs.h, lang.c, lex.c,
lex.h, mangle.c, mangle_name.c,
parse-scan.y, parse.h, parse.y,
typeck.c, verify.c, xref.c,
xref.h: Replace "GNU CC" with
"GCC" in the copyright header.
* check-init.c, gjavah.c, javaop.h,
jcf-depend.c, jcf-dump.c, jcf-io.c,
jcf-path.c, jcf-reader.c, jcf.h,
zextract.c, zipfile.h: These files are
"part of GCC". Also say "GCC" not "GNU CC".
From-SVN: r60747
2003-01-01 16:10:03 +01:00
|
|
|
|
along with GCC; see the file COPYING. If not, write to
|
2005-06-25 02:33:05 +02:00
|
|
|
|
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
|
|
|
|
|
Boston, MA 02110-1301, USA.
|
2002-01-22 21:23:46 +01:00
|
|
|
|
|
|
|
|
|
Java and all Java-based marks are trademarks or registered trademarks
|
|
|
|
|
of Sun Microsystems, Inc. in the United States and other countries.
|
|
|
|
|
The Free Software Foundation is independent of Sun Microsystems, Inc. */
|
|
|
|
|
|
|
|
|
|
/* Written by Tom Tromey <tromey@redhat.com>. */
|
|
|
|
|
|
|
|
|
|
#include "config.h"
|
|
|
|
|
#include "system.h"
|
2002-12-16 19:23:00 +01:00
|
|
|
|
#include "coretypes.h"
|
|
|
|
|
#include "tm.h"
|
2002-01-22 21:23:46 +01:00
|
|
|
|
#include "tree.h"
|
|
|
|
|
#include "ggc.h"
|
|
|
|
|
#include "flags.h"
|
Makefile.in (convert.o, [...]): Update.
* Makefile.in (convert.o, calls.o, expmed.o): Update.
* attribs.c (handle_mode_attribute, handle_vector_size_attribute):
Use new hooks.
* builtin-types.def (BT_PTRMODE): Update.
* c-common.c (type_for_size): Rename c_common_type_for_size.
(type_for_mode): Similarly.
(shorten_compare, pointer_int_sum, c_common_nodes_and_builtins):
Use new hook.
* c-bommon.h (c_common_type_for_size, c_common_type_for_mode): New.
* c-decl.c (finish_enum, build_enumerator): Use new hooks.
* c-lang.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIZE):
Redefine.
* c-typeck.c (common_type, comptypes, default_conversion):
Use new hooks.
* calls.c: Include langhooks.h.
(emit_library_call_value_1): Use new hooks. Avoid redundant
calls.
* convert.c: Include langhooks.h
(convert_to_pointer, convert_to_integer): Use new hooks.
* except.c (init_eh): Similarly.
* expmed.c: Include langhooks.h.
(expand_mult_add): Use new hooks.
* expr.c (store_expr, store_constructor, expand_expr, do_jump,
try_casesi): Similarly.
* fold-const.c (optimize_bit_field_compare, make_range,
decode_field_reference, fold_truthop, fold): Similarly.
* function.c (assign_stack_local_1, assign_stack_temp_for_type,
put_var_into_stack): Similarly.
* langhooks-def.h (LANG_HOOKS_TYPE_FOR_MODE,
LANG_HOOKS_TYPE_FOR_SIZE): New.
(LANG_HOOKS_TYPES_INITIALIZER): Update.
* langhooks.h (lang_hooks_for_types): New hooks.
* stmt.c (expand_decl_cleanup, emit_case_nodes): Use new hooks.
* tree.c (get_unwidened, get_narrower): Similarly.
* tree.h (type_for_mode, type_for_size): Remove.
* varasm.c (force_const_mem): Use new hooks.
ada:
* gigi.h (type_for_size, type_for_mode): Rename.
* misc.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIZE):
Redefine.
* trans.c (tree_transform): Update.
* utils.c (gnat_init_decl_processing, init_gigi_decls,
builtin_function, float_type_for_size, signed_or_unsigned_type,
build_vms_descriptor, unchecked_convert): Update.
(type_for_mode, type_for_size): Rename.
* utils2.c (nonbinary_modular_operation): Update.
cp:
* cp-lang.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIZE):
Redefine.
* cvt.c (cp_convert_to_pointer, type_promotes_to): Use new hooks.
* decl.c (finish_enum): Similarly.
* error.c (dump_type): Similarly.
* lex.c (cxx_init): Similarly.
* mangle.c (write_builtin_type): Similarly.
* typeck.c (comptypes): Similarly.
f:
* com.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIZE):
Redefine.
(type_for_mode, type_for_size): Rename.
(signed_or_unsigned_type, signed_type, truthvalue_conversion,
unsigned_type): Use new hooks.
java:
* Make-lang.in (builtins.o): Update.
* boehm.c (get_boehm_type_descriptor): Update.
* builtins.c: Include langhooks.h.
* decl.c (java_init_decl_processing): Update.
* java-tree.h (java_type_for_mode, java_type_for_size): New.
* lang.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIaZE):
Redefine.
* typeck.c (type_for_mode, type_for_size): Update.
objc:
* objc-act.c (handle_impent): Update.
* objc-lang.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIaZE):
Redefine.
From-SVN: r51571
2002-03-29 22:46:27 +01:00
|
|
|
|
#include "langhooks.h"
|
2002-01-22 21:23:46 +01:00
|
|
|
|
#include "java-tree.h"
|
|
|
|
|
|
|
|
|
|
|
2003-01-10 00:16:56 +01:00
|
|
|
|
static tree max_builtin (tree, tree);
|
|
|
|
|
static tree min_builtin (tree, tree);
|
|
|
|
|
static tree abs_builtin (tree, tree);
|
2002-01-22 21:23:46 +01:00
|
|
|
|
|
2003-01-17 01:58:08 +01:00
|
|
|
|
static tree java_build_function_call_expr (tree, tree);
|
2002-01-22 21:23:46 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Functions of this type are used to inline a given call. Such a
|
|
|
|
|
function should either return an expression, if the call is to be
|
|
|
|
|
inlined, or NULL_TREE if a real call should be emitted. Arguments
|
|
|
|
|
are method return type and arguments to call. */
|
2003-10-05 04:52:33 +02:00
|
|
|
|
typedef tree builtin_creator_function (tree, tree);
|
2002-01-22 21:23:46 +01:00
|
|
|
|
|
|
|
|
|
/* Hold a char*, before initialization, or a tree, after
|
|
|
|
|
initialization. */
|
2002-06-04 09:11:05 +02:00
|
|
|
|
union string_or_tree GTY(())
|
2002-01-22 21:23:46 +01:00
|
|
|
|
{
|
2002-06-04 09:11:05 +02:00
|
|
|
|
const char * GTY ((tag ("0"))) s;
|
|
|
|
|
tree GTY ((tag ("1"))) t;
|
2002-01-22 21:23:46 +01:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/* Used to hold a single builtin record. */
|
2002-06-04 09:11:05 +02:00
|
|
|
|
struct builtin_record GTY(())
|
2002-01-22 21:23:46 +01:00
|
|
|
|
{
|
2002-06-04 09:11:05 +02:00
|
|
|
|
union string_or_tree GTY ((desc ("1"))) class_name;
|
|
|
|
|
union string_or_tree GTY ((desc ("1"))) method_name;
|
gengtype.c (create_option): New function.
* gengtype.c (create_option): New function.
* gengtype.h: Prototype it.
* gengtype-yacc.y (stringseq): New rule.
(option): Use create_option. Add new bare ID production. Use
stringseq, not STRING directly.
* alias.c, bitmap.c, c-decl.c, cgraph.h, cpplib.h, cselib.h
* dwarf2out.c, emit-rtl.c, function.h, lists.c, tree.h
* varray.h, config/alpha/alpha.c, cp/name-lookup.c, cp/parser.c
* f/com.c, java/builtins.c, java/expr.c, java/jcf.h, java/parse.h:
Use new shorter form of GTY markers.
* doc/gty.texi: Rewrite.
From-SVN: r80091
2004-03-30 21:19:06 +02:00
|
|
|
|
builtin_creator_function * GTY((skip)) creator;
|
builtins.c (cos_builtin, [...]): Delete.
* builtins.c (cos_builtin, sin_builtin, sqrt_builtin): Delete.
(builtin_record): Add an additional builtin_code field to
record which GCC built-in corresponds to the Java function.
(java_builtins): Add new entries for atan, atan2, exp, log,
pow and tan.
(max_builtin, min_builtin, abs_builtin): Perform constant
folding on the resulting tree.
(java_build_function_call_expr): Likewise, perform constant
folding on the resulting tree.
(initialize_builtins): The NULL creators are now allowed in
the java_builtins table, which is now terminated by an entry
with builtin_code == END_BUILTINS.
(check_for_builtin): Likewise. If the matching creator is
NULL, construct the call using java_build_function_call_expr
directly with the decl for the corresponding builtin_code.
From-SVN: r67225
2003-05-29 18:38:04 +02:00
|
|
|
|
enum built_in_function builtin_code;
|
2002-01-22 21:23:46 +01:00
|
|
|
|
};
|
|
|
|
|
|
2002-06-04 09:11:05 +02:00
|
|
|
|
static GTY(()) struct builtin_record java_builtins[] =
|
2002-01-22 21:23:46 +01:00
|
|
|
|
{
|
builtins.c (cos_builtin, [...]): Delete.
* builtins.c (cos_builtin, sin_builtin, sqrt_builtin): Delete.
(builtin_record): Add an additional builtin_code field to
record which GCC built-in corresponds to the Java function.
(java_builtins): Add new entries for atan, atan2, exp, log,
pow and tan.
(max_builtin, min_builtin, abs_builtin): Perform constant
folding on the resulting tree.
(java_build_function_call_expr): Likewise, perform constant
folding on the resulting tree.
(initialize_builtins): The NULL creators are now allowed in
the java_builtins table, which is now terminated by an entry
with builtin_code == END_BUILTINS.
(check_for_builtin): Likewise. If the matching creator is
NULL, construct the call using java_build_function_call_expr
directly with the decl for the corresponding builtin_code.
From-SVN: r67225
2003-05-29 18:38:04 +02:00
|
|
|
|
{ { "java.lang.Math" }, { "min" }, min_builtin, 0 },
|
|
|
|
|
{ { "java.lang.Math" }, { "max" }, max_builtin, 0 },
|
|
|
|
|
{ { "java.lang.Math" }, { "abs" }, abs_builtin, 0 },
|
2004-04-30 16:15:08 +02:00
|
|
|
|
{ { "java.lang.Math" }, { "acos" }, NULL, BUILT_IN_ACOS },
|
|
|
|
|
{ { "java.lang.Math" }, { "asin" }, NULL, BUILT_IN_ASIN },
|
builtins.c (cos_builtin, [...]): Delete.
* builtins.c (cos_builtin, sin_builtin, sqrt_builtin): Delete.
(builtin_record): Add an additional builtin_code field to
record which GCC built-in corresponds to the Java function.
(java_builtins): Add new entries for atan, atan2, exp, log,
pow and tan.
(max_builtin, min_builtin, abs_builtin): Perform constant
folding on the resulting tree.
(java_build_function_call_expr): Likewise, perform constant
folding on the resulting tree.
(initialize_builtins): The NULL creators are now allowed in
the java_builtins table, which is now terminated by an entry
with builtin_code == END_BUILTINS.
(check_for_builtin): Likewise. If the matching creator is
NULL, construct the call using java_build_function_call_expr
directly with the decl for the corresponding builtin_code.
From-SVN: r67225
2003-05-29 18:38:04 +02:00
|
|
|
|
{ { "java.lang.Math" }, { "atan" }, NULL, BUILT_IN_ATAN },
|
|
|
|
|
{ { "java.lang.Math" }, { "atan2" }, NULL, BUILT_IN_ATAN2 },
|
2004-04-30 16:15:08 +02:00
|
|
|
|
{ { "java.lang.Math" }, { "ceil" }, NULL, BUILT_IN_CEIL },
|
builtins.c (cos_builtin, [...]): Delete.
* builtins.c (cos_builtin, sin_builtin, sqrt_builtin): Delete.
(builtin_record): Add an additional builtin_code field to
record which GCC built-in corresponds to the Java function.
(java_builtins): Add new entries for atan, atan2, exp, log,
pow and tan.
(max_builtin, min_builtin, abs_builtin): Perform constant
folding on the resulting tree.
(java_build_function_call_expr): Likewise, perform constant
folding on the resulting tree.
(initialize_builtins): The NULL creators are now allowed in
the java_builtins table, which is now terminated by an entry
with builtin_code == END_BUILTINS.
(check_for_builtin): Likewise. If the matching creator is
NULL, construct the call using java_build_function_call_expr
directly with the decl for the corresponding builtin_code.
From-SVN: r67225
2003-05-29 18:38:04 +02:00
|
|
|
|
{ { "java.lang.Math" }, { "cos" }, NULL, BUILT_IN_COS },
|
|
|
|
|
{ { "java.lang.Math" }, { "exp" }, NULL, BUILT_IN_EXP },
|
2004-04-30 16:15:08 +02:00
|
|
|
|
{ { "java.lang.Math" }, { "floor" }, NULL, BUILT_IN_FLOOR },
|
builtins.c (cos_builtin, [...]): Delete.
* builtins.c (cos_builtin, sin_builtin, sqrt_builtin): Delete.
(builtin_record): Add an additional builtin_code field to
record which GCC built-in corresponds to the Java function.
(java_builtins): Add new entries for atan, atan2, exp, log,
pow and tan.
(max_builtin, min_builtin, abs_builtin): Perform constant
folding on the resulting tree.
(java_build_function_call_expr): Likewise, perform constant
folding on the resulting tree.
(initialize_builtins): The NULL creators are now allowed in
the java_builtins table, which is now terminated by an entry
with builtin_code == END_BUILTINS.
(check_for_builtin): Likewise. If the matching creator is
NULL, construct the call using java_build_function_call_expr
directly with the decl for the corresponding builtin_code.
From-SVN: r67225
2003-05-29 18:38:04 +02:00
|
|
|
|
{ { "java.lang.Math" }, { "log" }, NULL, BUILT_IN_LOG },
|
|
|
|
|
{ { "java.lang.Math" }, { "pow" }, NULL, BUILT_IN_POW },
|
|
|
|
|
{ { "java.lang.Math" }, { "sin" }, NULL, BUILT_IN_SIN },
|
|
|
|
|
{ { "java.lang.Math" }, { "sqrt" }, NULL, BUILT_IN_SQRT },
|
|
|
|
|
{ { "java.lang.Math" }, { "tan" }, NULL, BUILT_IN_TAN },
|
|
|
|
|
{ { NULL }, { NULL }, NULL, END_BUILTINS }
|
2002-01-22 21:23:46 +01:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Internal functions which implement various builtin conversions. */
|
|
|
|
|
|
|
|
|
|
static tree
|
2003-01-12 03:14:56 +01:00
|
|
|
|
max_builtin (tree method_return_type, tree method_arguments)
|
2002-01-22 21:23:46 +01:00
|
|
|
|
{
|
builtins.c (max_builtin, [...]): Use fold_buildN.
2005-09-18 James A. Morrison <phython@gcc.gnu.org>
* builtins.c (max_builtin, min_builtin, abs_builtin,
java_build_function_call_expr): Use fold_buildN.
* class.c (layout_class_method): Likewise.
* expr.c (java_truthvalue_conversion, build_java_jsr,
build_java_arrayaccess, expand_java_arrayload, expand_iinc,
build_java_binop, build_field_ref, expand_compare,
build_known_method_ref, build_invokevirtual,
process_jvm_instruction): Likewise.
* parse.y (patch_binop, patch_exit_expr): Likewise.
* typeck.c (convert_ieee_real_to_integer): Likewise.
(convert): Don't call fold after convert_ieee_real_to_integer.
From-SVN: r104407
2005-09-18 21:10:15 +02:00
|
|
|
|
return fold_build2 (MAX_EXPR, method_return_type,
|
|
|
|
|
TREE_VALUE (method_arguments),
|
|
|
|
|
TREE_VALUE (TREE_CHAIN (method_arguments)));
|
2002-01-22 21:23:46 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static tree
|
2003-01-12 03:14:56 +01:00
|
|
|
|
min_builtin (tree method_return_type, tree method_arguments)
|
2002-01-22 21:23:46 +01:00
|
|
|
|
{
|
builtins.c (max_builtin, [...]): Use fold_buildN.
2005-09-18 James A. Morrison <phython@gcc.gnu.org>
* builtins.c (max_builtin, min_builtin, abs_builtin,
java_build_function_call_expr): Use fold_buildN.
* class.c (layout_class_method): Likewise.
* expr.c (java_truthvalue_conversion, build_java_jsr,
build_java_arrayaccess, expand_java_arrayload, expand_iinc,
build_java_binop, build_field_ref, expand_compare,
build_known_method_ref, build_invokevirtual,
process_jvm_instruction): Likewise.
* parse.y (patch_binop, patch_exit_expr): Likewise.
* typeck.c (convert_ieee_real_to_integer): Likewise.
(convert): Don't call fold after convert_ieee_real_to_integer.
From-SVN: r104407
2005-09-18 21:10:15 +02:00
|
|
|
|
return fold_build2 (MIN_EXPR, method_return_type,
|
|
|
|
|
TREE_VALUE (method_arguments),
|
|
|
|
|
TREE_VALUE (TREE_CHAIN (method_arguments)));
|
2002-01-22 21:23:46 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static tree
|
2003-01-12 03:14:56 +01:00
|
|
|
|
abs_builtin (tree method_return_type, tree method_arguments)
|
2002-01-22 21:23:46 +01:00
|
|
|
|
{
|
builtins.c (max_builtin, [...]): Use fold_buildN.
2005-09-18 James A. Morrison <phython@gcc.gnu.org>
* builtins.c (max_builtin, min_builtin, abs_builtin,
java_build_function_call_expr): Use fold_buildN.
* class.c (layout_class_method): Likewise.
* expr.c (java_truthvalue_conversion, build_java_jsr,
build_java_arrayaccess, expand_java_arrayload, expand_iinc,
build_java_binop, build_field_ref, expand_compare,
build_known_method_ref, build_invokevirtual,
process_jvm_instruction): Likewise.
* parse.y (patch_binop, patch_exit_expr): Likewise.
* typeck.c (convert_ieee_real_to_integer): Likewise.
(convert): Don't call fold after convert_ieee_real_to_integer.
From-SVN: r104407
2005-09-18 21:10:15 +02:00
|
|
|
|
return fold_build1 (ABS_EXPR, method_return_type,
|
|
|
|
|
TREE_VALUE (method_arguments));
|
2002-01-22 21:23:46 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Mostly copied from ../builtins.c. */
|
|
|
|
|
static tree
|
2003-01-17 01:58:08 +01:00
|
|
|
|
java_build_function_call_expr (tree fn, tree arglist)
|
2002-01-22 21:23:46 +01:00
|
|
|
|
{
|
|
|
|
|
tree call_expr;
|
|
|
|
|
|
|
|
|
|
call_expr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn);
|
builtins.c (max_builtin, [...]): Use fold_buildN.
2005-09-18 James A. Morrison <phython@gcc.gnu.org>
* builtins.c (max_builtin, min_builtin, abs_builtin,
java_build_function_call_expr): Use fold_buildN.
* class.c (layout_class_method): Likewise.
* expr.c (java_truthvalue_conversion, build_java_jsr,
build_java_arrayaccess, expand_java_arrayload, expand_iinc,
build_java_binop, build_field_ref, expand_compare,
build_known_method_ref, build_invokevirtual,
process_jvm_instruction): Likewise.
* parse.y (patch_binop, patch_exit_expr): Likewise.
* typeck.c (convert_ieee_real_to_integer): Likewise.
(convert): Don't call fold after convert_ieee_real_to_integer.
From-SVN: r104407
2005-09-18 21:10:15 +02:00
|
|
|
|
return fold_build3 (CALL_EXPR, TREE_TYPE (TREE_TYPE (fn)),
|
builtins.c (max_builtin, [...]): Replace calls to build with buildN.
* builtins.c (max_builtin, min_builtin,
java_build_function_call_expr): Replace calls to build with buildN.
* class.c (build_class_ref, build_static_field_ref,
get_dispatch_table, make_class_data, layout_class_method): Likewise.
* constants.c (build_ref_from_constant_pool): Likewise.
* decl.c (update_aliases, push_jvm_slot, poplevel, finish_method,
add_stmt_to_compound): Likewise.
* except.c (build_exception_object_ref, expand_end_java_handler):
Likewise.
* java-gimplify.c (java_gimplify_case_expr,
java_gimplify_default_expr, java_gimplify_block,
java_gimplify_new_array_init, java_gimplify_try_expr): Likewise.
* jcf-write.c (generate_bytecode_insns): Likewise.
* typeck.c (convert_ieee_real_to_integer): Likewise.
From-SVN: r84894
2004-07-18 15:17:03 +02:00
|
|
|
|
call_expr, arglist, NULL_TREE);
|
2002-01-22 21:23:46 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2005-06-25 13:22:50 +02:00
|
|
|
|
#define BUILTIN_NOTHROW 1
|
|
|
|
|
#define BUILTIN_CONST 2
|
2002-01-22 21:23:46 +01:00
|
|
|
|
/* Define a single builtin. */
|
|
|
|
|
static void
|
2003-01-12 03:14:56 +01:00
|
|
|
|
define_builtin (enum built_in_function val,
|
|
|
|
|
const char *name,
|
|
|
|
|
tree type,
|
2005-06-25 13:22:50 +02:00
|
|
|
|
const char *libname,
|
|
|
|
|
int flags)
|
2002-01-22 21:23:46 +01:00
|
|
|
|
{
|
|
|
|
|
tree decl;
|
|
|
|
|
|
|
|
|
|
decl = build_decl (FUNCTION_DECL, get_identifier (name), type);
|
|
|
|
|
DECL_EXTERNAL (decl) = 1;
|
|
|
|
|
TREE_PUBLIC (decl) = 1;
|
2003-06-08 20:17:53 +02:00
|
|
|
|
SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname));
|
2002-01-22 21:23:46 +01:00
|
|
|
|
pushdecl (decl);
|
2003-06-08 20:17:53 +02:00
|
|
|
|
DECL_BUILT_IN_CLASS (decl) = BUILT_IN_NORMAL;
|
2002-01-22 21:23:46 +01:00
|
|
|
|
DECL_FUNCTION_CODE (decl) = val;
|
2005-06-25 13:22:50 +02:00
|
|
|
|
if (flags & BUILTIN_NOTHROW)
|
|
|
|
|
TREE_NOTHROW (decl) = 1;
|
|
|
|
|
if (flags & BUILTIN_CONST)
|
|
|
|
|
TREE_READONLY (decl) = 1;
|
2002-01-22 21:23:46 +01:00
|
|
|
|
|
2003-06-08 20:17:53 +02:00
|
|
|
|
implicit_built_in_decls[val] = decl;
|
|
|
|
|
built_in_decls[val] = decl;
|
2002-01-22 21:23:46 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Initialize the builtins. */
|
|
|
|
|
void
|
2003-01-12 03:14:56 +01:00
|
|
|
|
initialize_builtins (void)
|
2002-01-22 21:23:46 +01:00
|
|
|
|
{
|
2003-06-08 20:17:53 +02:00
|
|
|
|
tree double_ftype_double, double_ftype_double_double;
|
|
|
|
|
tree float_ftype_float, float_ftype_float_float;
|
2005-04-29 20:43:25 +02:00
|
|
|
|
tree boolean_ftype_boolean_boolean;
|
2003-06-08 20:17:53 +02:00
|
|
|
|
tree t;
|
2002-01-22 21:23:46 +01:00
|
|
|
|
int i;
|
|
|
|
|
|
builtins.c (cos_builtin, [...]): Delete.
* builtins.c (cos_builtin, sin_builtin, sqrt_builtin): Delete.
(builtin_record): Add an additional builtin_code field to
record which GCC built-in corresponds to the Java function.
(java_builtins): Add new entries for atan, atan2, exp, log,
pow and tan.
(max_builtin, min_builtin, abs_builtin): Perform constant
folding on the resulting tree.
(java_build_function_call_expr): Likewise, perform constant
folding on the resulting tree.
(initialize_builtins): The NULL creators are now allowed in
the java_builtins table, which is now terminated by an entry
with builtin_code == END_BUILTINS.
(check_for_builtin): Likewise. If the matching creator is
NULL, construct the call using java_build_function_call_expr
directly with the decl for the corresponding builtin_code.
From-SVN: r67225
2003-05-29 18:38:04 +02:00
|
|
|
|
for (i = 0; java_builtins[i].builtin_code != END_BUILTINS; ++i)
|
2002-01-22 21:23:46 +01:00
|
|
|
|
{
|
|
|
|
|
tree klass_id = get_identifier (java_builtins[i].class_name.s);
|
|
|
|
|
tree m = get_identifier (java_builtins[i].method_name.s);
|
|
|
|
|
|
|
|
|
|
java_builtins[i].class_name.t = klass_id;
|
|
|
|
|
java_builtins[i].method_name.t = m;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void_list_node = end_params_node;
|
|
|
|
|
|
2003-06-08 20:17:53 +02:00
|
|
|
|
t = tree_cons (NULL_TREE, float_type_node, end_params_node);
|
|
|
|
|
float_ftype_float = build_function_type (float_type_node, t);
|
|
|
|
|
t = tree_cons (NULL_TREE, float_type_node, t);
|
|
|
|
|
float_ftype_float_float = build_function_type (float_type_node, t);
|
|
|
|
|
|
|
|
|
|
t = tree_cons (NULL_TREE, double_type_node, end_params_node);
|
|
|
|
|
double_ftype_double = build_function_type (double_type_node, t);
|
|
|
|
|
t = tree_cons (NULL_TREE, double_type_node, t);
|
|
|
|
|
double_ftype_double_double = build_function_type (double_type_node, t);
|
|
|
|
|
|
|
|
|
|
define_builtin (BUILT_IN_FMOD, "__builtin_fmod",
|
2005-06-25 13:22:50 +02:00
|
|
|
|
double_ftype_double_double, "fmod", BUILTIN_CONST);
|
2003-06-08 20:17:53 +02:00
|
|
|
|
define_builtin (BUILT_IN_FMODF, "__builtin_fmodf",
|
2005-06-25 13:22:50 +02:00
|
|
|
|
float_ftype_float_float, "fmodf", BUILTIN_CONST);
|
2003-06-08 20:17:53 +02:00
|
|
|
|
|
2004-04-30 16:15:08 +02:00
|
|
|
|
define_builtin (BUILT_IN_ACOS, "__builtin_acos",
|
2005-06-25 13:22:50 +02:00
|
|
|
|
double_ftype_double, "_ZN4java4lang4Math4acosEd",
|
|
|
|
|
BUILTIN_CONST);
|
2004-04-30 16:15:08 +02:00
|
|
|
|
define_builtin (BUILT_IN_ASIN, "__builtin_asin",
|
2005-06-25 13:22:50 +02:00
|
|
|
|
double_ftype_double, "_ZN4java4lang4Math4asinEd",
|
|
|
|
|
BUILTIN_CONST);
|
2003-06-08 20:17:53 +02:00
|
|
|
|
define_builtin (BUILT_IN_ATAN, "__builtin_atan",
|
2005-06-25 13:22:50 +02:00
|
|
|
|
double_ftype_double, "_ZN4java4lang4Math4atanEd",
|
|
|
|
|
BUILTIN_CONST);
|
2003-06-08 20:17:53 +02:00
|
|
|
|
define_builtin (BUILT_IN_ATAN2, "__builtin_atan2",
|
2005-06-25 13:22:50 +02:00
|
|
|
|
double_ftype_double_double, "_ZN4java4lang4Math5atan2Edd",
|
|
|
|
|
BUILTIN_CONST);
|
2004-04-30 16:15:08 +02:00
|
|
|
|
define_builtin (BUILT_IN_CEIL, "__builtin_ceil",
|
2005-06-25 13:22:50 +02:00
|
|
|
|
double_ftype_double, "_ZN4java4lang4Math4ceilEd",
|
|
|
|
|
BUILTIN_CONST);
|
2003-06-08 20:17:53 +02:00
|
|
|
|
define_builtin (BUILT_IN_COS, "__builtin_cos",
|
2005-06-25 13:22:50 +02:00
|
|
|
|
double_ftype_double, "_ZN4java4lang4Math3cosEd",
|
|
|
|
|
BUILTIN_CONST);
|
2003-06-08 20:17:53 +02:00
|
|
|
|
define_builtin (BUILT_IN_EXP, "__builtin_exp",
|
2005-06-25 13:22:50 +02:00
|
|
|
|
double_ftype_double, "_ZN4java4lang4Math3expEd",
|
|
|
|
|
BUILTIN_CONST);
|
2004-04-30 16:15:08 +02:00
|
|
|
|
define_builtin (BUILT_IN_FLOOR, "__builtin_floor",
|
2005-06-25 13:22:50 +02:00
|
|
|
|
double_ftype_double, "_ZN4java4lang4Math5floorEd",
|
|
|
|
|
BUILTIN_CONST);
|
2003-06-08 20:17:53 +02:00
|
|
|
|
define_builtin (BUILT_IN_LOG, "__builtin_log",
|
2005-06-25 13:22:50 +02:00
|
|
|
|
double_ftype_double, "_ZN4java4lang4Math3logEd",
|
|
|
|
|
BUILTIN_CONST);
|
2003-06-08 20:17:53 +02:00
|
|
|
|
define_builtin (BUILT_IN_POW, "__builtin_pow",
|
2005-06-25 13:22:50 +02:00
|
|
|
|
double_ftype_double_double, "_ZN4java4lang4Math3powEdd",
|
|
|
|
|
BUILTIN_CONST);
|
2003-06-08 20:17:53 +02:00
|
|
|
|
define_builtin (BUILT_IN_SIN, "__builtin_sin",
|
2005-06-25 13:22:50 +02:00
|
|
|
|
double_ftype_double, "_ZN4java4lang4Math3sinEd",
|
|
|
|
|
BUILTIN_CONST);
|
2003-06-08 20:17:53 +02:00
|
|
|
|
define_builtin (BUILT_IN_SQRT, "__builtin_sqrt",
|
2005-06-25 13:22:50 +02:00
|
|
|
|
double_ftype_double, "_ZN4java4lang4Math4sqrtEd",
|
|
|
|
|
BUILTIN_CONST);
|
2003-06-08 20:17:53 +02:00
|
|
|
|
define_builtin (BUILT_IN_TAN, "__builtin_tan",
|
2005-06-25 13:22:50 +02:00
|
|
|
|
double_ftype_double, "_ZN4java4lang4Math3tanEd",
|
|
|
|
|
BUILTIN_CONST);
|
2005-04-29 20:43:25 +02:00
|
|
|
|
|
|
|
|
|
t = tree_cons (NULL_TREE, boolean_type_node, end_params_node);
|
|
|
|
|
t = tree_cons (NULL_TREE, boolean_type_node, t);
|
|
|
|
|
boolean_ftype_boolean_boolean = build_function_type (boolean_type_node, t);
|
|
|
|
|
define_builtin (BUILT_IN_EXPECT, "__builtin_expect",
|
|
|
|
|
boolean_ftype_boolean_boolean,
|
2005-06-25 13:22:50 +02:00
|
|
|
|
"__builtin_expect",
|
|
|
|
|
BUILTIN_CONST | BUILTIN_NOTHROW);
|
2005-04-29 20:43:25 +02:00
|
|
|
|
|
builtins.c (DEF_BUILTIN): Add COND argument.
* builtins.c (DEF_BUILTIN): Add COND argument.
* tree.h (DEF_BUILTIN): Likewise.
* builtins.def (DEF_GCC_BUILTIN, DEF_LIB_BUILTIN, DEF_EXT_LIB_BUILTIN,
DEF_C94_BUILTIN, DEF_C99_BUILTIN, DEF_C99_C90RES_BUILTIN): Update to
match.
(DEF_BUILTIN_STUB): New.
(BUILT_IN_STACK_SAVE, BUILT_IN_STACK_RESTORE, BUILT_IN_INIT_TRAMPOLINE,
BUILT_IN_ADJUST_TRAMPOLINE, BUILT_IN_NONLOCAL_GOTO,
BUILT_IN_PROFILE_FUNC_ENTER, BUILT_IN_PROFILE_FUNC_EXIT): Use it.
* c-common.c (DEF_BUILTIN): Add COND argument.
* tree.c (local_define_builtin): New.
(build_common_builtin_nodes): New.
ada/
* utils.c (gnat_define_builtin): Remove.
(gnat_install_builtins): Use build_common_builtin_nodes.
fortran/
* f95-lang.c (gfc_init_builtin_functions): Call
build_common_builtin_nodes; do not define any functions handled
by it.
java/
* builtins.c (initialize_builtins): Call build_common_builtin_nodes.
* decl.c (java_init_decl_processing): Initialize const_ptr_type_node.
treelang/
* treetree.c (treelang_init_decl_processing): Call
build_common_builtin_nodes.
From-SVN: r94785
2005-02-10 01:22:25 +01:00
|
|
|
|
build_common_builtin_nodes ();
|
2002-01-22 21:23:46 +01:00
|
|
|
|
}
|
|
|
|
|
|
2002-02-20 20:53:49 +01:00
|
|
|
|
/* If the call matches a builtin, return the
|
2002-01-22 21:23:46 +01:00
|
|
|
|
appropriate builtin expression instead. */
|
|
|
|
|
tree
|
2003-01-12 03:14:56 +01:00
|
|
|
|
check_for_builtin (tree method, tree call)
|
2002-01-22 21:23:46 +01:00
|
|
|
|
{
|
2002-02-20 20:53:49 +01:00
|
|
|
|
if (! flag_emit_class_files && optimize && TREE_CODE (call) == CALL_EXPR)
|
2002-01-22 21:23:46 +01:00
|
|
|
|
{
|
|
|
|
|
int i;
|
2002-02-20 20:53:49 +01:00
|
|
|
|
tree method_arguments = TREE_OPERAND (call, 1);
|
|
|
|
|
tree method_class = DECL_NAME (TYPE_NAME (DECL_CONTEXT (method)));
|
|
|
|
|
tree method_name = DECL_NAME (method);
|
|
|
|
|
tree method_return_type = TREE_TYPE (TREE_TYPE (method));
|
2002-01-22 21:23:46 +01:00
|
|
|
|
|
builtins.c (cos_builtin, [...]): Delete.
* builtins.c (cos_builtin, sin_builtin, sqrt_builtin): Delete.
(builtin_record): Add an additional builtin_code field to
record which GCC built-in corresponds to the Java function.
(java_builtins): Add new entries for atan, atan2, exp, log,
pow and tan.
(max_builtin, min_builtin, abs_builtin): Perform constant
folding on the resulting tree.
(java_build_function_call_expr): Likewise, perform constant
folding on the resulting tree.
(initialize_builtins): The NULL creators are now allowed in
the java_builtins table, which is now terminated by an entry
with builtin_code == END_BUILTINS.
(check_for_builtin): Likewise. If the matching creator is
NULL, construct the call using java_build_function_call_expr
directly with the decl for the corresponding builtin_code.
From-SVN: r67225
2003-05-29 18:38:04 +02:00
|
|
|
|
for (i = 0; java_builtins[i].builtin_code != END_BUILTINS; ++i)
|
2002-01-22 21:23:46 +01:00
|
|
|
|
{
|
|
|
|
|
if (method_class == java_builtins[i].class_name.t
|
|
|
|
|
&& method_name == java_builtins[i].method_name.t)
|
|
|
|
|
{
|
builtins.c (cos_builtin, [...]): Delete.
* builtins.c (cos_builtin, sin_builtin, sqrt_builtin): Delete.
(builtin_record): Add an additional builtin_code field to
record which GCC built-in corresponds to the Java function.
(java_builtins): Add new entries for atan, atan2, exp, log,
pow and tan.
(max_builtin, min_builtin, abs_builtin): Perform constant
folding on the resulting tree.
(java_build_function_call_expr): Likewise, perform constant
folding on the resulting tree.
(initialize_builtins): The NULL creators are now allowed in
the java_builtins table, which is now terminated by an entry
with builtin_code == END_BUILTINS.
(check_for_builtin): Likewise. If the matching creator is
NULL, construct the call using java_build_function_call_expr
directly with the decl for the corresponding builtin_code.
From-SVN: r67225
2003-05-29 18:38:04 +02:00
|
|
|
|
tree fn;
|
|
|
|
|
|
|
|
|
|
if (java_builtins[i].creator != NULL)
|
|
|
|
|
return (*java_builtins[i].creator) (method_return_type,
|
|
|
|
|
method_arguments);
|
|
|
|
|
fn = built_in_decls[java_builtins[i].builtin_code];
|
|
|
|
|
if (fn == NULL_TREE)
|
|
|
|
|
return NULL_TREE;
|
|
|
|
|
return java_build_function_call_expr (fn, method_arguments);
|
2002-01-22 21:23:46 +01:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return call;
|
|
|
|
|
}
|
2002-06-04 09:11:05 +02:00
|
|
|
|
|
|
|
|
|
#include "gt-java-builtins.h"
|