diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-06-07 10:25:14 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-06-07 10:25:14 +0200 |
| commit | 537cb65f26afd07cbc2332f0a60c181f5c75c0d7 (patch) | |
| tree | 9e0e14e45d7bf735a2cce4ca2030ebe9e97b00c2 /src | |
| parent | f61367fc9a19738a71ef37f907cb21cfb7cf162d (diff) | |
| download | box64-537cb65f26afd07cbc2332f0a60c181f5c75c0d7.tar.gz box64-537cb65f26afd07cbc2332f0a60c181f5c75c0d7.zip | |
[ARM64_DYNAREC] Added BMI.0F38 F2, F3/1 opcodes
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_avx_0f38.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_avx_0f38.c b/src/dynarec/arm64/dynarec_arm64_avx_0f38.c index 8894405d..484c7b10 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_0f38.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_0f38.c @@ -61,6 +61,52 @@ uintptr_t dynarec64_AVX_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, i switch(opcode) { + case 0xF2: + INST_NAME("ANDN Gd, Vd, Ed"); + nextop = F8; + SETFLAGS(X_ALL, SF_SET); + GETGD; + GETED(0); + GETVD; + BICxw(gd, ed, vd); + break; + case 0xF3: + nextop = F8; + switch((nextop>>3)&7) { + case 1: + INST_NAME("BLSR Vd, Ed"); + SETFLAGS(X_ALL, SF_SET); + GETED(0); + GETVD; + IFX(X_CF) { + TSTxw_REG(ed, ed); + CSETMw(x3, cEQ); + BFIw(xFlags, x3, F_CF, 1); + } + SUBxw_U12(x3, ed, 1); + IFX(X_ZF) + ANDSxw_REG(vd, ed, x3); + else + ANDxw_REG(vd, ed, x3); + IFX(X_ZF) { + CSETMw(x3, cEQ); + BFIw(xFlags, x3, F_ZF, 1); + } + IFX(X_SF) { + LSRxw(x3, vd, rex.w?63:31); + BFIw(xFlags, x3, F_SF, 1); + } + IFX(X_OF) BFCw(xFlags, F_OF, 1); + if(box64_dynarec_test) { + IFX(X_AF) BFCw(xFlags, F_AF, 1); + IFX(X_PF) BFCw(xFlags, F_PF, 1); + } + break; + default: + DEFAULT; + } + break; + case 0xF5: INST_NAME("BZHI Gd, Ed, Vd"); nextop = F8; |