Added FENI/FDISI for 8087.

This commit is contained in:
SarahW 2020-01-24 20:33:59 +00:00
commit ea4dd4047c
2 changed files with 31 additions and 2 deletions

View file

@ -10,6 +10,8 @@ static int rounding_modes[4] = {FE_TONEAREST, FE_DOWNWARD, FE_UPWARD, FE_TOWARDZ
#define STATUS_ZERODIVIDE 4
#define FPCW_DISI (1 << 7)
#define x87_div(dst, src1, src2) do \
{ \
if (((double)src2) == 0.0) \
@ -639,7 +641,7 @@ OpFn OP_TABLE(fpu_db_a16)[256] =
ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
ILLEGAL, opFNOP, opFCLEX, opFINIT, opFNOP, opFNOP, ILLEGAL, ILLEGAL,
opFENI, opFDISI, opFCLEX, opFINIT, opFNOP, opFNOP, ILLEGAL, ILLEGAL,
ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
@ -679,7 +681,7 @@ OpFn OP_TABLE(fpu_db_a32)[256] =
ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
ILLEGAL, opFNOP, opFCLEX, opFINIT, opFNOP, opFNOP, ILLEGAL, ILLEGAL,
opFENI, opFDISI, opFCLEX, opFINIT, opFNOP, opFNOP, ILLEGAL, ILLEGAL,
ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,
ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL, ILLEGAL,

View file

@ -1,3 +1,30 @@
static int opFDISI(uint32_t fetchdat)
{
FP_ENTER();
cpu_state.pc++;
if (fpu_type == FPU_8087)
{
cpu_state.npxc |= FPCW_DISI;
CLOCK_CYCLES(x87_timings.fdisi_eni);
}
else
CLOCK_CYCLES(x87_timings.fnop);
return 0;
}
static int opFENI(uint32_t fetchdat)
{
FP_ENTER();
cpu_state.pc++;
if (fpu_type == FPU_8087)
{
cpu_state.npxc &= ~FPCW_DISI;
CLOCK_CYCLES(x87_timings.fdisi_eni);
}
else
CLOCK_CYCLES(x87_timings.fnop);
return 0;
}
static int opFSTSW_AX(uint32_t fetchdat)
{
FP_ENTER();