]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
rs6000: Fix vec_cpsgn parameter order (PR101985)
authorBill Schmidt <wschmidt@linux.ibm.com>
Tue, 23 Nov 2021 21:57:27 +0000 (15:57 -0600)
committerBill Schmidt <wschmidt@linux.ibm.com>
Tue, 23 Nov 2021 22:40:28 +0000 (16:40 -0600)
Backport r12-4361 to releases/gcc-10.

2021-11-23  Bill Schmidt  <wschmidt@linux.ibm.com>

gcc/
PR target/101985
* config/rs6000/altivec.h (vec_cpsgn): Swap operand order.

gcc/testsuite/
PR target/101985
* gcc.target/powerpc/pr101985-1.c: New.
* gcc.target/powerpc/pr101985-2.c: New.

gcc/config/rs6000/altivec.h
gcc/testsuite/gcc.target/powerpc/pr101985-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/pr101985-2.c [new file with mode: 0644]

index b40e750dc13fcd1f83324868c0867a0a9a71baad..c03d7c9b14909d9fa02d89901474a8021acf576e 100644 (file)
 #define vec_vcfux __builtin_vec_vcfux
 #define vec_cts __builtin_vec_cts
 #define vec_ctu __builtin_vec_ctu
-#define vec_cpsgn __builtin_vec_copysign
+#define vec_cpsgn(x,y) __builtin_vec_copysign(y,x)
 #define vec_double __builtin_vec_double
 #define vec_doublee __builtin_vec_doublee
 #define vec_doubleo __builtin_vec_doubleo
diff --git a/gcc/testsuite/gcc.target/powerpc/pr101985-1.c b/gcc/testsuite/gcc.target/powerpc/pr101985-1.c
new file mode 100644 (file)
index 0000000..b4753ab
--- /dev/null
@@ -0,0 +1,18 @@
+/* PR target/101985 */
+/* { dg-do run } */
+/* { dg-require-effective-target vsx_hw } */
+/* { dg-options "-O2 -mvsx" } */
+
+#include <altivec.h>
+
+int
+main (void)
+{
+  vector float a = {  1,  2, - 3, - 4};
+  vector float b = {-10, 20, -30,  40};
+  vector float c = { 10, 20, -30, -40};
+  a = vec_cpsgn (a, b);
+  if (! vec_all_eq (a, c))
+    __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/pr101985-2.c b/gcc/testsuite/gcc.target/powerpc/pr101985-2.c
new file mode 100644 (file)
index 0000000..148ad65
--- /dev/null
@@ -0,0 +1,18 @@
+/* PR target/101985 */
+/* { dg-do run } */
+/* { dg-require-effective-target vsx_hw } */
+/* { dg-options "-O2 -mvsx" } */
+
+#include <altivec.h>
+
+int
+main (void)
+{
+  vector double a = {   1,  -4};
+  vector double b = { -10,  40};
+  vector double c = {  10, -40};
+  a = vec_cpsgn (a, b);
+  if (! vec_all_eq (a, c))
+    __builtin_abort ();
+  return 0;
+}