Index: msp430.c =================================================================== --- msp430.c (revision 1) +++ msp430.c (revision 2) @@ -187,6 +187,7 @@ {"msp430x167", MSP430_ISA_16, 1}, {"msp430x168", MSP430_ISA_16, 1}, {"msp430x169", MSP430_ISA_16, 1}, + {"msp430x1611", MSP430_ISA_16, 1}, {"msp430x311", MSP430_ISA_31, 0}, {"msp430x312", MSP430_ISA_31, 0}, @@ -3745,11 +3746,28 @@ { /* destination overlaps source. so, update destination in reverse way */ + + output_asm_insn (" ; %E1 overlaps wit one of %A0 - %D0",operands); + if (++dst_reg!=src_reg) output_asm_insn ("mov\t%D1, %D0",operands); + if (++dst_reg!=src_reg) output_asm_insn ("mov\t%C1, %C0", operands); + if (++dst_reg!=src_reg) output_asm_insn ("mov\t%B1, %B0", operands); + if (++dst_reg!=src_reg) output_asm_insn ("mov\t@%E1, %A0", operands); + dst_reg-=4; + if (++dst_reg==src_reg) output_asm_insn ("mov\t%D1, %D0",operands); + else + if (++dst_reg==src_reg) output_asm_insn ("mov\t%C1, %C0", operands); + else + if (++dst_reg==src_reg) output_asm_insn ("mov\t%B1, %B0", operands); + else + if (++dst_reg==src_reg) output_asm_insn ("mov\t@%E1, %A0", operands); + +/* output_asm_insn ("mov\t%D1, %D0 ; %E1 overlaps wit one of %A0 - %D0", operands); output_asm_insn ("mov\t%C1, %C0", operands); output_asm_insn ("mov\t%B1, %B0", operands); output_asm_insn ("mov\t@%E1, %A0", operands); +*/ } return "";