diff options
| author | xctan <axunlei@gmail.com> | 2023-03-13 19:50:32 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-13 12:50:32 +0100 |
| commit | a5f9bda13150e5548d0e3524bc6245c2e8ad5c54 (patch) | |
| tree | 8b125522f1bbc6d2324d746d4b41b23989d4d00f /src | |
| parent | 327b2355c178b88f908d42d71e709c88d60bb9f1 (diff) | |
| download | box64-a5f9bda13150e5548d0e3524bc6245c2e8ad5c54.tar.gz box64-a5f9bda13150e5548d0e3524bc6245c2e8ad5c54.zip | |
[RV64_DYNAREC] Added 8B MOV opcode (#555)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_00.c | 13 | ||||
| -rw-r--r-- | src/dynarec/rv64/rv64_emitter.h | 2 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_00.c b/src/dynarec/rv64/dynarec_rv64_00.c index 489d870e..2849dfbb 100644 --- a/src/dynarec/rv64/dynarec_rv64_00.c +++ b/src/dynarec/rv64/dynarec_rv64_00.c @@ -106,6 +106,19 @@ uintptr_t dynarec64_00(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } break; + case 0x8B: + INST_NAME("MOV Gd, Ed"); + nextop=F8; + GETGD; + if(MODREG) { + MVxw(gd, xRAX+(nextop&7)+(rex.b<<3)); + } else { + addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, &lock, 1, 0); + SMREADLOCK(lock); + LDxw(gd, ed, fixedaddress); + } + break; + case 0x8D: INST_NAME("LEA Gd, Ed"); nextop=F8; diff --git a/src/dynarec/rv64/rv64_emitter.h b/src/dynarec/rv64/rv64_emitter.h index a5cb0167..cdfddea0 100644 --- a/src/dynarec/rv64/rv64_emitter.h +++ b/src/dynarec/rv64/rv64_emitter.h @@ -221,6 +221,8 @@ f28–31 ft8–11 FP temporaries Caller // rd = [rs1 + imm12] #define LD(rd, rs1, imm12) EMIT(I_type(imm12, rs1, 0b011, rd, 0b0000011)) +// rd = [rs1 + imm12] +#define LDxw(rd, rs1, imm12) EMIT(I_type(imm12, rs1, 0b011<<(1-rex.w), rd, 0b0000011)) // [rs1 + imm12] = rs2 #define SD(rs2, rs1, imm12) EMIT(S_type(imm12, rs2, rs1, 0b011, 0b0100011)) // [rs1 + imm12] = rs2 |