------- Additional Comments From uros at kss-loka dot si 2004-10-19 09:55 -------
Testcase from comment #9 and '-O2 -msse -fomit-frame-pointer' procduces code
that seems OK:
prepare:
pushl %ebp
pushl %edi
movl $hmag+512, %edi
pushl %esi
movl $hphase, %esi
pushl %ebx
movl $hmag, %ebx
subl $76, %esp
movss .LC0, %xmm0
movl 96(%esp), %ebp
movaps %xmm0, 32(%esp)
.p2align 4,,15
.L2:
flds (%ebx)
addl $4, %ebx
fchs
flds (%esi)
addl $4, %esi
fstpl (%esp)
fstpl 16(%esp)
call sin
fldl 16(%esp)
cmpl %ebx, %edi
fmulp %st, %st(1)
fmull .LC2
fstps (%ebp)
jne .L2
addl $76, %esp
popl %ebx
popl %esi
popl %edi
popl %ebp
ret
BTW: when alter_reg() for reg 81 is called from reload() (at line ~836,
reload1.c) it gets right offset (-32). [This offset is calculated at line ~1969
in reload1.c]. Something changes this correct offset from (-32) to (-56) if
frame pointer is not omitted.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17990