Hello all,

For the 16 bit target that i am currently porting can have only
positive offsets less than 0x100. (unsigned 8 bit) for offset
addressing mode.
During reload i am getting ICE because the address created is not
legitimate. So i guess i have to define the macro
LEGITIMIZE_RELOAD_ADDRESS.
But i am not sure how to do this?

With this will i be able to convert
load Rd, Rb[offset]
into
li Rs, offset
add Rs,Rb
load Rd, Rs

where Rs is a reserved register.

Or the only way is to do this  like the other targets say in rs6000

>From rs6000_legitimize_reload_address()

     /* Reload the high part into a base reg; leave the low part
         in the mem directly.  */

      x = gen_rtx_PLUS (GET_MODE (x),
                        gen_rtx_PLUS (GET_MODE (x), XEXP (x, 0),
                                      GEN_INT (high)),
                        GEN_INT (low));

      push_reload (XEXP (x, 0), NULL_RTX, &XEXP (x, 0), NULL,
                   BASE_REG_CLASS, GET_MODE (x), VOIDmode, 0, 0,
                   opnum, (enum reload_type)type);
      *win = 1;
      return x;

I guess this will generate something like

add Rs, Rb, excess_offset
load Rd, Rs[legitimate_offset];

Regards,
Shafi

Reply via email to