diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-02-24 12:07:37 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-02-24 12:07:37 +0100 |
| commit | f8202096f1c4d8608809bc42f15fbd765e8c148b (patch) | |
| tree | 6e8f6fc38f7f5306f80aa7a81661c81e6a221797 /src | |
| parent | f470d552cfaed6a5c7ff97b8c26ed45503b423d2 (diff) | |
| download | box64-f8202096f1c4d8608809bc42f15fbd765e8c148b.tar.gz box64-f8202096f1c4d8608809bc42f15fbd765e8c148b.zip | |
Added 0F 01 F9 opcode ([ARM64_DYNAREC] too
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_0f.c | 12 | ||||
| -rw-r--r-- | src/emu/x64run0f.c | 10 |
2 files changed, 20 insertions, 2 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_0f.c b/src/dynarec/arm64/dynarec_arm64_0f.c index 309f9622..2b7892e5 100644 --- a/src/dynarec/arm64/dynarec_arm64_0f.c +++ b/src/dynarec/arm64/dynarec_arm64_0f.c @@ -90,6 +90,18 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin ed = xRAX+(nextop&7)+(rex.b<<3); MOV32w(ed, (1<<0) | (1<<4)); // only PE and ET set... break; + case 0xF9: + INST_NAME("RDTSCP"); + NOTEST(x1); + if(box64_rdtsc) { + CALL_(ReadTSC, x1, x3); + } else { + MRS_cntvct_el0(x1); + } + LSRx(xRDX, x1, 32); + MOVw_REG(xRAX, x1); // wipe upper part + MOVw_REG(xRCX, xZR); // IA32_TSC, 0 for now + break; default: DEFAULT; } else diff --git a/src/emu/x64run0f.c b/src/emu/x64run0f.c index e36376d5..f14b9dd5 100644 --- a/src/emu/x64run0f.c +++ b/src/emu/x64run0f.c @@ -105,6 +105,12 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) case 0xE7: /* SMSW Ew */ ED->word[0] = (1<<0) | (1<<4); // only PE and ET set... break; + case 0xF9: /* RDTSCP */ + tmp64u = ReadTSC(emu); + R_RAX = tmp64u & 0xffffffff; + R_RDX = tmp64u >> 32; + R_RCX = 0; // should be low of IA32_TSC + break; default: return 0; } else @@ -944,8 +950,8 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) GOCOND(0x80 , tmp32s = F32S; CHECK_FLAGS(emu); , addr += tmp32s; - ,,STEP3 - ) /* 0x80 -> 0x8F Jxx */ + ,, + ) /* 0x80 -> 0x8F Jxx */ //STEP3 GOCOND(0x90 , nextop = F8; CHECK_FLAGS(emu); GETEB(0); |