[Bug target/80833] 32-bit x86 causes store-forwarding stalls for int64_t -> xmm
ubizjak at gmail dot com
gcc-bugzilla@gcc.gnu.org
Wed May 24 13:43:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80833
--- Comment #8 from Uroš Bizjak <ubizjak at gmail dot com> ---
The patch from comment #7 generates:
a) DImode move for 32 bit targets:
--cut here--
long long test (long long a)
{
asm ("" : "+x" (a));
return a;
}
--cut here--
gcc -O2 -msse4.1 -mtune=intel -mregparm=2:
movd %eax, %xmm0
pinsrd $1, %edx, %xmm0
movq %xmm0, (%esp) <<-- unneeded store due to RA problem
movd %xmm0, %eax
pextrd $1, %xmm0, %edx
leal 12(%esp), %esp
b) TImode move for 64 bit targets:
--cut here--
__int128 test (__int128 a)
{
asm ("" : "+x" (a));
return a;
}
--cut here--
gcc -O2 -msse4.1 -mtune=intel
movq %rdi, %xmm0
pinsrq $1, %rsi, %xmm0
pextrq $1, %xmm0, %rdx
movq %xmm0, %rax
More information about the Gcc-bugs
mailing list