diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2025-02-17 15:13:49 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-17 08:13:49 +0100 |
| commit | 71845a11bba58f353d5de837e0d7ef55d1c87052 (patch) | |
| tree | cb733539edfa4bb40f5208ebf0e7f07c97ddb890 /src | |
| parent | e3adda8ff9c50243464375e3a6c0f0e3461b5677 (diff) | |
| download | box64-71845a11bba58f353d5de837e0d7ef55d1c87052.tar.gz box64-71845a11bba58f353d5de837e0d7ef55d1c87052.zip | |
[LA64_DYNAREC] Added more SSE4 opcodes (#2370)
Co-authored-by: phorcys <phorcys@126.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_660f.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/dynarec/la64/dynarec_la64_660f.c b/src/dynarec/la64/dynarec_la64_660f.c index d6e6daa3..86c37c06 100644 --- a/src/dynarec/la64/dynarec_la64_660f.c +++ b/src/dynarec/la64/dynarec_la64_660f.c @@ -463,6 +463,28 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int GETGX_empty(q0); VSLLWIL_W_H(q0, q1, 0); break; + case 0x24: + INST_NAME("PMOVSXWQ Gx, Ex"); + nextop = F8; + GETEXSS(q1, 0, 0); + GETGX_empty(q0); + VSLLWIL_W_H(q0, q1, 0); // 16bits->32bits + VSLLWIL_D_W(q0, q0, 0); // 32bits->64bits + break; + case 0x25: + INST_NAME("PMOVSXDQ Gx, Ex"); + nextop = F8; + GETEX64(q1, 0, 0); + GETGX_empty(q0); + VSLLWIL_D_W(q0, q1, 0); // 32bits->64bits + break; + case 0x29: + INST_NAME("PCMPEQQ Gx, Ex"); // SSE4 opcode! + nextop = F8; + GETEX(q1, 0, 0); + GETGX_empty(q0); + VSEQ_D(q0, q0, q1); + break; case 0x2B: INST_NAME("PACKUSDW Gx, Ex"); // SSE4 opcode! nextop = F8; @@ -503,6 +525,13 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int GETGX(q0, 1); VMAX_W(q0, q0, q1); break; + case 0x3E: + INST_NAME("PMAXUW Gx, Ex"); // SSE4 opcode! + nextop = F8; + GETEX(q1, 0, 0); + GETGX(q0, 1); + VMAX_HU(q0, q0, q1); + break; case 0x40: INST_NAME("PMULLD Gx, Ex"); // SSE4 opcode! nextop = F8; |