diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2025-08-02 18:00:04 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-02 12:00:04 +0200 |
| commit | caac35cc1e9e05275850b154b6d0ebc4a74ca835 (patch) | |
| tree | 9a8a64a5964bd7314c6c9f154e043664375643cd | |
| parent | f7302ecb1b08831037cb067bd62863b90768604a (diff) | |
| download | box64-caac35cc1e9e05275850b154b6d0ebc4a74ca835.tar.gz box64-caac35cc1e9e05275850b154b6d0ebc4a74ca835.zip | |
[RV64_DYNAREC] Fixed some mmx opcodes (#2879)
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_0f_vector.c | 18 | ||||
| -rw-r--r-- | src/dynarec/rv64/rv64_printer.c | 2 |
2 files changed, 13 insertions, 7 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_0f_vector.c b/src/dynarec/rv64/dynarec_rv64_0f_vector.c index 6fa4f633..65082437 100644 --- a/src/dynarec/rv64/dynarec_rv64_0f_vector.c +++ b/src/dynarec/rv64/dynarec_rv64_0f_vector.c @@ -891,8 +891,9 @@ uintptr_t dynarec64_0F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, switch ((nextop >> 3) & 7) { case 2: INST_NAME("PSRLW Em, Ib"); - SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); GETEM_vector(q0, 1); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); u8 = F8; if (u8 > 15) { VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); @@ -905,8 +906,9 @@ uintptr_t dynarec64_0F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, break; case 4: INST_NAME("PSRAW Em, Ib"); - SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); GETEM_vector(q0, 1); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); u8 = F8; if (u8 > 15) u8 = 15; if (u8) { @@ -917,8 +919,9 @@ uintptr_t dynarec64_0F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, break; case 6: INST_NAME("PSLLW Em, Ib"); - SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); GETEM_vector(q0, 1); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW16, 1); u8 = F8; if (u8 > 15) { VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); @@ -937,8 +940,9 @@ uintptr_t dynarec64_0F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, switch ((nextop >> 3) & 7) { case 2: INST_NAME("PSRLD Em, Ib"); - SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); GETEM_vector(q0, 1); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); u8 = F8; if (u8 > 31) { VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); @@ -951,8 +955,9 @@ uintptr_t dynarec64_0F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, break; case 4: INST_NAME("PSRAD Em, Ib"); - SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); GETEM_vector(q0, 1); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); u8 = F8; if (u8 > 31) u8 = 31; if (u8) { @@ -963,8 +968,9 @@ uintptr_t dynarec64_0F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, break; case 6: INST_NAME("PSLLD Em, Ib"); - SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); GETEM_vector(q0, 1); + SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); u8 = F8; if (u8 > 31) { VXOR_VV(q0, q0, q0, VECTOR_UNMASKED); diff --git a/src/dynarec/rv64/rv64_printer.c b/src/dynarec/rv64/rv64_printer.c index c6cc9e17..2716f51a 100644 --- a/src/dynarec/rv64/rv64_printer.c +++ b/src/dynarec/rv64/rv64_printer.c @@ -13,7 +13,7 @@ static const char gpr[32][9] = { "sp", "gp", "tp", - "mask_t0", + "t0", "t1", "t2", "rbp_s0", |