From ecac60f4c91a4c6ef674c39db42ccbe7d128165f Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Mon, 15 Mar 2021 15:41:22 +0100 Subject: [DYNAREC] Added REX 50..5F opcodes --- src/dynarec/dynarec_arm64_00.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'src') 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; } -- cgit 1.4.1