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