diff options
author | sayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-06-16 12:53:16 +0000 |
---|---|---|
committer | sayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-06-16 12:53:16 +0000 |
commit | 528ee710a2297cc9bac2a473d90d66ef94d73e64 (patch) | |
tree | 24bfff3f06bd11da343290bf7f9fda94ee11a36f /gcc/builtins.c | |
parent | 48b6f9afd5649f78aeb5fe9eb6f77cba68d3f579 (diff) | |
download | gcc-528ee710a2297cc9bac2a473d90d66ef94d73e64.tar.gz |
* optabs.h (enum optab_index): Add new OTI_tan and OTI_atan.
(tan_optab, atan_optab): Define corresponding macros.
* optabs.c (init_optabs): Initialize tan_optab and atan_optab.
* genopinit.c (optabs): Implement tan_optab and atan_optab
using tan?f2 and atan?f2 patterns.
* builtins.c (expand_builtin_mathfn): Handle BUILT_IN_TAN{,F,L}
using tan_optab, and BUILT_IN_ATAN{,F,L} using atan_optab.
Change the default value of errno_set to false.
(expand_builtin): Expand BUILT_IN_TAN{,F,L} and BUILT_IN_ATAN{,F,L}
using expand_builtin_mathfn.
* config/i386/i386.md (atansf2, atandf2, atanxf2, atantf2): New
expander patterns implemented using existing atan2?f3 patterns.
* gcc.dg/i386-387-5.c: New test case.
* gcc.dg/i386-387-6.c: New test case.
* gcc.dg/builtins-23.c: New test case.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@68013 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r-- | gcc/builtins.c | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c index 83797491c5d..efc808d9081 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -1702,7 +1702,7 @@ expand_builtin_mathfn (tree exp, rtx target, rtx subtarget) tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0); tree arglist = TREE_OPERAND (exp, 1); enum machine_mode argmode; - bool errno_set = true; + bool errno_set = false; if (!validate_arglist (arglist, REAL_TYPE, VOID_TYPE)) return 0; @@ -1744,35 +1744,43 @@ expand_builtin_mathfn (tree exp, rtx target, rtx subtarget) case BUILT_IN_SQRT: case BUILT_IN_SQRTF: case BUILT_IN_SQRTL: - builtin_optab = sqrt_optab; break; + errno_set = true; builtin_optab = sqrt_optab; break; case BUILT_IN_EXP: case BUILT_IN_EXPF: case BUILT_IN_EXPL: - builtin_optab = exp_optab; break; + errno_set = true; builtin_optab = exp_optab; break; case BUILT_IN_LOG: case BUILT_IN_LOGF: case BUILT_IN_LOGL: - builtin_optab = log_optab; break; + errno_set = true; builtin_optab = log_optab; break; + case BUILT_IN_TAN: + case BUILT_IN_TANF: + case BUILT_IN_TANL: + builtin_optab = tan_optab; break; + case BUILT_IN_ATAN: + case BUILT_IN_ATANF: + case BUILT_IN_ATANL: + builtin_optab = atan_optab; break; case BUILT_IN_FLOOR: case BUILT_IN_FLOORF: case BUILT_IN_FLOORL: - errno_set = false ; builtin_optab = floor_optab; break; + builtin_optab = floor_optab; break; case BUILT_IN_CEIL: case BUILT_IN_CEILF: case BUILT_IN_CEILL: - errno_set = false ; builtin_optab = ceil_optab; break; + builtin_optab = ceil_optab; break; case BUILT_IN_TRUNC: case BUILT_IN_TRUNCF: case BUILT_IN_TRUNCL: - errno_set = false ; builtin_optab = trunc_optab; break; + builtin_optab = trunc_optab; break; case BUILT_IN_ROUND: case BUILT_IN_ROUNDF: case BUILT_IN_ROUNDL: - errno_set = false ; builtin_optab = round_optab; break; + builtin_optab = round_optab; break; case BUILT_IN_NEARBYINT: case BUILT_IN_NEARBYINTF: case BUILT_IN_NEARBYINTL: - errno_set = false ; builtin_optab = nearbyint_optab; break; + builtin_optab = nearbyint_optab; break; default: abort (); } @@ -4416,6 +4424,12 @@ expand_builtin (tree exp, rtx target, rtx subtarget, enum machine_mode mode, case BUILT_IN_LOG: case BUILT_IN_LOGF: case BUILT_IN_LOGL: + case BUILT_IN_TAN: + case BUILT_IN_TANF: + case BUILT_IN_TANL: + case BUILT_IN_ATAN: + case BUILT_IN_ATANF: + case BUILT_IN_ATANL: /* Treat these like sqrt only if unsafe math optimizations are allowed, because of possible accuracy problems. */ if (! flag_unsafe_math_optimizations) |