From 6ad9435b4d5720c70fed6e0ade85cb56f9be204d Mon Sep 17 00:00:00 2001 From: Yang Liu Date: Sun, 26 Nov 2023 23:46:21 +0800 Subject: [DYNAREC_RV64] Fixed BTS BTR BTC for zbs extension (#1084) --- src/dynarec/rv64/dynarec_rv64_0f.c | 3 +++ src/main.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/dynarec/rv64/dynarec_rv64_0f.c b/src/dynarec/rv64/dynarec_rv64_0f.c index 32211e31..ba40f297 100644 --- a/src/dynarec/rv64/dynarec_rv64_0f.c +++ b/src/dynarec/rv64/dynarec_rv64_0f.c @@ -1045,6 +1045,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ANDI(xFlags, xFlags, ~1); OR(xFlags, xFlags, x4); ADDI(x3, xZR, 1); + ANDI(x2, gd, rex.w ? 0x3f : 0x1f); SLL(x3, x3, x2); OR(ed, ed, x3); if (wback) { @@ -1190,6 +1191,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ANDI(xFlags, xFlags, ~1); OR(xFlags, xFlags, x4); ADDI(x5, xZR, 1); + ANDI(x2, gd, rex.w ? 0x3f : 0x1f); SLL(x5, x5, x2); NOT(x5, x5); AND(ed, ed, x5); @@ -1351,6 +1353,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ANDI(xFlags, xFlags, ~1); OR(xFlags, xFlags, x4); ADDI(x3, xZR, 1); + ANDI(x2, gd, rex.w ? 0x3f : 0x1f); SLL(x3, x3, x2); XOR(ed, ed, x3); if (wback) { diff --git a/src/main.c b/src/main.c index 4fae8d7f..ddd918b4 100644 --- a/src/main.c +++ b/src/main.c @@ -1087,7 +1087,7 @@ void PrintHelp() { printf(" BOX64_TRACE with 1 to enable x86_64 execution trace\n"); printf(" or with XXXXXX-YYYYYY to enable x86_64 execution trace only between address\n"); printf(" or with FunctionName to enable x86_64 execution trace only in one specific function\n"); - printf(" use BOX64_TRACE_INIT instead of BOX_TRACE to start trace before init of Libs and main program\n\t (function name will probably not work then)\n"); + printf(" use BOX64_TRACE_INIT instead of BOX64_TRACE to start trace before init of Libs and main program\n\t (function name will probably not work then)\n"); printf(" BOX64_TRACE_EMM with 1 to enable dump of MMX registers along with regular registers\n"); printf(" BOX64_TRACE_XMM with 1 to enable dump of SSE registers along with regular registers\n"); printf(" BOX64_TRACE_COLOR with 1 to enable detection of changed general register values\n"); -- cgit 1.4.1