[Bug c/106895] New: powerpc64 strange extended inline asm behaviour with register pairs
npiggin at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri Sep 9 11:25:09 GMT 2022
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106895
Bug ID: 106895
Summary: powerpc64 strange extended inline asm behaviour with
register pairs
Product: gcc
Version: 12.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: npiggin at gmail dot com
CC: segher at gcc dot gnu.org
Target Milestone: ---
Target: powerpc64le-linux-gnu
This is Debian 12.2.0-1 build.
powerpc64 instructions operating on 128 bits use "even/odd pair" of adjacent
GPRs, where the lower numbered register specifies the pair and it must be an
even number. This code compiled with -O2:
void set128(__int128 val, __int128 *mem)
{
#if WORKAROUND
asm("");
#endif
asm("stq %1,%0" : "=m"(*mem) : "r"(val));
}
Results in an invalid even/odd pair:
stq 3,0(5)
blr
If compiled with -DWORKAROUND it results in a valid pair:
mr 10,3
mr 11,4
stq 10,0(5)
blr
More information about the Gcc-bugs
mailing list