about summary refs log tree commit diff stats
path: root/src/dynarec
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-24 11:56:07 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-24 11:56:07 +0100
commit5354a134fc68ef5875ee4836cd17aafff15dbabf (patch)
treeef1231576f8004e1a2e440e5105d1a21b7bd36e6 /src/dynarec
parent800d3fd109ec40efff2c19f3f597dd27d6ee7d8d (diff)
downloadbox64-5354a134fc68ef5875ee4836cd17aafff15dbabf.tar.gz
box64-5354a134fc68ef5875ee4836cd17aafff15dbabf.zip
[DYNAREC] Added 0F 12/13 opcodes
Diffstat (limited to 'src/dynarec')
-rwxr-xr-xsrc/dynarec/dynarec_arm64_0f.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/src/dynarec/dynarec_arm64_0f.c b/src/dynarec/dynarec_arm64_0f.c
index aa6bdab1..94966bf5 100755
--- a/src/dynarec/dynarec_arm64_0f.c
+++ b/src/dynarec/dynarec_arm64_0f.c
@@ -122,7 +122,32 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                 VSTR128_U12(v0, ed, fixedaddress);

             }

             break;

-

+        case 0x12:

+            nextop = F8;

+            if(MODREG) {

+                INST_NAME("MOVHLPS Gx,Ex");

+                GETGX(v0);

+                v1 = sse_get_reg(dyn, ninst, x1, (nextop&7)+(rex.b<<3));

+                VMOVeD(v0, 0, v1, 1);

+            } else {

+                INST_NAME("MOVLPS Gx,Ex");

+                GETGX(v0);

+                addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, 0, 0, rex, 0, 0);

+                VLD1_64(v0, 0, ed);

+            }

+            break;

+        case 0x13:

+            nextop = F8;

+            INST_NAME("MOVLPS Ex,Gx");

+            GETGX(v0);

+            if(MODREG) {

+                v1 = sse_get_reg(dyn, ninst, x1, (nextop&7)+(rex.b<<3));

+                VMOVeD(v1, 0, v0, 0);

+            } else {

+                addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, 0, 0, rex, 0, 0);

+                VST1_64(v0, 0, ed);  // better to use VST1 than VSTR_64, to avoid NEON->VFPU transfert I assume

+            }

+            break;

         case 0x14:

             INST_NAME("UNPCKLPS Gx, Ex");

             nextop = F8;