Message ID | alpine.LFD.2.21.2012101642270.2104409@eddie.linux-mips.org |
---|---|
State | Accepted |
Headers | show |
Series | VAX: QMATH DImode add/sub fixes | expand |
On 12/11/20 1:48 PM, Maciej W. Rozycki wrote: > Remove an assertion the failure of which has not been actually observed, > but which appears clearly dangerous, for when the QMATH DImode add/sub > handler is invoked with the subtrahend and the minuend both the same. > Instead handle the operation by emitting a move of constant 0 to the > output operand. Adjust the relevant inline comment accordingly. > > gcc/ > * config/vax/vax.c (vax_expand_addsub_di_operands): Handle equal > input operands with subtraction. OK jeff
Index: gcc/gcc/config/vax/vax.c =================================================================== --- gcc.orig/gcc/config/vax/vax.c +++ gcc/gcc/config/vax/vax.c @@ -2042,12 +2042,14 @@ vax_expand_addsub_di_operands (rtx * ope } else { - /* If are adding the same value together, that's really a multiply by 2, - and that's just a left shift of 1. */ + /* If we are adding a value to itself, that's really a multiply by 2, + and that's just a left shift by 1. If subtracting, it's just 0. */ if (rtx_equal_p (operands[1], operands[2])) { - gcc_assert (code != MINUS); - emit_insn (gen_ashldi3 (operands[0], operands[1], const1_rtx)); + if (code == PLUS) + emit_insn (gen_ashldi3 (operands[0], operands[1], const1_rtx)); + else + emit_move_insn (operands[0], const0_rtx); return; }