diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-06-03 12:45:33 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-06-03 12:45:33 +0200 |
| commit | ac6a45383387789e94337cbf8f336d4c62b13262 (patch) | |
| tree | 49ce2a0db28a77872977f6b75445e4fe991b6085 /src | |
| parent | 307915130cb28ee48832d0cd580bd7aaf7cf4ba9 (diff) | |
| download | box64-ac6a45383387789e94337cbf8f336d4c62b13262.tar.gz box64-ac6a45383387789e94337cbf8f336d4c62b13262.zip | |
[ARM64_DYNAREC] Empty register needs to be fetched last
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c | 26 |
1 files changed, 9 insertions, 17 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c b/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c index ccf8c5f7..1f753dc4 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c @@ -209,8 +209,8 @@ uintptr_t dynarec64_AVX_F3_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, INST_NAME("VADDSS Gx, Vx, Ex"); nextop = F8; d1 = fpu_get_scratch(dyn, ninst); - GETGX_empty_VX(v0, v2); GETEXSS(v1, 0, 0); + GETGX_empty_VX(v0, v2); if(v0!=v2) { if(v0==v1) { VMOV(d1, v1); @@ -226,8 +226,8 @@ uintptr_t dynarec64_AVX_F3_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, INST_NAME("VMULSS Gx, Vx, Ex"); nextop = F8; d1 = fpu_get_scratch(dyn, ninst); - GETGX_empty_VX(v0, v2); GETEXSS(v1, 0, 0); + GETGX_empty_VX(v0, v2); if(v0!=v2) { if(v0==v1) { VMOV(d1, v1); @@ -243,8 +243,8 @@ uintptr_t dynarec64_AVX_F3_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, INST_NAME("VCVTSS2SD Gx, Vx, Ex"); nextop = F8; d1 = fpu_get_scratch(dyn, ninst); - GETGX_empty_VX(v0, v2); GETEXSS(v1, 0, 0); + GETGX_empty_VX(v0, v2); if(v0!=v2) { if(v0==v1) { VMOV(d1, v1); @@ -289,16 +289,12 @@ uintptr_t dynarec64_AVX_F3_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, INST_NAME("VSUBSS Gx, Vx, Ex"); nextop = F8; d1 = fpu_get_scratch(dyn, ninst); - GETGX_empty_VX(v0, v2); GETEXSS(v1, 0, 0); + GETGX_empty_VX(v0, v2); + FSUBS(d1, v2, v1); if(v0!=v2) { - if(v0==v1) { - VMOV(d1, v1); - v1 = d1; - } VMOVQ(v0, v2); } - FSUBS(d1, v0, v1); VMOVeS(v0, 0, d1, 0); YMM0(gd) break; @@ -306,8 +302,8 @@ uintptr_t dynarec64_AVX_F3_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, INST_NAME("VMINSS Gx, Vx, Ex"); nextop = F8; d1 = fpu_get_scratch(dyn, ninst); - GETGX_empty_VX(v0, v2); GETEXSS(v1, 0, 0); + GETGX_empty_VX(v0, v2); if(v0!=v2) { if(v0==v1) { VMOV(d1, v1); @@ -324,16 +320,12 @@ uintptr_t dynarec64_AVX_F3_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, INST_NAME("VDIVSS Gx, Vx, Ex"); nextop = F8; d1 = fpu_get_scratch(dyn, ninst); - GETGX_empty_VX(v0, v2); GETEXSS(v1, 0, 0); + GETGX_empty_VX(v0, v2); + FDIVS(d1, v2, v1); if(v0!=v2) { - if(v0==v1) { - VMOV(d1, v1); - v1 = d1; - } VMOVQ(v0, v2); } - FDIVS(d1, v0, v1); VMOVeS(v0, 0, d1, 0); YMM0(gd) break; @@ -341,8 +333,8 @@ uintptr_t dynarec64_AVX_F3_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, INST_NAME("VMAXSS Gx, Vx, Ex"); nextop = F8; d1 = fpu_get_scratch(dyn, ninst); - GETGX_empty_VX(v0, v2); GETEXSS(v1, 0, 0); + GETGX_empty_VX(v0, v2); if(v0!=v2) { if(v0==v1) { VMOV(d1, v1); |