diff options
author | David Edelsohn <edelsohn@gnu.org> | 2002-05-28 23:03:21 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2002-05-28 17:03:21 -0600 |
commit | 64de6c0a5fa388bde4676762adc516001fb462ef (patch) | |
tree | fdb2b4fa29bdbc13bfbcd3f47782465e54466b28 /gcc/optabs.c | |
parent | 62526ec32fe9a6bfa311af82e4a97d08fdb6f2d8 (diff) | |
download | gcc-64de6c0a5fa388bde4676762adc516001fb462ef.zip gcc-64de6c0a5fa388bde4676762adc516001fb462ef.tar.gz gcc-64de6c0a5fa388bde4676762adc516001fb462ef.tar.bz2 |
optabs.c (expand_binop): Fix nwords sign warnings.
* optabs.c (expand_binop): Fix nwords sign warnings.
generate pseudo for add_optab.
Co-Authored-By: Jeff Law <law@redhat.com>
From-SVN: r53976
Diffstat (limited to 'gcc/optabs.c')
-rw-r--r-- | gcc/optabs.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/gcc/optabs.c b/gcc/optabs.c index da43dd1..da72ffd 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -1210,9 +1210,9 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) { int i; optab otheroptab = binoptab == add_optab ? sub_optab : add_optab; - unsigned int nwords = GET_MODE_BITSIZE (mode) / BITS_PER_WORD; + int nwords = GET_MODE_BITSIZE (mode) / BITS_PER_WORD; rtx carry_in = NULL_RTX, carry_out = NULL_RTX; - rtx xop0, xop1; + rtx xop0, xop1, xtarget; /* We can handle either a 1 or -1 value for the carry. If STORE_FLAG value is one of those, use it. Otherwise, use 1 since it is the @@ -1227,19 +1227,20 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) xop0 = force_reg (mode, op0); xop1 = force_reg (mode, op1); - if (target == 0 || GET_CODE (target) != REG - || target == xop0 || target == xop1) - target = gen_reg_rtx (mode); + xtarget = gen_reg_rtx (mode); + + if (target == 0 || GET_CODE (target) != REG) + target = xtarget; /* Indicate for flow that the entire target reg is being set. */ if (GET_CODE (target) == REG) - emit_insn (gen_rtx_CLOBBER (VOIDmode, target)); + emit_insn (gen_rtx_CLOBBER (VOIDmode, xtarget)); /* Do the actual arithmetic. */ for (i = 0; i < nwords; i++) { int index = (WORDS_BIG_ENDIAN ? nwords - i - 1 : i); - rtx target_piece = operand_subword (target, index, 1, mode); + rtx target_piece = operand_subword (xtarget, index, 1, mode); rtx op0_piece = operand_subword_force (xop0, index, mode); rtx op1_piece = operand_subword_force (xop1, index, mode); rtx x; @@ -1299,7 +1300,7 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) { if (mov_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing) { - rtx temp = emit_move_insn (target, target); + rtx temp = emit_move_insn (target, xtarget); set_unique_reg_note (temp, REG_EQUAL, |