about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-03-17 15:30:52 +0100
committerptitSeb <sebastien.chev@gmail.com>2025-03-17 15:30:52 +0100
commit7f23664566370bd040840daa83f759e0dd507b27 (patch)
treea0e98ce35b15a72c6744d07d3aa6a0b7c2a03025 /src
parentd555d9661f869b616c423e8b4c0f7eced242b4d6 (diff)
downloadbox64-7f23664566370bd040840daa83f759e0dd507b27.tar.gz
box64-7f23664566370bd040840daa83f759e0dd507b27.zip
[ARM64_DYNAREC] Added some missing SMWRITE2 for strongmem=2 on a few AVX opcodes
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_avx_66_0f.c1
-rw-r--r--src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c3
-rw-r--r--src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c5
3 files changed, 9 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_avx_66_0f.c b/src/dynarec/arm64/dynarec_arm64_avx_66_0f.c
index e14225d7..eec6e087 100644
--- a/src/dynarec/arm64/dynarec_arm64_avx_66_0f.c
+++ b/src/dynarec/arm64/dynarec_arm64_avx_66_0f.c
@@ -1383,6 +1383,7 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip,
             } else {
                 addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0xfff<<3, 7, rex, NULL, 0, 0);
                 VSTR64_U12(v0, ed, fixedaddress);
+                SMWRITE2();
             }
             break;
         case 0xD7:
diff --git a/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c b/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c
index a62d2e08..2326903f 100644
--- a/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c
+++ b/src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c
@@ -855,6 +855,7 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip
                     VST1_32(v0, 3, ed);
                 }
             }
+            if(!MODREG) {SMWRITE2();}
             break;
         case 0x2F:
             INST_NAME("VMASKMOVPD Ex, Gx, Vx");
@@ -905,6 +906,7 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip
                     VST1_64(v0, 1, ed);
                 }
             }
+            if(!MODREG) {SMWRITE2();}
             break;
         case 0x30:
             INST_NAME("VPMOVZXBW Gx, Ex");
@@ -1399,6 +1401,7 @@ uintptr_t dynarec64_AVX_66_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip
                     }
                 }
             }
+            if(!MODREG) {SMWRITE2();}
             // no raz of upper ymm
             break;
 
diff --git a/src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c b/src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c
index 1096b528..fcff05c7 100644
--- a/src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c
+++ b/src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c
@@ -384,6 +384,7 @@ uintptr_t dynarec64_AVX_66_0F3A(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip
             VMOVBto(ed, v0, u8&0x0f);
             if(!MODREG) {
                 STB(ed, wback, fixedaddress);
+                SMWRITE2();
             }
             break;
         case 0x15:
@@ -401,6 +402,7 @@ uintptr_t dynarec64_AVX_66_0F3A(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip
             VMOVHto(ed, v0, u8&7);
             if(!MODREG) {
                 STH(ed, wback, fixedaddress);
+                SMWRITE2();
             }
             break;
         case 0x16:
@@ -422,6 +424,7 @@ uintptr_t dynarec64_AVX_66_0F3A(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip
             }
             if(!MODREG) {
                 STxw(ed, wback, fixedaddress);
+                SMWRITE2();
             }
             break;
         case 0x17:
@@ -439,6 +442,7 @@ uintptr_t dynarec64_AVX_66_0F3A(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip
             VMOVSto(ed, v0, u8&3);
             if(!MODREG) {
                 STW(ed, wback, fixedaddress);
+                SMWRITE2();
             }
             break;
         case 0x18:
@@ -485,6 +489,7 @@ uintptr_t dynarec64_AVX_66_0F3A(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip
             } else {
                 addr = geted(dyn, addr, ninst, nextop, &ed, x3, &fixedaddress, &unscaled, 0xfff<<4, 15, rex, NULL, 0, 1);
                 VST128(v0, ed, fixedaddress);
+                SMWRITE2();
             }
             F8; // read u8, but it's been already handled
             break;