float __fsmul (float a1, float a2) _FS_REENTRANT
{
volatile union float_long fl1, fl2;
- volatile unsigned long result;
- volatile int exp;
+ unsigned long result;
+ int exp;
char sign;
fl1.f = a1;
result &= ~HIDDEN;
/* pack up and go home */
- fl1.l = PACK (sign ? SIGNBIT : 0 , (unsigned long)exp, result);
+ if (exp >= 0x100)
+ fl1.l = (sign ? SIGNBIT : 0) | 0x7F800000;
+ else if (exp < 0)
+ fl1.l = 0;
+ else
+ fl1.l = PACK (sign ? SIGNBIT : 0 , exp, result);
return (fl1.f);
}