diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2023-11-26 23:46:21 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-26 16:46:21 +0100 |
| commit | 6ad9435b4d5720c70fed6e0ade85cb56f9be204d (patch) | |
| tree | 0bc78ef0d6336a36da67a2749203acd53227fc91 /src | |
| parent | e853892282b5f43767ec4c1a4c6b12c8b9dfb553 (diff) | |
| download | box64-6ad9435b4d5720c70fed6e0ade85cb56f9be204d.tar.gz box64-6ad9435b4d5720c70fed6e0ade85cb56f9be204d.zip | |
[DYNAREC_RV64] Fixed BTS BTR BTC for zbs extension (#1084)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_0f.c | 3 | ||||
| -rw-r--r-- | src/main.c | 2 |
2 files changed, 4 insertions, 1 deletions
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"); |