------- 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