arm.c (arm_reload_in_hi): Ensure that the scratch register does not overlap the final result register.

* arm.c (arm_reload_in_hi): Ensure that the scratch register does
not overlap the final result register.

From-SVN: r62981
This commit is contained in:
Richard Earnshaw 2003-02-16 19:40:11 +00:00 committed by Richard Earnshaw
parent 97a6e368a6
commit 3a1944a602
2 changed files with 13 additions and 1 deletions

View file

@ -1,3 +1,8 @@
2003-02-16 Richard Earnshaw <rearnsha@arm.com>
* arm.c (arm_reload_in_hi): Ensure that the scratch register does
not overlap the final result register.
2003-02-16 Arend Bayer <arend.bayer@web.de>
Richard Henderson <rth@redhat.com>

View file

@ -5845,7 +5845,14 @@ arm_reload_in_hi (operands)
}
}
scratch = gen_rtx_REG (SImode, REGNO (operands[2]));
/* Operands[2] may overlap operands[0] (though it won't overlap
operands[1]), that's why we asked for a DImode reg -- so we can
use the bit that does not overlap. */
if (REGNO (operands[2]) == REGNO (operands[0]))
scratch = gen_rtx_REG (SImode, REGNO (operands[2]) + 1);
else
scratch = gen_rtx_REG (SImode, REGNO (operands[2]));
emit_insn (gen_zero_extendqisi2 (scratch,
gen_rtx_MEM (QImode,
plus_constant (base,