about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-04-24 11:15:06 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-04-24 11:15:06 +0200
commite059506d5e4a90a216094787f396f8ce058e7c21 (patch)
tree5b4ba8ea8540dec9ecb219b2677bcca9c389aea1 /src
parent6da3a1265dc3cf5aeef985ffc1823ffb18c31a21 (diff)
downloadbox64-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.c3
-rw-r--r--src/dynarec/arm64/dynarec_arm64_67_avx.c9
-rw-r--r--src/dynarec/arm64/dynarec_arm64_avx_66_0f.c9
-rw-r--r--src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c2
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);