diff options
| author | xctan <xctan@cirno.icu> | 2024-11-26 01:04:04 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-25 18:04:04 +0100 |
| commit | b7f09964592df00d31dfe345404b8c70450ce453 (patch) | |
| tree | 4681d0be39c8861b63d0374ebf9a64c26e0f5a5a /src | |
| parent | dcf196c2ae1ddddc8c6eb7a6ad5066c39dc954de (diff) | |
| download | box64-b7f09964592df00d31dfe345404b8c70450ce453.tar.gz box64-b7f09964592df00d31dfe345404b8c70450ce453.zip | |
[RV64_DYNAREC] Fixed vector SSE unpack opcodes (#2074)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_660f_vector.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_660f_vector.c b/src/dynarec/rv64/dynarec_rv64_660f_vector.c index c0fce836..a6d5330c 100644 --- a/src/dynarec/rv64/dynarec_rv64_660f_vector.c +++ b/src/dynarec/rv64/dynarec_rv64_660f_vector.c @@ -1120,9 +1120,9 @@ uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i case 0x60: INST_NAME("PUNPCKLBW Gx, Ex"); nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); GETGX_vector(q0, 1, VECTOR_SEW8); GETEX_vector(q1, 0, 0, VECTOR_SEW8); - SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); VWADDU_VX(d0, q0, xZR, VECTOR_UNMASKED); @@ -1134,9 +1134,9 @@ uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i case 0x61: INST_NAME("PUNPCKLWD Gx, Ex"); nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); GETGX_vector(q0, 1, VECTOR_SEW16); GETEX_vector(q1, 0, 0, VECTOR_SEW16); - SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); VWADDU_VX(d0, q0, xZR, VECTOR_UNMASKED); @@ -1148,9 +1148,9 @@ uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i case 0x62: INST_NAME("PUNPCKLDQ Gx, Ex"); nextop = F8; + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); GETGX_vector(q0, 1, VECTOR_SEW32); GETEX_vector(q1, 0, 0, VECTOR_SEW32); - SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); MOV32w(x2, 32); @@ -1245,9 +1245,9 @@ uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i MOV32w(x2, 32); } nextop = F8; + SET_ELEMENT_WIDTH(x1, u8, 1); GETGX_vector(q0, 1, dyn->vector_eew); GETEX_vector(q1, 0, 0, dyn->vector_eew); - SET_ELEMENT_WIDTH(x1, u8, 1); v0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); v1 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL1); d0 = fpu_get_scratch_lmul(dyn, VECTOR_LMUL2); |