#ifdef FLOAT_ASM_MCS51
-// float __fsadd (float a, float b) reentrant
-static void dummy(void) _naked
+// float __fsadd (float a, float b) __reentrant
+static void dummy(void) __naked
{
- _asm
+ __asm
// extract the two inputs, placing them into:
// sign exponent mantiassa
lcall fs_normalize_a
ljmp fs_round_and_return
- _endasm;
+ __endasm;
}
#else
** uunet!motown!pipeline!phw
*/
-
union float_long
{
float f;
volatile long mant1, mant2;
volatile union float_long fl1, fl2;
volatile int exp1, exp2;
- volatile unsigned long sign = 0;
+ char sign = 0;
fl1.f = a1;
fl2.f = a2;
if (mant1 < 0)
{
mant1 = -mant1;
- sign = SIGNBIT;
+ sign = 1;
}
else if (!mant1)
return (0);
while (mant1 & 0xff000000) {
if (mant1&1)
mant1 += 2;
- mant1 >>= 1 ;
+ mant1 >>= 1;
exp1++;
}
mant1 &= ~HIDDEN;
/* pack up and go home */
- fl1.l = PACK (sign, (unsigned long) exp1, mant1);
-
+ if (exp1 >= 0x100)
+ fl1.l = (sign ? SIGNBIT : 0) | __INFINITY;
+ else if (exp1 < 0)
+ fl1.l = 0;
+ else
+ fl1.l = PACK (sign ? SIGNBIT : 0 , exp1, mant1);
return (fl1.f);
}
#endif
-