diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2024-07-18 14:13:44 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-18 08:13:44 +0200 |
| commit | c1a14f93d81e2419458e5673729a2c46876996c9 (patch) | |
| tree | 9f6419a703aec3be660e8f7a93b457a4f8bfbf00 /src/dynarec | |
| parent | f07ee85078a2571f02b8c3c9f132760a53b95331 (diff) | |
| download | box64-c1a14f93d81e2419458e5673729a2c46876996c9.tar.gz box64-c1a14f93d81e2419458e5673729a2c46876996c9.zip | |
[RV64_DYNAREC] Show missing opcodes in vector implementation (#1695)
Diffstat (limited to 'src/dynarec')
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_660f_vector.c | 4 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_helper.h | 3 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_pass0.h | 18 |
3 files changed, 22 insertions, 3 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_660f_vector.c b/src/dynarec/rv64/dynarec_rv64_660f_vector.c index bcda4100..aec3028b 100644 --- a/src/dynarec/rv64/dynarec_rv64_660f_vector.c +++ b/src/dynarec/rv64/dynarec_rv64_660f_vector.c @@ -63,8 +63,8 @@ uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i } break; default: - // fallback to the scalar version - return 0; + DEFAULT_VECTOR; } + return addr; } diff --git a/src/dynarec/rv64/dynarec_rv64_helper.h b/src/dynarec/rv64/dynarec_rv64_helper.h index 515170be..6b2731bd 100644 --- a/src/dynarec/rv64/dynarec_rv64_helper.h +++ b/src/dynarec/rv64/dynarec_rv64_helper.h @@ -1010,6 +1010,9 @@ *ok = -1; \ BARRIER(2) #endif +#ifndef DEFAULT_VECTOR +#define DEFAULT_VECTOR return 0 +#endif #ifndef TABLE64 #define TABLE64(A, V) diff --git a/src/dynarec/rv64/dynarec_rv64_pass0.h b/src/dynarec/rv64/dynarec_rv64_pass0.h index 684d3bbf..ed3c321b 100644 --- a/src/dynarec/rv64/dynarec_rv64_pass0.h +++ b/src/dynarec/rv64/dynarec_rv64_pass0.h @@ -34,7 +34,7 @@ dyn->insts[ninst].f_exit = dyn->f; \ dyn->insts[ninst].e = dyn->e; \ dyn->insts[ninst].x64.has_next = (ok>0)?1:0; -#define INST_NAME(name) +#define INST_NAME(name) #define DEFAULT \ --dyn->size; \ *ok = -1; \ @@ -50,3 +50,19 @@ printFunctionAddr(ip, " => "); \ dynarec_log(LOG_NONE, "\n"); \ } + +#define DEFAULT_VECTOR \ + if (box64_dynarec_log >= LOG_INFO || box64_dynarec_dump || box64_dynarec_missing) { \ + dynarec_log(LOG_NONE, "%p: Dynarec fallback to scalar version because of %s Opcode" \ + " %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X", \ + (void*)ip, rex.is32bits ? "x86 " : "x64 ", \ + 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(LOG_NONE, "\n"); \ + } \ + return 0 |