https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93802
Bug ID: 93802
Summary: gcc generates a rlwinm/or pair instead of a single
rlwimi (powerpc)
Product: gcc
Version: 9.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: [email protected]
Target Milestone: ---
unsigned long f(unsigned short x)
{
return (x << 16) | x;
}
Results in:
00000000 <f>:
0: 54 69 80 1e rlwinm r9,r3,16,0,15
4: 7d 23 1b 78 or r3,r9,r3
8: 4e 80 00 20 blr
Should instead be:
rlwimi r3, r3, 16, 0, 15
blr
Problem seen with at least GCC 9.2 and GCC 8.1 and GCC 5.5