diff options
author | Bill Schmidt <wschmidt@linux.vnet.ibm.com> | 2016-05-10 14:27:12 +0000 |
---|---|---|
committer | William Schmidt <wschmidt@gcc.gnu.org> | 2016-05-10 14:27:12 +0000 |
commit | 9b5ee426fcfe9d473edff34cd65f99c057799d7d (patch) | |
tree | fdda2bf4edf0cd1b0cde4657f8cfc011b53dd1a3 /gcc/testsuite | |
parent | f3352cabb8c7f078862ee3c1bca06e96a6ebcfd4 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/pr70963.c | 43 |
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"); +} |