diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2022-04-17 10:36:52 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2022-04-17 10:36:52 +0200 |
| commit | 74b99b52ee801bd91676897043d8a52040bc4fec (patch) | |
| tree | 864f81e55babf077768fdafe003ed4e9a389c1b6 | |
| parent | c7b573dcffaf1074ac382f8b98b6c3a1d5bb2573 (diff) | |
| download | box64-74b99b52ee801bd91676897043d8a52040bc4fec.tar.gz box64-74b99b52ee801bd91676897043d8a52040bc4fec.zip | |
[DYNAREC] Added 0F AE /7 opcode
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_0f.c | 9 | ||||
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_functions.c | 5 | ||||
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_functions.h | 1 |
3 files changed, 15 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_0f.c b/src/dynarec/arm64/dynarec_arm64_0f.c index 733eb5dd..23ef668f 100755 --- a/src/dynarec/arm64/dynarec_arm64_0f.c +++ b/src/dynarec/arm64/dynarec_arm64_0f.c @@ -1225,6 +1225,15 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STRw_U12(x4, ed, fixedaddress); } break; + case 7: + INST_NAME("CLFLUSH Ed"); + MESSAGE(LOG_DUMP, "Need Optimization?\n"); + GETED(0); + if(ed!=x1) { + MOVx_REG(x1, ed); + } + CALL_(arm_clflush, -1, 0); + break; default: DEFAULT; } diff --git a/src/dynarec/arm64/dynarec_arm64_functions.c b/src/dynarec/arm64/dynarec_arm64_functions.c index 900e2b7a..2ac2cc34 100755 --- a/src/dynarec/arm64/dynarec_arm64_functions.c +++ b/src/dynarec/arm64/dynarec_arm64_functions.c @@ -309,6 +309,11 @@ void arm_aese(x64emu_t* emu, int xmm) arm_aesmc(emu, xmm); } +void arm_clflush(x64emu_t* emu, void* p) +{ + cleanDBFromAddressRange((uintptr_t)p, 8, 0); +} + #define XMM0 0 #define XMM8 16 diff --git a/src/dynarec/arm64/dynarec_arm64_functions.h b/src/dynarec/arm64/dynarec_arm64_functions.h index bf6c270f..55d5c697 100755 --- a/src/dynarec/arm64/dynarec_arm64_functions.h +++ b/src/dynarec/arm64/dynarec_arm64_functions.h @@ -35,6 +35,7 @@ void arm_aesdlast(x64emu_t* emu, int xmm); void arm_aeselast(x64emu_t* emu, int xmm); void arm_aesimc(x64emu_t* emu, int xmm); +void arm_clflush(x64emu_t* emu, void* p); void arm_ud(x64emu_t* emu); |