about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorLeslie Zhai <zhaixiang@loongson.cn>2024-12-25 22:56:54 +0800
committerGitHub <noreply@github.com>2024-12-25 15:56:54 +0100
commit9492b6ca66ff36436d27994e54a2586e3e72ecfe (patch)
treefc0f7f52ad91bad7b9cecf9e6aa6a59488ca9b7c /src
parent4a45db781f865471a2778e046882d80087e26210 (diff)
downloadbox64-9492b6ca66ff36436d27994e54a2586e3e72ecfe.tar.gz
box64-9492b6ca66ff36436d27994e54a2586e3e72ecfe.zip
[LA64_DYNAREC] Added MOVLPD and MOVHPD opcodes (#2198)
* [LA64_DYNAREC] Added MOVLPD and MOVHPD opcodes

* [LA64_DYNAREC] Fix VSTELM_D idx
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/la64/dynarec_la64_0f.c1
-rw-r--r--src/dynarec/la64/dynarec_la64_660f.c24
2 files changed, 24 insertions, 1 deletions
diff --git a/src/dynarec/la64/dynarec_la64_0f.c b/src/dynarec/la64/dynarec_la64_0f.c
index 7cc3938e..d7a0b89b 100644
--- a/src/dynarec/la64/dynarec_la64_0f.c
+++ b/src/dynarec/la64/dynarec_la64_0f.c
@@ -222,7 +222,6 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                 VEXTRINS_D(v1, v0, 0x01);
             } else {
                 addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 0);
-                v1 = fpu_get_scratch(dyn);
                 VSTELM_D(v0, ed, 0, 1);
                 SMWRITE2();
             }
diff --git a/src/dynarec/la64/dynarec_la64_660f.c b/src/dynarec/la64/dynarec_la64_660f.c
index 90c7fdad..6d760bb9 100644
--- a/src/dynarec/la64/dynarec_la64_660f.c
+++ b/src/dynarec/la64/dynarec_la64_660f.c
@@ -103,6 +103,18 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int
             FLD_D(v1, wback, fixedaddress);
             VEXTRINS_D(v0, v1, 0);
             break;
+        case 0x13:
+            INST_NAME("MOVLPD Eq, Gx");
+            nextop = F8;
+            GETGX(v0, 0);
+            if (MODREG) {
+                DEFAULT;
+                return addr;
+            }
+            addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 1, 0);
+            FST_D(v0, ed, fixedaddress);
+            SMWRITE2();
+            break;
         case 0x14:
             INST_NAME("UNPCKLPD Gx, Ex");
             nextop = F8;
@@ -147,6 +159,18 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int
             FLD_D(v1, ed, fixedaddress);
             VEXTRINS_D(v0, v1, 0x10);
             break;
+        case 0x17:
+            INST_NAME("MOVHPD Eq, Gx");
+            nextop = F8;
+            GETGX(v0, 0);
+            if (MODREG) {
+                DEFAULT;
+                return addr;
+            }
+            addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 0);
+            VSTELM_D(v0, ed, 0, 1);
+            SMWRITE2();
+            break;
         case 0x1F:
             INST_NAME("NOP (multibyte)");
             nextop = F8;