Message ID | AANLkTik0-EeoRCY_d6Vy9coYo9NwB2iaDkXF1CkKHfPQ@mail.gmail.com |
---|---|
State | New |
Headers | show |
On 08/05/2010 12:11 AM, Uros Bizjak wrote: > HOST_WIDE_INT ct = INTVAL (operands[2]); > HOST_WIDE_INT cf = INTVAL (operands[3]); > HOST_WIDE_INT diff; > > diff = ct - cf; > > ... > > diff = -diff; > > I don't know what is the proper way to fix these. Any hints? Probably by simply making these (and a few other temporary) variables unsigned, so that we have defined 2s compliment arithmetic. It will require at least one cast here: > if (diff < 0) but there may be a few others. r~
Index: i386.c =================================================================== --- i386.c (revision 162897) +++ i386.c (working copy) @@ -10417,8 +10417,7 @@ ix86_decompose_address (rtx addr, struct to test cfun for being non-NULL. */ if (TARGET_K6 && cfun && optimize_function_for_speed_p (cfun) && base_reg && !index_reg && !disp - && REG_P (base_reg) - && REGNO_REG_CLASS (REGNO (base_reg)) == SIREG) + && REG_P (base_reg) && REGNO (base_reg) == SI_REG) disp = const0_rtx; /* Special case: encode reg+reg instead of reg*2. */