about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-31 17:30:43 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-03-31 17:30:43 +0200
commitd78dbbe4c72f48d8c8b74b304192c783eb0649e3 (patch)
tree558f8d8b153855a4f0ab6d9db405bee6af1c6be4 /src
parent663ac80fd060342aeb48ac09e057a9468e79a81b (diff)
downloadbox64-d78dbbe4c72f48d8c8b74b304192c783eb0649e3.tar.gz
box64-d78dbbe4c72f48d8c8b74b304192c783eb0649e3.zip
[DYNAREC] Added 0F 6E/6F opcodes
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/dynarec_arm64_0f.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_0f.c b/src/dynarec/dynarec_arm64_0f.c
index 446b2cb9..087727ce 100755
--- a/src/dynarec/dynarec_arm64_0f.c
+++ b/src/dynarec/dynarec_arm64_0f.c
@@ -531,6 +531,40 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             }

             break;

             

+        case 0x7E:

+            INST_NAME("MOVD Ed, Gm");

+            nextop = F8;

+            GETGM(v0);

+            if((nextop&0xC0)==0xC0) {

+                ed = xRAX + (nextop&7) + (rex.b<<3);

+                if(rex.w) {

+                    VMOVQDto(ed, v0, 0);

+                } else {

+                    VMOVSto(ed, v0, 0);

+                    MOVxw_REG(ed, ed);

+                }

+            } else {

+                addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, 0xfff<<(2+rex.w), (1<<(2+rex.w))-1, rex, 0, 0);

+                if(rex.w) {

+                    VSTR64_U12(v0, ed, fixedaddress);

+                } else {

+                    VSTR32_U12(v0, ed, fixedaddress);

+                }

+            }

+            break;

+        case 0x7F:

+            INST_NAME("MOVQ Em, Gm");

+            nextop = F8;

+            GETGM(v0);

+            if(MODREG) {

+                v1 = mmx_get_reg_empty(dyn, ninst, x1, nextop&7);

+                VMOV(v1, v0);

+            } else {

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

+                VSTR64_U12(v0, ed, fixedaddress);

+            }

+            break;

+

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

             READFLAGS(F);   \

             i32_ = F32S;    \