diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-03-17 15:30:52 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-03-17 15:30:52 +0100 |
| commit | 7f23664566370bd040840daa83f759e0dd507b27 (patch) | |
| tree | a0e98ce35b15a72c6744d07d3aa6a0b7c2a03025 /src | |
| parent | d555d9661f869b616c423e8b4c0f7eced242b4d6 (diff) | |
| download | box64-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.c | 1 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c | 3 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c | 5 |
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; |