OSDN Git Service

PR 19700 testcase.
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 30 Jan 2005 17:55:12 +0000 (17:55 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 30 Jan 2005 17:55:12 +0000 (17:55 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@94443 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/gcc.c-torture/execute/ieee/copysign2.c [new file with mode: 0644]

diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/copysign2.c b/gcc/testsuite/gcc.c-torture/execute/ieee/copysign2.c
new file mode 100644 (file)
index 0000000..d715992
--- /dev/null
@@ -0,0 +1,40 @@
+#include <string.h>
+#include <stdlib.h>
+
+#define TEST(TYPE, EXT)                                                \
+static TYPE Y##EXT[] = {                                       \
+  2.0, -2.0, -2.0, -2.0, -2.0, 2.0, -0.0, __builtin_inf##EXT ()        \
+};                                                             \
+static const TYPE Z##EXT[] = {                                 \
+  1.0, -1.0, -1.0, -0.0, -0.0, 0.0, -__builtin_inf##EXT (),    \
+  __builtin_nan##EXT ("")                                      \
+};                                                             \
+                                                               \
+void test##EXT (void)                                          \
+{                                                              \
+  TYPE r[8];                                                   \
+  /* Make sure to avoid comparing unused bits in the type.  */ \
+  memset (r, 0, sizeof r);                                     \
+  r[0] = __builtin_copysign##EXT (1.0, Y##EXT[0]);             \
+  r[1] = __builtin_copysign##EXT (1.0, Y##EXT[1]);             \
+  r[2] = __builtin_copysign##EXT (-1.0, Y##EXT[2]);            \
+  r[3] = __builtin_copysign##EXT (0.0, Y##EXT[3]);             \
+  r[4] = __builtin_copysign##EXT (-0.0, Y##EXT[4]);            \
+  r[5] = __builtin_copysign##EXT (-0.0, Y##EXT[5]);            \
+  r[6] = __builtin_copysign##EXT (__builtin_inf##EXT (), Y##EXT[6]); \
+  r[7] = __builtin_copysign##EXT (-__builtin_nan##EXT (""), Y##EXT[7]); \
+  if (memcmp (r, Z##EXT, sizeof r) != 0)                       \
+    abort ();                                                  \
+}
+
+TEST(float, f)
+TEST(double, )
+TEST(long double, l)
+
+int main()
+{
+  testf();
+  test();
+  testl();
+  return 0;
+}