diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 200d2a77a0a..dcf7e58b1be 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-04-09 Alexandre Oliva + + * config/fp-bit.c (unpack_d): Handle pair of doubles with + different signs correctly. + 2003-04-09 Vladimir Makarov * sched-deps.c (reg_pending_barrier_mode): New enumeration. diff --git a/gcc/config/fp-bit.c b/gcc/config/fp-bit.c index 2832f96d578..b8ac2982cdd 100644 --- a/gcc/config/fp-bit.c +++ b/gcc/config/fp-bit.c @@ -459,6 +459,7 @@ unpack_d (FLO_union_type * src, fp_number_type * dst) if (exp != EXPMAX && exp != 0 && low != 0) { int lowexp = ((int)(low >> HALFFRACBITS)) & ((1 << EXPBITS) - 1); + int lowsign = ((int)(low >> (((HALFFRACBITS + EXPBITS))))) & 1; int shift; fractype xlow; @@ -472,7 +473,10 @@ unpack_d (FLO_union_type * src, fp_number_type * dst) xlow <<= shift; else if (shift < 0) xlow >>= -shift; - fraction += xlow; + if (sign == lowsign) + fraction += xlow; + else + fraction -= xlow; } } # else