aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/builtins-46.c
diff options
context:
space:
mode:
authorUros Bizjak <uros@kss-loka.si>2004-09-04 09:55:12 +0200
committerUros Bizjak <uros@gcc.gnu.org>2004-09-04 09:55:12 +0200
commitedeacc1415d3cd9c67463c600fa11d0689bae9e9 (patch)
tree5beec64804178bdcce9d3a40bbad23d26dc23d85 /gcc/testsuite/gcc.dg/builtins-46.c
parent183f019bd776acebb4600f70c041ae7fdb562189 (diff)
downloadgcc-edeacc1415d3cd9c67463c600fa11d0689bae9e9.zip
gcc-edeacc1415d3cd9c67463c600fa11d0689bae9e9.tar.gz
gcc-edeacc1415d3cd9c67463c600fa11d0689bae9e9.tar.bz2
builtins.c (expand_builtin_mathfn): Handle BUILT_IN_RINT{,F,L} using rint_optab.
2004-09-04 Uros Bizjak <uros@kss-loka.si> * builtins.c (expand_builtin_mathfn): Handle BUILT_IN_RINT{,F,L} using rint_optab. (expand_builtin): Expand BUILT_IN_RINT{,F,L} using expand_builtin_mathfn. * genopinit.c (optabs): Rename trunc_optab to btrunc_optab. Use btrunc?f patterns for btrunc_optab. Implement rint_optab using rint?f patterns. * optabs.c (init_optabs): Initialize rint_optab. * optabs.h (enum optab_index): Rename OTI_trunc to OTI_btrunc. Add new OTI_rint. (btrunc_optab): Rename macro from trunc_optab. (rint_optab): Define corresponding macro. * reg-stack.c (subst_stack_regs_pat): Handle UNSPEC_FRNDINT_FLOOR, UNSPEC_FRNDINT_CEIL, UNSPEC_FRNDINT_TRUNC, UNSPEC_FRNDINT_MASK_PM. * config/i386/i386-protos.h (emit_i387_cw_initialization): Change prototype. Add new int parameter. * config/i386/i386.c (emit_i387_cw_initialization): Handle new rounding modes. * config/i386/i386.h (enum fp_cw_mode): Delete. (MODE_NEEDED): Handle new rounding modes. (EMIT_MODE_SET): Change condition to handle new rounding modes. * config/i386/i386.md (UNSPEC_FRNDINT_FLOOR, UNSPEC_FRNDINT_CEIL, UNSPEC_FRNDINT_TRUNC, UNSPEC_FRNDINT_MASK_PM): New unspecs to represent different rounding modes of frndint insn. (type): Add frndint type. (i387, length, memory): Handle this type. (i387_cw): New attribute definition. (*fix_truncdi_1, fix_truncdi_nomemory, fix_truncdi_memory, *fix_truncsi_1, fix_truncsi_nomemory, fix_truncsi_memory, *fix_trunchi_1, fix_trunchi_nomemory, fix_trunchi_memory): Add "i387_cw" attribute defined to "trunc". (x86_fnstcw_1): Remove comment. (*frndintxf2): Rename insn definition to frndintxf2. Move insn definition near rint?f2 expanders. (rintdf2, rintsf2, rintxf2): New expanders to implement rint, rintf and rintl built-ins as inline x87 intrinsics. (frndintxf2_floor): New pattern to implement floor rounding mode with frndint x87 instruction. (floordf2, floorsf2, floorxf2): New expanders to implement floor, floorf and floorl built-ins as inline x87 intrinsics. (frndintxf2_ceil): New pattern to implement ceil rounding mode with frndint x87 instruction. (ceildf2, ceilsf2, ceilxf2): New expanders to implement ceil, ceilf and ceill built-ins as inline x87 intrinsics. (frndintxf2_trunc): New pattern to implement trunc rounding mode with frndint x87 instruction. (btruncdf2, btruncsf2, btruncxf2): New expanders to implement trunc, truncf and truncl built-ins as inline x87 intrinsics. (frndintxf2_mask_pm): New pattern to implement rounding mode with exceptions with frndint x87 instruction. (nearbyintdf2, nearbyintsf2, nearbyintxf2): New expanders to implement nearbyint, nearbyintf and nearbyintl built-ins as inline x87 intrinsics. * testsuite/gcc.dg/builtins-46.c: New. From-SVN: r87076
Diffstat (limited to 'gcc/testsuite/gcc.dg/builtins-46.c')
-rw-r--r--gcc/testsuite/gcc.dg/builtins-46.c105
1 files changed, 105 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/builtins-46.c b/gcc/testsuite/gcc.dg/builtins-46.c
new file mode 100644
index 0000000..67c979f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/builtins-46.c
@@ -0,0 +1,105 @@
+/* Copyright (C) 2004 Free Software Foundation.
+
+ Check that rint, rintf, rintl, floor, floorf, floorl,
+ ceil, ceilf, ceill, trunc, truncf, truncl,
+ nearbyint, nearbyintf and nearbyintl
+ built-in functions compile.
+
+ Written by Uros Bizjak, 25th Aug 2004. */
+
+/* { dg-do compile } */
+/* { dg-options "-O2 -ffast-math" } */
+
+extern double rint(double);
+extern double floor(double);
+extern double ceil(double);
+extern double trunc(double);
+extern double nearbyint(double);
+
+extern float rintf(float);
+extern float floorf(float);
+extern float ceilf(float);
+extern float truncf(float);
+extern float nearbyintf(float);
+
+extern long double rintl(long double);
+extern long double floorl(long double);
+extern long double ceill(long double);
+extern long double truncl(long double);
+extern long double nearbyintl(long double);
+
+
+double test1(double x)
+{
+ return rint(x);
+}
+
+double test2(double x)
+{
+ return floor(x);
+}
+
+double test3(double x)
+{
+ return ceil(x);
+}
+
+double test4(double x)
+{
+ return trunc(x);
+}
+
+double test5(double x)
+{
+ return nearbyint(x);
+}
+
+float test1f(float x)
+{
+ return rintf(x);
+}
+
+float test2f(float x)
+{
+ return floorf(x);
+}
+
+float test3f(float x)
+{
+ return ceilf(x);
+}
+
+float test4f(float x)
+{
+ return truncf(x);
+}
+
+float test5f(float x)
+{
+ return nearbyintf(x);
+}
+
+long double test1l(long double x)
+{
+ return rintl(x);
+}
+
+long double test2l(long double x)
+{
+ return floorl(x);
+}
+
+long double test3l(long double x)
+{
+ return ceill(x);
+}
+
+long double test4l(long double x)
+{
+ return truncl(x);
+}
+
+long double test5l(long double x)
+{
+ return nearbyintl(x);
+}