about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-08-29 13:30:04 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-08-29 13:30:04 +0200
commit04b9195cd2220b7d7d8d194556df73b7572ac949 (patch)
treeabd27479a634e331fba4488a0b1c963e38d9b3aa /src
parent3aa12a52eb7185a6675f6d59c63e31b94b4f1c0f (diff)
downloadbox64-04b9195cd2220b7d7d8d194556df73b7572ac949.tar.gz
box64-04b9195cd2220b7d7d8d194556df73b7572ac949.zip
Added 66 0F B7 opcode ([DYNAREC] too)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/dynarec_arm64_660f.c14
-rw-r--r--src/emu/x64run660f.c6
2 files changed, 20 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_660f.c b/src/dynarec/dynarec_arm64_660f.c
index 45b8907f..f0a91740 100755
--- a/src/dynarec/dynarec_arm64_660f.c
+++ b/src/dynarec/dynarec_arm64_660f.c
@@ -1279,6 +1279,20 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
             gd = xRAX+((nextop&0x38)>>3)+(rex.r<<3);    // GETGW

             BFIx(gd, x1, 0, 16);        // insert in Gw

             break;

+        case 0xB7:

+            INST_NAME("MOVZX Gw, Ew");

+            nextop = F8;

+            if(MODREG) {

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

+                UBFXxw(x1, eb1, 0, 16);

+            } else {

+                addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, 0xfff>>1, 1, rex, 0, 0);

+                LDRH_U12(x1, ed, fixedaddress);

+            }

+            gd = xRAX+((nextop&0x38)>>3)+(rex.r<<3);    // GETGW

+            BFIx(gd, x1, 0, 16);        // insert in Gw

+            break;

+

 

         case 0xBB:

             INST_NAME("BTC Ew, Gw");

diff --git a/src/emu/x64run660f.c b/src/emu/x64run660f.c
index 2c6a364c..676656b7 100644
--- a/src/emu/x64run660f.c
+++ b/src/emu/x64run660f.c
@@ -1278,6 +1278,12 @@ int Run660F(x64emu_t *emu, rex_t rex)
         GETGW;

         GW->word[0] = EB->byte[0];

         break;

+    case 0xB7:                      /* MOVZX Gw,Ew */

+        nextop = F8;

+        GETEW(0);

+        GETGW;

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

+        break;

 

     case 0xBA:                      

         nextop = F8;