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_0f.c34
1 files changed, 22 insertions, 12 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_0f.c b/src/dynarec/arm64/dynarec_arm64_0f.c
index 85025081..8c970f43 100644
--- a/src/dynarec/arm64/dynarec_arm64_0f.c
+++ b/src/dynarec/arm64/dynarec_arm64_0f.c
@@ -1643,12 +1643,17 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
         case 0xA4:

             nextop = F8;

             INST_NAME("SHLD Ed, Gd, Ib");

-            SETFLAGS(X_ALL, SF_SET_PENDING);

-            GETED(1);

-            GETGD;

-            u8 = F8;

-            emit_shld32c(dyn, ninst, rex, ed, gd, u8, x3, x4);

-            WBACK;

+            if(geted_ib(dyn, addr, ninst, nextop)) {

+                SETFLAGS(X_ALL, SF_SET_PENDING);

+                GETED(1);

+                GETGD;

+                u8 = F8;

+                emit_shld32c(dyn, ninst, rex, ed, gd, u8, x3, x4);

+                WBACK;

+            } else {

+                FAKEED;

+                F8;

+            }

             break;

         case 0xA5:

             nextop = F8;

@@ -1719,12 +1724,17 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
         case 0xAC:

             nextop = F8;

             INST_NAME("SHRD Ed, Gd, Ib");

-            SETFLAGS(X_ALL, SF_SET_PENDING);

-            GETED(1);

-            GETGD;

-            u8 = F8;

-            emit_shrd32c(dyn, ninst, rex, ed, gd, u8, x3, x4);

-            WBACK;

+            if(geted_ib(dyn, addr, ninst, nextop)) {

+                SETFLAGS(X_ALL, SF_SET_PENDING);

+                GETED(1);

+                GETGD;

+                u8 = F8;

+                emit_shrd32c(dyn, ninst, rex, ed, gd, u8, x3, x4);

+                WBACK;

+            } else {

+                FAKEED;

+                F8;

+            }

             break;

         case 0xAD:

             nextop = F8;