diff -Naurp gcc/config/avr/avr.c gcc/config/avr/avr.c --- gcc/config/avr/avr.c 2011-06-09 14:30:33.000000000 -0500 +++ gcc/config/avr/avr.c 2011-06-09 15:33:10.000000000 -0500 @@ -3350,8 +3350,8 @@ out_movhi_mr_r (rtx insn, rtx op[], int AS2 (out,%m0-%2,%A1)); } if (AVR_XMEGA) - return *l = 4, (AS2 (sts,%A0,%A1) CR_TAB - AS2 (sts,%B0,%B1)); + return *l = 4, (AS2 (sts,%m0,%A1) CR_TAB + AS2 (sts,%m0+1,%B1)); else return *l = 4, (AS2 (sts,%m0+1,%B1) CR_TAB AS2 (sts,%m0,%A1));