about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-09-24 14:31:59 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-09-24 14:31:59 +0200
commit15a4be2db14420b30de25a7386b4dab39be00ac2 (patch)
treed56479c42b8adab2a004c9cb882f4b0c29857aa2 /src
parent0c71d8d4e6ac8562074b3731153c8a46dc5eee33 (diff)
downloadbox64-15a4be2db14420b30de25a7386b4dab39be00ac2.tar.gz
box64-15a4be2db14420b30de25a7386b4dab39be00ac2.zip
[ARM64_DYNAREC] Added 66 0F BF opcode (and cosmetic fix on interpreter)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_660f.c14
-rw-r--r--src/emu/x64run660f.c4
2 files changed, 16 insertions, 2 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_660f.c b/src/dynarec/arm64/dynarec_arm64_660f.c
index c967374d..8a385ca4 100644
--- a/src/dynarec/arm64/dynarec_arm64_660f.c
+++ b/src/dynarec/arm64/dynarec_arm64_660f.c
@@ -2635,6 +2635,20 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
             }

             BFIx(gd, x1, 0, 16);

             break;

+        case 0xBF:

+            INST_NAME("MOVSX Gw, Ew");

+            nextop = F8;

+            GETGW(x1);

+            if(MODREG) {

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

+                SXTHxw(gd, ed);

+            } else {

+                SMREAD();

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

+                LDSHxw(gd, ed, fixedaddress);

+            }

+            GWBACK;

+            break;

 

         case 0xC1:

             INST_NAME("XADD Gw, Ew");

diff --git a/src/emu/x64run660f.c b/src/emu/x64run660f.c
index 35fd6eab..cc7ef8a2 100644
--- a/src/emu/x64run660f.c
+++ b/src/emu/x64run660f.c
@@ -2123,9 +2123,9 @@ uintptr_t Run660F(x64emu_t *emu, rex_t rex, uintptr_t addr)
         GETEW(0);

         GETGW;

         if(rex.w)

-            GW->sq[0] = EB->sword[0];

+            GW->sq[0] = EW->sword[0];

         else

-            GW->sword[0] = EB->sword[0];

+            GW->sword[0] = EW->sword[0];

         break;

 

     case 0xC1:                      /* XADD Gw,Ew */ // Xchange and Add