[FAST486]

- Zero is not a denormalized number.
- In Fast486FpuMultiply, we must account for the fact that the resulting mantissa
also has the "decimal point" at the second position.


svn path=/trunk/; revision=67819
This commit is contained in:
Aleksandar Andrejevic 2015-05-18 04:42:22 +00:00
parent a6d59a04f6
commit ec471e2759
3 changed files with 5 additions and 4 deletions

View file

@ -1626,13 +1626,14 @@ Fast486FpuNormalize(PFAST486_STATE State,
{
UINT LeadingZeros;
if (FPU_IS_NORMALIZED(Data)) return TRUE;
if (FPU_IS_ZERO(Data))
{
Data->Exponent = 0;
return TRUE;
}
if (FPU_IS_NORMALIZED(Data)) return TRUE;
LeadingZeros = CountLeadingZeros64(Data->Mantissa);
if (LeadingZeros < Data->Exponent)

View file

@ -277,7 +277,7 @@ Fast486FpuFromInteger(PFAST486_STATE State,
if (Value < 0LL)
{
Result->Sign = 1;
Result->Sign = TRUE;
Value = -Value;
}
@ -804,7 +804,7 @@ Fast486FpuMultiply(PFAST486_STATE State,
TempResult.Sign = FirstOperand->Sign ^ SecondOperand->Sign;
/* Calculate the exponent */
Exponent = (LONG)FirstOperand->Exponent + (LONG)SecondOperand->Exponent - FPU_REAL10_BIAS;
Exponent = (LONG)FirstOperand->Exponent + (LONG)SecondOperand->Exponent - FPU_REAL10_BIAS + 1;
/* Calculate the mantissa */
UnsignedMult128(FirstOperand->Mantissa,

View file

@ -63,7 +63,7 @@
#define FPU_REAL8_INFINITY 0x7FF0000000000000ULL
#define FPU_REAL8_INDEFINITE 0xFFF8000000000000ULL
#define FPU_IS_NORMALIZED(x) (!FPU_IS_ZERO(x) && (((x)->Mantissa & FPU_MANTISSA_HIGH_BIT) != 0ULL))
#define FPU_IS_NORMALIZED(x) (FPU_IS_ZERO(x) || (((x)->Mantissa & FPU_MANTISSA_HIGH_BIT) != 0ULL))
#define FPU_IS_ZERO(x) ((x)->Mantissa == 0ULL)
#define FPU_IS_NAN(x) ((x)->Exponent == (FPU_MAX_EXPONENT + 1))
#define FPU_IS_INFINITY(x) (FPU_IS_NAN(x) && ((x)->Mantissa == FPU_MANTISSA_HIGH_BIT))