about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-04-11 15:38:09 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-04-11 15:38:09 +0200
commitaf6fb49e482c64fc6a717321148e60ad488318b3 (patch)
tree14862af90214da266186b9df91e419af88675d6f /src
parentc593988bc101fa836478396212f4f01d8b98c565 (diff)
downloadbox64-af6fb49e482c64fc6a717321148e60ad488318b3.tar.gz
box64-af6fb49e482c64fc6a717321148e60ad488318b3.zip
Added F2 0F F0 ocpode ([DYNAREC] too)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/dynarec_arm64_f20f.c15
-rw-r--r--src/emu/x64runf20f.c9
2 files changed, 23 insertions, 1 deletions
diff --git a/src/dynarec/dynarec_arm64_f20f.c b/src/dynarec/dynarec_arm64_f20f.c
index b51318ef..51717ed2 100755
--- a/src/dynarec/dynarec_arm64_f20f.c
+++ b/src/dynarec/dynarec_arm64_f20f.c
@@ -296,6 +296,21 @@ uintptr_t dynarec64_F20F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
             VMOVQDfrom(v0, 0, x2);

             break;

 

+        case 0xF0:

+            INST_NAME("LDDQU Gx,Ex");

+            nextop = F8;

+            GETG;

+            if(MODREG) {

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

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

+                VMOVQ(v0, v1);

+            } else {

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

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

+                VLDR128_U12(v0, ed, fixedaddress);

+            }

+            break;

+

         default:

             DEFAULT;

     }

diff --git a/src/emu/x64runf20f.c b/src/emu/x64runf20f.c
index 44e77a1b..2d64969a 100644
--- a/src/emu/x64runf20f.c
+++ b/src/emu/x64runf20f.c
@@ -260,7 +260,14 @@ int RunF20F(x64emu_t *emu, rex_t rex)
         GX->q[1] = 0;

         break;

 

-    default:

+    case 0xF0:  /* LDDQU Gx, Ex */

+        nextop = F8;

+        GETEX(0);

+        GETGX;

+        memcpy(GX, EX, 16);

+        break;

+

+   default:

         return 1;

     }

     return 0;