From efa1cbd49aa57ccc2c168fed2c4ec93e876f8e86 Mon Sep 17 00:00:00 2001 From: wannacu <76616478+wannacu@users.noreply.github.com> Date: Fri, 14 Feb 2025 21:29:43 +0800 Subject: [ARM64_DYNAREC] Add some opcodes (#2358) * [ARM64_DYNAREC] Added 66 0F 3A 41 opcode * [ARM64_DYNAREC] Added AVX.66.0F38 DB opcode * [ARM64_DYNAREC] Added AVX.66.0F3A DF opcode * [ARM64_DYNAREC] Added AVX.F2.0F38 F5 opcode * [ARM64_DYNAREC] Added 66 F3 0F BC,B8 opcode --- src/dynarec/arm64/dynarec_arm64_660f.c | 21 ++++++++++ src/dynarec/arm64/dynarec_arm64_66f30f.c | 57 ++++++++++++++++++++++++++- src/dynarec/arm64/dynarec_arm64_avx_66_0f38.c | 17 ++++++++ src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c | 44 +++++++++++++++++++++ src/dynarec/arm64/dynarec_arm64_avx_f2_0f38.c | 31 ++++++++++++++- 5 files changed, 167 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/dynarec/arm64/dynarec_arm64_660f.c b/src/dynarec/arm64/dynarec_arm64_660f.c index 2a30bc9c..ec5223ac 100644 --- a/src/dynarec/arm64/dynarec_arm64_660f.c +++ b/src/dynarec/arm64/dynarec_arm64_660f.c @@ -1238,6 +1238,27 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n } break; + case 0x41: + INST_NAME("DPPD Gx, Ex, Ib"); + nextop = F8; + GETGX(q0, 1); + GETEX(q1, 0, 1); + u8 = F8; + v0 = fpu_get_scratch(dyn, ninst); + VFMULQD(v0, q0, q1); + // mask some, duplicate all, mask some + for(int i=0; i<2; ++i) + if(!(u8&(1<<(4+i)))) { + VMOVQDfrom(v0, i, xZR); + } + FADDPD(v0, v0); + VDUPQ_64(q0, v0, 0); + for(int i=0; i<2; ++i) + if(!(u8&(1<