From 33cbfd32178653e2e1782efa59db91d8f64bc217 Mon Sep 17 00:00:00 2001 From: Aleksandar Andrejevic Date: Tue, 14 Jul 2015 23:15:46 +0000 Subject: [PATCH] [FAST486] In FPREM and FPREM1, copy the lowest 3 bits of the quotient into C1, C3 and C0 (in that order!). svn path=/trunk/; revision=68399 --- reactos/lib/fast486/fpu.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/reactos/lib/fast486/fpu.c b/reactos/lib/fast486/fpu.c index ad6b1282a39..fd81b3a276a 100644 --- a/reactos/lib/fast486/fpu.c +++ b/reactos/lib/fast486/fpu.c @@ -2419,6 +2419,8 @@ FAST486_OPCODE_HANDLER(Fast486FpuOpcodeD9) /* FPREM1 */ case 0x35: { + LONGLONG Quotient; + Fast486FpuExceptionCheck(State); FPU_SAVE_LAST_INST(); @@ -2428,8 +2430,15 @@ FAST486_OPCODE_HANDLER(Fast486FpuOpcodeD9) 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 @@ FAST486_OPCODE_HANDLER(Fast486FpuOpcodeD9) /* FPREM */ case 0x38: { + LONGLONG Quotient; + Fast486FpuExceptionCheck(State); FPU_SAVE_LAST_INST(); @@ -2460,8 +2471,15 @@ FAST486_OPCODE_HANDLER(Fast486FpuOpcodeD9) 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; }