about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-20 22:51:52 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-20 22:51:52 +0100
commit3d3345456412e246da1eead9c3cd2ed278a999c0 (patch)
tree933e260b188d5cc1034b78c38a4eaacaec47c75f /src
parenta70109be83664413f4e873033ed98de35bbf190b (diff)
downloadbox64-3d3345456412e246da1eead9c3cd2ed278a999c0.tar.gz
box64-3d3345456412e246da1eead9c3cd2ed278a999c0.zip
[DYNAREC] Added 66 0F 40..4F CMOVcc opcodes
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/dynarec_arm64_660f.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_660f.c b/src/dynarec/dynarec_arm64_660f.c
index 8f077871..50333692 100755
--- a/src/dynarec/dynarec_arm64_660f.c
+++ b/src/dynarec/dynarec_arm64_660f.c
@@ -68,6 +68,24 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
             FAKEED;

             break;

         

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

+            READFLAGS(F);                           \

+            GETFLAGS;                               \

+            nextop=F8;                              \

+            GETGD;                                  \

+            if(MODREG) {                            \

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

+            } else {                                \

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

+                LDRH_U12(x1, ed, fixedaddress);     \

+                ed = x1;                            \

+            }                                       \

+            Bcond(NO, +8);                          \

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

+

+        GOCOND(0x40, "CMOV", "Gw, Ew");

+        #undef GO

+

         case 0xA3:

             INST_NAME("BT Ew, Gw");

             SETFLAGS(X_CF, SF_SET);