about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-31 16:47:49 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-03-31 16:47:49 +0200
commit0343ee119c07b2ac15162e20a92956ec0abeed99 (patch)
treee47d5c4fdf405d7331ab39e5e509c29bd8c53278
parentf9c9868349fc8cb311f95c84274ca116b5347a1b (diff)
downloadbox64-0343ee119c07b2ac15162e20a92956ec0abeed99.tar.gz
box64-0343ee119c07b2ac15162e20a92956ec0abeed99.zip
[DYNAREC] Added 0F 6E/6F opcodes
-rwxr-xr-xsrc/dynarec/dynarec_arm64_0f.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_0f.c b/src/dynarec/dynarec_arm64_0f.c
index 0c4ea485..c93590e2 100755
--- a/src/dynarec/dynarec_arm64_0f.c
+++ b/src/dynarec/dynarec_arm64_0f.c
@@ -388,6 +388,34 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             VFMAXQD(v0, v0, v1);

             break;

 

+        case 0x6E:

+            INST_NAME("MOVD Gm, Ed");

+            nextop = F8;

+            GETED(0);

+            gd = (nextop&0x38)>>3;

+            v0 = mmx_get_reg_empty(dyn, ninst, x3, gd);

+            if(rex.w) {

+                VMOVQDfrom(v0, 0, ed);

+            } else {

+                VEOR(v0, v0, v0);

+                VMOVQSfrom(v0, 0, ed);

+            }

+            break;

+        case 0x6F:

+            INST_NAME("MOVQ Gm, Em");

+            nextop = F8;

+            GETG;

+            if(MODREG) {

+                v1 = mmx_get_reg(dyn, ninst, x1, nextop&7); // no rex.b on MMX

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

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

+            } else {

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

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

+                VLD1_64(v0, 0, ed);

+            }

+            break;

+

         #define GO(GETFLAGS, NO, YES, F)   \

             READFLAGS(F);   \

             i32_ = F32S;    \