v60: implement correct rounding mode when converting float to integer (#13506)

This commit is contained in:
Matthew Daniels 2025-03-21 16:40:22 +00:00 committed by GitHub
parent 760ae70305
commit 53f391ff5e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -71,7 +71,13 @@ uint32_t v60_device::opCVTSW()
// Convert to uint32_t
val = u2f(m_op1);
m_modwritevalw = (uint32_t)(int64_t)val;
switch (TKCW & 7)
{
case 0: m_modwritevalw = (uint32_t)(int64_t)round(val); break;
case 1: m_modwritevalw = (uint32_t)(int64_t)floor(val); break;
case 2: m_modwritevalw = (uint32_t)(int64_t)ceil(val); break;
default: m_modwritevalw = (uint32_t)(int64_t)trunc(val); break;
}
_S = ((m_modwritevalw & 0x80000000) != 0);
_OV = (_S && val >= 0.0f) || (!_S && val <= -1.0f);