about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2025-02-18 00:06:47 +0800
committerGitHub <noreply@github.com>2025-02-17 17:06:47 +0100
commitf85b9ac664fedafe2fba8d40a01456bf197b5228 (patch)
tree54ba5c4575ace87dd29b4cd2f026b8f6d0bcbe76 /src
parentee5a41e21e01dfc3bf51a8f893ffdea2f2791e52 (diff)
downloadbox64-f85b9ac664fedafe2fba8d40a01456bf197b5228.tar.gz
box64-f85b9ac664fedafe2fba8d40a01456bf197b5228.zip
[INTERP] Added more nops ([DYNAREC] too) (#2377)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_64.c8
-rw-r--r--src/dynarec/la64/dynarec_la64_64.c14
-rw-r--r--src/dynarec/rv64/dynarec_rv64_64.c7
-rw-r--r--src/emu/x64run64.c7
4 files changed, 35 insertions, 1 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_64.c b/src/dynarec/arm64/dynarec_arm64_64.c
index 3aa3571b..ee1d22f1 100644
--- a/src/dynarec/arm64/dynarec_arm64_64.c
+++ b/src/dynarec/arm64/dynarec_arm64_64.c
@@ -194,7 +194,13 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                             DEFAULT;
                     }
                     break;
-
+                case 0x18:
+                case 0x19:
+                case 0x1F:
+                    INST_NAME("NOP (multibyte)");
+                    nextop = F8;
+                    FAKEED;
+                    break;
                 case 0x28:
                     switch(rep) {
                         case 0:
diff --git a/src/dynarec/la64/dynarec_la64_64.c b/src/dynarec/la64/dynarec_la64_64.c
index 2af080ef..6e076719 100644
--- a/src/dynarec/la64/dynarec_la64_64.c
+++ b/src/dynarec/la64/dynarec_la64_64.c
@@ -79,6 +79,20 @@ uintptr_t dynarec64_64(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
             GETEDO(x4, 0);
             emit_or32(dyn, ninst, rex, gd, ed, x3, x4);
             break;
+        case 0x0F:
+            opcode = F8;
+            switch (opcode) {
+                case 0x18:
+                case 0x19:
+                case 0x1F:
+                    INST_NAME("NOP (multibyte)");
+                    nextop = F8;
+                    FAKEED;
+                    break;
+                default:
+                    DEFAULT;
+            }
+            break;
         case 0x2B:
             INST_NAME("SUB Gd, Seg:Ed");
             SETFLAGS(X_ALL, SF_SET_PENDING, NAT_FLAGS_FUSION);
diff --git a/src/dynarec/rv64/dynarec_rv64_64.c b/src/dynarec/rv64/dynarec_rv64_64.c
index 6447c7f2..69503d77 100644
--- a/src/dynarec/rv64/dynarec_rv64_64.c
+++ b/src/dynarec/rv64/dynarec_rv64_64.c
@@ -131,6 +131,13 @@ uintptr_t dynarec64_64(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                     }
                     break;
 
+                    case 0x18:
+                    case 0x19:
+                    case 0x1F:
+                        INST_NAME("NOP (multibyte)");
+                        nextop = F8;
+                        FAKEED;
+                        break;
                 default:
                     DEFAULT;
             }
diff --git a/src/emu/x64run64.c b/src/emu/x64run64.c
index 0470d92a..33f1e806 100644
--- a/src/emu/x64run64.c
+++ b/src/emu/x64run64.c
@@ -178,6 +178,13 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr)
                             return 0;

                     }

                     break;

+

+                case 0x18:

+                case 0x19:

+                case 0x1F: /* NOP (multi-byte) */

+                    nextop = F8;

+                    FAKEED(0);

+                    break;

                 case 0x28:

                     switch(rep) {

                         case 0: /* MOVAPS Gx, FS:Ex */