[Bug target/96236] New: __builtin_mma_disassemble_acc() doesn't store elements correctly in LE mode

bergner at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Jul 17 20:08:07 GMT 2020


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


More information about the Gcc-bugs mailing list