Stelian Pop wrote:
I will still have the problems with the fact that my indirect addressing
doesn't allow displacements, no ? (so I would need to implement
LEGITIMIZE_RELOAD_ADDRESS, in which I'll need a special reserved
register to compute the full address by adding the base and the
displacement). Or do you imply that I won't need this anymore ?

In your original message, the right thing happens. The stack slot address gets reloaded.

        (insn 1117 16 1118 2 
../../../../src/gcc-4.3.0/libgcc/../gcc/libgcc2.c:1090 (set (reg:QI 10 r10)
                (const_int 24 [0x18])) 1 {*movqi_imm} (nil))
        (insn 1118 1117 1119 2 
../../../../src/gcc-4.3.0/libgcc/../gcc/libgcc2.c:1090 (set (reg:QI 10 r10)
                (plus:QI (reg:QI 10 r10)
                    (reg/f:QI 30 r30))) 13 {addqi3} (expr_list:REG_EQUIV 
(plus:QI (reg/f:QI 30 r30)
                    (const_int 24 [0x18]))
                (nil)))
        (insn 1119 1118 21 2 
../../../../src/gcc-4.3.0/libgcc/../gcc/libgcc2.c:1090 (set (mem/c:QI (reg:QI 
10 r10) [31 S1 A16])
                (reg:QI 14 r14)) 8 {*movqi_tomem} (nil))

The only problem here is that the register choice is wrong, and I already explained why it is wrong.

It is only after you started making some changes that this apparently broke. It isn't clear why. I can only suggest that you try to debug it. Put a breakpoint in find_reloads() conditional on the instruction number. Then step through to see what happens. It should call finds_reloads_address or find_reloads_toplev at some point, which will see that we don't have a strictly valid address, and then reload it.

Jim

Reply via email to