aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/f95-lang.c
diff options
context:
space:
mode:
authorFeng Wang <fengwang@nudt.edu.cn>2004-05-19 00:34:59 +0000
committerPaul Brook <pbrook@gcc.gnu.org>2004-05-19 00:34:59 +0000
commit5b200ac2c7278c022c23a684589df1b31a40a153 (patch)
tree6d5551f77f0b03649dcf0b885fe4be35ce373a23 /gcc/fortran/f95-lang.c
parent933520b9beeea22009be7637b3186c61679266b0 (diff)
downloadgcc-5b200ac2c7278c022c23a684589df1b31a40a153.zip
gcc-5b200ac2c7278c022c23a684589df1b31a40a153.tar.gz
gcc-5b200ac2c7278c022c23a684589df1b31a40a153.tar.bz2
f95-lang.c (gfc_init_builtin_functions): Use vold_list_node.
* f95-lang.c (gfc_init_builtin_functions): Use vold_list_node. Create decls for __builtin_pow{,f}. * gfortran.h (PREFIX_LEN): Define. * trans-decl.c (gfor_fndecl_math_powi): Add. (gfor_fndecl_math_powf, gfor_fndecl_math_pow): Remove. (gfc_build_intrinsic_function_decls): Create decls for powi. * trans-expr.c (powi_table): Add. (gfc_conv_integer_power): Remove. (gfc_conv_powi): New function. (gfc_conv_cst_int_power): New function. (gfc_conv_power_op): Use new powi routines. * trans.h (struct gfc_powdecl_list): Add. (gfor_fndecl_math_powi): Add. (gfor_fndecl_math_powf, gfor_fndecl_math_pow): Remove. testsuite/ * gfortran.fortran-torture/execute/power.f90: Test constant integers. libgfortran/ * Makefile.am (i_pow_c): Set it. Add build rule. (gfor_built_src): Use it. (m4_files): add m4/pow.m4. * Makefile.in: Regenerate. * m4/pow.m4: New file. * generated/pow_*.c: Regenerate. From-SVN: r82014
Diffstat (limited to 'gcc/fortran/f95-lang.c')
-rw-r--r--gcc/fortran/f95-lang.c35
1 files changed, 19 insertions, 16 deletions
diff --git a/gcc/fortran/f95-lang.c b/gcc/fortran/f95-lang.c
index e4563d7..ab151fc 100644
--- a/gcc/fortran/f95-lang.c
+++ b/gcc/fortran/f95-lang.c
@@ -750,16 +750,13 @@ gfc_init_builtin_functions (void)
tree mfunc_double[2];
tree ftype;
tree tmp;
- tree voidchain;
- voidchain = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
-
- tmp = tree_cons (NULL_TREE, float_type_node, voidchain);
+ tmp = tree_cons (NULL_TREE, float_type_node, void_list_node);
mfunc_float[0] = build_function_type (float_type_node, tmp);
tmp = tree_cons (NULL_TREE, float_type_node, tmp);
mfunc_float[1] = build_function_type (float_type_node, tmp);
- tmp = tree_cons (NULL_TREE, double_type_node, voidchain);
+ tmp = tree_cons (NULL_TREE, double_type_node, void_list_node);
mfunc_double[0] = build_function_type (double_type_node, tmp);
tmp = tree_cons (NULL_TREE, double_type_node, tmp);
mfunc_double[1] = build_function_type (double_type_node, tmp);
@@ -777,57 +774,63 @@ gfc_init_builtin_functions (void)
gfc_define_builtin ("__builtin_roundf", mfunc_float[0],
BUILT_IN_ROUNDF, "roundf", true);
+ /* These are used to implement the ** operator. */
+ gfc_define_builtin ("__builtin_pow", mfunc_double[0],
+ BUILT_IN_POW, "pow", true);
+ gfc_define_builtin ("__builtin_powf", mfunc_float[0],
+ BUILT_IN_POWF, "powf", true);
+
/* Other builtin functions we use. */
- tmp = tree_cons (NULL_TREE, long_integer_type_node, voidchain);
+ tmp = tree_cons (NULL_TREE, long_integer_type_node, void_list_node);
tmp = tree_cons (NULL_TREE, long_integer_type_node, tmp);
ftype = build_function_type (long_integer_type_node, tmp);
gfc_define_builtin ("__builtin_expect", ftype, BUILT_IN_EXPECT,
"__builtin_expect", true);
- tmp = tree_cons (NULL_TREE, size_type_node, voidchain);
+ tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
tmp = tree_cons (NULL_TREE, pvoid_type_node, tmp);
tmp = tree_cons (NULL_TREE, pvoid_type_node, tmp);
ftype = build_function_type (pvoid_type_node, tmp);
gfc_define_builtin ("__builtin_memcpy", ftype, BUILT_IN_MEMCPY,
"memcpy", false);
- tmp = tree_cons (NULL_TREE, integer_type_node, voidchain);
+ tmp = tree_cons (NULL_TREE, integer_type_node, void_list_node);
ftype = build_function_type (integer_type_node, tmp);
gfc_define_builtin ("__builtin_clz", ftype, BUILT_IN_CLZ, "clz", true);
- tmp = tree_cons (NULL_TREE, long_integer_type_node, voidchain);
+ tmp = tree_cons (NULL_TREE, long_integer_type_node, void_list_node);
ftype = build_function_type (integer_type_node, tmp);
gfc_define_builtin ("__builtin_clzl", ftype, BUILT_IN_CLZL, "clzl", true);
- tmp = tree_cons (NULL_TREE, long_long_integer_type_node, voidchain);
+ tmp = tree_cons (NULL_TREE, long_long_integer_type_node, void_list_node);
ftype = build_function_type (integer_type_node, tmp);
gfc_define_builtin ("__builtin_clzll", ftype, BUILT_IN_CLZLL, "clzll", true);
- tmp = tree_cons (NULL_TREE, pvoid_type_node, voidchain);
+ tmp = tree_cons (NULL_TREE, pvoid_type_node, void_list_node);
tmp = tree_cons (NULL_TREE, pvoid_type_node, tmp);
tmp = tree_cons (NULL_TREE, pvoid_type_node, tmp);
ftype = build_function_type (void_type_node, tmp);
gfc_define_builtin ("__builtin_init_trampoline", ftype,
BUILT_IN_INIT_TRAMPOLINE, "init_trampoline", false);
- tmp = tree_cons (NULL_TREE, pvoid_type_node, voidchain);
+ tmp = tree_cons (NULL_TREE, pvoid_type_node, void_list_node);
ftype = build_function_type (pvoid_type_node, tmp);
gfc_define_builtin ("__builtin_adjust_trampoline", ftype,
BUILT_IN_ADJUST_TRAMPOLINE, "adjust_trampoline", true);
- tmp = tree_cons (NULL_TREE, pvoid_type_node, voidchain);
- tmp = tree_cons (NULL_TREE, size_type_node, voidchain);
+ tmp = tree_cons (NULL_TREE, pvoid_type_node, void_list_node);
+ tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
ftype = build_function_type (pvoid_type_node, tmp);
gfc_define_builtin ("__builtin_stack_alloc", ftype, BUILT_IN_STACK_ALLOC,
"stack_alloc", false);
/* The stack_save and stack_restore builtins aren't used directly. They
are inserted during gimplification to implement stack_alloc calls. */
- ftype = build_function_type (pvoid_type_node, voidchain);
+ ftype = build_function_type (pvoid_type_node, void_list_node);
gfc_define_builtin ("__builtin_stack_save", ftype, BUILT_IN_STACK_SAVE,
"stack_save", false);
- tmp = tree_cons (NULL_TREE, pvoid_type_node, voidchain);
+ tmp = tree_cons (NULL_TREE, pvoid_type_node, void_list_node);
ftype = build_function_type (void_type_node, tmp);
gfc_define_builtin ("__builtin_stack_restore", ftype, BUILT_IN_STACK_RESTORE,
"stack_restore", false);