diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_0f.c | 6 | ||||
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_660f.c | 6 |
2 files changed, 4 insertions, 8 deletions
diff --git a/src/dynarec/la64/dynarec_la64_0f.c b/src/dynarec/la64/dynarec_la64_0f.c index cdaef719..4d0ea75e 100644 --- a/src/dynarec/la64/dynarec_la64_0f.c +++ b/src/dynarec/la64/dynarec_la64_0f.c @@ -686,10 +686,8 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni if (!BOX64ENV(dynarec_fastnan) && v0 != v1) { q0 = fpu_get_scratch(dyn); q1 = fpu_get_scratch(dyn); - VFCMP_S(q0, v1, v0, cUEQ); // un eq , if either v0/v1=nan ,choose v1. if eq either is ok,but when +0.0 == -0.0 x86 sse choose v1 - VFCMP_S(q1, v0, v1, cLT); - VOR_V(q0, q0, q1); - VBITSEL_V(v0, v0, v1, q0); + VFCMP_S(q0, v1, v0, cLT); // ~cLT = un ge eq, if either v0/v1=nan ,choose v1. if eq either is ok,but when +0.0 == -0.0 x86 sse choose v1 + VBITSEL_V(v0, v1, v0, q0); // swap v0 v1 => v1 v0 for ~cLT } else { VFMAX_S(v0, v0, v1); } diff --git a/src/dynarec/la64/dynarec_la64_660f.c b/src/dynarec/la64/dynarec_la64_660f.c index c32abbc0..8fe3981a 100644 --- a/src/dynarec/la64/dynarec_la64_660f.c +++ b/src/dynarec/la64/dynarec_la64_660f.c @@ -1388,10 +1388,8 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int if (!BOX64ENV(dynarec_fastnan) && v0 != v1) { q0 = fpu_get_scratch(dyn); q1 = fpu_get_scratch(dyn); - VFCMP_D(q0, v1, v0, cUEQ); // un eq , if either v0/v1=nan ,choose v1. if eq either is ok,but when +0.0 == -0.0 x86 sse choose v1 - VFCMP_D(q1, v0, v1, cLT); - VOR_V(q0, q0, q1); - VBITSEL_V(v0, v0, v1, q0); + VFCMP_D(q0, v1, v0, cLT); // ~cLT = un ge eq, if either v0/v1=nan ,choose v1. if eq either is ok,but when +0.0 == -0.0 x86 sse choose v1 + VBITSEL_V(v0, v1, v0, q0); // swap v0 v1 => v1 v0 for ~cLT } else { VFMAX_D(v0, v0, v1); } |