}
}
if (warned > 0) {
- write_log (_T("FPU unimplemented instruction: OP=%04X-%04X EA=%08X PC=%08X\n"),
- opcode, extra, ea, oldpc);
+ write_log (_T("FPU unimplemented instruction: OP=%04X-%04X SRC=%08X-%08X-%08X EA=%08X PC=%08X\n"),
+ opcode, extra, fsave_data.et[0],fsave_data.et[1],fsave_data.et[2], ea, oldpc);
#if EXCEPTION_FPP == 0
warned--;
#endif
}
}
if (warned > 0) {
- write_log (_T("FPU unimplemented datatype (%s): OP=%04X-%04X EA=%08X PC=%08X\n"),
- packed ? _T("packed") : _T("denormal"), opcode, extra, ea, oldpc);
+ write_log (_T("FPU unimplemented datatype (%s): OP=%04X-%04X SRC=%08X-%08X-%08X EA=%08X PC=%08X\n"),
+ packed ? "packed" : "denormal", opcode, extra,
+ packed ? fsave_data.fpt[2] : fsave_data.et[0], fsave_data.et[1], fsave_data.et[2], ea, oldpc);
#if EXCEPTION_FPP == 0
warned--;
#endif
return false;
if (fpp_is_unnormal(src) || fpp_is_denormal(src)) {
if (currprefs.cpu_model >= 68040 && currprefs.fpu_model && currprefs.fpu_no_unimplemented) {
- fp_unimp_datatype(opcode, extra, ea, oldpc, src, NULL);
- return true;
+ if (fpp_is_zero(src)) {
+ fpp_normalize(src); // 68040/060 can only fix unnormal zeros
+ } else {
+ fp_unimp_datatype(opcode, extra, ea, oldpc, src, NULL);
+ return true;
+ }
} else {
fpp_normalize(src);
}
return false;
if (fpp_is_unnormal(dst) || fpp_is_denormal(dst)) {
if (currprefs.cpu_model >= 68040 && currprefs.fpu_model && currprefs.fpu_no_unimplemented) {
- fp_unimp_datatype(opcode, extra, ea, oldpc, src, NULL);
- return true;
+ if (fpp_is_zero(dst)) {
+ fpp_normalize(dst); // 68040/060 can only fix unnormal zeros
+ } else {
+ fp_unimp_datatype(opcode, extra, ea, oldpc, src, NULL);
+ return true;
+ }
} else {
fpp_normalize(dst);
}
#if DEBUG_FPP
if (!isinrom ())
- write_log (_T("PUTFP: %f %04X %04X\n"), value, opcode, extra);
+ write_log (_T("PUTFP: %04X %04X\n"), opcode, extra);
#endif
#if 0
if (!(extra & 0x4000)) {
uae_u32 d;
regs.fp_exception = false;
+
#if DEBUG_FPP
if (!isinrom ())
write_log (_T("frestore_opp at %08x\n"), m68k_getpc ());