about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_66.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_66.c b/src/dynarec/arm64/dynarec_arm64_66.c
index e99e3cef..4c38482c 100644
--- a/src/dynarec/arm64/dynarec_arm64_66.c
+++ b/src/dynarec/arm64/dynarec_arm64_66.c
@@ -670,7 +670,22 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                 SMWRITE2();

             }

             break;

-

+        case 0x8D:

+            INST_NAME("LEA Gd, Ed");

+            nextop=F8;

+            GETGD;

+            if(MODREG) {   // reg <= reg? that's an invalid operation

+                DEFAULT;

+            } else {                    // mem <= reg

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

+                if(gd!=ed) {    // it's sometimes used as a 3 bytes NOP

+                    if(rex.w)

+                        MOVx_REG(gd, ed);

+                    else

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

+                }

+            }

+            break;

         case 0x8E:

             INST_NAME("MOV Seg,Ew");

             nextop = F8;