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