diff options
Diffstat (limited to 'src/dynarec')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_0f.c | 6 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_0f.c | 6 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_0f.c b/src/dynarec/arm64/dynarec_arm64_0f.c index 0bb9dffc..8e8ec00e 100644 --- a/src/dynarec/arm64/dynarec_arm64_0f.c +++ b/src/dynarec/arm64/dynarec_arm64_0f.c @@ -98,6 +98,9 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { MRS_cntvct_el0(x1); } + if(box64_rdtsc_shift) { + LSLx(x1, x1, box64_rdtsc_shift); + } LSRx(xRDX, x1, 32); MOVw_REG(xRAX, x1); // wipe upper part MOVw_REG(xRCX, xZR); // IA32_TSC, 0 for now @@ -499,6 +502,9 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { MRS_cntvct_el0(x1); } + if(box64_rdtsc_shift) { + LSLx(x1, x1, box64_rdtsc_shift); + } LSRx(xRDX, x1, 32); MOVw_REG(xRAX, x1); // wipe upper part break; diff --git a/src/dynarec/rv64/dynarec_rv64_0f.c b/src/dynarec/rv64/dynarec_rv64_0f.c index bfe29a2c..d19ecd4e 100644 --- a/src/dynarec/rv64/dynarec_rv64_0f.c +++ b/src/dynarec/rv64/dynarec_rv64_0f.c @@ -87,6 +87,9 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } else { CSRRS(x3, xZR, 0xC01); // RDTIME } + if(box64_rdtsc_shift) { + SRLI(x3, x3, box64_rdtsc_shift); + } SRLI(xRDX, x3, 32); AND(xRAX, x3, xMASK); // wipe upper part MV(xRCX, xZR); // IA32_TSC, 0 for now @@ -412,6 +415,9 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } else { CSRRS(x3, xZR, 0xC01); // RDTIME } + if(box64_rdtsc_shift) { + SRLI(x3, x3, box64_rdtsc_shift); + } SRLI(xRDX, x3, 32); AND(xRAX, x3, xMASK); // wipe upper part break; |