about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-09-24 21:03:56 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-09-24 21:04:57 +0200
commite5db9aa8741100bb69ba5082e28ffeaf276dfd0e (patch)
tree346e633354497804e081bc988190fa90eacd6ba3 /src
parent2d0b60898cc4b7d7feaa49f47d3d569d407e93c1 (diff)
downloadbox64-e5db9aa8741100bb69ba5082e28ffeaf276dfd0e.tar.gz
box64-e5db9aa8741100bb69ba5082e28ffeaf276dfd0e.zip
[ARM64_DYNAREC] Fixed some issue with a few 16bits opcodes on 64bits operations
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_66.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_66.c b/src/dynarec/arm64/dynarec_arm64_66.c
index 9c39182c..3be6dac2 100644
--- a/src/dynarec/arm64/dynarec_arm64_66.c
+++ b/src/dynarec/arm64/dynarec_arm64_66.c
@@ -330,7 +330,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             gd = xRAX + (opcode&7);

             UXTHw(x1, gd);

             emit_inc16(dyn, ninst, x1, x2, x3);

-            BFIw(gd, x1, 0, 16);

+            BFIz(gd, x1, 0, 16);

             break;

         case 0x48:

         case 0x49:

@@ -345,7 +345,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             gd = xRAX + (opcode&7);

             UXTHw(x1, gd);

             emit_dec16(dyn, ninst, x1, x2, x3);

-            BFIw(gd, x1, 0, 16);

+            BFIz(gd, x1, 0, 16);

             break;

         case 0x50:

         case 0x51:

@@ -375,7 +375,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             INST_NAME("POP reg");

             gd = xRAX+(opcode&0x07)+(rex.b<<3);

             POP1_16(x1);

-            BFIw(gd, x1, 0, 16);

+            BFIz(gd, x1, 0, 16);

             break;

         case 0x60:

             if(rex.is32bits) {

@@ -397,20 +397,20 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             if(rex.is32bits) {

                 INST_NAME("POPA 16bits (32bits)");

                 POP1_16(x1);

-                BFIw(xRDI, x1, 0, 16);

+                BFIz(xRDI, x1, 0, 16);

                 POP1_16(x1);

-                BFIw(xRSI, x1, 0, 16);

+                BFIz(xRSI, x1, 0, 16);

                 POP1_16(x1);

-                BFIw(xRBP, x1, 0, 16);

+                BFIz(xRBP, x1, 0, 16);

                 POP1_16(x1); // RSP ignored

                 POP1_16(x1);

-                BFIw(xRBX, x1, 0, 16);

+                BFIz(xRBX, x1, 0, 16);

                 POP1_16(x1);

-                BFIw(xRDX, x1, 0, 16);

+                BFIz(xRDX, x1, 0, 16);

                 POP1_16(x1);

-                BFIw(xRCX, x1, 0, 16);

+                BFIz(xRCX, x1, 0, 16);

                 POP1_16(x1);

-                BFIw(xRAX, x1, 0, 16);

+                BFIz(xRAX, x1, 0, 16);

             } else {

                 DEFAULT;

             }