aboutsummaryrefslogtreecommitdiff
path: root/gcc/optabs.c
diff options
context:
space:
mode:
authorDavid Edelsohn <edelsohn@gnu.org>2002-05-28 23:03:21 +0000
committerJeff Law <law@gcc.gnu.org>2002-05-28 17:03:21 -0600
commit64de6c0a5fa388bde4676762adc516001fb462ef (patch)
treefdb2b4fa29bdbc13bfbcd3f47782465e54466b28 /gcc/optabs.c
parent62526ec32fe9a6bfa311af82e4a97d08fdb6f2d8 (diff)
downloadgcc-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.c17
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,