diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-01-05 14:57:24 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-01-05 14:57:24 +0100 |
| commit | 5a35184ba7d01636323eee763717db9f2781ff5a (patch) | |
| tree | 2e1cc009bd433913485a2419db17f8bf6c2d8735 /src/dynarec | |
| parent | db801da6580e8a187350e37c39ba69507e5b470c (diff) | |
| download | box64-5a35184ba7d01636323eee763717db9f2781ff5a.tar.gz box64-5a35184ba7d01636323eee763717db9f2781ff5a.zip | |
[INTERPRETER] Added a few more cpu extension and associated opcodes ([ARM64_DYNAREC] added some of the new opcodes too)
Diffstat (limited to 'src/dynarec')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_0f.c | 5 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_660f.c | 32 |
2 files changed, 36 insertions, 1 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_0f.c b/src/dynarec/arm64/dynarec_arm64_0f.c index 058478c6..6d5907f7 100644 --- a/src/dynarec/arm64/dynarec_arm64_0f.c +++ b/src/dynarec/arm64/dynarec_arm64_0f.c @@ -2468,6 +2468,11 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin IFX(X_CF) { BFIw(xFlags, x3, F_CF, 1); } MOVxw_REG(ed, x1); break; + case 7: + INST_NAME("RDPID Ed"); + GETED(0); + CALL_(helper_getcpu, ed, x2); + break; default: DEFAULT; } else switch((nextop>>3)&7) { diff --git a/src/dynarec/arm64/dynarec_arm64_660f.c b/src/dynarec/arm64/dynarec_arm64_660f.c index 0f336876..f2184f58 100644 --- a/src/dynarec/arm64/dynarec_arm64_660f.c +++ b/src/dynarec/arm64/dynarec_arm64_660f.c @@ -2455,7 +2455,37 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n emit_shrd16(dyn, ninst, ed, gd, x4, x5, x6); EWBACK; break; - + case 0xAE: + nextop = F8; + if(MODREG) + switch (nextop) { + default: + DEFAULT; + } + else + switch((nextop>>3)&7) { + case 6: + INST_NAME("CLWB Ed"); + MESSAGE(LOG_DUMP, "Need Optimization?\n"); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); + if(ed!=x1) { + MOVx_REG(x1, ed); + } + CALL_(native_clflush, -1, 0); + break; + case 7: + INST_NAME("CLFLUSHOPT Ed"); + MESSAGE(LOG_DUMP, "Need Optimization?\n"); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); + if(ed!=x1) { + MOVx_REG(x1, ed); + } + CALL_(native_clflush, -1, 0); + break; + default: + DEFAULT; + } + break; case 0xAF: INST_NAME("IMUL Gw,Ew"); SETFLAGS(X_ALL, SF_SET); |