diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2023-03-20 20:24:42 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-20 13:24:42 +0100 |
| commit | 5c48c72b56628515f3d5bbbd7461d0316d22e87b (patch) | |
| tree | b127986dce3388529e2eeb2aad94ec131d63ab77 /src | |
| parent | 8f52a3a3cc6c07f197d32fca2067dd6b827fae27 (diff) | |
| download | box64-5c48c72b56628515f3d5bbbd7461d0316d22e87b.tar.gz box64-5c48c72b56628515f3d5bbbd7461d0316d22e87b.zip | |
[RV64_DYNAREC] Added 66 89 MOV opcode (#599)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_66.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_66.c b/src/dynarec/rv64/dynarec_rv64_66.c index 9aaf4e2f..efa69ca8 100644 --- a/src/dynarec/rv64/dynarec_rv64_66.c +++ b/src/dynarec/rv64/dynarec_rv64_66.c @@ -71,7 +71,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni SETFLAGS(X_ALL, SF_SET_PENDING); i32 = F16; SLLI(x1, xRAX, 48); - SRLI(x1, xRAX, 48); + SRLI(x1, x1, 48); if(i32) { MOV32w(x2, i32); emit_cmp16(dyn, ninst, x1, x2, x3, x4, x5, x6); @@ -115,6 +115,26 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni DEFAULT; } break; + case 0x89: + INST_NAME("MOV Ew, Gw"); + nextop = F8; + GETGD; + if(MODREG) { + ed = xRAX+(nextop&7)+(rex.b<<3); + if(ed!=gd) { + // we don't use GETGW above, so we need let gd & 0xffff. + LUI(x1, 0xffff0); + AND(ed, ed, x1); + SLLI(x2, gd, 48); + SRLI(x2, x2, 48); + OR(ed, ed, x2); + } + } else { + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, &lock, 0, 0); + SH(gd, ed, fixedaddress); + SMWRITELOCK(lock); + } + break; case 0xC1: nextop = F8; switch((nextop>>3)&7) { |