280#ifndef FAST486_NO_FPU
287 ULONG MultiplicandLow, MultiplicandHigh, MultiplierLow, MultiplierHigh;
288 ULONG IntermediateLow, IntermediateHigh;
289 ULONGLONG LowProduct, Intermediate, Intermediate1, Intermediate2;
291 MultiplicandLow = (
ULONG)(Multiplicand & 0xFFFFFFFFULL);
292 MultiplicandHigh = (
ULONG)(Multiplicand >> 32);
293 MultiplierLow = (
ULONG)(Multiplier & 0xFFFFFFFFULL);
294 MultiplierHigh = (
ULONG)(Multiplier >> 32);
301 Intermediate = Intermediate1 + Intermediate2;
302 if (Intermediate < Intermediate1) *HighProduct += 1ULL << 32;
304 IntermediateLow = (
ULONG)(Intermediate & 0xFFFFFFFFULL);
305 IntermediateHigh = (
ULONG)(Intermediate >> 32);
307 LowProduct += (
ULONGLONG)IntermediateLow << 32;
308 if ((
ULONG)(LowProduct >> 32) < IntermediateLow) (*HighProduct)++;
310 *HighProduct += IntermediateHigh;
330 *QuotientLow = *QuotientHigh = 0
ULL;
333 if ((DividendHigh == 0
ULL) && (DividendLow <
Divisor))
return ValueLow;
336 Bits = CountLeadingZeros64(CurrentHigh);
337 CurrentHigh <<= Bits;
343 *QuotientHigh |= *QuotientLow >> 63;
347 if ((ValueHigh > CurrentHigh)
348 || ((ValueHigh == CurrentHigh) && (ValueLow >= CurrentLow)))
350 BOOLEAN Carry = ValueLow < CurrentLow;
353 ValueHigh -= CurrentHigh;
354 ValueLow -= CurrentLow;
355 if (Carry) ValueHigh--;
361 if ((ValueHigh == 0
ULL) && (ValueLow <
Divisor))
break;
366 CurrentLow |= (CurrentHigh & 1) << 63;
374 Bits = CountLeadingZeros64(
Divisor);
375 if (CurrentHigh > 0
ULL) Bits += 64 - CountLeadingZeros64(CurrentHigh);
376 else Bits -= CountLeadingZeros64(CurrentLow);
380 *QuotientHigh = *QuotientLow;
388 *QuotientHigh <<= Bits;
389 *QuotientHigh |= *QuotientLow >> (64 - Bits);
390 *QuotientLow <<= Bits;
402 INT RemainderHighBit)
404 switch (
State->FpuControl.Rc)
409 if (
Remainder & (1ULL << RemainderHighBit))
414 if (!(
Remainder & ((1ULL << RemainderHighBit) - 1ULL)))
446 PFAST486_FPU_DATA_REG
Result)
460 ZeroCount = CountLeadingZeros64(
Result->Mantissa);
462 Result->Mantissa <<= ZeroCount;
468 PCFAST486_FPU_DATA_REG
Value,
486 if (
State->FpuControl.Im)
488 *
Result = 0x8000000000000000LL;
497 if (UnbiasedExp >= 0)
499 Bits = 63 - UnbiasedExp;
511 if (UnbiasedExp >= -64)
535 PFAST486_FPU_DATA_REG
Result)
543 if (
Value == 0)
return;
555 PCFAST486_FPU_DATA_REG
Value,
583 if (
State->FpuControl.Um)
596 if (UnbiasedExp > 127)
601 if (
State->FpuControl.Om)
633 PFAST486_FPU_DATA_REG
Result)
641 if (
Value == 0)
return;
653 PCFAST486_FPU_DATA_REG
Value,
666 *
Result = (
Value->Mantissa >> 11) & ((1ULL << 52) - 1);
680 if (
State->FpuControl.Um)
693 if (UnbiasedExp > 1023)
698 if (
State->FpuControl.Om)
728 PFAST486_FPU_DATA_REG
Result)
733 for (
i = 8;
i >= 0;
i--)
740 if (
Value[9] & 0x80) IntVal = -IntVal;
748 PCFAST486_FPU_DATA_REG
Value,
763 for (
i = 0;
i < 9;
i++)
765 Result[
i] = (
UCHAR)((IntVal % 10) + (((IntVal / 10) % 10) << 4));
774 PCFAST486_FPU_DATA_REG FirstOperand,
775 PCFAST486_FPU_DATA_REG SecondOperand,
776 PFAST486_FPU_DATA_REG
Result)
778 FAST486_FPU_DATA_REG FirstAdjusted = *FirstOperand;
779 FAST486_FPU_DATA_REG SecondAdjusted = *SecondOperand;
780 FAST486_FPU_DATA_REG TempResult;
799 if (!
State->FpuControl.Dm)
820 TempResult.Exponent =
max(FirstOperand->Exponent, SecondOperand->Exponent);
823 if (FirstAdjusted.Exponent < TempResult.Exponent)
825 if ((TempResult.Exponent - FirstAdjusted.Exponent) < 64)
827 FirstAdjusted.Mantissa >>= (TempResult.Exponent - FirstAdjusted.Exponent);
828 FirstAdjusted.Exponent = TempResult.Exponent;
839 if (SecondAdjusted.Exponent < TempResult.Exponent)
841 if ((TempResult.Exponent - SecondAdjusted.Exponent) < 64)
843 SecondAdjusted.Mantissa >>= (TempResult.Exponent - SecondAdjusted.Exponent);
844 SecondAdjusted.Exponent = TempResult.Exponent;
854 if (FirstAdjusted.Sign == SecondAdjusted.Sign)
857 TempResult.Mantissa = FirstAdjusted.Mantissa + SecondAdjusted.Mantissa;
858 TempResult.Sign = FirstAdjusted.Sign;
863 if (FirstAdjusted.Mantissa > SecondAdjusted.Mantissa) TempResult.Sign = FirstAdjusted.Sign;
864 else if (FirstAdjusted.Mantissa < SecondAdjusted.Mantissa) TempResult.Sign = SecondAdjusted.Sign;
865 else TempResult.Sign =
FALSE;
868 if (FirstAdjusted.Sign) FirstAdjusted.Mantissa = -(
LONGLONG)FirstAdjusted.Mantissa;
869 if (SecondAdjusted.Sign) SecondAdjusted.Mantissa = -(
LONGLONG)SecondAdjusted.Mantissa;
872 TempResult.Mantissa = FirstAdjusted.Mantissa + SecondAdjusted.Mantissa;
876 if (FirstAdjusted.Sign == SecondAdjusted.Sign)
878 if (TempResult.Mantissa < FirstAdjusted.Mantissa
879 || TempResult.Mantissa < SecondAdjusted.Mantissa)
886 if (
State->FpuControl.Om)
900 TempResult.Mantissa >>= 1;
902 TempResult.Exponent++;
908 if (TempResult.Mantissa >= FirstAdjusted.Mantissa
909 && TempResult.Mantissa >= SecondAdjusted.Mantissa)
912 TempResult.Mantissa = -(
LONGLONG)TempResult.Mantissa;
917 if (!Fast486FpuNormalize(
State, &TempResult))
929 PCFAST486_FPU_DATA_REG FirstOperand,
930 PCFAST486_FPU_DATA_REG SecondOperand,
931 PFAST486_FPU_DATA_REG
Result)
933 FAST486_FPU_DATA_REG NegativeSecondOperand = *SecondOperand;
936 NegativeSecondOperand.Sign = !NegativeSecondOperand.Sign;
944 PCFAST486_FPU_DATA_REG FirstOperand,
945 PCFAST486_FPU_DATA_REG SecondOperand)
974 FAST486_FPU_DATA_REG TempResult;
984 else if (TempResult.Sign)
1001 PCFAST486_FPU_DATA_REG FirstOperand,
1002 PCFAST486_FPU_DATA_REG SecondOperand,
1003 PFAST486_FPU_DATA_REG
Result)
1005 FAST486_FPU_DATA_REG TempResult;
1023 Result->Sign = FirstOperand->Sign ^ SecondOperand->Sign;
1032 Result->Sign = FirstOperand->Sign ^ SecondOperand->Sign;
1043 if (!
State->FpuControl.Dm)
1050 TempResult.Sign = FirstOperand->Sign ^ SecondOperand->Sign;
1057 SecondOperand->Mantissa,
1058 &TempResult.Mantissa);
1065 if (!
State->FpuControl.Um)
1071 TempResult.Exponent = 0;
1074 if (Exponent > -64) TempResult.Mantissa >>= (-Exponent);
1075 else TempResult.Mantissa = 0
ULL;
1082 if (!
State->FpuControl.Om)
1091 else TempResult.Exponent = (
USHORT)Exponent;
1094 if (!Fast486FpuNormalize(
State, &TempResult))
1106 PCFAST486_FPU_DATA_REG FirstOperand,
1107 PCFAST486_FPU_DATA_REG SecondOperand,
1108 PFAST486_FPU_DATA_REG
Result)
1110 FAST486_FPU_DATA_REG TempResult;
1122 if (
State->FpuControl.Im)
1141 if (
State->FpuControl.Zm)
1144 Result->Sign = FirstOperand->Sign;
1156 TempResult.Sign = FirstOperand->Sign ^ SecondOperand->Sign;
1161 Result->Sign = TempResult.Sign;
1168 Exponent = (
LONG)FirstOperand->Exponent - (
LONG)SecondOperand->Exponent - 1;
1172 FirstOperand->Mantissa,
1173 SecondOperand->Mantissa,
1178 TempResult.Mantissa = QuotientLow;
1180 if (QuotientHigh > 0
ULL)
1182 ULONG BitsToShift = 64 - CountLeadingZeros64(QuotientHigh);
1184 TempResult.Mantissa >>= BitsToShift;
1185 TempResult.Mantissa |= QuotientHigh << (64 - BitsToShift);
1186 Exponent += BitsToShift;
1202 if (!Fast486FpuNormalize(
State, &TempResult))
1218 PCFAST486_FPU_DATA_REG Operand,
1219 PFAST486_FPU_DATA_REG
Result)
1222 FAST486_FPU_DATA_REG TempResult =
FpuOne;
1223 FAST486_FPU_DATA_REG
Value;
1224 FAST486_FPU_DATA_REG SeriesElement;
1266 PCFAST486_FPU_DATA_REG Operand,
1267 PFAST486_FPU_DATA_REG
Result)
1270 FAST486_FPU_DATA_REG
Value = *Operand;
1271 FAST486_FPU_DATA_REG TempResult;
1272 FAST486_FPU_DATA_REG TempValue;
1280 if (
State->FpuControl.Im)
1303 if (!
State->FpuControl.Dm)
1309 Bits = CountLeadingZeros64(
Value.Mantissa);
1310 UnbiasedExp -= Bits;
1311 Value.Mantissa <<= Bits;
1314 TempResult.Sign =
FALSE;
1316 TempResult.Mantissa = 0
ULL;
1318 for (
i = 63;
i >= 0;
i--)
1327 if (!TempValue.Sign)
1330 TempResult.Mantissa |= 1ULL <<
i;
1338 if (!Fast486FpuNormalize(
State, &TempResult))
return FALSE;
1353 PCFAST486_FPU_DATA_REG FirstOperand,
1354 PCFAST486_FPU_DATA_REG SecondOperand,
1360 INT OldRoundingMode =
State->FpuControl.Rc;
1362 FAST486_FPU_DATA_REG Temp;
1377 if (Quotient) *Quotient = Integer;
1381 State->FpuControl.Rc = OldRoundingMode;
1391 PCFAST486_FPU_DATA_REG Operand,
1392 PFAST486_FPU_DATA_REG
Result)
1396 FAST486_FPU_DATA_REG Normalized = *Operand;
1397 FAST486_FPU_DATA_REG TempResult;
1398 FAST486_FPU_DATA_REG OperandSquared;
1399 FAST486_FPU_DATA_REG SeriesElement;
1400 PCFAST486_FPU_DATA_REG
Inverse;
1415 if (!(Quadrant & 1))
1419 TempResult = SeriesElement = Normalized;
1425 TempResult = SeriesElement =
FpuOne;
1449 SeriesElement.Sign = !SeriesElement.Sign;
1459 if (Quadrant >= 2) TempResult.Sign = !TempResult.Sign;
1471 PCFAST486_FPU_DATA_REG Operand,
1472 PFAST486_FPU_DATA_REG
Result)
1474 FAST486_FPU_DATA_REG
Value = *Operand;
1486 PFAST486_FPU_DATA_REG Operand,
1489 PFAST486_FPU_DATA_REG DestOperand = TopDestination ? &
FPU_ST(0) : Operand;
1558 PCFAST486_FPU_DATA_REG Operand,
1559 PFAST486_FPU_DATA_REG
Result)
1561 FAST486_FPU_DATA_REG
Value = *Operand;
1562 FAST486_FPU_DATA_REG PrevValue =
FpuZero;
1569 if (
State->FpuControl.Im)
1584 while (
Value.Sign != PrevValue.Sign
1585 ||
Value.Exponent != PrevValue.Exponent
1586 ||
Value.Mantissa != PrevValue.Mantissa)
1588 FAST486_FPU_DATA_REG Temp;
1614 PCFAST486_FPU_DATA_REG Numerator,
1615 PCFAST486_FPU_DATA_REG Denominator,
1616 PFAST486_FPU_DATA_REG
Result)
1620 FAST486_FPU_DATA_REG TempNumerator = *Numerator;
1621 FAST486_FPU_DATA_REG TempDenominator = *Denominator;
1622 FAST486_FPU_DATA_REG
Value;
1623 FAST486_FPU_DATA_REG TempResult;
1624 FAST486_FPU_DATA_REG ValDivValSqP1;
1625 FAST486_FPU_DATA_REG SeriesElement =
FpuOne;
1627 TempNumerator.Sign =
FALSE;
1628 TempDenominator.Sign =
FALSE;
1636 if ((Inverted = !TempResult.Sign))
1704 if (!(!Numerator->Sign == !Denominator->Sign)) TempResult.Sign = !TempResult.Sign;
1706 if (Denominator->Sign)
1708 if (Numerator->Sign)
1758 State->FpuLastInstPtr.LowWord =
Data[3];
1795 Data[3] =
State->FpuLastInstPtr.LowWord;
1811 BOOLEAN AddressSize =
State->SegmentRegs[FAST486_REG_CS].Size;
1812#ifndef FAST486_NO_FPU
1813 PFAST486_FPU_DATA_REG Operand;
1814 FAST486_FPU_DATA_REG MemoryData;
1820 if (!Fast486ParseModRegRm(
State, AddressSize, &ModRegRm))
1828#ifndef FAST486_NO_FPU
1830 Fast486FpuExceptionCheck(
State);
1838 if (
State->FpuControl.Im)
1856 if (!Fast486ReadModrmDwordOperands(
State, &ModRegRm,
NULL, &
Value))
1863 Operand = &MemoryData;
1874 if (
State->FpuControl.Im)
1900 BOOLEAN OperandSize, AddressSize;
1902 OperandSize = AddressSize =
State->SegmentRegs[FAST486_REG_CS].Size;
1907 if (!Fast486ParseModRegRm(
State, AddressSize, &ModRegRm))
1915#ifndef FAST486_NO_FPU
1925 FAST486_FPU_DATA_REG MemoryData;
1927 Fast486FpuExceptionCheck(
State);
1931 if (!Fast486ReadModrmDwordOperands(
State, &ModRegRm,
NULL, &
Value))
1938 Fast486FpuPush(
State, &MemoryData);
1950 Fast486FpuExceptionCheck(
State);
1959 if (!
State->FpuControl.Im)
1985 ?
State->SegmentOverride : FAST486_REG_DS,
1994 Fast486ReadModrmWordOperands(
State, &ModRegRm,
NULL, &
State->FpuControl.Value);
2003 ?
State->SegmentOverride : FAST486_REG_DS,
2012 Fast486WriteModrmWordOperands(
State, &ModRegRm,
FALSE,
State->FpuControl.Value);
2019 Fast486Exception(
State, FAST486_EXCEPTION_UD);
2038 Fast486FpuExceptionCheck(
State);
2046 if (!
State->FpuControl.Im)
2066 FAST486_FPU_DATA_REG Temp;
2068 Fast486FpuExceptionCheck(
State);
2106 Fast486FpuExceptionCheck(
State);
2112 Fast486FpuPop(
State);
2119 Fast486FpuExceptionCheck(
State);
2137 Fast486FpuExceptionCheck(
State);
2155 Fast486FpuExceptionCheck(
State);
2165 Fast486FpuExceptionCheck(
State);
2173 State->FpuStatus.Code0 = 1;
2174 State->FpuStatus.Code2 = 0;
2175 State->FpuStatus.Code3 = 1;
2181 State->FpuStatus.Code0 = 1;
2182 State->FpuStatus.Code2 = 1;
2183 State->FpuStatus.Code3 = 0;
2187 State->FpuStatus.Code0 = 1;
2188 State->FpuStatus.Code2 = 0;
2189 State->FpuStatus.Code3 = 0;
2194 State->FpuStatus.Code0 = 0;
2195 State->FpuStatus.Code2 = 0;
2196 State->FpuStatus.Code3 = 1;
2202 State->FpuStatus.Code0 = 0;
2203 State->FpuStatus.Code2 = 1;
2204 State->FpuStatus.Code3 = 0;
2208 State->FpuStatus.Code0 = 0;
2209 State->FpuStatus.Code2 = 1;
2210 State->FpuStatus.Code3 = 1;
2232 PCFAST486_FPU_DATA_REG Constants[] =
2243 Fast486FpuExceptionCheck(
State);
2253 Fast486FpuExceptionCheck(
State);
2266 if (!
State->FpuControl.Dm)
2281 FAST486_FPU_DATA_REG Logarithm;
2283 Fast486FpuExceptionCheck(
State);
2305 Fast486FpuPop(
State);
2314 FAST486_FPU_DATA_REG Sine;
2315 FAST486_FPU_DATA_REG Cosine;
2318 Fast486FpuExceptionCheck(
State);
2344 if (Quadrant == 1 || Quadrant == 2) Cosine.Sign =
TRUE;
2358 Fast486FpuExceptionCheck(
State);
2371 Fast486FpuPop(
State);
2380 Fast486FpuExceptionCheck(
State);
2426 Fast486FpuExceptionCheck(
State);
2445 State->FpuStatus.Code1 = Quotient & 1;
2446 State->FpuStatus.Code3 = (Quotient >> 1) & 1;
2447 State->FpuStatus.Code0 = (Quotient >> 2) & 1;
2456 State->FpuStatus.Top--;
2463 State->FpuStatus.Top++;
2470 FAST486_FPU_DATA_REG
Value, Logarithm;
2472 Fast486FpuExceptionCheck(
State);
2500 Fast486FpuPop(
State);
2509 Fast486FpuExceptionCheck(
State);
2523 Fast486FpuExceptionCheck(
State);
2536 if (!
State->FpuControl.Dm)
2558 Fast486FpuExceptionCheck(
State);
2571 if (!
State->FpuControl.Dm)
2593 INT OldRoundingMode =
State->FpuControl.Rc;
2595 Fast486FpuExceptionCheck(
State);
2608 if (!
State->FpuControl.Dm)
2619 State->FpuControl.Rc = OldRoundingMode;
2623 State->FpuControl.Rc = OldRoundingMode;
2626 UnbiasedExp += Scale;
2629 if (UnbiasedExp < -1023)
2634 if (
State->FpuControl.Um)
2645 if (UnbiasedExp > 1023)
2650 if (
State->FpuControl.Om)
2670 Fast486FpuExceptionCheck(
State);
2683 if (!
State->FpuControl.Dm)
2698 Fast486FpuExceptionCheck(
State);
2711 if (!
State->FpuControl.Dm)
2726 Fast486Exception(
State, FAST486_EXCEPTION_UD);
2738 BOOLEAN AddressSize =
State->SegmentRegs[FAST486_REG_CS].Size;
2739#ifndef FAST486_NO_FPU
2741 FAST486_FPU_DATA_REG MemoryData;
2747 if (!Fast486ParseModRegRm(
State, AddressSize, &ModRegRm))
2755#ifndef FAST486_NO_FPU
2757 Fast486FpuExceptionCheck(
State);
2765 Fast486Exception(
State, FAST486_EXCEPTION_UD);
2780 Fast486FpuPop(
State);
2781 Fast486FpuPop(
State);
2800 if (
State->FpuControl.Im)
2824 BOOLEAN AddressSize =
State->SegmentRegs[FAST486_REG_CS].Size;
2829 if (!Fast486ParseModRegRm(
State, AddressSize, &ModRegRm))
2837#ifndef FAST486_NO_FPU
2841 Fast486FpuExceptionCheck(
State);
2851 FAST486_FPU_DATA_REG Temp;
2860 Fast486FpuPush(
State, &Temp);
2877 if (!
State->FpuControl.Im)
2894 if (
State->FpuControl.Im)
2896 Temp = 0x80000000LL;
2913 Fast486FpuPop(
State);
2922 FAST486_FPU_DATA_REG
Value;
2927 ?
State->SegmentOverride : FAST486_REG_DS,
2954 | (
FPU_ST(0).Sign ? 0x8000 : 0);
2961 if (
State->FpuControl.Im)
2974 ?
State->SegmentOverride : FAST486_REG_DS,
2983 Fast486FpuPop(
State);
2990 Fast486Exception(
State, FAST486_EXCEPTION_UD);
3004 State->FpuStatus.Ie =
3005 State->FpuStatus.De =
3006 State->FpuStatus.Ze =
3007 State->FpuStatus.Oe =
3008 State->FpuStatus.Ue =
3009 State->FpuStatus.Pe =
3010 State->FpuStatus.Sf =
3011 State->FpuStatus.Es =
3022 State->FpuStatus.Value = 0;
3023 State->FpuTag = 0xFFFF;
3044 Fast486Exception(
State, FAST486_EXCEPTION_UD);
3056 BOOLEAN AddressSize =
State->SegmentRegs[FAST486_REG_CS].Size;
3057#ifndef FAST486_NO_FPU
3058 PFAST486_FPU_DATA_REG Operand;
3059 FAST486_FPU_DATA_REG MemoryData;
3065 if (!Fast486ParseModRegRm(
State, AddressSize, &ModRegRm))
3073#ifndef FAST486_NO_FPU
3075 Fast486FpuExceptionCheck(
State);
3087 if (
State->FpuControl.Im)
3103 ?
State->SegmentOverride : FAST486_REG_DS,
3114 Operand = &MemoryData;
3129 if (
State->FpuControl.Im)
3132 Operand->Sign =
TRUE;
3152 BOOLEAN OperandSize, AddressSize;
3154 OperandSize = AddressSize =
State->SegmentRegs[FAST486_REG_CS].Size;
3159 if (!Fast486ParseModRegRm(
State, AddressSize, &ModRegRm))
3167#ifndef FAST486_NO_FPU
3177 FAST486_FPU_DATA_REG MemoryData;
3179 Fast486FpuExceptionCheck(
State);
3185 ?
State->SegmentOverride : FAST486_REG_DS,
3196 Fast486FpuPush(
State, &MemoryData);
3208 Fast486FpuExceptionCheck(
State);
3217 if (!
State->FpuControl.Im)
3230 ?
State->SegmentOverride : FAST486_REG_DS,
3252 ?
State->SegmentOverride : FAST486_REG_DS,
3263 ?
State->SegmentOverride : FAST486_REG_DS,
3300 ?
State->SegmentOverride : FAST486_REG_DS,
3314 if (
State->FpuRegisters[
i].Sign)
3322 ?
State->SegmentOverride : FAST486_REG_DS,
3333 Fast486WriteModrmWordOperands(
State, &ModRegRm,
FALSE,
State->FpuStatus.Value);
3340 Fast486Exception(
State, FAST486_EXCEPTION_UD);
3358 FAST486_FPU_DATA_REG Temp;
3361 Fast486FpuExceptionCheck(
State);
3387 Fast486FpuExceptionCheck(
State);
3402 Fast486FpuExceptionCheck(
State);
3420 Fast486Exception(
State, FAST486_EXCEPTION_UD);
3431 BOOLEAN AddressSize =
State->SegmentRegs[FAST486_REG_CS].Size;
3432#ifndef FAST486_NO_FPU
3433 PFAST486_FPU_DATA_REG Operand;
3434 FAST486_FPU_DATA_REG MemoryData;
3440 if (!Fast486ParseModRegRm(
State, AddressSize, &ModRegRm))
3448#ifndef FAST486_NO_FPU
3451 Fast486FpuExceptionCheck(
State);
3462 if (
State->FpuControl.Im)
3483 Operand = &MemoryData;
3493 Fast486Exception(
State, FAST486_EXCEPTION_UD);
3519 BOOLEAN AddressSize =
State->SegmentRegs[FAST486_REG_CS].Size;
3524 if (!Fast486ParseModRegRm(
State, AddressSize, &ModRegRm))
3532#ifndef FAST486_NO_FPU
3535 Fast486FpuExceptionCheck(
State);
3547 FAST486_FPU_DATA_REG Temp;
3556 Fast486FpuPush(
State, &Temp);
3573 if (!
State->FpuControl.Im)
3591 if (
State->FpuControl.Im)
3610 Fast486FpuPop(
State);
3619 FAST486_FPU_DATA_REG
Value;
3624 ?
State->SegmentOverride : FAST486_REG_DS,
3644 FAST486_FPU_DATA_REG Temp;
3648 ?
State->SegmentOverride : FAST486_REG_DS,
3659 Fast486FpuPush(
State, &Temp);
3674 if (!
State->FpuControl.Im)
3687 ?
State->SegmentOverride : FAST486_REG_DS,
3696 Fast486FpuPop(
State);
3710 if (!
State->FpuControl.Im)
3724 ?
State->SegmentOverride : FAST486_REG_DS,
3734 Fast486FpuPop(
State);
3742 Fast486Exception(
State, FAST486_EXCEPTION_UD);
3754 Fast486FpuPop(
State);
3762 FAST486_FPU_DATA_REG Temp;
3788 Fast486FpuPop(
State);
3799 Fast486Exception(
State, FAST486_EXCEPTION_UD);
3804 State->GeneralRegs[FAST486_REG_EAX].LowWord =
State->FpuStatus.Value;
3812 Fast486Exception(
State, FAST486_EXCEPTION_UD);
static const WCHAR Cleanup[]
#define FAST486_NUM_FPU_REGS
#define FAST486_PREFIX_SEG
#define FAST486_FPU_DEFAULT_CONTROL
static VOID FASTCALL Fast486FpuArithmeticOperation(PFAST486_STATE State, INT Operation, PFAST486_FPU_DATA_REG Operand, BOOLEAN TopDestination)
static BOOLEAN FASTCALL Fast486FpuAdd(PFAST486_STATE State, PCFAST486_FPU_DATA_REG FirstOperand, PCFAST486_FPU_DATA_REG SecondOperand, PFAST486_FPU_DATA_REG Result)
static BOOLEAN FASTCALL Fast486FpuMultiply(PFAST486_STATE State, PCFAST486_FPU_DATA_REG FirstOperand, PCFAST486_FPU_DATA_REG SecondOperand, PFAST486_FPU_DATA_REG Result)
static BOOLEAN FASTCALL Fast486FpuToSingleReal(PFAST486_STATE State, PCFAST486_FPU_DATA_REG Value, PULONG Result)
static VOID FASTCALL Fast486FpuFromPackedBcd(PFAST486_STATE State, PUCHAR Value, PFAST486_FPU_DATA_REG Result)
static const FAST486_FPU_DATA_REG FpuOne
static const FAST486_FPU_DATA_REG FpuInverseNumberSine[INVERSE_NUMBERS_COUNT]
static const FAST486_FPU_DATA_REG FpuInverseNumber[INVERSE_NUMBERS_COUNT]
static BOOLEAN FASTCALL Fast486FpuCalculateSine(PFAST486_STATE State, PCFAST486_FPU_DATA_REG Operand, PFAST486_FPU_DATA_REG Result)
static const FAST486_FPU_DATA_REG FpuLgTwo
static BOOLEAN FASTCALL Fast486FpuCalculateSquareRoot(PFAST486_STATE State, PCFAST486_FPU_DATA_REG Operand, PFAST486_FPU_DATA_REG Result)
static BOOLEAN FASTCALL Fast486FpuCalculateCosine(PFAST486_STATE State, PCFAST486_FPU_DATA_REG Operand, PFAST486_FPU_DATA_REG Result)
static BOOLEAN FASTCALL Fast486FpuToPackedBcd(PFAST486_STATE State, PCFAST486_FPU_DATA_REG Value, PUCHAR Result)
static VOID FASTCALL Fast486FpuCompare(PFAST486_STATE State, PCFAST486_FPU_DATA_REG FirstOperand, PCFAST486_FPU_DATA_REG SecondOperand)
static ULONGLONG UnsignedMult128(ULONGLONG Multiplicand, ULONGLONG Multiplier, ULONGLONG *HighProduct)
static const FAST486_FPU_DATA_REG FpuZero
static VOID FASTCALL Fast486FpuFromDoubleReal(PFAST486_STATE State, ULONGLONG Value, PFAST486_FPU_DATA_REG Result)
static BOOLEAN FASTCALL Fast486FpuCalculateArcTangent(PFAST486_STATE State, PCFAST486_FPU_DATA_REG Numerator, PCFAST486_FPU_DATA_REG Denominator, PFAST486_FPU_DATA_REG Result)
static VOID FASTCALL Fast486FpuCalculateTwoPowerMinusOne(PFAST486_STATE State, PCFAST486_FPU_DATA_REG Operand, PFAST486_FPU_DATA_REG Result)
static ULONGLONG UnsignedDivMod128(ULONGLONG DividendLow, ULONGLONG DividendHigh, ULONGLONG Divisor, PULONGLONG QuotientLow, PULONGLONG QuotientHigh)
static const FAST486_FPU_DATA_REG FpuL2E
static BOOLEAN FASTCALL Fast486FpuCalculateLogBase2(PFAST486_STATE State, PCFAST486_FPU_DATA_REG Operand, PFAST486_FPU_DATA_REG Result)
static const FAST486_FPU_DATA_REG FpuLnTwo
static BOOLEAN FASTCALL Fast486FpuLoadEnvironment(PFAST486_STATE State, INT Segment, ULONG Address, BOOLEAN Size)
static BOOLEAN FASTCALL Fast486FpuToDoubleReal(PFAST486_STATE State, PCFAST486_FPU_DATA_REG Value, PULONGLONG Result)
static const FAST486_FPU_DATA_REG FpuTwo
static BOOLEAN FASTCALL Fast486FpuRemainder(PFAST486_STATE State, PCFAST486_FPU_DATA_REG FirstOperand, PCFAST486_FPU_DATA_REG SecondOperand, BOOLEAN RoundToNearest, PFAST486_FPU_DATA_REG Result OPTIONAL, PLONGLONG Quotient OPTIONAL)
static BOOLEAN FASTCALL Fast486FpuToInteger(PFAST486_STATE State, PCFAST486_FPU_DATA_REG Value, PLONGLONG Result)
static VOID FASTCALL Fast486FpuFromInteger(PFAST486_STATE State, LONGLONG Value, PFAST486_FPU_DATA_REG Result)
static const FAST486_FPU_DATA_REG FpuL2Ten
static const FAST486_FPU_DATA_REG FpuInverseNumberCosine[INVERSE_NUMBERS_COUNT]
static VOID FASTCALL Fast486FpuRound(PFAST486_STATE State, PULONGLONG Result, BOOLEAN Sign, ULONGLONG Remainder, INT RemainderHighBit)
static BOOLEAN FASTCALL Fast486FpuSubtract(PFAST486_STATE State, PCFAST486_FPU_DATA_REG FirstOperand, PCFAST486_FPU_DATA_REG SecondOperand, PFAST486_FPU_DATA_REG Result)
static BOOLEAN FASTCALL Fast486FpuDivide(PFAST486_STATE State, PCFAST486_FPU_DATA_REG FirstOperand, PCFAST486_FPU_DATA_REG SecondOperand, PFAST486_FPU_DATA_REG Result)
static VOID FASTCALL Fast486FpuFromSingleReal(PFAST486_STATE State, ULONG Value, PFAST486_FPU_DATA_REG Result)
static const FAST486_FPU_DATA_REG FpuHalfPi
static BOOLEAN FASTCALL Fast486FpuSaveEnvironment(PFAST486_STATE State, INT Segment, ULONG Address, BOOLEAN Size)
static const FAST486_FPU_DATA_REG FpuInverseNumberAtan[INVERSE_NUMBERS_COUNT]
static const FAST486_FPU_DATA_REG FpuPi
#define FPU_SAVE_LAST_OPERAND()
#define FPU_IS_POS_INF(x)
#define FPU_INDEFINITE_MANTISSA
#define FPU_REAL4_INDEFINITE
#define FPU_REAL8_INDEFINITE
#define FPU_UPDATE_TAG(i)
#define INVERSE_NUMBERS_COUNT
#define FPU_SAVE_LAST_INST()
#define FPU_REAL4_INFINITY
#define FPU_IS_NORMALIZED(x)
#define FPU_SET_TAG(i, t)
#define FPU_IS_INDEFINITE(x)
#define FPU_IS_NEG_INF(x)
#define FPU_REAL8_INFINITY
#define FPU_IS_INFINITY(x)
#define FPU_MANTISSA_HIGH_BIT
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
__GNU_EXTENSION typedef unsigned __int64 * PULONGLONG
#define UNREFERENCED_PARAMETER(P)
__GNU_EXTENSION typedef __int64 * PLONGLONG
_In_opt_ PENTER_STATE_SYSTEM_HANDLER _In_opt_ PVOID _In_ LONG _In_opt_ LONG volatile * Number
#define FAST486_OPCODE_HANDLER(x)
BOOLEAN FASTCALL Fast486WriteMemory(PFAST486_STATE State, FAST486_SEG_REGS SegmentReg, ULONG Offset, PVOID Buffer, ULONG Size)
BOOLEAN FASTCALL Fast486ReadMemory(PFAST486_STATE State, FAST486_SEG_REGS SegmentReg, ULONG Offset, BOOLEAN InstFetch, PVOID Buffer, ULONG Size)
PULONG MinorVersion OPTIONAL
FAST486_GEN_REGS SecondRegister
FAST486_GEN_REGS Register
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
_In_ LARGE_INTEGER Divisor
_In_ LARGE_INTEGER _Out_opt_ PLARGE_INTEGER Remainder