diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_00.c | 13 | ||||
| -rw-r--r-- | src/emu/x64run.c | 9 |
2 files changed, 22 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index c760d9d4..7bf9511f 100644 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -526,6 +526,19 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin emit_cmp32_0(dyn, ninst, rex, xRAX, x3, x4); break; + case 0x3F: + if(rex.is32bits) { + INST_NAME("AAS"); + MESSAGE(LOG_DUMP, "Need Optimization AAS\n"); + READFLAGS(X_AF); + SETFLAGS(X_AF|X_CF|X_PF|X_SF|X_ZF, SF_SET); + UXTHw(x1, xRAX); + CALL_(aas16, x1, 0); + BFIx(xRAX, x1, 0, 16); + } else { + DEFAULT; + } + break; case 0x40: case 0x41: case 0x42: diff --git a/src/emu/x64run.c b/src/emu/x64run.c index c278bfb2..f2cd686d 100644 --- a/src/emu/x64run.c +++ b/src/emu/x64run.c @@ -271,6 +271,15 @@ x64emurun: else cmp32(emu, R_EAX, F32); break; + + case 0x3F: /* AAS */ + if(rex.is32bits) { + R_AX = aas16(emu, R_AX); + } else { + unimp = 1; + goto fini; + } + break; case 0x40: case 0x41: case 0x42: |