about summary refs log tree commit diff stats
path: root/src/dynarec
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2023-11-26 23:46:21 +0800
committerGitHub <noreply@github.com>2023-11-26 16:46:21 +0100
commit6ad9435b4d5720c70fed6e0ade85cb56f9be204d (patch)
tree0bc78ef0d6336a36da67a2749203acd53227fc91 /src/dynarec
parente853892282b5f43767ec4c1a4c6b12c8b9dfb553 (diff)
downloadbox64-6ad9435b4d5720c70fed6e0ade85cb56f9be204d.tar.gz
box64-6ad9435b4d5720c70fed6e0ade85cb56f9be204d.zip
[DYNAREC_RV64] Fixed BTS BTR BTC for zbs extension (#1084)
Diffstat (limited to 'src/dynarec')
-rw-r--r--src/dynarec/rv64/dynarec_rv64_0f.c3
1 files changed, 3 insertions, 0 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) {