https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96236
Bug ID: 96236 Summary: __builtin_mma_disassemble_acc() doesn't store elements correctly in LE mode Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: bergner at gcc dot gnu.org Target Milestone: --- The __builtin_mma_disassemble_acc built-in doesn't correctly account for little endian byte ordering of the pointer type passed to it is not a __vector_quad pointer as the following test case shows: bergner@pike:~/$ cat disassemble.c void buggy (void *dst) { __vector_quad acc; __builtin_mma_xxsetaccz (&acc); __builtin_mma_disassemble_acc (dst, &acc); } void foo (__vector_quad *dst) { __vector_quad acc; __builtin_mma_xxsetaccz (&acc); __builtin_mma_disassemble_acc (dst, &acc); } bergner@pike:~/$ gcc -S -O2 -mcpu=power10 disassemble.c bergner@pike:~/$ cat disassemble.s buggy: xxsetaccz 0 xxmfacc 0 stxv 0,0(3) stxv 1,16(3) stxv 2,32(3) stxv 3,48(3) blr foo: xxsetaccz 0 xxmfacc 0 stxvp 2,0(3) stxvp 0,32(3) blr