Fix FPU reporting, fixes #5033.

This commit is contained in:
OBattler
2024-12-14 00:59:52 +01:00
parent e2866a2909
commit 11b588c6bb
5 changed files with 17 additions and 28 deletions

View File

@@ -4,7 +4,6 @@
static int
opESCAPE_d8_a16(uint32_t fetchdat)
{
//pclog("D8 A16: fetchdat=%02x.\n", (fetchdat >> 3) & 0x1f);
return x86_opcodes_d8_a16[(fetchdat >> 3) & 0x1f](fetchdat);
}
static int
@@ -16,7 +15,6 @@ opESCAPE_d8_a32(uint32_t fetchdat)
static int
opESCAPE_d9_a16(uint32_t fetchdat)
{
//pclog("D9 A16: fetchdat=%02x.\n", fetchdat & 0xff);
return x86_opcodes_d9_a16[fetchdat & 0xff](fetchdat);
}
static int
@@ -28,7 +26,6 @@ opESCAPE_d9_a32(uint32_t fetchdat)
static int
opESCAPE_da_a16(uint32_t fetchdat)
{
//pclog("DA A16: fetchdat=%02x.\n", fetchdat & 0xff);
return x86_opcodes_da_a16[fetchdat & 0xff](fetchdat);
}
static int
@@ -40,7 +37,6 @@ opESCAPE_da_a32(uint32_t fetchdat)
static int
opESCAPE_db_a16(uint32_t fetchdat)
{
//pclog("DB A16: fetchdat=%02x.\n", fetchdat & 0xff);
return x86_opcodes_db_a16[fetchdat & 0xff](fetchdat);
}
static int
@@ -52,7 +48,6 @@ opESCAPE_db_a32(uint32_t fetchdat)
static int
opESCAPE_dc_a16(uint32_t fetchdat)
{
//pclog("DC A16: fetchdat=%02x.\n", (fetchdat >> 3) & 0x1f);
return x86_opcodes_dc_a16[(fetchdat >> 3) & 0x1f](fetchdat);
}
static int
@@ -64,7 +59,6 @@ opESCAPE_dc_a32(uint32_t fetchdat)
static int
opESCAPE_dd_a16(uint32_t fetchdat)
{
//pclog("DD A16: fetchdat=%02x.\n", fetchdat & 0xff);
return x86_opcodes_dd_a16[fetchdat & 0xff](fetchdat);
}
static int
@@ -76,7 +70,6 @@ opESCAPE_dd_a32(uint32_t fetchdat)
static int
opESCAPE_de_a16(uint32_t fetchdat)
{
//pclog("DE A16: fetchdat=%02x.\n", fetchdat & 0xff);
return x86_opcodes_de_a16[fetchdat & 0xff](fetchdat);
}
static int
@@ -88,7 +81,6 @@ opESCAPE_de_a32(uint32_t fetchdat)
static int
opESCAPE_df_a16(uint32_t fetchdat)
{
//pclog("DF A16: fetchdat=%02x.\n", fetchdat & 0xff);
return x86_opcodes_df_a16[fetchdat & 0xff](fetchdat);
}
static int
@@ -105,15 +97,13 @@ opWAIT(uint32_t fetchdat)
return 1;
}
#if 0
if (!cpu_use_dynarec && fpu_softfloat) {
#endif
if (fpu_softfloat) {
if (fpu_state.swd & FPU_SW_Summary) {
if (cr0 & 0x20) {
if (is486 && (cr0 & 0x20))
x86_int(16);
return 1;
}
else
picint(1 << 13);
return 1;
}
}
CLOCK_CYCLES(4);

View File

@@ -97,15 +97,10 @@ opWAIT(uint32_t fetchdat)
return 1;
}
#if 0
if (!cpu_use_dynarec && fpu_softfloat) {
#endif
if (fpu_softfloat) {
if (fpu_state.swd & FPU_SW_Summary) {
if (cr0 & 0x20) {
x86_int(16);
return 1;
}
picint(1 << 13);
return 1;
}
}
CLOCK_CYCLES(4);

View File

@@ -355,7 +355,10 @@ FPU_exception(uint32_t fetchdat, uint16_t exceptions, int store)
nmi = 1;
}
#else
picint(1 << 13);
if (is486 && (cr0 & 0x20))
x86_int(16);
else
picint(1 << 13);
#endif // FPU_8087
}
return unmasked;

View File

@@ -228,12 +228,10 @@ FPU_save_regi_tag(extFloat80_t reg, int tag, int stnr)
#define FPU_check_pending_exceptions() \
do { \
if (fpu_state.swd & FPU_SW_Summary) { \
if (cr0 & 0x20) { \
if (is486 && (cr0 & 0x20)) \
x86_int(16); \
return 1; \
} else { \
else \
picint(1 << 13); \
return 1; \
} \
return 1; \
} \
} while (0)

View File

@@ -99,7 +99,10 @@ typedef union {
dst = src1 / (double) src2; \
else { \
fpu_log("FPU : divide by zero\n"); \
picint(1 << 13); \
if (is486 && (cr0 & 0x20)) \
x86_int(16); \
else \
picint(1 << 13); \
return 1; \
} \
} else \