about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-07-23 11:02:22 +0200
committerptitSeb <sebastien.chev@gmail.com>2023-07-23 11:02:22 +0200
commitda6ad1a43d85e0a9ad4f2801f5b5bdb73dc55055 (patch)
tree460fd0feaaa62739ae6d86096a4b2dbb339bda27 /src
parentf9e4253cb7ba9843f04f44e19294256aae0393a0 (diff)
downloadbox64-da6ad1a43d85e0a9ad4f2801f5b5bdb73dc55055.tar.gz
box64-da6ad1a43d85e0a9ad4f2801f5b5bdb73dc55055.zip
[32BITS] Added 66 FF /6 opcode ([ARM64_DYNAREC] too)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_66.c10
-rw-r--r--src/emu/x64run66.c10
2 files changed, 16 insertions, 4 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_66.c b/src/dynarec/arm64/dynarec_arm64_66.c
index ff269cf2..8f588207 100644
--- a/src/dynarec/arm64/dynarec_arm64_66.c
+++ b/src/dynarec/arm64/dynarec_arm64_66.c
@@ -1117,6 +1117,16 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                     emit_dec16(dyn, ninst, x1, x2, x4);

                     EWBACK;

                     break;

+                case 6: // Push Ew

+                    if(rex.is32bits) {

+                        INST_NAME("PUSH Ew");

+                        GETEW(x1, 0);

+                        PUSH1_16(ed);

+                    } else {

+                        DEFAULT;

+                    }

+                    break;

+

                 default:

                     DEFAULT;

             }

diff --git a/src/emu/x64run66.c b/src/emu/x64run66.c
index b037de11..4a6f92aa 100644
--- a/src/emu/x64run66.c
+++ b/src/emu/x64run66.c
@@ -799,7 +799,6 @@ uintptr_t Run66(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr)
     case 0xFF:                      /* GRP 5 Ew */

         nextop = F8;

         GETEW(0);

-        GETGW;

         switch((nextop>>3)&7) {

             case 0:                 /* INC Ed */

                 EW->word[0] = inc16(emu, EW->word[0]);

@@ -817,9 +816,12 @@ uintptr_t Run66(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr)
                 }

                 addr = tmp64u;

                 break;

-           /*case 6:

-                Push16(emu, EW->word[0]);

-                break;*/

+           case 6:                  /* Push Ew */

+                if(rex.is32bits) {

+                    Push16(emu, EW->word[0]);

+                } else 

+                    return 0;

+                break;

             default:

                     printf_log(LOG_NONE, "Illegal Opcode %p: 66 %02X %02X %02X %02X %02X %02X\n",(void*)R_RIP, opcode, nextop, PK(2), PK(3), PK(4), PK(5));

                     emu->quit=1;