aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>2016-05-10 14:27:12 +0000
committerWilliam Schmidt <wschmidt@gcc.gnu.org>2016-05-10 14:27:12 +0000
commit9b5ee426fcfe9d473edff34cd65f99c057799d7d (patch)
treefdda2bf4edf0cd1b0cde4657f8cfc011b53dd1a3 /gcc/testsuite
parentf3352cabb8c7f078862ee3c1bca06e96a6ebcfd4 (diff)
downloadgcc-9b5ee426fcfe9d473edff34cd65f99c057799d7d.zip
gcc-9b5ee426fcfe9d473edff34cd65f99c057799d7d.tar.gz
gcc-9b5ee426fcfe9d473edff34cd65f99c057799d7d.tar.bz2
re PR target/70963 (vec_cts/vec_ctf intrinsics produce wrong results for 64-bit floating point)
[gcc] 2016-05-10 Bill Schmidt <wschmidt@linux.vnet.ibm.com> PR target/70963 * config/rs6000/vsx.md (vsx_xvcvdpsxds_scale): Generate correct code for a zero scale factor. (vsx_xvcvdpuxds_scale): Likewise. [gcc/testsuite] 2016-05-10 Bill Schmidt <wschmidt@linux.vnet.ibm.com> PR target/70963 * gcc.target/powerpc/pr70963.c: New. From-SVN: r236082
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr70963.c43
2 files changed, 48 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c1a2135..58d0c8d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-05-10 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR target/70963
+ * gcc.target/powerpc/pr70963.c: New.
+
2016-05-10 David Malcolm <dmalcolm@redhat.com>
* gcc.dg/plugin/diagnostic-test-show-locus-bw.c
diff --git a/gcc/testsuite/gcc.target/powerpc/pr70963.c b/gcc/testsuite/gcc.target/powerpc/pr70963.c
new file mode 100644
index 0000000..b5d8316
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr70963.c
@@ -0,0 +1,43 @@
+/* { dg-do run { target { powerpc64*-*-* && vsx_hw } } } */
+/* { dg-require-effective-target powerpc_vsx_ok } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-options "-maltivec" } */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <altivec.h>
+
+static int failed;
+static void test (void);
+
+static void check (int result, const char *name)
+{
+ if (!result)
+ {
+ failed++;
+ printf ("fail %s\n", name);
+ }
+}
+
+int main (void)
+{
+ test ();
+ if (failed)
+ abort ();
+ return 0;
+}
+
+vector double x = { 81.0, 76.0 };
+vector long long y = { 81, 76 };
+
+static void test()
+{
+ vector long long a = vec_cts (x, 0);
+ vector double b = vec_ctf (a, 0);
+ vector long long c = __builtin_vsx_xvcvdpuxds_scale (x, 0);
+ vector double d = vec_ctf (c, 0);
+ check (vec_all_eq (a, y), "vec_cts");
+ check (vec_all_eq (b, x), "vec_ctf");
+ check (vec_all_eq (c, y), "xvcvdpuxds");
+ check (vec_all_eq (d, x), "vec_ctf unsigned");
+}