diff --git a/src/x87_ops.h b/src/x87_ops.h index d871279..2681c63 100644 --- a/src/x87_ops.h +++ b/src/x87_ops.h @@ -330,7 +330,7 @@ OpFn OP_TABLE(fpu_d9_a16)[256] = opFCHS, opFABS, ILLEGAL, ILLEGAL, opFTST, opFXAM, ILLEGAL, ILLEGAL, opFLD1, opFLDL2T, opFLDL2E, opFLDPI, opFLDEG2, opFLDLN2, opFLDZ, ILLEGAL, opF2XM1, opFYL2X, opFPTAN, opFPATAN, ILLEGAL, ILLEGAL, opFDECSTP, opFINCSTP, - opFPREM, ILLEGAL, opFSQRT, opFSINCOS, opFRNDINT, opFSCALE, opFSIN, opFCOS + opFPREM, opFYL2XP1,opFSQRT, opFSINCOS, opFRNDINT, opFSCALE, opFSIN, opFCOS }; OpFn OP_TABLE(fpu_d9_a32)[256] = @@ -369,7 +369,7 @@ OpFn OP_TABLE(fpu_d9_a32)[256] = opFCHS, opFABS, ILLEGAL, ILLEGAL, opFTST, opFXAM, ILLEGAL, ILLEGAL, opFLD1, opFLDL2T, opFLDL2E, opFLDPI, opFLDEG2, opFLDLN2, opFLDZ, ILLEGAL, opF2XM1, opFYL2X, opFPTAN, opFPATAN, ILLEGAL, ILLEGAL, opFDECSTP, opFINCSTP, - opFPREM, ILLEGAL, opFSQRT, opFSINCOS, opFRNDINT, opFSCALE, opFSIN, opFCOS + opFPREM, opFYL2XP1,opFSQRT, opFSINCOS, opFRNDINT, opFSCALE, opFSIN, opFCOS }; OpFn OP_TABLE(fpu_da_a16)[256] = diff --git a/src/x87_ops_misc.h b/src/x87_ops_misc.h index 0a36178..6f099c1 100644 --- a/src/x87_ops_misc.h +++ b/src/x87_ops_misc.h @@ -465,6 +465,17 @@ static int opFYL2X(uint32_t fetchdat) return 0; } +static int opFYL2XP1(uint32_t fetchdat) +{ + FP_ENTER(); + pc++; + if (fplog) pclog("FYL2XP1\n"); + ST(1) = ST(1) * (log(ST(0)+1.0) / log(2.0)); + x87_pop(); + CLOCK_CYCLES(250); + return 0; +} + static int opFPTAN(uint32_t fetchdat) { FP_ENTER();