about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-22 12:16:23 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-22 12:16:23 +0100
commit466a8cb1079785b7275e78cd30b1a9d2d4247a6d (patch)
treeabc8c525f3cc66e046839ed1782b872477b67b5d /src
parent23c9d574d9cc85f60ac0b81a24d50a8e80d93eb0 (diff)
downloadbox64-466a8cb1079785b7275e78cd30b1a9d2d4247a6d.tar.gz
box64-466a8cb1079785b7275e78cd30b1a9d2d4247a6d.zip
[DYNAREC] Added 66 89/8B opcodes
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/dynarec_arm64_66.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_66.c b/src/dynarec/dynarec_arm64_66.c
index 3446350b..ba7a90be 100755
--- a/src/dynarec/dynarec_arm64_66.c
+++ b/src/dynarec/dynarec_arm64_66.c
@@ -315,6 +315,36 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             GWBACK;

             break;

 

+        case 0x89:

+            INST_NAME("MOV Ew, Gw");

+            nextop = F8;

+            GETGD;  // don't need GETGW here

+            if(MODREG) {

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

+                if(ed!=gd) {

+                    BFIx(ed, gd, 0, 16);

+                }

+            } else {

+                addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, 0xfff<<1, 1, rex, 0, 0);

+                STRH_U12(gd, ed, fixedaddress);

+            }

+            break;

+        case 0x8B:

+            INST_NAME("MOV Gw, Ew");

+            nextop = F8;

+            GETGD;  // don't need GETGW neither

+            if(MODREG) {

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

+                if(ed!=gd) {

+                    BFIx(gd, ed, 0, 16);

+                }

+            } else {

+                addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, 0xfff<<1, 1, rex, 0, 0);

+                LDRH_U12(x1, ed, fixedaddress);

+                BFIx(gd, x1, 0, 16);

+            }

+            break;

+

         case 0x90:

             INST_NAME("NOP");

             break;