diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-19 22:09:43 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-19 22:09:43 +0100 |
| commit | 7a056851d98db45584f0d978dc6567d4406be3df (patch) | |
| tree | 209d87608cc33213225662fde4eda0c561b3cc21 /src | |
| parent | 44eb9cf6788aff06b2e4fc536b86ef0458e7decf (diff) | |
| download | box64-7a056851d98db45584f0d978dc6567d4406be3df.tar.gz box64-7a056851d98db45584f0d978dc6567d4406be3df.zip | |
[DYNAREC] 0F A5 and 66 0F A4/A5 SHLD opcodes
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/dynarec_arm64_0f.c | 12 | ||||
| -rwxr-xr-x | src/dynarec/dynarec_arm64_660f.c | 19 |
2 files changed, 31 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_0f.c b/src/dynarec/dynarec_arm64_0f.c index 54e5f2d5..8e00682e 100755 --- a/src/dynarec/dynarec_arm64_0f.c +++ b/src/dynarec/dynarec_arm64_0f.c @@ -177,6 +177,18 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin BFIw(xFlags, x4, F_CF, 1); break; + case 0xA5: + nextop = F8; + INST_NAME("SHLD Ed, Gd, CL"); + UXTBw(x3, xRCX); + SETFLAGS(X_ALL, SF_SET); + GETEDW(x4, x1, 0); + GETGD; + MOVxw_REG(x2, gd); + CALL_(rex.w?((void*)shld64):((void*)shld32), ed, x4); + WBACK; + break; + case 0xAB: INST_NAME("BTS Ed, Gd"); SETFLAGS(X_CF, SF_SET); diff --git a/src/dynarec/dynarec_arm64_660f.c b/src/dynarec/dynarec_arm64_660f.c index e82d51ef..475bcab1 100755 --- a/src/dynarec/dynarec_arm64_660f.c +++ b/src/dynarec/dynarec_arm64_660f.c @@ -78,6 +78,25 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n LSRw_REG(x1, ed, x2); BFIw(xFlags, x1, F_CF, 1); break; + case 0xA4: + case 0xA5: + nextop = F8; + if(opcode==0xA4) { + INST_NAME("SHLD Ew, Gw, Ib"); + } else { + INST_NAME("SHLD Ew, Gw, CL"); + UXTBw(x3, xRCX); + } + SETFLAGS(X_ALL, SF_SET); + GETEWW(x4, x1, (opcode==0xA4)?1:0); + GETGW(x2); + if(opcode==0xA4) { + u8 = F8; + MOV32w(x3, u8); + } + CALL_(shld16, x1, wback); + EWBACKW(x1); + break; case 0xAB: INST_NAME("BTS Ew, Gw"); |