[Bug target/18562] SSE constant vector initialization produces dead constant values on stack
steven at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Wed Jan 12 09:37:00 GMT 2005
------- Additional Comments From steven at gcc dot gnu dot org 2005-01-12 09:37 -------
AMD64 has this at -O2:
Test case 1:
main:
.LFB499:
subq $24, %rsp
.LCFI0:
movl $.LC1, %edi
movl $4, %eax
movaps .LC0(%rip), %xmm0
movups %xmm0, (%rsp)
cvtss2sd 12(%rsp), %xmm3
cvtss2sd 8(%rsp), %xmm2
cvtss2sd 4(%rsp), %xmm1
cvtss2sd (%rsp), %xmm0
call printf
xorl %eax, %eax
addq $24, %rsp
ret
.LFE499:
Test case 2:
main:
.LFB499:
subq $40, %rsp
.LCFI0:
movl $.LC4, %edi
movl $4, %eax
movl $0x3fa66666, 16(%rsp)
movl $0x3fb33333, 20(%rsp)
movl $0x3fc00000, 24(%rsp)
movl $0x3fcccccd, 28(%rsp)
movups 16(%rsp), %xmm0
movups %xmm0, (%rsp)
cvtss2sd 12(%rsp), %xmm3
cvtss2sd 8(%rsp), %xmm2
cvtss2sd 4(%rsp), %xmm1
cvtss2sd (%rsp), %xmm0
call printf
xorl %eax, %eax
addq $40, %rsp
ret
With -m32 -march=pentium4 -mtune=prescott I get this:
Test case 1:
main:
pushl %ebp
movl %esp, %ebp
subl $56, %esp
andl $-16, %esp
subl $16, %esp
movaps .LC0, %xmm0
movups %xmm0, -16(%ebp)
flds -4(%ebp)
fstpl 28(%esp)
flds -8(%ebp)
fstpl 20(%esp)
flds -12(%ebp)
fstpl 12(%esp)
flds -16(%ebp)
fstpl 4(%esp)
movl $.LC1, (%esp)
call printf
xorl %eax, %eax
leave
ret
Test case 2 (which is basically the same as Uros' code):
main:
pushl %ebp
movl %esp, %ebp
subl $72, %esp
andl $-16, %esp
subl $16, %esp
movl $0x3fa66666, -16(%ebp)
movl $0x3fb33333, -12(%ebp)
movl $0x3fc00000, -8(%ebp)
movl $0x3fcccccd, -4(%ebp)
movups -16(%ebp), %xmm0
movups %xmm0, -32(%ebp)
flds -20(%ebp)
fstpl 28(%esp)
flds -24(%ebp)
fstpl 20(%esp)
flds -28(%ebp)
fstpl 12(%esp)
flds -32(%ebp)
fstpl 4(%esp)
movl $.LC4, (%esp)
call printf
xorl %eax, %eax
leave
ret
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18562
More information about the Gcc-bugs
mailing list