* config/fp-bit.c (unpack_d): Handle pair of doubles with
authoraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 9 Apr 2003 19:30:29 +0000 (19:30 +0000)
committeraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 9 Apr 2003 19:30:29 +0000 (19:30 +0000)
different signs correctly.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@65405 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/fp-bit.c

index 200d2a7..dcf7e58 100644 (file)
@@ -1,3 +1,8 @@
+2003-04-09  Alexandre Oliva  <aoliva@redhat.com>
+
+       * config/fp-bit.c (unpack_d): Handle pair of doubles with
+       different signs correctly.
+
 2003-04-09  Vladimir Makarov  <vmakarov@redhat.com>
 
        * sched-deps.c (reg_pending_barrier_mode): New enumeration.
index 2832f96..b8ac298 100644 (file)
@@ -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