about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-30 21:02:19 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-03-30 21:02:19 +0200
commitaf7bfc7de77d5d5af6c0725d1a68df5eccfc7f85 (patch)
tree94f6e19bc34c3d5a7522392d1cd597ec606fc33a /src
parente3759a5cd071258c56d99ddf9a5b0a140536164d (diff)
downloadbox64-af7bfc7de77d5d5af6c0725d1a68df5eccfc7f85.tar.gz
box64-af7bfc7de77d5d5af6c0725d1a68df5eccfc7f85.zip
Added F2 0F 12 opcode ([DYNAREC] too)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/dynarec_arm64_f20f.c15
-rw-r--r--src/emu/x64runf20f.c6
2 files changed, 21 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_f20f.c b/src/dynarec/dynarec_arm64_f20f.c
index 1d351aea..8fe7cc3a 100755
--- a/src/dynarec/dynarec_arm64_f20f.c
+++ b/src/dynarec/dynarec_arm64_f20f.c
@@ -90,6 +90,21 @@ uintptr_t dynarec64_F20F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
                 VSTR64_U12(v0, ed, fixedaddress);

             }

             break;

+        case 0x12:

+            INST_NAME("MOVDDUP Gx, Ex");

+            nextop = F8;

+            GETG;

+            if(MODREG) {

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

+                v0 = sse_get_reg_empty(dyn, ninst, x1, gd);

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

+            } else {

+                v0 = sse_get_reg_empty(dyn, ninst, x1, gd);

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

+                VLDR64_U12(v0, ed, fixedaddress);

+            }

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

+            break;

 

         case 0x2A:

             INST_NAME("CVTSI2SD Gx, Ed");

diff --git a/src/emu/x64runf20f.c b/src/emu/x64runf20f.c
index 18ec9645..44e77a1b 100644
--- a/src/emu/x64runf20f.c
+++ b/src/emu/x64runf20f.c
@@ -53,6 +53,12 @@ int RunF20F(x64emu_t *emu, rex_t rex)
         GETGX;

         EX->q[0] = GX->q[0];

         break;

+    case 0x12:  /* MOVDDUP Gx, Ex */

+        nextop = F8;

+        GETEX(0);

+        GETGX;

+        GX->q[1] = GX->q[0] = EX->q[0];

+        break;

 

     case 0x2A:  /* CVTSI2SD Gx, Ed */

         nextop = F8;