* src/z80/ralloc.c (packRegsForHLUse): Banned IFXs from being packed into HL.
[fw/sdcc] / device / lib / _fsadd.c
index be0b44fc1271bcf72646648275c481180a986c8b..a4273d9abbdb5aaec208bf5535247c0117b3b639 100644 (file)
@@ -19,7 +19,7 @@ __fsadd (float a1, float a2)
   volatile long mant1, mant2;
   volatile union float_long fl1, fl2;
   volatile int exp1, exp2;
-  volatile long sign = 0;
+  volatile unsigned long sign = 0;
 
   fl1.f = a1;
   fl2.f = a2;
@@ -34,9 +34,9 @@ __fsadd (float a1, float a2)
   exp2 = EXP (fl2.l);
 
   if (exp1 > exp2 + 25)
-    return (fl1.l);
+    return (fl1.f);
   if (exp2 > exp1 + 25)
-    return (fl2.l);
+    return (fl2.f);
 
   /* do everything in excess precision so's we can round later */
   mant1 = MANT (fl1.l) << 6;
@@ -67,14 +67,14 @@ __fsadd (float a1, float a2)
     return (0);
 
   /* normalize up */
-  while (!(mant1 & (unsigned long) 0xE0000000))
+  while (!((unsigned long)mant1 & (unsigned long) 0xE0000000))
     {
       mant1 <<= 1;
       exp1--;
     }
 
   /* normalize down? */
-  if (mant1 & (unsigned long)(1 << 30))
+  if ((unsigned long)mant1 & (unsigned long)(1 << 30))
     {
       mant1 >>= 1 ;
       exp1++;
@@ -94,7 +94,7 @@ __fsadd (float a1, float a2)
   mant1 >>= 6;
 
   /* turn off hidden bit */
-  mant1 &= ~HIDDEN;
+  mant1 = (unsigned long)mant1 & ~HIDDEN;
 
   /* pack up and go home */
   fl1.l = PACK (sign, (unsigned long) exp1, mant1);