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]);
