diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_avx_f2_0f.c | 8 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c | 20 |
2 files changed, 10 insertions, 18 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_avx_f2_0f.c b/src/dynarec/arm64/dynarec_arm64_avx_f2_0f.c index 067c324c..fb791452 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_f2_0f.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_f2_0f.c @@ -243,11 +243,11 @@ uintptr_t dynarec64_AVX_F2_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, GETEXSD(v1, 0, 0); GETGX_empty_VX(v0, v2); FCMPD(v2, v1); + FCSELD(d1, v2, v1, cLS); if(v0!=v2) { VMOVQ(v0, v2); } - B_NEXT(cLS); //Less than or equal - VMOVeD(v0, 0, v1, 0); // to not erase uper part + VMOVeD(v0, 0, d1, 0); // to not erase uper part YMM0(gd) break; case 0x5E: @@ -270,11 +270,11 @@ uintptr_t dynarec64_AVX_F2_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, GETEXSD(v1, 0, 0); GETGX_empty_VX(v0, v2); FCMPD(v2, v1); + FCSELD(d1, v2, v1, cGE); if(v0!=v2) { VMOVQ(v0, v2); } - B_NEXT(cGE); //Greater than or equal - VMOVeD(v0, 0, v1, 0); // to not erase uper part + VMOVeD(v0, 0, d1, 0); // to not erase uper part YMM0(gd) break; diff --git a/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c b/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c index 1f753dc4..47c6391d 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c @@ -304,16 +304,12 @@ uintptr_t dynarec64_AVX_F3_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, d1 = fpu_get_scratch(dyn, ninst); GETEXSS(v1, 0, 0); GETGX_empty_VX(v0, v2); + FCMPS(v2, v1); + FCSELS(d1, v2, v1, cLS); if(v0!=v2) { - if(v0==v1) { - VMOV(d1, v1); - v1 = d1; - } VMOVQ(v0, v2); } - FCMPS(v0, v1); - B_NEXT(cLS); //Less than or equal - VMOVeS(v0, 0, v1, 0); // to not erase uper part + VMOVeS(v0, 0, d1, 0); // to not erase uper part YMM0(gd) break; case 0x5E: @@ -335,16 +331,12 @@ uintptr_t dynarec64_AVX_F3_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, d1 = fpu_get_scratch(dyn, ninst); GETEXSS(v1, 0, 0); GETGX_empty_VX(v0, v2); + FCMPS(v2, v1); + FCSELS(d1, v2, v1, cGE); if(v0!=v2) { - if(v0==v1) { - VMOV(d1, v1); - v1 = d1; - } VMOVQ(v0, v2); } - FCMPS(v0, v1); - B_NEXT(cGE); //Greater than or equal - VMOVeS(v0, 0, v1, 0); // to not erase uper part + VMOVeS(v0, 0, d1, 0); // to not erase uper part YMM0(gd) break; |