diff options
-rw-r--r-- | gcc/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/optabs.c | 17 |
2 files changed, 12 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 71abe07..d124a7d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -78,6 +78,9 @@ Tue May 28 21:16:18 2002 J"orn Rennecke <joern.rennecke@superh.com> 2002-05-22 David Edelsohn <edelsohn@gnu.org> Jeff Law <law@redhat.com> + * optabs.c (expand_binop): Fix nwords sign warnings. + generate pseudo for add_optab. + * sched-deps.c (sched_analyze): Do not clear SCHED_GROUP_P. * haifa-sched.c (move_insn): Clear SCHED_GROUP_P after it is used. 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, |