https://gcc.gnu.org/g:e78e731e42f29044d7cc09ef0a6083989b7d6ba0

commit r17-5315-ge78e731e42f29044d7cc09ef0a6083989b7d6ba0
Author: Jeevitha <[email protected]>
Date:   Mon Oct 19 00:00:58 2026 -0500

    rs6000: Fix vec-insert-word-runnable.c on Power10 BE [PR127025]
    
    The vec-insert-word-runnable.c test assumes little-endian results for
    vec_insertl and vec_inserth when the source operand is a vector. The
    element selected for insertion differs between big-endian and
    little-endian targets because the byte and element numbering within a
    register is endian dependent.
    
    Update the expected results for big-endian targets to account for the
    different element selected by the vector insert operations.
    
    2026-10-19  Jeevitha Palanisamy  <[email protected]>
    
    gcc/testsuite/
            PR target/127025
            * gcc.target/powerpc/vec-insert-word-runnable.c: Fix expected
            results for vec_insertl and vec_inserth on big-endian targets.

Diff:
---
 .../gcc.target/powerpc/vec-insert-word-runnable.c  | 28 +++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

diff --git a/gcc/testsuite/gcc.target/powerpc/vec-insert-word-runnable.c 
b/gcc/testsuite/gcc.target/powerpc/vec-insert-word-runnable.c
index bd96e13a9016..8d67519fcff3 100644
--- a/gcc/testsuite/gcc.target/powerpc/vec-insert-word-runnable.c
+++ b/gcc/testsuite/gcc.target/powerpc/vec-insert-word-runnable.c
@@ -129,8 +129,13 @@ main (int argc, char *argv [])
                                       18, 19, 20, 21, 22, 23, 24, 25 };
   vresult_ch = (vector unsigned char) { 0, 0, 0, 0, 0, 0, 0, 0,
                                        0, 0, 0, 0, 0, 0, 0, 0 };
+#ifdef __BIG_ENDIAN__
+  expected_vresult_ch = (vector unsigned char) { 0, 1, 17, 3, 4, 5, 6, 7,
+                                      8, 9, 10, 11, 12, 13, 14, 15 };
+#else
   expected_vresult_ch = (vector unsigned char) { 0, 1, 18, 3, 4, 5, 6, 7,
                                       8, 9, 10, 11, 12, 13, 14, 15 };
+#endif
                                                 
   vresult_ch = vec_insertl (src_vb_ch, src_va_ch, index);
 
@@ -149,7 +154,11 @@ main (int argc, char *argv [])
   src_va_sh = (vector unsigned short) { 0, 1, 2, 3, 4, 5, 6, 7 };
   src_vb_sh = (vector unsigned short) { 10, 11, 12, 13, 14, 15, 16, 17 };
   vresult_sh = (vector unsigned short) { 0, 0, 0, 0, 0, 0, 0, 0 };
+#ifdef __BIG_ENDIAN__
+  expected_vresult_sh = (vector unsigned short) { 0, 1, 13, 3, 4, 5, 6, 7 };
+#else
   expected_vresult_sh = (vector unsigned short) { 0, 1, 14, 3, 4, 5, 6, 7 };
+#endif
                                                 
   vresult_sh = vec_insertl (src_vb_sh, src_va_sh, index);
 
@@ -168,7 +177,11 @@ main (int argc, char *argv [])
   src_va_int = (vector unsigned int) { 0, 1, 2, 3 };
   src_vb_int = (vector unsigned int) { 10, 11, 12, 13 };
   vresult_int = (vector unsigned int) { 0, 0, 0, 0 };
+#ifdef __BIG_ENDIAN__
+  expected_vresult_int = (vector unsigned int) { 0, 1, 11, 3 };
+#else
   expected_vresult_int = (vector unsigned int) { 0, 1, 12, 3 };
+#endif
                                                 
   vresult_int = vec_insertl (src_vb_int, src_va_int, index);
 
@@ -264,7 +277,7 @@ main (int argc, char *argv [])
 #endif
   }
 
-  /* Vector insert, left index, from vector */
+  /* Vector insert, high index, from vector */
   index = 2;
   src_va_ch = (vector unsigned char) { 0, 1, 2, 3, 4, 5, 6, 7,
                                       8, 9, 10, 11, 12, 13, 14, 15 };
@@ -272,8 +285,13 @@ main (int argc, char *argv [])
                                       18, 19, 20, 21, 22, 23, 24, 25 };
   vresult_ch = (vector unsigned char) { 0, 0, 0, 0, 0, 0, 0, 0,
                                        0, 0, 0, 0, 0, 0, 0, 0 };
+#ifdef __BIG_ENDIAN__
+  expected_vresult_ch = (vector unsigned char) { 0, 1, 2, 3, 4, 5, 6, 7,
+                                      8, 9, 10, 11, 12, 17, 14, 15 };
+#else
   expected_vresult_ch = (vector unsigned char) { 0, 1, 2, 3, 4, 5, 6, 7,
                                       8, 9, 10, 11, 12, 18, 14, 15 };
+#endif
                                                 
   vresult_ch = vec_inserth (src_vb_ch, src_va_ch, index);
 
@@ -292,7 +310,11 @@ main (int argc, char *argv [])
   src_va_sh = (vector unsigned short) { 0, 1, 2, 3, 4, 5, 6, 7 };
   src_vb_sh = (vector unsigned short) { 10, 11, 12, 13, 14, 15, 16, 17 };
   vresult_sh = (vector unsigned short) { 0, 0, 0, 0, 0, 0, 0, 0 };
+#ifdef __BIG_ENDIAN__
+  expected_vresult_sh = (vector unsigned short) { 0, 1, 2, 3, 4, 13, 6, 7 };
+#else
   expected_vresult_sh = (vector unsigned short) { 0, 1, 2, 3, 4, 14, 6, 7 };
+#endif
                                                 
   vresult_sh = vec_inserth (src_vb_sh, src_va_sh, index);
 
@@ -311,7 +333,11 @@ main (int argc, char *argv [])
   src_va_int = (vector unsigned int) { 0, 1, 2, 3 };
   src_vb_int = (vector unsigned int) { 10, 11, 12, 13 };
   vresult_int = (vector unsigned int) { 0, 0, 0, 0 };
+#ifdef __BIG_ENDIAN__
+  expected_vresult_int = (vector unsigned int) { 0, 11, 2, 3 };
+#else
   expected_vresult_int = (vector unsigned int) { 0, 12, 2, 3 };
+#endif
                                                 
   vresult_int = vec_inserth (src_vb_int, src_va_int, index);

Reply via email to