diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-04-30 17:50:44 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-04-30 17:50:44 +0200 |
| commit | 56982e4c057f86825052ffb1db14209d800193d1 (patch) | |
| tree | eb2b8ab5cb9fce41eaa644d0240e8ddd8c26a8ab /src | |
| parent | f5e93a14a2a9a7af56ad3685000c0f4d6df04a88 (diff) | |
| download | box64-56982e4c057f86825052ffb1db14209d800193d1.tar.gz box64-56982e4c057f86825052ffb1db14209d800193d1.zip | |
[ARM64_DYNAREC] Small rework on VFMAD*S[S/D] opcodes
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c b/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c index 05732a8b..c660e243 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c @@ -1547,12 +1547,13 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip nextop = F8; GETGX(v0, 1); GETVX(v2, 0); - if(rex.w) {GETEXSD(v1, 0, 0);} else {GETEXSS(v1, 0, 0);} q0 = fpu_get_scratch(dyn, ninst); if(rex.w) { + GETEXSD(v1, 0, 0); FMADD_64(q0, v2, v1, v0); VMOVeD(v0, 0, q0, 0); } else { + GETEXSS(v1, 0, 0); FMADD_32(q0, v2, v1, v0); VMOVeS(v0, 0, q0, 0); } @@ -1670,12 +1671,13 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip nextop = F8; GETGX(v0, 1); GETVX(v2, 0); - if(rex.w) {GETEXSD(v1, 0, 0);} else {GETEXSS(v1, 0, 0);} q0 = fpu_get_scratch(dyn, ninst); if(rex.w) { + GETEXSD(v1, 0, 0); FMADD_64(q0, v1, v0, v2); VMOVeD(v0, 0, q0, 0); } else { + GETEXSS(v1, 0, 0); FMADD_32(q0, v1, v0, v2); VMOVeS(v0, 0, q0, 0); } @@ -1842,12 +1844,13 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip nextop = F8; GETGX(v0, 1); GETVX(v2, 0); - if(rex.w) {GETEXSD(v1, 0, 0);} else {GETEXSS(v1, 0, 0);} q0 = fpu_get_scratch(dyn, ninst); if(rex.w) { + GETEXSD(v1, 0, 0); FMADD_64(q0, v0, v1, v2); VMOVeD(v0, 0, q0, 0); } else { + GETEXSS(v1, 0, 0); FMADD_32(q0, v0, v1, v2); VMOVeS(v0, 0, q0, 0); } |