mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-11-14 18:19:36 +01:00
interp: Handle NaN better in vfpu_dot.
This commit is contained in:
1 parent
39017ea200
commit
08a894abde
1 file changed
+10
@@ -635,6 +635,7 @@ float vfpu_dot(float a[4], float b[4]) {
|
||||
uint32_t exps[4];
|
||||
int32_t mants[4];
|
||||
uint32_t max_exp = 0;
|
||||
uint32_t last_inf = 0;
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
exps[i] = get_uexp(intermed[i].i);
|
||||
@@ -643,6 +644,15 @@ float vfpu_dot(float a[4], float b[4]) {
|
||||
if (exps[i] > max_exp) {
|
||||
max_exp = exps[i];
|
||||
}
|
||||
if (exps[i] == 255) {
|
||||
bool diff_sign = last_inf && get_sign(last_inf) != get_sign(intermed[i].i);
|
||||
bool mant_nan = mants[i] != (0x00800000 << EXTRA_BITS);
|
||||
if (diff_sign || mant_nan) {
|
||||
intermed[0].i = 0x7F800001;
|
||||
return intermed[0].f;
|
||||
}
|
||||
last_inf = intermed[i].i;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t mant_sum = 0;
|
||||
|
||||
Reference in new issue
Block a user