DImode loads using the stack pointer
tm
tm@mail.kloo.net
Fri Sep 6 05:00:00 GMT 2002
When -fnew-ra is used on my layer3.i, gcc generates
DImodes which use the autoincrement addressing mode, like this:
.L288:
mova .L357,r0
fmov.s @r0+,fr12
fmov.s @r0+,fr13
mov.l .L338,r2
add #43,r1
fmov fr12,fr2
fmov fr13,fr3
mov.l .L339,r3
lds r1,fpul
fdiv dr0,dr2
fmov.s fr3,@r9
fmov.s fr2,@-r9
float fpul,dr2
mov.l r3,@-r15
mov.l r2,@-r15
add #8,r9
fmov.s @r15+,fr4 <- here
fmov.s @r15+,fr5 <- here
fmul dr4,dr2
fdiv dr14,dr2
fmov fr3,fr5
jsr @r12
fmov fr2,fr4
fmov fr12,fr2
mov r10,r1
fmov fr13,fr3
add #13,r1
lds r1,fpul
mov.l .L356,r1
fdiv dr0,dr2
float fpul,dr4
fmov.s fr3,@r11
fmov.s fr2,@-r11
mova .L361,r0
fmov.s @r0+,fr2
fmov.s @r0+,fr3
add #8,r11
jsr @r1
fmul dr2,dr4
fmov.s fr1,@-r15 <- here
mov #28,r0
fmov.s fr0,@-r15 <- here
add r14,r0
mov.l @r15+,r2 <- here
mov.l @r15+,r3 <- here
mov r10,r1
add #67,r1
mov.l r3,@-r15 <- here
mov.l r2,@-r15 <- here
fmov.s @r15+,fr2 <- here
lds r1,fpul
fmov.s @r15+,fr3 <- here
fmul dr12,dr2
fmov.s fr3,@-r15 <- here
fmov.s fr2,@-r15 <- here
float fpul,dr2
mov.l @r15+,r2 <- here
mov.l @r15+,r3 <- here
This is probably bad, because if any other stack-pointer relative accesses
were generated in between, they would access wrong values...
It looks like we should disallow STACK_POINTER_REGNUM for the DImode
loads/stores using the autoincrement addressing mode?
Toshi
More information about the Gcc-bugs
mailing list