diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2025-04-24 16:37:24 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-24 10:37:24 +0200 |
| commit | 926e4b2da82d2da28484f2e8da6d30f30e702205 (patch) | |
| tree | 9b895f9f0884e1c28478b50ac6dd83271bd6c633 /src/dynarec/la64 | |
| parent | 4903177bab1f3324a0faeedd968fed5bf4ea8772 (diff) | |
| download | box64-926e4b2da82d2da28484f2e8da6d30f30e702205.tar.gz box64-926e4b2da82d2da28484f2e8da6d30f30e702205.zip | |
[DYNAREC] Added ranged Dynablock dump (#2570)
Diffstat (limited to 'src/dynarec/la64')
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_functions.c | 8 | ||||
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_pass0.h | 2 | ||||
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_pass3.h | 4 | ||||
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_private.h | 1 |
4 files changed, 8 insertions, 7 deletions
diff --git a/src/dynarec/la64/dynarec_la64_functions.c b/src/dynarec/la64/dynarec_la64_functions.c index 31d39ffd..3decf652 100644 --- a/src/dynarec/la64/dynarec_la64_functions.c +++ b/src/dynarec/la64/dynarec_la64_functions.c @@ -350,7 +350,7 @@ static register_mapping_t register_mappings[] = { void printf_x64_instruction(dynarec_native_t* dyn, zydis_dec_t* dec, instruction_x64_t* inst, const char* name); void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t rex) { - if (!BOX64DRENV(dynarec_dump) && !BOX64ENV(dynarec_gdbjit) && !BOX64ENV(dynarec_perf_map)) return; + if (!dyn->need_dump && !BOX64ENV(dynarec_gdbjit) && !BOX64ENV(dynarec_perf_map)) return; static char buf[256]; int length = sprintf(buf, "barrier=%d state=%d/%d(%d), %s=%X/%X, use=%X, need=%X/%X, fuse=%d, sm=%d(%d/%d)", @@ -395,11 +395,11 @@ void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t r if (dyn->insts[ninst].lsx.combined1 || dyn->insts[ninst].lsx.combined2) length += sprintf(buf + length, " %s:%d/%d", dyn->insts[ninst].lsx.swapped ? "SWP" : "CMB", dyn->insts[ninst].lsx.combined1, dyn->insts[ninst].lsx.combined2); - if (BOX64DRENV(dynarec_dump)) { + if (dyn->need_dump) { printf_x64_instruction(dyn, rex.is32bits ? my_context->dec32 : my_context->dec, &dyn->insts[ninst].x64, name); dynarec_log(LOG_NONE, "%s%p: %d emitted opcodes, inst=%d, %s%s\n", - (BOX64DRENV(dynarec_dump) > 1) ? "\e[32m" : "", - (void*)(dyn->native_start + dyn->insts[ninst].address), dyn->insts[ninst].size / 4, ninst, buf, (BOX64DRENV(dynarec_dump) > 1) ? "\e[m" : ""); + (dyn->need_dump > 1) ? "\e[32m" : "", + (void*)(dyn->native_start + dyn->insts[ninst].address), dyn->insts[ninst].size / 4, ninst, buf, (dyn->need_dump > 1) ? "\e[m" : ""); } if (BOX64ENV(dynarec_gdbjit)) { static char buf2[512]; diff --git a/src/dynarec/la64/dynarec_la64_pass0.h b/src/dynarec/la64/dynarec_la64_pass0.h index 3193aca1..c235bbcd 100644 --- a/src/dynarec/la64/dynarec_la64_pass0.h +++ b/src/dynarec/la64/dynarec_la64_pass0.h @@ -55,7 +55,7 @@ --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 (BOX64ENV(dynarec_log) >= LOG_INFO || dyn->need_dump || BOX64ENV(dynarec_missing) == 1) { \ 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) { \ diff --git a/src/dynarec/la64/dynarec_la64_pass3.h b/src/dynarec/la64/dynarec_la64_pass3.h index 900e95d3..92354bb7 100644 --- a/src/dynarec/la64/dynarec_la64_pass3.h +++ b/src/dynarec/la64/dynarec_la64_pass3.h @@ -5,7 +5,7 @@ addInst(dyn->instsize, &dyn->insts_size, 0, 0); #define EMIT(A) \ do { \ - if (BOX64DRENV(dynarec_dump)) print_opcode(dyn, ninst, (uint32_t)(A)); \ + if (dyn->need_dump) print_opcode(dyn, ninst, (uint32_t)(A)); \ if ((uintptr_t)dyn->block < dyn->tablestart) \ *(uint32_t*)(dyn->block) = (uint32_t)(A); \ dyn->block += 4; \ @@ -15,7 +15,7 @@ #define MESSAGE(A, ...) \ do { \ - if (BOX64DRENV(dynarec_dump)) dynarec_log(LOG_NONE, __VA_ARGS__); \ + if (dyn->need_dump) dynarec_log(LOG_NONE, __VA_ARGS__); \ } while (0) #define NEW_INST \ if (ninst) { \ diff --git a/src/dynarec/la64/dynarec_la64_private.h b/src/dynarec/la64/dynarec_la64_private.h index e2dea342..2244b122 100644 --- a/src/dynarec/la64/dynarec_la64_private.h +++ b/src/dynarec/la64/dynarec_la64_private.h @@ -148,6 +148,7 @@ typedef struct dynarec_la64_s { uint8_t abort; void* gdbjit_block; uint32_t need_x87check; // x87 low precision check + uint32_t need_dump; // need to dump the block } dynarec_la64_t; void add_next(dynarec_la64_t *dyn, uintptr_t addr); |