https://gcc.gnu.org/g:1da58c266672702c7750759d69189bd0fd750096

commit r17-4026-g1da58c266672702c7750759d69189bd0fd750096
Author: Manjunath S Matti <[email protected]>
Date:   Wed Sep 9 09:04:04 2026 -0500

    rs6000: Fix mma-double-test.c on big endian [PR 126866]
    
    Fix the testcase to pass the correct parameters to
    _builtin_mma_assemble_pair in big endian mode.
    
    Tested on powerpc64-linux-gnu (-m64 and -m32) and
    powerpc64le-linux-gnu.
    
    2026-09-09  Manjunath Matti  <[email protected]>
    
    gcc/testsuite/
            PR target/126866
            * gcc.target/powerpc/mma-double-test.c (MMA): Swap the vector
            arguments to __builtin_mma_assemble_pair on big endian.

Diff:
---
 gcc/testsuite/gcc.target/powerpc/mma-double-test.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/gcc/testsuite/gcc.target/powerpc/mma-double-test.c 
b/gcc/testsuite/gcc.target/powerpc/mma-double-test.c
index 254af7f8f79e..3ef4da5281fa 100644
--- a/gcc/testsuite/gcc.target/powerpc/mma-double-test.c
+++ b/gcc/testsuite/gcc.target/powerpc/mma-double-test.c
@@ -52,7 +52,13 @@ MMA (int m, int n, int k, double *A, double *B, double *C)
              vec_t *rowA = (vec_t *) & AO[i * 16];
              __vector_pair rowB;
              vec_t *rb = (vec_t *) & BO[i * 4];
+/* The register order of __builtin_mma_assemble_pair is endian
+   dependent, so the halves must be swapped on big endian.  */
+#ifdef __BIG_ENDIAN__
+             __builtin_mma_assemble_pair (&rowB, rb[0], rb[1]);
+#else
              __builtin_mma_assemble_pair (&rowB, rb[1], rb[0]);
+#endif
              __builtin_mma_xvf64gerpp (&acc0, rowB, rowA[0]);
              __builtin_mma_xvf64gerpp (&acc1, rowB, rowA[1]);
              __builtin_mma_xvf64gerpp (&acc2, rowB, rowA[2]);

Reply via email to