[Bug target/16111] generates invalid SSE movdqa instruction (instead of movaps)
djp at volny dot cz
gcc-bugzilla@gcc.gnu.org
Mon Jun 21 17:18:00 GMT 2004
------- Additional Comments From djp at volny dot cz 2004-06-21 17:18 -------
did you run the test on amd or intel?
my results and more info:
GCC 3.4.0 (mainline)
/opt/gcc-3.4.0/bin/g++-3.4 -v -save-temps -O3 -msse -mfpmath=sse
-fomit-frame-pointer -finline-limit=2000 "test.cxx" -o "test" -L/opt/gcc-3.4.0/lib
==>
LD_LIBRARY_PATH="/opt/gcc-3.3.3/lib:$LD_LIBRARY_PATH" ./test
extents (-27.500000 -27.500000 -0.000000 nan)
GCC 3.3.3 (mainline)
/opt/gcc-3.3.3/bin/g++-3.3 -v -save-temps -O3 -msse -mfpmath=sse
-fomit-frame-pointer -finline-limit=2000 "test.cxx" -o "test" -L/opt/gcc-3.3.3/lib
==>
LD_LIBRARY_PATH="/opt/gcc-3.4.0/lib:$LD_LIBRARY_PATH" ./test
extents (-27.500000 -27.500000 -0.000000 -0.000000)
root@vox:/proc# cat cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 6
model : 6
model name : AMD Athlon(tm) XP 2100+
stepping : 2
cpu MHz : 1737.340
cache size : 256 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
pat pse36 mmx fxsr sse syscall mmxext 3dnowext 3dnow
bogomips : 3432.44
test.s from 3.4.0
-----------------
.type _Z3fooPfS_, @function
_Z3fooPfS_:
.LFB312:
subl $4, %esp
.LCFI0:
movl 8(%esp), %eax
movl $0x80000000, (%esp)
movl 12(%esp), %edx
movss (%esp), %xmm1
movups (%eax), %xmm6
movups (%edx), %xmm5
shufps $0, %xmm1, %xmm1
movdqa %xmm1, %xmm4
andnps %xmm6, %xmm4
xorps %xmm5, %xmm1
movaps %xmm4, %xmm0
mulps %xmm1, %xmm0
movhlps %xmm0, %xmm3
addps %xmm3, %xmm0
movaps %xmm0, %xmm2
shufps $1, %xmm0, %xmm2
addss %xmm2, %xmm0
movups %xmm0, (%eax)
movups %xmm1, (%edx)
popl %eax
ret
test.s from 3.3.3
-----------------
.type _Z3fooPfS_, @function
_Z3fooPfS_:
.LFB314:
subl $4, %esp
.LCFI0:
movl 8(%esp), %edx
movl $0x80000000, (%esp)
movl 12(%esp), %ecx
movss (%esp), %xmm5
movups (%edx), %xmm4
movups (%ecx), %xmm6
shufps $0, %xmm5, %xmm5
movaps %xmm5, %xmm2
andnps %xmm4, %xmm2
xorps %xmm6, %xmm5
movaps %xmm2, %xmm1
mulps %xmm5, %xmm1
movhlps %xmm1, %xmm3
addps %xmm3, %xmm1
movaps %xmm1, %xmm0
shufps $1, %xmm1, %xmm0
addss %xmm0, %xmm1
movups %xmm1, (%edx)
movups %xmm5, (%ecx)
popl %eax
ret
As you can see, the ONLY difference is
movdqa %xmm1, %xmm4
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16111
More information about the Gcc-bugs
mailing list