http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60991

--- Comment #1 from johnst...@inn-soft.com ---
I don't really know GCC source code well enough to feel comfortable changing
and testing this myself, but I suspect the problem lies with this code?

gcc/config/avr/avr.c: avr_out_store_psi function: revision 209767:

3992                          return avr_asm_len ("adiw r28,%o0-61" CR_TAB
3993                                              "std Y+61,%A1"    CR_TAB
3994                                              "std Y+62,%B1"    CR_TAB
3995                                              "std Y+63,%C1"    CR_TAB
3996                                              "sbiw r28,%o0-60", op, plen,
-5);

Notice the top line has "%o0-61" and bottom line has "%o0-60", which must be
some kind of offset.  I suspect this code was copied and pasted from the
out_movsi_mr_r function, while forgetting to update the last line here since it
is 24-bit integer and not the 32-bit integer it was copied from.

It appears that this code was introduced with the new __int24 support and
nothing changed since then.

Reply via email to