diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-15 15:41:22 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-15 15:41:22 +0100 |
| commit | ecac60f4c91a4c6ef674c39db42ccbe7d128165f (patch) | |
| tree | 7667b20d01cb828b5880ef4dc2ce4153c3b425de | |
| parent | 21f8b852f2f65271a19202b196b1ad5b4ffea1fb (diff) | |
| download | box64-ecac60f4c91a4c6ef674c39db42ccbe7d128165f.tar.gz box64-ecac60f4c91a4c6ef674c39db42ccbe7d128165f.zip | |
[DYNAREC] Added REX 50..5F opcodes
| -rwxr-xr-x | src/dynarec/dynarec_arm64_00.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_00.c b/src/dynarec/dynarec_arm64_00.c index 947559ca..07e7c9c5 100755 --- a/src/dynarec/dynarec_arm64_00.c +++ b/src/dynarec/dynarec_arm64_00.c @@ -35,6 +35,8 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin uint32_t u32; uint8_t wback, wb1, wb2; int fixedaddress; + rex_t rex; + int rep; // 0 none, 1=F2 prefix, 2=F3 prefix opcode = F8; MAYUSE(eb1); @@ -42,9 +44,45 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MAYUSE(tmp); MAYUSE(j32); + rep = 0; + while((opcode==0xF2) || (opcode==0xF3)) { + rep = opcode-0xF1; + opcode = F8; + } + rex.rex = 0; + while(opcode>=0x40 && opcode<=0x4f) { + rex.rex = opcode; + opcode = F8; + } + switch(opcode) { + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + INST_NAME("PUSH reg"); + gd = xRAX+(opcode&0x07)+(rex.r<<3); + PUSH1(gd); + break; + case 0x58: + case 0x59: + case 0x5A: + case 0x5B: + case 0x5C: + case 0x5D: + case 0x5E: + case 0x5F: + INST_NAME("POP reg"); + gd = xRAX+(opcode&0x07)+(rex.r<<3); + POP1(gd); + break; + default: DEFAULT; } |