GCC Maintainers:

The following patch fixes the return type for the existing vec_permxor
builtin to match the ABI specification.  The test case for the builtin
is also updates.

Secondly, the first argument of the vec_insert4b() builtin test case is
fixed to match the ABI specification for the builtin.

The patch was retested on:

    powerpc64le-unknown-linux-gnu (Power 8 LE)   
    powerpc64le-unknown-linux-gnu (Power 9 LE)
    powerpc64-unknown-linux-gnu (Power 8 BE)

With no regressions.

Please let me know if the patch looks OK for GCC mainline.

                         Carl Love

---------------------------------------------------------------------

gcc/ChangeLog:

2018-06-05  Carl Love  <c...@us.ibm.com>
        * gcc/config/rs6000/rs6000-c.c: Fix return type for
        P8V_BUILTIN_VPERMXOR with V16QI arguments.

gcc/testsuite/ChangeLog:

2018-06-05  Carl Love  <c...@us.ibm.com>
        * gcc.target/powerpc/builtins-7-p9-runnable.c: Change first
        argument to vui_arg.
        * gcc.target/powerpc/builtins-7-runnable.c: Change result
        to vec_uc_result1.
---
 gcc/config/rs6000/rs6000-c.c                             |  3 ++-
 .../gcc.target/powerpc/builtins-7-p9-runnable.c          |  7 +++++--
 gcc/testsuite/gcc.target/powerpc/builtins-7-runnable.c   | 16 ++++++++--------
 3 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
index 6cf5537..ea0c82a 100644
--- a/gcc/config/rs6000/rs6000-c.c
+++ b/gcc/config/rs6000/rs6000-c.c
@@ -3614,7 +3614,8 @@ const struct altivec_builtin_types 
altivec_overloaded_builtins[] = {
     RS6000_BTI_bool_V16QI, RS6000_BTI_bool_V16QI, RS6000_BTI_bool_V16QI,
     RS6000_BTI_bool_V16QI },
   { P8V_BUILTIN_VEC_VPERMXOR, P8V_BUILTIN_VPERMXOR,
-    RS6000_BTI_V16QI, RS6000_BTI_V16QI, RS6000_BTI_V16QI, RS6000_BTI_V16QI },
+    RS6000_BTI_unsigned_V16QI, RS6000_BTI_V16QI,
+    RS6000_BTI_V16QI, RS6000_BTI_V16QI },
   { P8V_BUILTIN_VEC_VPERMXOR, P8V_BUILTIN_VPERMXOR,
     RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI,
     RS6000_BTI_unsigned_V16QI, RS6000_BTI_unsigned_V16QI },
diff --git a/gcc/testsuite/gcc.target/powerpc/builtins-7-p9-runnable.c 
b/gcc/testsuite/gcc.target/powerpc/builtins-7-p9-runnable.c
index 137b46b..f277344 100644
--- a/gcc/testsuite/gcc.target/powerpc/builtins-7-p9-runnable.c
+++ b/gcc/testsuite/gcc.target/powerpc/builtins-7-p9-runnable.c
@@ -82,6 +82,7 @@ vext (vector unsigned char *vc)
 int main()
 {
    vector signed int vsi_arg;
+   vector unsigned int vui_arg;
    vector unsigned char vec_uc_arg, vec_uc_result, vec_uc_expected;
    vector unsigned long long vec_ull_result, vec_ull_expected;
    unsigned long long ull_result, ull_expected;
@@ -113,10 +114,12 @@ int main()
 
    /* insert into char 4 location */
    vec_uc_expected = (vector unsigned char){1, 2, 3, 4,
-                                           0xC, 0, 0, 0,
+                                           2, 0, 0, 0,
                                            9, 10, 11, 12,
                                            13, 14, 15, 16};
-   vec_uc_result = vec_insert4b (vsi_arg, vec_uc_arg, 4);
+   vui_arg = (vector unsigned int){0x4, 0x3, 0x2, 0x1};
+
+   vec_uc_result = vec_insert4b (vui_arg, vec_uc_arg, 4);
 
    if (result_wrong_uc(vec_uc_expected, vec_uc_result))
      {
diff --git a/gcc/testsuite/gcc.target/powerpc/builtins-7-runnable.c 
b/gcc/testsuite/gcc.target/powerpc/builtins-7-runnable.c
index 965b1cd..05e7441 100644
--- a/gcc/testsuite/gcc.target/powerpc/builtins-7-runnable.c
+++ b/gcc/testsuite/gcc.target/powerpc/builtins-7-runnable.c
@@ -65,17 +65,17 @@ int main() {
                                0x4D, 0x5C, 0x6D, 0x7E,
                                0x8F, 0x90, 0xA1, 0xB2,
                                0xC3, 0xD4, 0xE5, 0xF6};
-  vec_sc_expected1 = (vector signed char){0xC, 0xC, 0xC, 0x4,
-                                         0x7, 0x7, 0x5, 0xB,
-                                         0xD, 0x15, 0xF, 0xC,
-                                         0x4, 0x4, 0x4, 0x4};
-  vec_sc_result1 = vec_permxor (sc_arg1, sc_arg2, sc_arg3);
+  vec_uc_expected1 = (vector unsigned char){0xC, 0xC, 0xC, 0x4,
+                                           0x7, 0x7, 0x5, 0xB,
+                                           0xD, 0x15, 0xF, 0xC,
+                                           0x4, 0x4, 0x4, 0x4};
+  vec_uc_result1 = vec_permxor (sc_arg1, sc_arg2, sc_arg3);
 
   for (i = 0; i < 16; i++) {
-    if (vec_sc_expected1[i] != vec_sc_result1[i])
+    if (vec_uc_expected1[i] != vec_uc_result1[i])
 #ifdef DEBUG
-      printf("ERROR vec_permxor (sc, sc, sc) result[%d]=0x%x != 
expected[%d]=0x%x\n",
-            i, vec_sc_result1[i],  i, vec_sc_expected1[i]);
+      printf("ERROR vec_permxor (uc, sc, sc) result[%d]=0x%x != 
expected[%d]=0x%x\n",
+            i, vec_uc_result1[i],  i, vec_uc_expected1[i]);
 #else
       abort();
 #endif
-- 
2.7.4

Reply via email to