summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg
diff options
context:
space:
mode:
authorjanis <janis@138bc75d-0d04-0410-961f-82ee72b054a4>2007-04-05 22:10:28 +0000
committerjanis <janis@138bc75d-0d04-0410-961f-82ee72b054a4>2007-04-05 22:10:28 +0000
commit004e23c43c8caeb9121f6b03327f8d348104795a (patch)
treec38a91fbd5bfd1088c8fd8957c1e2fde0ab02b01 /gcc/testsuite/gcc.dg
parent7016928332a78407b6cee06755e4b400bfd86487 (diff)
downloadgcc-004e23c43c8caeb9121f6b03327f8d348104795a.tar.gz
* doc/extend.texi (Other Builtins): Add decimal float variants
of signbit. * builtins.def: Ditto. * builtins.c (expand_builtin): Ditto. testsuite/ * gcc.dg/dfp/signbit-1.c * gcc.dg/dfp/signbit-2.c M gcc/doc/extend.texi M gcc/builtins.c M gcc/ChangeLog A gcc/testsuite/gcc.dg/dfp/signbit-2.c A gcc/testsuite/gcc.dg/dfp/signbit-1.c M gcc/testsuite/ChangeLog M gcc/builtins.def git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@123528 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/gcc.dg')
-rw-r--r--gcc/testsuite/gcc.dg/dfp/signbit-1.c50
-rw-r--r--gcc/testsuite/gcc.dg/dfp/signbit-2.c33
2 files changed, 83 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/dfp/signbit-1.c b/gcc/testsuite/gcc.dg/dfp/signbit-1.c
new file mode 100644
index 00000000000..cde28f9ba84
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/dfp/signbit-1.c
@@ -0,0 +1,50 @@
+/* { dg-options "-O0 -std=gnu99" } */
+
+/* Decimal float versions of __builtin_signbit. */
+
+extern void abort (void);
+int failures;
+
+#ifdef DBG
+extern int printf (const char *, ...);
+#define FAILURE { printf ("failed at line %d\n", __LINE__); failures++; }
+#else
+#define FAILURE abort ();
+#endif
+
+#define CHECK32(D,I) \
+ if ((__builtin_signbitd32 (D) != 0) != I) FAILURE
+
+#define CHECK64(D,I) \
+ if ((__builtin_signbitd64 (D) != 0) != I) FAILURE
+
+#define CHECK128(D,I) \
+ if ((__builtin_signbitd128 (D) != 0) != I) FAILURE
+
+/* Prevent the compiler from folding the calls at compile time. */
+volatile _Decimal32 sd;
+volatile _Decimal64 dd;
+volatile _Decimal128 td;
+
+int
+main ()
+{
+ sd = 1.9df; CHECK32 (sd, 0)
+ sd = -5.3df; CHECK32 (sd, 1)
+ sd = 0.0df; CHECK32 (sd, 0)
+ sd = -0.0df; CHECK32 (sd, 1)
+
+ dd = 1.9dd; CHECK64 (dd, 0)
+ dd = -5.3dd; CHECK64 (dd, 1)
+ dd = 0.0dd; CHECK64 (dd, 0)
+ dd = -0.0dd; CHECK64 (dd, 1)
+
+ td = 1.9dl; CHECK128 (td, 0)
+ td = -5.3dl; CHECK128 (td, 1)
+ td = 0.0dl; CHECK128 (td, 0)
+ td = -0.0dl; CHECK128 (td, 1)
+
+ if (failures != 0)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/dfp/signbit-2.c b/gcc/testsuite/gcc.dg/dfp/signbit-2.c
new file mode 100644
index 00000000000..6f9a2276b8a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/dfp/signbit-2.c
@@ -0,0 +1,33 @@
+/* { dg-options "-O0 -std=gnu99" } */
+
+/* Check that the compiler uses builtins for signbit; if not the link
+ will fail because library functions are in libm. */
+
+extern void abort (void);
+
+volatile _Decimal32 sd = 2.3df;
+volatile _Decimal64 dd = -4.5dd;
+volatile _Decimal128 tf = 5.3dl;
+volatile float f = 1.2f;
+volatile double d = -7.8;
+volatile long double ld = 3.4L;
+
+extern int signbitf (float);
+extern int signbit (double);
+extern int signbitl (long double);
+extern int signbitd32 (_Decimal32);
+extern int signbitd64 (_Decimal64);
+extern int signbitd128 (_Decimal128);
+
+int
+main ()
+{
+ if (signbitf (f) != 0) abort ();
+ if (signbit (d) == 0) abort ();
+ if (signbitl (ld) != 0) abort ();
+ if (signbitd32 (sd) != 0) abort ();
+ if (signbitd64 (dd) == 0) abort ();
+ if (signbitd128 (tf) != 0) abort ();
+
+ return 0;
+}