diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-04-24 11:15:06 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-04-24 11:15:06 +0200 |
| commit | e059506d5e4a90a216094787f396f8ce058e7c21 (patch) | |
| tree | 5b4ba8ea8540dec9ecb219b2677bcca9c389aea1 /src | |
| parent | 6da3a1265dc3cf5aeef985ffc1823ffb18c31a21 (diff) | |
| download | box64-e059506d5e4a90a216094787f396f8ce058e7c21.tar.gz box64-e059506d5e4a90a216094787f396f8ce058e7c21.zip | |
[ARM64_DYNAREC] Small iùprovments to some (V)MOVQ opcodes
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_6664.c | 3 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_67_avx.c | 9 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_avx_66_0f.c | 9 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c | 2 |
4 files changed, 12 insertions, 11 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_6664.c b/src/dynarec/arm64/dynarec_arm64_6664.c index 465e7fd6..bf754f63 100644 --- a/src/dynarec/arm64/dynarec_arm64_6664.c +++ b/src/dynarec/arm64/dynarec_arm64_6664.c @@ -113,8 +113,7 @@ uintptr_t dynarec64_6664(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n grab_segdata(dyn, addr, ninst, x4, seg, (MODREG)); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<3, 7, rex, NULL, 0, 0); ADDz_REG(x4, x4, ed); - ed = x4; - VST64(v0, ed, fixedaddress); + VST64(v0, x4, fixedaddress); SMWRITE(); } break; diff --git a/src/dynarec/arm64/dynarec_arm64_67_avx.c b/src/dynarec/arm64/dynarec_arm64_67_avx.c index 08355bbe..39a3d113 100644 --- a/src/dynarec/arm64/dynarec_arm64_67_avx.c +++ b/src/dynarec/arm64/dynarec_arm64_67_avx.c @@ -116,12 +116,13 @@ uintptr_t dynarec64_67_AVX(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int GETG; v0 = sse_get_reg(dyn, ninst, x1, gd, 0); if(MODREG) { - v1 = sse_get_reg_empty(dyn, ninst, x1, (nextop&7)+(rex.b<<3)); + ed = (nextop&7)+(rex.b<<3); + v1 = sse_get_reg_empty(dyn, ninst, x1, ed); VMOV(v1, v0); - YMM0((nextop&7)+(rex.b<<3)); + YMM0(ed); } else { - addr = geted32(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0xfff<<3, 7, rex, NULL, 0, 0); - VSTR64_U12(v0, ed, fixedaddress); + addr = geted32(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<3, 7, rex, NULL, 0, 0); + VST64(v0, ed, fixedaddress); } break; diff --git a/src/dynarec/arm64/dynarec_arm64_avx_66_0f.c b/src/dynarec/arm64/dynarec_arm64_avx_66_0f.c index cb2cc235..5fa954c0 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_66_0f.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_66_0f.c @@ -1408,12 +1408,13 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, GETG; v0 = sse_get_reg(dyn, ninst, x1, gd, 0); if(MODREG) { - v1 = sse_get_reg_empty(dyn, ninst, x1, (nextop&7)+(rex.b<<3)); + ed = (nextop&7)+(rex.b<<3); + v1 = sse_get_reg_empty(dyn, ninst, x1, ed); VMOV(v1, v0); - YMM0((nextop&7)+(rex.b<<3)); + YMM0(ed); } else { - addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0xfff<<3, 7, rex, NULL, 0, 0); - VSTR64_U12(v0, ed, fixedaddress); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<3, 7, rex, NULL, 0, 0); + VST64(v0, ed, fixedaddress); SMWRITE2(); } break; diff --git a/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c b/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c index 36ff5f76..93a7ba2a 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c @@ -488,7 +488,7 @@ uintptr_t dynarec64_AVX_F3_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, break; case 0x7E: - INST_NAME("MOVQ Gx, Ex"); + INST_NAME("VMOVQ Gx, Ex"); nextop = F8; if(MODREG) { v1 = sse_get_reg(dyn, ninst, x1, (nextop&7) + (rex.b<<3), 0); |