diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-03-18 09:15:28 +0000 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-03-18 09:15:28 +0000 |
| commit | 2d3aafefe1756e6ffca6af99240fa1ff25d18871 (patch) | |
| tree | 3915d02008d9f048dea0c7ab106de3702853fcf2 /src | |
| parent | 5b1f16d7e9741181c5b9c6650137b2648d836611 (diff) | |
| download | box64-2d3aafefe1756e6ffca6af99240fa1ff25d18871.tar.gz box64-2d3aafefe1756e6ffca6af99240fa1ff25d18871.zip | |
[RV64_DYNAREC] Added 66 C7 MOV opcode
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_66.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_66.c b/src/dynarec/rv64/dynarec_rv64_66.c index f42ca1fb..ecfe34b0 100644 --- a/src/dynarec/rv64/dynarec_rv64_66.c +++ b/src/dynarec/rv64/dynarec_rv64_66.c @@ -85,6 +85,26 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni // just use regular conditional jump return dynarec64_00(dyn, addr-1, ip, ninst, rex, rep, ok, need_epilog); + case 0xC7: + INST_NAME("MOV Ew, Iw"); + nextop = F8; + if(MODREG) { + ed = xRAX+(nextop&7)+(rex.b<<3); + ADDI(x1, xZR, -1); + SRLI(x1, x1, 48); + AND(ed, ed, x1); + u16 = F16; + MOV32w(x1, u16); + ORI(ed, ed, x1); + } else { + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, &lock, 1, 2); + u16 = F16; + MOV32w(x1, u16); + SH(x1, ed, fixedaddress); + SMWRITELOCK(lock); + } + break; + default: DEFAULT; } |