aboutsummaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authorUros Bizjak <uros@gcc.gnu.org>2009-06-19 16:22:16 +0200
committerUros Bizjak <uros@gcc.gnu.org>2009-06-19 16:22:16 +0200
commitdc6707b84781cf5b4d85f689500914f5a9227942 (patch)
treec7f3ade8c5e3a25441fdd08fc75af39c939d4fb2 /gcc/builtins.c
parent4646d048e4f5e76521bb215aad2e8bbbe6609c71 (diff)
downloadgcc-dc6707b84781cf5b4d85f689500914f5a9227942.zip
gcc-dc6707b84781cf5b4d85f689500914f5a9227942.tar.gz
gcc-dc6707b84781cf5b4d85f689500914f5a9227942.tar.bz2
re PR testsuite/40491 (Revision 148663 caused extra failures)
* optabs.h (enum optab_index): Add new OTI_significand. (significand_optab): Define corresponding macro. * optabs.c (init_optabs): Initialize significand_optab. * genopinit.c (optabs): Implement significand_optab using significand?f2 patterns. * builtins.c (expand_builtin_mathfn): Handle BUILT_IN_SIGNIFICAND{,F,L}. (expand_builtin): Expand BUILT_IN_SIGNIFICAND{,F,L} using expand_builtin_mathfn if flag_unsafe_math_optimizations is set. * config/i386/i386.md (significandxf2, significand<mode>2): New expanders to implement significandf, significand and significandl built-ins as inline x87 intrinsics. testsuite/ChangeLog: * gcc.dg/builtins-34.c: Add significand cases. PR testsuite/40491 * testsuite/gcc.dg/20080522-1.c: Remove testcase for real. * testsuite/gcc.dg/20080528-1.c: Ditto. From-SVN: r148705
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r--gcc/builtins.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c
index a6d26ef..e906ef7 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -1975,6 +1975,8 @@ expand_builtin_mathfn (tree exp, rtx target, rtx subtarget)
/* Else fallthrough and expand as rint. */
CASE_FLT_FN (BUILT_IN_RINT):
builtin_optab = rint_optab; break;
+ CASE_FLT_FN (BUILT_IN_SIGNIFICAND):
+ builtin_optab = significand_optab; break;
default:
gcc_unreachable ();
}
@@ -6332,6 +6334,7 @@ expand_builtin (tree exp, rtx target, rtx subtarget, enum machine_mode mode,
CASE_FLT_FN (BUILT_IN_ASIN):
CASE_FLT_FN (BUILT_IN_ACOS):
CASE_FLT_FN (BUILT_IN_ATAN):
+ CASE_FLT_FN (BUILT_IN_SIGNIFICAND):
/* Treat these like sqrt only if unsafe math optimizations are allowed,
because of possible accuracy problems. */
if (! flag_unsafe_math_optimizations)