diff options
| author | phorcys <phorcys@126.com> | 2025-07-29 15:08:24 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-29 09:08:24 +0200 |
| commit | f43a221ffca63e96e33301148df240a91df0d3c2 (patch) | |
| tree | 90d7fd67d372a8056fd092585ec084bd9249d975 /src/dynarec/la64/la64_printer.c | |
| parent | 397399fd30cc8ebe2c45440a2afc8e7c6c0f80f4 (diff) | |
| download | box64-f43a221ffca63e96e33301148df240a91df0d3c2.tar.gz box64-f43a221ffca63e96e33301148df240a91df0d3c2.zip | |
[LA64_DYNAREC] Add la64 avx float ops part 3. (#2845)
* add cpuext.frecipe for LoongArch V1.1
* Fix VFRSQRTE in sse op RSQRTPS/RSQRTSS
* Fix VFRECIPE in sse op RCPPS/RCPSS
* V{MAX,MIN}{PD,PS,SD,SS}
* VRCPPS,VRCPSS
* VRSQRTPS,VRSQRTSS
* VSQRT{PD,PS,SD,SS}Diffstat (limited to 'src/dynarec/la64/la64_printer.c')
| -rw-r--r-- | src/dynarec/la64/la64_printer.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/dynarec/la64/la64_printer.c b/src/dynarec/la64/la64_printer.c index 39d4c612..99c396cf 100644 --- a/src/dynarec/la64/la64_printer.c +++ b/src/dynarec/la64/la64_printer.c @@ -7556,6 +7556,70 @@ const char* la64_print(uint32_t opcode, uintptr_t addr) snprintf(buff, sizeof(buff), "%-15s %s, %s", "XVREPLGR2VR.D", XVt[Rd], Xt[Rj]); return buff; } + if (isMask(opcode, "0000000100010100010101jjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s", "FRECIP.S", Ft[Rd], Ft[Rj]); + return buff; + } + if (isMask(opcode, "0000000100010100011101jjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s", "FRECIPE.S", Ft[Rd], Ft[Rj]); + return buff; + } + if (isMask(opcode, "0000000100010100010110jjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s", "FRECIP.D", Ft[Rd], Ft[Rj]); + return buff; + } + if (isMask(opcode, "0000000100010100011110jjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s", "FRECIPE.D", Ft[Rd], Ft[Rj]); + return buff; + } + if (isMask(opcode, "0111001010011100111101jjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VFRECIP.S", Vt[Rd], Vt[Rj]); + return buff; + } + if (isMask(opcode, "0111001010011100111110jjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VFRECIP.D", Vt[Rd], Vt[Rj]); + return buff; + } + if (isMask(opcode, "0111001010011101000101jjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VFRECIPE.S", Vt[Rd], Vt[Rj]); + return buff; + } + if (isMask(opcode, "0111001010011101000110jjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VFRECIPE.D", Vt[Rd], Vt[Rj]); + return buff; + } + if (isMask(opcode, "0000000100010100011001jjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s", "FRSQRT.S", Ft[Rd], Ft[Rj]); + return buff; + } + if (isMask(opcode, "0000000100010100100001jjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s", "FRSQRTE.S", Ft[Rd], Ft[Rj]); + return buff; + } + if (isMask(opcode, "0000000100010100011010jjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s", "FRSQRT.D", Ft[Rd], Ft[Rj]); + return buff; + } + if (isMask(opcode, "0000000100010100100010jjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s", "FRSQRTE.D", Ft[Rd], Ft[Rj]); + return buff; + } + if (isMask(opcode, "0111001010011101000001jjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VFRSQRT.S", Vt[Rd], Vt[Rj]); + return buff; + } + if (isMask(opcode, "0111001010011101000010jjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VFRSQRT.D", Vt[Rd], Vt[Rj]); + return buff; + } + if (isMask(opcode, "0111001010011101001001jjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VFRSQRTE.S", Vt[Rd], Vt[Rj]); + return buff; + } + if (isMask(opcode, "0111001010011101001010jjjjjddddd", &a)) { + snprintf(buff, sizeof(buff), "%-15s %s, %s", "VFRSQRTE.D", Vt[Rd], Vt[Rj]); + return buff; + } snprintf(buff, sizeof(buff), "%08X ???", __builtin_bswap32(opcode)); return buff; } |