Camo Johnson <da_cr...@yahoo.de> writes:

> So NOW it is a direct store operation. And the compiler crashes with the 
> following error message:
>
> ../uart2sim/uart2i_3.c: In Funktion »main«:
> ../uart2sim/uart2i_3.c:307: Fehler: Befehl erfüllt nicht seine Bedingungen:
> (insn 44 41 45 4 ../uart2sim/uart2i_3.c:272 (set (mem/s:HI (plus:HI 
> (const_int -49136 [0xffffffffffff4010])
>                 (const_int 4 [0x4])) [2 <variable>.tx_data+0 S2 A18])
>         (reg:HI 7 r7 [orig:28 tx.44 ] [28])) 2 {movhi} (nil))
> ../uart2sim/uart2i_3.c:307: interner Compiler-Fehler: in 
> reload_cse_simplify_operands, bei postreload.c:396
>
> Its German output. In English it sais that the instruction doesn't match its 
> constraints which are tested in line 396 in postreload.c which looks like 
> this:

That's odd.  Reload has decided to substitute the equivalent constant
rather than reloading it into a register.  The address is (plus:HI
(const_int -49136 [0xffffffffffff4010]) (const_int 4 [0x4])).  That is
presumably rejected by GO_IF_LEGITIMATE_ADDRESS.  So I wonder how it
gets through find_reloads_address?

A quick hack might be to handle this case in LEGITIMIZE_RELOAD_ADDRESS,
but I don't see why that is needed.

Ian

Reply via email to