about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-07-16 10:17:14 +0200
committerptitSeb <sebastien.chev@gmail.com>2023-07-16 10:17:14 +0200
commit915f7cbd54e1574ca989689cf504c6ea07c859a4 (patch)
tree739cb187d29c03a18fabcdae5f7ecf2198e2a192 /src
parent0b3097cd0b15eedd3e33ae2331f32fc261ee1231 (diff)
downloadbox64-915f7cbd54e1574ca989689cf504c6ea07c859a4.tar.gz
box64-915f7cbd54e1574ca989689cf504c6ea07c859a4.zip
Fixed some of 16bits opcodes ([ARM64_DYNAREC] too)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/arm64/dynarec_arm64_helper.c4
-rwxr-xr-xsrc/emu/x64run_private.c10
2 files changed, 7 insertions, 7 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_helper.c b/src/dynarec/arm64/dynarec_arm64_helper.c
index 34b2744d..13b58359 100755
--- a/src/dynarec/arm64/dynarec_arm64_helper.c
+++ b/src/dynarec/arm64/dynarec_arm64_helper.c
@@ -477,8 +477,8 @@ uintptr_t geted16(dynarec_arm_t* dyn, uintptr_t addr, int ninst, uint8_t nextop,
     int64_t offset = 0;
     int absmin = 0;
     if(s) absmin = -absmax;
-    if(!n && m==6) {
-        offset = F16;
+    if(!n && (m&7)==6) {
+        offset = F16S;
         MOVZw(ret, offset);
     } else {
         switch(n) {
diff --git a/src/emu/x64run_private.c b/src/emu/x64run_private.c
index f80ea58e..b17b3e7f 100755
--- a/src/emu/x64run_private.c
+++ b/src/emu/x64run_private.c
@@ -1185,7 +1185,7 @@ reg64_t* GetEw16_32(x64emu_t *emu, uintptr_t* addr, uint8_t m, uint32_t base)
         case 7: base+=      R_BX; break;
     }
     switch((m>>6)&3) {
-        case 0: if(m==6) base+= F16(addr); break;
+        case 0: if((m&7)==6) base= F16S(addr); break;
         case 1: base += F8S(addr); break;
         case 2: base += F16S(addr); break;
         // case 3 is C0..C7, already dealt with
@@ -1538,7 +1538,7 @@ reg64_t* GetEw16(x64emu_t *emu, uintptr_t* addr, rex_t rex, uint8_t v)
             case 7: base =      R_BX; break;
         }
         switch((m>>6)&3) {
-            case 0: if(m==6) base = F16(addr); break;
+            case 0: if((m&7)==6) base = F16S(addr); break;
             case 1: base += F8S(addr); break;
             case 2: base += F16S(addr); break;
             // case 3 is C0..C7, already dealt with
@@ -1568,7 +1568,7 @@ reg64_t* TestEw16(x64test_t *test, uintptr_t* addr, rex_t rex, uint8_t v)
             case 7: base =      R_BX; break;
         }
         switch((m>>6)&3) {
-            case 0: if(m==6) base = F16(addr); break;
+            case 0: if((m&7)==6) base = F16S(addr); break;
             case 1: base += F8S(addr); break;
             case 2: base += F16S(addr); break;
             // case 3 is C0..C7, already dealt with
@@ -1600,7 +1600,7 @@ reg64_t* GetEw16off(x64emu_t *emu, uintptr_t* addr, rex_t rex, uint8_t v, uintpt
             case 7: base =      R_BX; break;
         }
         switch((m>>6)&3) {
-            case 0: if(m==6) base = F16(addr); break;
+            case 0: if((m&7)==6) base = F16S(addr); break;
             case 1: base += F8S(addr); break;
             case 2: base += F16S(addr); break;
             // case 3 is C0..C7, already dealt with
@@ -1630,7 +1630,7 @@ reg64_t* TestEw16off(x64test_t *test, uintptr_t* addr, rex_t rex, uint8_t v, uin
             case 7: base =      R_BX; break;
         }
         switch((m>>6)&3) {
-            case 0: if(m==6) base = F16(addr); break;
+            case 0: if((m&7)==6) base = F16S(addr); break;
             case 1: base += F8S(addr); break;
             case 2: base += F16S(addr); break;
             // case 3 is C0..C7, already dealt with