diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2025-03-27 21:37:00 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-27 14:37:00 +0100 |
| commit | d2e8ff5118706d5b20b10a2a6a60771f6d67ba13 (patch) | |
| tree | b39db77fd634ac4c76a9ae9a688fe868a16cd8ad /src | |
| parent | ec385c8e75ba47fc42345cf796cef5ce274571cc (diff) | |
| download | box64-d2e8ff5118706d5b20b10a2a6a60771f6d67ba13.tar.gz box64-d2e8ff5118706d5b20b10a2a6a60771f6d67ba13.zip | |
[LA64_DYNAREC] Added more opcodes (#2472)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_660f.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/dynarec/la64/dynarec_la64_660f.c b/src/dynarec/la64/dynarec_la64_660f.c index 4eee7a02..4eb07fb8 100644 --- a/src/dynarec/la64/dynarec_la64_660f.c +++ b/src/dynarec/la64/dynarec_la64_660f.c @@ -1113,6 +1113,21 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int VOR_V(q1, v0, v1); } break; + case 0x5D: + INST_NAME("MINPD Gx, Ex"); + nextop = F8; + GETGX(v0, 1); + GETEX(v1, 0, 0); + if(BOX64ENV(dynarec_fastnan)) { + VFMIN_D(v0, v0, v1); + } else { + q0 = fpu_get_scratch(dyn); + VFCMP_D(q0, v0, v1, sLT); + VAND_V(v0, v0, q0); + VANDN_V(q0, q0, v1); + VOR_V(v0, v0, q0); + } + break; case 0x5E: INST_NAME("DIVPD Gx, Ex"); nextop = F8; @@ -1134,6 +1149,21 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int VOR_V(q1, v0, v1); } break; + case 0x5F: + INST_NAME("MAXPD Gx, Ex"); + nextop = F8; + GETGX(v0, 1); + GETEX(v1, 0, 0); + if(BOX64ENV(dynarec_fastnan)) { + VFMAX_D(v0, v0, v1); + } else { + q0 = fpu_get_scratch(dyn); + VFCMP_D(q0, v1, v0, sLT); + VAND_V(v0, v0, q0); + VANDN_V(q0, q0, v1); + VOR_V(v0, v0, q0); + } + break; case 0x60: INST_NAME("PUNPCKLBW Gx,Ex"); nextop = F8; |