diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-04-01 14:08:49 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-04-01 14:08:49 +0200 |
| commit | 159bbcf4a48edd7770af49e1932f25c1a33af8a8 (patch) | |
| tree | f934b9001592d9c0e5ff58b60a1592c145e7e725 /src | |
| parent | 398a8b12c2f15f231d68107326fcf42a51c1cc08 (diff) | |
| download | box64-159bbcf4a48edd7770af49e1932f25c1a33af8a8.tar.gz box64-159bbcf4a48edd7770af49e1932f25c1a33af8a8.zip | |
[DYNAREC] Added 66 0F F5 opcode
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/arm64_emitter.h | 14 | ||||
| -rwxr-xr-x | src/dynarec/dynarec_arm64_660f.c | 12 |
2 files changed, 18 insertions, 8 deletions
diff --git a/src/dynarec/arm64_emitter.h b/src/dynarec/arm64_emitter.h index 9cf9bffa..5da1b06d 100755 --- a/src/dynarec/arm64_emitter.h +++ b/src/dynarec/arm64_emitter.h @@ -846,13 +846,13 @@ // ADD Pair #define ADDP_vector(Q, size, Rm, Rn, Rd) ((Q)<<30 | 0b01110<<24 | (size)<<22 | 1<<21 | (Rm)<<16 | 0b10111<<11 | 1<<10 | (Rn)<<5 | (Rd)) -#define VADDPQ_8(Vd, Vn, Vm) EMIT(ADDP(1, 0b00, Vm, Vn, Vd)) -#define VADDPQ_16(Vd, Vn, Vm) EMIT(ADDP(1, 0b01, Vm, Vn, Vd)) -#define VADDPQ_32(Vd, Vn, Vm) EMIT(ADDP(1, 0b10, Vm, Vn, Vd)) -#define VADDPQ_64(Vd, Vn, Vm) EMIT(ADDP(1, 0b11, Vm, Vn, Vd)) -#define VADDP_8(Vd, Vn, Vm) EMIT(ADDP(0, 0b00, Vm, Vn, Vd)) -#define VADDP_16(Vd, Vn, Vm) EMIT(ADDP(0, 0b01, Vm, Vn, Vd)) -#define VADDP_32(Vd, Vn, Vm) EMIT(ADDP(0, 0b10, Vm, Vn, Vd)) +#define VADDPQ_8(Vd, Vn, Vm) EMIT(ADDP_vector(1, 0b00, Vm, Vn, Vd)) +#define VADDPQ_16(Vd, Vn, Vm) EMIT(ADDP_vector(1, 0b01, Vm, Vn, Vd)) +#define VADDPQ_32(Vd, Vn, Vm) EMIT(ADDP_vector(1, 0b10, Vm, Vn, Vd)) +#define VADDPQ_64(Vd, Vn, Vm) EMIT(ADDP_vector(1, 0b11, Vm, Vn, Vd)) +#define VADDP_8(Vd, Vn, Vm) EMIT(ADDP_vector(0, 0b00, Vm, Vn, Vd)) +#define VADDP_16(Vd, Vn, Vm) EMIT(ADDP_vector(0, 0b01, Vm, Vn, Vd)) +#define VADDP_32(Vd, Vn, Vm) EMIT(ADDP_vector(0, 0b10, Vm, Vn, Vd)) #define FADDP_vector(Q, sz, Rm, Rn, Rd) ((Q)<<30 | 1<<29 | 0b01110<<24 | (sz)<<22 | 1<<21 | (Rm)<<16 | 0b11010<<11 | 1<<10 | (Rn)<<5 | (Rd)) #define VFADDPQS(Vd, Vn, Vm) EMIT(FADDP_vector(1, 0, Vm, Vn, Vd)) diff --git a/src/dynarec/dynarec_arm64_660f.c b/src/dynarec/dynarec_arm64_660f.c index 1e55437d..c2b26f4b 100755 --- a/src/dynarec/dynarec_arm64_660f.c +++ b/src/dynarec/dynarec_arm64_660f.c @@ -1196,7 +1196,17 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n VUZP1Q_32(q1, v1, v1); VUMULL_32(v0, q0, q1); break; - + case 0xF5: + INST_NAME("PMADDWD Gx, Ex"); + nextop = F8; + GETGX(v0); + GETEX(v1, 0); + q0 = fpu_get_scratch(dyn); + q1 = fpu_get_scratch(dyn); + VSMULL_16(q0, v0, v1); + VSMULL2_16(q1, v0, v1); + VADDPQ_32(v0, q0, q1); + break; case 0xF6: INST_NAME("PSADBW Gx, Ex"); nextop = F8; |