mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-11-23 13:30:02 +00:00
Integer round inf/nan to INT_MAX/INT_MIN.
Instead of 0x80000000 (the default "invalid" value.) Improves the fpu test.
This commit is contained in:
parent
a537aa946d
commit
455431ba13
@ -866,13 +866,31 @@ namespace MIPSInt
|
||||
case 5: F(fd) = fabsf(F(fs)); break; //abs
|
||||
case 6: F(fd) = F(fs); break; //mov
|
||||
case 7: F(fd) = -F(fs); break; //neg
|
||||
case 12: FsI(fd) = (int)floorf(F(fs)+0.5f); break; //round.w.s
|
||||
case 13: FsI(fd) = F(fs)>=0 ? (int)floorf(F(fs)) : (int)ceilf(F(fs)); break;//trunc.w.s
|
||||
case 14: FsI(fd) = (int)ceilf (F(fs)); break; //ceil.w.s
|
||||
case 15: FsI(fd) = (int)floorf(F(fs)); break; //floor.w.s
|
||||
case 12:
|
||||
case 13:
|
||||
case 14:
|
||||
case 15:
|
||||
if (my_isinf(F(fs)) || my_isnan(F(fs)))
|
||||
{
|
||||
FsI(fd) = my_isinf(F(fs)) && F(fs) < 0.0f ? -2147483648LL : 2147483647LL;
|
||||
break;
|
||||
}
|
||||
switch (op & 0x3f)
|
||||
{
|
||||
case 12: FsI(fd) = (int)floorf(F(fs)+0.5f); break; //round.w.s
|
||||
case 13: FsI(fd) = F(fs)>=0 ? (int)floorf(F(fs)) : (int)ceilf(F(fs)); break;//trunc.w.s
|
||||
case 14: FsI(fd) = (int)ceilf (F(fs)); break; //ceil.w.s
|
||||
case 15: FsI(fd) = (int)floorf(F(fs)); break; //floor.w.s
|
||||
}
|
||||
break;
|
||||
case 32: F(fd) = (float)FsI(fs); break; //cvt.s.w
|
||||
|
||||
case 36:
|
||||
if (my_isinf(F(fs)) || my_isnan(F(fs)))
|
||||
{
|
||||
FsI(fd) = my_isinf(F(fs)) && F(fs) < 0.0f ? -2147483648LL : 2147483647LL;
|
||||
break;
|
||||
}
|
||||
switch (currentMIPS->fcr31 & 3)
|
||||
{
|
||||
case 0: FsI(fd) = (int)round_ieee_754(F(fs)); break; // RINT_0
|
||||
|
Loading…
Reference in New Issue
Block a user