diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2023-11-27 15:27:38 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-27 08:27:38 +0100 |
| commit | ea64f8453f1694ae93fa9e5962738782a6d5553e (patch) | |
| tree | 1ccb52d03022d0470b5c830199f19ee06d8df4d2 /src | |
| parent | 507eb1c786681fcd5a235f01a60626d54929dd76 (diff) | |
| download | box64-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.c | 26 |
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(); |