diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-23 17:58:31 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-23 17:58:31 +0100 |
| commit | de0718811e271b8971444fea68f2a04f3d9bca26 (patch) | |
| tree | 7c9a0ac29c14b284acc256cba72166f8c941f163 | |
| parent | 12b9b1a6e920bb04587cd92fcd835ded37495108 (diff) | |
| download | box64-de0718811e271b8971444fea68f2a04f3d9bca26.tar.gz box64-de0718811e271b8971444fea68f2a04f3d9bca26.zip | |
[DYNAREC] Added 0F 5B opcode
| -rwxr-xr-x | src/dynarec/arm64_emitter.h | 8 | ||||
| -rwxr-xr-x | src/dynarec/dynarec_arm64_0f.c | 15 |
2 files changed, 17 insertions, 6 deletions
diff --git a/src/dynarec/arm64_emitter.h b/src/dynarec/arm64_emitter.h index 1baf2218..47ee286f 100755 --- a/src/dynarec/arm64_emitter.h +++ b/src/dynarec/arm64_emitter.h @@ -982,10 +982,10 @@ #define SCVTFDD(Vd, Vn) EMIT(SCVT_vector_scalar(0, 1, Vn, Vd)) #define SCVTF_vector(Q, U, sz, Rn, Rd) ((Q)<<30 | (U)<<29 | 0b01110<<24 | (sz)<<22 | 0b10000<<17 | 0b11101<<12 | 0b10<<10 | (Rn)<<5 | (Rd)) -#define SCVTFS(Vd, Vn) EMIT(SCVTF_vector(0, 0, 0, Vn, VD)) -#define SCVTFD(Vd, Vn) EMIT(SCVTF_vector(0, 0, 1, Vn, VD)) -#define SCVTQFS(Vd, Vn) EMIT(SCVTF_vector(1, 0, 0, Vn, VD)) -#define SCVTQFD(Vd, Vn) EMIT(SCVTF_vector(1, 0, 1, Vn, VD)) +#define SCVTFS(Vd, Vn) EMIT(SCVTF_vector(0, 0, 0, Vn, Vd)) +#define SCVTFD(Vd, Vn) EMIT(SCVTF_vector(0, 0, 1, Vn, Vd)) +#define SCVTQFS(Vd, Vn) EMIT(SCVTF_vector(1, 0, 0, Vn, Vd)) +#define SCVTQFD(Vd, Vn) EMIT(SCVTF_vector(1, 0, 1, Vn, Vd)) // FMAX / FMIN #define FMINMAX_vector(Q, U, o1, sz, Rm, Rn, Rd) ((Q)<<30 | (U)<<29 | 0b01110<<24 | (o1)<<23 | (sz)<<22 | 0b1<<21 | (Rm)<<16 | 0b11110<<11 | 1<<10 | (Rn)<<5 | (Rd)) diff --git a/src/dynarec/dynarec_arm64_0f.c b/src/dynarec/dynarec_arm64_0f.c index 7d3c9afc..8905878f 100755 --- a/src/dynarec/dynarec_arm64_0f.c +++ b/src/dynarec/dynarec_arm64_0f.c @@ -24,10 +24,14 @@ #include "dynarec_arm64_functions.h" #include "dynarec_arm64_helper.h" -#define GETGX(a) \ - gd = ((nextop&0x38)>>3)+(rex.r<<3); \ +#define GETGX(a) \ + gd = ((nextop&0x38)>>3)+(rex.r<<3); \ a = sse_get_reg(dyn, ninst, x1, gd) +#define GETGX_empty(a) \ + gd = ((nextop&0x38)>>3)+(rex.r<<3); \ + a = sse_get_reg_empty(dyn, ninst, x1, gd) + #define GETEX(a, D) \ if(MODREG) { \ a = sse_get_reg(dyn, ninst, x1, nextop&7+(rex.b<<3)); \ @@ -265,6 +269,13 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin d0 = fpu_get_scratch(dyn); FCVTL(q1, q0); break; + case 0x5B: + INST_NAME("CVTDQ2PS Gx, Ex"); + nextop = F8; + GETEX(q0, 0); + GETGX_empty(q1); + SCVTQFS(q1, q0); + break; #define GO(GETFLAGS, NO, YES, F) \ READFLAGS(F); \ |