diff options
author | Roger Sayle <roger@eyesopen.com> | 2003-06-16 12:53:16 +0000 |
---|---|---|
committer | Roger Sayle <sayle@gcc.gnu.org> | 2003-06-16 12:53:16 +0000 |
commit | 82d397c79441ac025ab58fb8a5163f45dbcf4523 (patch) | |
tree | 24bfff3f06bd11da343290bf7f9fda94ee11a36f /gcc/builtins.c | |
parent | c6547c920bd81449caa301b2256b85409d6d69fa (diff) | |
download | gcc-82d397c79441ac025ab58fb8a5163f45dbcf4523.zip gcc-82d397c79441ac025ab58fb8a5163f45dbcf4523.tar.gz gcc-82d397c79441ac025ab58fb8a5163f45dbcf4523.tar.bz2 |
optabs.h (enum optab_index): Add new OTI_tan and OTI_atan.
* 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.
From-SVN: r68013
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 8379749..efc808d 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) |