about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-03-10 14:41:40 +0100
committerptitSeb <sebastien.chev@gmail.com>2025-03-10 14:41:40 +0100
commitea01b564225a693efc3a59a9f647f4fcc0430d67 (patch)
tree4113651e7e2504d61cf1c1d7053585e8c37e8de6 /src
parent216cf51d4a3aaa9dacc58cdbc569d40ea64ac50e (diff)
downloadbox64-ea01b564225a693efc3a59a9f647f4fcc0430d67.tar.gz
box64-ea01b564225a693efc3a59a9f647f4fcc0430d67.zip
[RV64_DYNAREC] Reduce the number of false-positive for dynarec missing opcode
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/rv64/dynarec_rv64_pass0.h35
1 files changed, 18 insertions, 17 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_pass0.h b/src/dynarec/rv64/dynarec_rv64_pass0.h
index 3c675e33..8dc5d8a0 100644
--- a/src/dynarec/rv64/dynarec_rv64_pass0.h
+++ b/src/dynarec/rv64/dynarec_rv64_pass0.h
@@ -70,23 +70,24 @@
     dyn->insts[ninst].vector_sew_exit = dyn->vector_sew; \
     dyn->insts[ninst].x64.has_next = (ok > 0) ? 1 : 0;
 #define INST_NAME(name)
-#define DEFAULT                                                                                                           \
-    --dyn->size;                                                                                                          \
-    *ok = -1;                                                                                                             \
-    if (ninst) { dyn->insts[ninst - 1].x64.size = ip - dyn->insts[ninst - 1].x64.addr; }                                  \
-    if (BOX64ENV(dynarec_log) >= LOG_INFO || BOX64DRENV(dynarec_dump) || BOX64ENV(dynarec_missing)) {                     \
-        dynarec_log(LOG_NONE, "%p: Dynarec stopped because of %s Opcode ", (void*)ip, rex.is32bits ? "x86" : "x64");      \
-        zydis_dec_t* dec = rex.is32bits ? my_context->dec32 : my_context->dec;                                            \
-        if (dec) {                                                                                                        \
-            dynarec_log_prefix(0, LOG_NONE, "%s", DecodeX64Trace(dec, dyn->insts[ninst].x64.addr, 1));                    \
-        } else {                                                                                                          \
-            dynarec_log_prefix(0, LOG_NONE, "%02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X", \
-                PKip(0), PKip(1), PKip(2), PKip(3), PKip(4), PKip(5), PKip(6), PKip(7), PKip(8), PKip(9),                 \
-                PKip(10), PKip(11), PKip(12), PKip(13), PKip(14));                                                        \
-        }                                                                                                                 \
-        printFunctionAddr(ip, " => ");                                                                                    \
-        dynarec_log_prefix(0, LOG_NONE, "\n");                                                                            \
-    }
+#define DEFAULT                                                                                                               \
+    --dyn->size;                                                                                                              \
+    *ok = -1;                                                                                                                 \
+    if (ninst) { dyn->insts[ninst - 1].x64.size = ip - dyn->insts[ninst - 1].x64.addr; }                                      \
+    if (BOX64ENV(dynarec_log) >= LOG_INFO || BOX64DRENV(dynarec_dump) || BOX64ENV(dynarec_missing) == 1)                      \
+        if (!dyn->size || BOX64ENV(dynarec_log) > LOG_INFO || BOX64DRENV(dynarec_dump)) {                                     \
+            dynarec_log(LOG_NONE, "%p: Dynarec stopped because of %s Opcode ", (void*)ip, rex.is32bits ? "x86" : "x64");      \
+            zydis_dec_t* dec = rex.is32bits ? my_context->dec32 : my_context->dec;                                            \
+            if (dec) {                                                                                                        \
+                dynarec_log_prefix(0, LOG_NONE, "%s", DecodeX64Trace(dec, dyn->insts[ninst].x64.addr, 1));                    \
+            } else {                                                                                                          \
+                dynarec_log_prefix(0, LOG_NONE, "%02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X", \
+                    PKip(0), PKip(1), PKip(2), PKip(3), PKip(4), PKip(5), PKip(6), PKip(7), PKip(8), PKip(9),                 \
+                    PKip(10), PKip(11), PKip(12), PKip(13), PKip(14));                                                        \
+            }                                                                                                                 \
+            printFunctionAddr(ip, " => ");                                                                                    \
+            dynarec_log_prefix(0, LOG_NONE, "\n");                                                                            \
+        }
 
 #define SET_ELEMENT_WIDTH(s1, sew, set)                    \
     do {                                                   \