interp: Correct vrndf2 range.

This seems more likely to be how the hardware works, given the range of
values.
This commit is contained in:
Unknown W. Brackets 2021-12-11 09:48:02 -08:00
parent 818f33d979
commit de2481f367

View file

@ -1549,10 +1549,11 @@ namespace MIPSInt
VectorSize sz = GetVecSize(op);
int n = GetNumVectorElements(sz);
for (int i = 0; i < n; i++) {
// TODO: Make more accurate, use and update RCX regs?
switch ((op >> 16) & 0x1f) {
case 1: d.u[i] = currentMIPS->rng.R32(); break; // vrndi
case 2: d.f[i] = 1.0f + ((float)currentMIPS->rng.R32() / 0xFFFFFFFF); break; // vrndf1 TODO: make more accurate
case 3: d.f[i] = 2.0f + 2 * ((float)currentMIPS->rng.R32() / 0xFFFFFFFF); break; // vrndf2 TODO: make more accurate
case 2: d.u[i] = 0x3F800000 | (currentMIPS->rng.R32() & 0x007FFFFF); break; // vrndf1 (>= 1, < 2)
case 3: d.u[i] = 0x40000000 | (currentMIPS->rng.R32() & 0x007FFFFF); break; // vrndf2 (>= 2, < 4)
default: _dbg_assert_msg_(false,"Trying to interpret instruction that can't be interpreted");
}
}