diff options
| author | xctan <xctan@cirno.icu> | 2023-03-16 22:29:07 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-16 15:29:07 +0100 |
| commit | 4b2a340bc72293f9bb6b9c9093759ab6ec0710cb (patch) | |
| tree | 71e2b99a3a48d59602e60dabaf1c5176a61cee13 /src | |
| parent | 7cb9a5064a586c2599bded030e229d376c97e6cf (diff) | |
| download | box64-4b2a340bc72293f9bb6b9c9093759ab6ec0710cb.tar.gz box64-4b2a340bc72293f9bb6b9c9093759ab6ec0710cb.zip | |
[RV64_DYNAREC] Added 98 CWDE opcode (#574)
* [RV64_DYNAREC] Added 98 CWDE opcode * [RV64_DYNAREC] Added 90 XCHG opcode
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_00.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_00.c b/src/dynarec/rv64/dynarec_rv64_00.c index 72c10f90..bcd59c0b 100644 --- a/src/dynarec/rv64/dynarec_rv64_00.c +++ b/src/dynarec/rv64/dynarec_rv64_00.c @@ -266,6 +266,37 @@ uintptr_t dynarec64_00(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } } break; + + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + gd = xRAX+(opcode&0x07)+(rex.b<<3); + if(gd==xRAX) { + INST_NAME("NOP"); + } else { + INST_NAME("XCHG EAX, Reg"); + MVxw(x2, xRAX); + MVxw(xRAX, gd); + MVxw(gd, x2); + } + break; + case 0x98: + INST_NAME("CWDE"); + if(rex.w) { + SEXT_W(xRAX, xRAX); + } else { + SLLI(xRAX, xRAX, 16); + SRAIW(xRAX, xRAX, 16); + ZEROUP(xRAX); + } + break; + + case 0xB8: case 0xB9: case 0xBA: |