diff options
Diffstat (limited to 'src/devices/cpu/mips/r4000.cpp')
-rw-r--r-- | src/devices/cpu/mips/r4000.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/devices/cpu/mips/r4000.cpp b/src/devices/cpu/mips/r4000.cpp index 899f48c7877..7aedc9054e1 100644 --- a/src/devices/cpu/mips/r4000.cpp +++ b/src/devices/cpu/mips/r4000.cpp @@ -1793,8 +1793,12 @@ void r4000_base_device::cp1_execute(u32 const op) break; case 0x05: // ABS.S if ((SR & SR_FR) || !(op & ODD_REGS)) + { if (f32_lt(float32_t{ u32(m_f[FSREG]) }, float32_t{ 0 })) cp1_set(FDREG, f32_mul(float32_t{ u32(m_f[FSREG]) }, i32_to_f32(-1)).v); + else + m_f[FDREG] = m_f[FSREG]; + } break; case 0x06: // MOV.S if ((SR & SR_FR) || !(op & ODD_REGS)) @@ -2077,8 +2081,12 @@ void r4000_base_device::cp1_execute(u32 const op) break; case 0x05: // ABS.D if ((SR & SR_FR) || !(op & ODD_REGS)) + { if (f64_lt(float64_t{ m_f[FSREG] }, float64_t{ 0 })) cp1_set(FDREG, f64_mul(float64_t{ m_f[FSREG] }, i32_to_f64(-1)).v); + else + m_f[FDREG] = m_f[FSREG]; + } break; case 0x06: // MOV.D if ((SR & SR_FR) || !(op & ODD_REGS)) |