diff options
| author | phorcys <phorcys@126.com> | 2025-04-03 15:48:24 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-03 09:48:24 +0200 |
| commit | fb6ee295394431a79e2e62277e698eedccd0e5fa (patch) | |
| tree | 8e0c8ff9f8ac940c604ed3f769d8d96e28b32127 /src/dynarec/la64/la64_printer.c | |
| parent | be6104c2edabf682d8f66feccf93157824b64ada (diff) | |
| download | box64-fb6ee295394431a79e2e62277e698eedccd0e5fa.tar.gz box64-fb6ee295394431a79e2e62277e698eedccd0e5fa.zip | |
[LA64_DYNAREC] Add more sse ops (#2493)
fix 0F.5D/5F MINPS/MAXPS fix unordered.
fix 66.0F.5D/5F MINPD/MAXPD fix unordered.
66.0F.3A.08/09/0A ROUNDPS/ROUNDPD/ROUNDSS
66.0F.3A.0C/0D BLENDPS/BLENDPD
66.0F.3A.21 INSERTPS
66.0F.C2 CMPPD
printer add VFCMP.cond.s/d, vbitsel.v:
Co-authored-by: phorcys <phorcys02@126.com>Diffstat (limited to 'src/dynarec/la64/la64_printer.c')
| -rw-r--r-- | src/dynarec/la64/la64_printer.c | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/src/dynarec/la64/la64_printer.c b/src/dynarec/la64/la64_printer.c index 93aab1a3..54b3ad4d 100644 --- a/src/dynarec/la64/la64_printer.c +++ b/src/dynarec/la64/la64_printer.c @@ -2204,6 +2204,98 @@ const char* la64_print(uint32_t opcode, uintptr_t addr) snprintf(buff, sizeof(buff), "%-15s %s, %s, %ld", "VST", Vt[Rd], Xt[Rj], signExtend(imm, 12)); return buff; } + if (isMask(opcode, "000011010001aaaaakkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s, %s", "VBITSEL.V", Vt[Rd], Vt[Rj], Vt[Rk], Vt[Ra]); + return buff; + } + if (isMask(opcode, "00001100010100000kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.CAF.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010100001kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.SAF.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010100010kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.CLT.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010100011kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.SLT.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010100100kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.CEQ.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010100101kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.SEQ.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010100110kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.CLE.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010100111kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.SLE.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010101000kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.CUN.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010101001kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.SUN.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010101010kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.CULT.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010101011kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.SULT.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010101100kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.CUEQ.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010101101kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.SUEQ.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010101110kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.CULE.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010101111kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.SULE.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010110000kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.CNE.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010110001kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.SNE.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010110100kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.COR.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010110101kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.SOR.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010111000kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.CUNE.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } + if (isMask(opcode, "00001100010111001kkkkkjjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s, %s", "VFCMP.SUNE.S", Vt[Rd], Vt[Rj], Vt[Rk]); + return buff; + } if (isMask(opcode, "00000000000000001000000000101000", &a)) { snprintf(buff, sizeof(buff), "X64CLRSM"); return buff; |