about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-06-24 13:40:11 +0200
committerptitSeb <sebastien.chev@gmail.com>2023-06-24 13:40:11 +0200
commit179015a05004740594b509a8b552f914ddb6d64e (patch)
treef46a91ea84cc42a5452c9c3bf3ce5365648ba898 /src
parentd34428d249b4a22b94656eb8b59c29f63075f2fc (diff)
downloadbox64-179015a05004740594b509a8b552f914ddb6d64e.tar.gz
box64-179015a05004740594b509a8b552f914ddb6d64e.zip
[ARM64_DYNAREC] Added 67 63 opcode
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/arm64/dynarec_arm64_67.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_67.c b/src/dynarec/arm64/dynarec_arm64_67.c
index 9c7894df..58a959f1 100755
--- a/src/dynarec/arm64/dynarec_arm64_67.c
+++ b/src/dynarec/arm64/dynarec_arm64_67.c
@@ -605,6 +605,29 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                 emit_cmp32_0(dyn, ninst, rex, xRAX, x3, x4);

             break;

 

+        case 0x63:

+            INST_NAME("MOVSXD Gd, Ed");

+            nextop = F8;

+            GETGD;

+            if(rex.w) {

+                if(MODREG) {   // reg <= reg

+                    SXTWx(gd, xRAX+(nextop&7)+(rex.b<<3));

+                } else {                    // mem <= reg

+                    SMREAD();

+                    addr = geted32(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0);

+                    LDSW(gd, ed, fixedaddress);

+                }

+            } else {

+                if(MODREG) {   // reg <= reg

+                    MOVw_REG(gd, xRAX+(nextop&7)+(rex.b<<3));

+                } else {                    // mem <= reg

+                    SMREAD();

+                    addr = geted32(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0);

+                    LDW(gd, ed, fixedaddress);

+                }

+            }

+            break;

+

         case 0x81:

         case 0x83:

             nextop = F8;