Author: aandrejevic
Date: Tue Jul 14 23:15:46 2015
New Revision: 68399
URL:
http://svn.reactos.org/svn/reactos?rev=68399&view=rev
Log:
[FAST486]
In FPREM and FPREM1, copy the lowest 3 bits of the quotient
into C1, C3 and C0 (in that order!).
Modified:
trunk/reactos/lib/fast486/fpu.c
Modified: trunk/reactos/lib/fast486/fpu.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/fast486/fpu.c?rev=6839…
==============================================================================
--- trunk/reactos/lib/fast486/fpu.c [iso-8859-1] (original)
+++ trunk/reactos/lib/fast486/fpu.c [iso-8859-1] Tue Jul 14 23:15:46 2015
@@ -2419,6 +2419,8 @@
/* FPREM1 */
case 0x35:
{
+ LONGLONG Quotient;
+
Fast486FpuExceptionCheck(State);
FPU_SAVE_LAST_INST();
@@ -2428,8 +2430,15 @@
break;
}
- Fast486FpuRemainder(State, &FPU_ST(0), &FPU_ST(1), TRUE,
&FPU_ST(0), NULL);
- FPU_UPDATE_TAG(0);
+ if (Fast486FpuRemainder(State, &FPU_ST(0), &FPU_ST(1), TRUE,
&FPU_ST(0), &Quotient))
+ {
+ FPU_UPDATE_TAG(0);
+
+ /* Return the lowest 3 bits of the quotient in C1, C3, C0 */
+ State->FpuStatus.Code1 = Quotient & 1;
+ State->FpuStatus.Code3 = (Quotient >> 1) & 1;
+ State->FpuStatus.Code0 = (Quotient >> 2) & 1;
+ }
break;
}
@@ -2451,6 +2460,8 @@
/* FPREM */
case 0x38:
{
+ LONGLONG Quotient;
+
Fast486FpuExceptionCheck(State);
FPU_SAVE_LAST_INST();
@@ -2460,8 +2471,15 @@
break;
}
- Fast486FpuRemainder(State, &FPU_ST(0), &FPU_ST(1), FALSE,
&FPU_ST(0), NULL);
- FPU_UPDATE_TAG(0);
+ if (Fast486FpuRemainder(State, &FPU_ST(0), &FPU_ST(1), FALSE,
&FPU_ST(0), &Quotient))
+ {
+ FPU_UPDATE_TAG(0);
+
+ /* Return the lowest 3 bits of the quotient in C1, C3, C0 */
+ State->FpuStatus.Code1 = Quotient & 1;
+ State->FpuStatus.Code3 = (Quotient >> 1) & 1;
+ State->FpuStatus.Code0 = (Quotient >> 2) & 1;
+ }
break;
}