about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2023-11-27 15:27:38 +0800
committerGitHub <noreply@github.com>2023-11-27 08:27:38 +0100
commitea64f8453f1694ae93fa9e5962738782a6d5553e (patch)
tree1ccb52d03022d0470b5c830199f19ee06d8df4d2 /src
parent507eb1c786681fcd5a235f01a60626d54929dd76 (diff)
downloadbox64-ea64f8453f1694ae93fa9e5962738782a6d5553e.tar.gz
box64-ea64f8453f1694ae93fa9e5962738782a6d5553e.zip
[DYNAREC_RV64] Fixed BTS BTR BTC again (#1090)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/rv64/dynarec_rv64_0f.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_0f.c b/src/dynarec/rv64/dynarec_rv64_0f.c
index ba40f297..0123927c 100644
--- a/src/dynarec/rv64/dynarec_rv64_0f.c
+++ b/src/dynarec/rv64/dynarec_rv64_0f.c
@@ -1035,7 +1035,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
             } else {
                 SMREAD();
                 addr = geted(dyn, addr, ninst, nextop, &wback, x3, x1, &fixedaddress, rex, NULL, 1, 0);
-                SRAI(x1, gd, 5 + rex.w);
+                SRAIxw(x1, gd, 5 + rex.w);
                 ADDSL(x3, wback, x1, 2 + rex.w, x1);
                 LDxw(x1, x3, fixedaddress);
                 ed = x1;
@@ -1044,10 +1044,10 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
             BEXT(x4, ed, gd, x2);
             ANDI(xFlags, xFlags, ~1);
             OR(xFlags, xFlags, x4);
-            ADDI(x3, xZR, 1);
+            ADDI(x4, xZR, 1);
             ANDI(x2, gd, rex.w ? 0x3f : 0x1f);
-            SLL(x3, x3, x2);
-            OR(ed, ed, x3);
+            SLL(x4, x4, x2);
+            OR(ed, ed, x4);
             if (wback) {
                 SDxw(ed, wback, fixedaddress);
                 SMWRITE();
@@ -1181,7 +1181,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
             } else {
                 SMREAD();
                 addr = geted(dyn, addr, ninst, nextop, &wback, x2, x1, &fixedaddress, rex, NULL, 1, 0);
-                SRAI(x1, gd, 5 + rex.w);
+                SRAIxw(x1, gd, 5 + rex.w);
                 ADDSL(x3, wback, x1, 2 + rex.w, x1);
                 LDxw(x1, x3, fixedaddress);
                 ed = x1;
@@ -1190,11 +1190,11 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
             BEXT(x4, ed, gd, x2); // F_CF is 1
             ANDI(xFlags, xFlags, ~1);
             OR(xFlags, xFlags, x4);
-            ADDI(x5, xZR, 1);
+            ADDI(x4, xZR, 1);
             ANDI(x2, gd, rex.w ? 0x3f : 0x1f);
-            SLL(x5, x5, x2);
-            NOT(x5, x5);
-            AND(ed, ed, x5);
+            SLL(x4, x4, x2);
+            NOT(x4, x4);
+            AND(ed, ed, x4);
             if (wback) {
                 SDxw(ed, wback, fixedaddress);
                 SMWRITE();
@@ -1343,7 +1343,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
             } else {
                 SMREAD();
                 addr = geted(dyn, addr, ninst, nextop, &wback, x3, x1, &fixedaddress, rex, NULL, 1, 0);
-                SRAI(x1, gd, 5 + rex.w);
+                SRAIxw(x1, gd, 5 + rex.w);
                 ADDSL(x3, wback, x1, 2 + rex.w, x1);
                 LDxw(x1, x3, fixedaddress);
                 ed = x1;
@@ -1352,10 +1352,10 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
             BEXT(x4, ed, gd, x2); // F_CF is 1
             ANDI(xFlags, xFlags, ~1);
             OR(xFlags, xFlags, x4);
-            ADDI(x3, xZR, 1);
+            ADDI(x4, xZR, 1);
             ANDI(x2, gd, rex.w ? 0x3f : 0x1f);
-            SLL(x3, x3, x2);
-            XOR(ed, ed, x3);
+            SLL(x4, x4, x2);
+            XOR(ed, ed, x4);
             if (wback) {
                 SDxw(ed, wback, fixedaddress);
                 SMWRITE();