about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2025-03-27 21:37:00 +0800
committerGitHub <noreply@github.com>2025-03-27 14:37:00 +0100
commitd2e8ff5118706d5b20b10a2a6a60771f6d67ba13 (patch)
treeb39db77fd634ac4c76a9ae9a688fe868a16cd8ad /src
parentec385c8e75ba47fc42345cf796cef5ce274571cc (diff)
downloadbox64-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.c30
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;