https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65105
Bug ID: 65105
Summary: [i386] XMM registers are not used for 64bit
computations on 32bit target
Product: gcc
Version: 5.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: enkovich.gnu at gmail dot com
XMM registers may be used for 64bit operations on 32bit target. It should make
code faster and free some GPRs.
Here is an example test where GCC doesn't use XMM registers and possible code
with XMM usage:
>cat test.c
long long
test1 (long long x, long long y, long long z)
{
return ((x | z ) + (y & z) - z);
}
>cat test_xmm.s
.file "test.c"
.text
.globl test1
test1:
movq 4(%esp), %xmm2
movq 20(%esp), %xmm1
movq 12(%esp), %xmm0
por %xmm1, %xmm2
pand %xmm1, %xmm0
paddq %xmm0, %xmm2
psubq %xmm1, %xmm2
movd %xmm2, %eax
psrlq $32, %xmm2
movd %xmm2, %edx
ret