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;
             }