diff options
author | fxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-08-03 21:26:10 +0000 |
---|---|---|
committer | fxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-08-03 21:26:10 +0000 |
commit | ef080b63ed63be1dfb4d9d11b0f40d75daa09f9d (patch) | |
tree | b3c3360111641d52b502bddd36c0a4ce24d565cf /gcc/fortran/f95-lang.c | |
parent | 535fca1102af31bb0dd35fbc901af77915ee57e2 (diff) | |
download | gcc-ef080b63ed63be1dfb4d9d11b0f40d75daa09f9d.tar.gz |
PR fortran/31202
* f95-lang.c (gfc_init_builtin_functions): Defin builtins for
lround{f,,l} and llround{f,,l}.
* trans-intrinsic.c (build_fix_expr): Generate calls to the
{l,}round{f,,l} functions.
* intrinsics/c99_functions.c (roundl,lroundf,lround,lroundl,
llroundf,llround,llroundl): New functions.
* c99_protos.h (roundl,lroundf,lround,lroundl,llroundf,llround,
llroundl): New prototypes.
* configure.ac: Check for lroundf, lround, lroundl, llroundf,
llround and llroundl.
* configure: Regenerate.
* Makefile.in: Regenerate.
* config.h.in: Regenerate.
* gfortran.dg/nint_2.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127185 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/f95-lang.c')
-rw-r--r-- | gcc/fortran/f95-lang.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/gcc/fortran/f95-lang.c b/gcc/fortran/f95-lang.c index 0cecac0b0b4..425f4d3fecd 100644 --- a/gcc/fortran/f95-lang.c +++ b/gcc/fortran/f95-lang.c @@ -852,7 +852,7 @@ gfc_init_builtin_functions (void) tree func_double_doublep_doublep; tree func_longdouble_longdoublep_longdoublep; tree ftype, ptype; - tree tmp; + tree tmp, type; tree builtin_types[(int) BT_LAST + 1]; build_builtin_fntypes (mfunc_float, float_type_node); @@ -942,6 +942,31 @@ gfc_init_builtin_functions (void) gfc_define_builtin ("__builtin_fmodf", mfunc_float[1], BUILT_IN_FMODF, "fmodf", true); + /* lround{f,,l} and llround{f,,l} */ + type = tree_cons (NULL_TREE, float_type_node, void_list_node); + tmp = build_function_type (long_integer_type_node, type); + gfc_define_builtin ("__builtin_lroundf", tmp, BUILT_IN_LROUNDF, + "lroundf", true); + tmp = build_function_type (long_long_integer_type_node, type); + gfc_define_builtin ("__builtin_llroundf", tmp, BUILT_IN_LLROUNDF, + "llroundf", true); + + type = tree_cons (NULL_TREE, double_type_node, void_list_node); + tmp = build_function_type (long_integer_type_node, type); + gfc_define_builtin ("__builtin_lround", tmp, BUILT_IN_LROUND, + "lround", true); + tmp = build_function_type (long_long_integer_type_node, type); + gfc_define_builtin ("__builtin_llround", tmp, BUILT_IN_LLROUND, + "llround", true); + + type = tree_cons (NULL_TREE, long_double_type_node, void_list_node); + tmp = build_function_type (long_integer_type_node, type); + gfc_define_builtin ("__builtin_lroundl", tmp, BUILT_IN_LROUNDL, + "lroundl", true); + tmp = build_function_type (long_long_integer_type_node, type); + gfc_define_builtin ("__builtin_llroundl", tmp, BUILT_IN_LLROUNDL, + "llroundl", true); + /* These are used to implement the ** operator. */ gfc_define_builtin ("__builtin_powl", mfunc_longdouble[1], BUILT_IN_POWL, "powl", true); |