diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-18 16:08:36 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-18 16:08:36 +0100 |
| commit | 8c014121567421c83b847c277f7867a228efe9e3 (patch) | |
| tree | ceea6879465a54e8e24c768e7860c59c2dcd0b99 /src | |
| parent | bd46fd7d4f6288277384e708ad59d3e70dfd71fa (diff) | |
| download | box64-8c014121567421c83b847c277f7867a228efe9e3.tar.gz box64-8c014121567421c83b847c277f7867a228efe9e3.zip | |
[DYNAREC] Added D1 opcodes
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/dynarec_arm64_00.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_00.c b/src/dynarec/dynarec_arm64_00.c index a70fba00..965b8380 100755 --- a/src/dynarec/dynarec_arm64_00.c +++ b/src/dynarec/dynarec_arm64_00.c @@ -550,6 +550,66 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } break; + case 0xD1: + nextop = F8; + switch((nextop>>3)&7) { + case 0: + INST_NAME("ROL Ed, 1"); + SETFLAGS(X_OF|X_CF, SF_SUBSET); + GETED(0); + emit_rol32c(dyn, ninst, rex, ed, 1, x3, x4); + WBACK; + break; + case 1: + INST_NAME("ROR Ed, 1"); + SETFLAGS(X_OF|X_CF, SF_SUBSET); + GETED(0); + emit_ror32c(dyn, ninst, rex, ed, 1, x3, x4); + WBACK; + break; + case 2: + INST_NAME("RCL Ed, 1"); + READFLAGS(X_CF); + SETFLAGS(X_OF|X_CF, SF_SET); + MOV32w(x2, 1); + GETEDW(x4, x1, 0); + CALL_(rcl32, ed, x4); + WBACK; + break; + case 3: + INST_NAME("RCR Ed, 1"); + READFLAGS(X_CF); + SETFLAGS(X_OF|X_CF, SF_SET); + MOV32w(x2, 1); + GETEDW(x4, x1, 0); + CALL_(rcr32, ed, x4); + WBACK; + break; + case 4: + case 6: + INST_NAME("SHL Ed, 1"); + SETFLAGS(X_ALL, SF_SET); // some flags are left undefined + GETED(0); + emit_shl32c(dyn, ninst, rex, ed, 1, x3, x4); + WBACK; + break; + case 5: + INST_NAME("SHR Ed, 1"); + SETFLAGS(X_ALL, SF_SET); // some flags are left undefined + GETED(0); + emit_shr32c(dyn, ninst, rex, ed, 1, x3, x4); + WBACK; + break; + case 7: + INST_NAME("SAR Ed, 1"); + SETFLAGS(X_ALL, SF_SET); // some flags are left undefined + GETED(0); + emit_sar32c(dyn, ninst, rex, ed, 1, x3, x4); + WBACK; + break; + } + break; + case 0xE8: INST_NAME("CALL Id"); i32 = F32S; |