diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-11-15 09:43:09 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-11-15 09:43:09 +0100 |
| commit | 9896b02bd6bbaa09d30de32723645409353bbdfd (patch) | |
| tree | 0e2bbdd5a79834bc7662371634aa9e91ab38d280 /src | |
| parent | d39dd45ae425f167b6a1abf13c46fe1c33d45ef8 (diff) | |
| download | box64-9896b02bd6bbaa09d30de32723645409353bbdfd.tar.gz box64-9896b02bd6bbaa09d30de32723645409353bbdfd.zip | |
Added 64/65 [64/65] 90 opcode ([ARM64_DYNAREC] Too)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_64.c | 10 | ||||
| -rw-r--r-- | src/emu/x64run64.c | 17 |
2 files changed, 25 insertions, 2 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_64.c b/src/dynarec/arm64/dynarec_arm64_64.c index e67b879c..bfb5702f 100644 --- a/src/dynarec/arm64/dynarec_arm64_64.c +++ b/src/dynarec/arm64/dynarec_arm64_64.c @@ -380,7 +380,12 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } } break; - + case 0x64: + addr = dynarec64_64(dyn, addr, ip, ninst, rex, rep, _FS, ok, need_epilog); + break; + case 0x65: + addr = dynarec64_64(dyn, addr, ip, ninst, rex, rep, _GS, ok, need_epilog); + break; case 0x66: addr = dynarec64_6664(dyn, addr, ip, ninst, rex, seg, ok, need_epilog); break; @@ -669,6 +674,9 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } } break; + case 0x90: + INST_NAME("NOP"); + break; case 0xA1: INST_NAME("MOV EAX,FS:Od"); diff --git a/src/emu/x64run64.c b/src/emu/x64run64.c index a9941291..c39ff5e7 100644 --- a/src/emu/x64run64.c +++ b/src/emu/x64run64.c @@ -335,7 +335,20 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) GD->sdword[0] = ED->sdword[0]; // meh? } break; - + case 0x64: /* FS: prefix */ + #ifdef TEST_INTERPRETER + return Test64(test, rex, _FS, addr); + #else + return Run64(emu, rex, _FS, addr); + #endif + break; + case 0x65: /* GS: prefix */ + #ifdef TEST_INTERPRETER + return Test64(test, rex, _GS, addr); + #else + return Run64(emu, rex, _GS, addr); + #endif + break; case 0x66: return Run6664(emu, rex, seg, addr); case 0x67: @@ -477,6 +490,8 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) } } break; + case 0x90: /* NOP */ + break; case 0xA1: /* MOV EAX,FS:Od */ if(rex.is32bits) { |