diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-22 18:43:09 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-22 18:43:09 +0100 |
| commit | 685cc7b0bafcfa4650801c08b275a2a3ed3dd78d (patch) | |
| tree | ffe7e17b9a42b49e079daf4d0f7c79d1ba1d1c73 /src | |
| parent | b14be7f6142676daddc66749b42758c858c6fed4 (diff) | |
| download | box64-685cc7b0bafcfa4650801c08b275a2a3ed3dd78d.tar.gz box64-685cc7b0bafcfa4650801c08b275a2a3ed3dd78d.zip | |
[DYNAREC] Added 0F 14/15 opcodes
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/arm64_emitter.h | 17 | ||||
| -rwxr-xr-x | src/dynarec/dynarec_arm64_0f.c | 15 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/dynarec/arm64_emitter.h b/src/dynarec/arm64_emitter.h index e4fb4572..0c75ab5c 100755 --- a/src/dynarec/arm64_emitter.h +++ b/src/dynarec/arm64_emitter.h @@ -875,4 +875,21 @@ #define SCVTQFS(Vd, Vn) EMIT(SCVTF_vector(1, 0, 0, Vn, VD)) #define SCVTQFD(Vd, Vn) EMIT(SCVTF_vector(1, 0, 1, Vn, VD)) +// ZIP +#define ZIP_gen(Q, size, Rm, op, Rn, Rd) ((Q)<<30 | 0b001110<<24 | (size)<<22 | (Rm)<<16 | (op)<<14 | 0b11<<12 | 0b10<<10 | (Rn)<<5 | (Rd)) +#define VZIP1Q_8(Rt, Rn, Rm) EMIT(ZIP_gen(1, 0b00, Rm, 0, Rn, Rt)) +#define VZIP2Q_8(Rt, Rn, Rm) EMIT(ZIP_gen(1, 0b00, Rm, 1, Rn, Rt)) +#define VZIP1_8(Rt, Rn, Rm) EMIT(ZIP_gen(0, 0b00, Rm, 0, Rn, Rt)) +#define VZIP2_8(Rt, Rn, Rm) EMIT(ZIP_gen(0, 0b00, Rm, 1, Rn, Rt)) +#define VZIP1Q_16(Rt, Rn, Rm) EMIT(ZIP_gen(1, 0b01, Rm, 0, Rn, Rt)) +#define VZIP2Q_16(Rt, Rn, Rm) EMIT(ZIP_gen(1, 0b01, Rm, 1, Rn, Rt)) +#define VZIP1_16(Rt, Rn, Rm) EMIT(ZIP_gen(0, 0b01, Rm, 0, Rn, Rt)) +#define VZIP2_16(Rt, Rn, Rm) EMIT(ZIP_gen(0, 0b01, Rm, 1, Rn, Rt)) +#define VZIP1Q_32(Rt, Rn, Rm) EMIT(ZIP_gen(1, 0b10, Rm, 0, Rn, Rt)) +#define VZIP2Q_32(Rt, Rn, Rm) EMIT(ZIP_gen(1, 0b10, Rm, 1, Rn, Rt)) +#define VZIP1_32(Rt, Rn, Rm) EMIT(ZIP_gen(0, 0b10, Rm, 0, Rn, Rt)) +#define VZIP2_32(Rt, Rn, Rm) EMIT(ZIP_gen(0, 0b10, Rm, 1, Rn, Rt)) +#define VZIP1Q_64(Rt, Rn, Rm) EMIT(ZIP_gen(1, 0b11, Rm, 0, Rn, Rt)) +#define VZIP2Q_64(Rt, Rn, Rm) EMIT(ZIP_gen(1, 0b11, Rm, 1, Rn, Rt)) + #endif //__ARM64_EMITTER_H__ diff --git a/src/dynarec/dynarec_arm64_0f.c b/src/dynarec/dynarec_arm64_0f.c index 69c0b2c4..9f10448a 100755 --- a/src/dynarec/dynarec_arm64_0f.c +++ b/src/dynarec/dynarec_arm64_0f.c @@ -121,6 +121,21 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } break; + case 0x14: + INST_NAME("UNPCKLPS Gx, Ex"); + nextop = F8; + GETEX(q0, 0); + GETGX(v0); + VZIP1Q_32(v0, v0, q0); + break; + case 0x15: + INST_NAME("UNPCKHPS Gx, Ex"); + nextop = F8; + GETEX(q0, 0); + GETGX(v0); + VZIP2Q_32(v0, v0, q0); + break; + case 0x1F: INST_NAME("NOP (multibyte)"); nextop = F8; |