Improve tracing prints

This commit is contained in:
David Guillen Fandos 2021-08-15 22:48:43 +02:00
parent 057b80f8cc
commit f5232543f5
3 changed files with 30 additions and 22 deletions

View File

@ -1229,22 +1229,26 @@ u32 execute_store_cpsr_body(u32 _cpsr, u32 store_mask, u32 address)
} }
#ifdef TRACE_INSTRUCTIONS #ifdef TRACE_INSTRUCTIONS
void trace_instruction(u32 pc) void trace_instruction(u32 pc, u32 mode)
{ {
printf("Executed %x\n", pc); if (mode)
printf("Executed arm %x\n", pc);
else
printf("Executed thumb %x\n", pc);
} }
#define emit_trace_instruction(pc) \ #define emit_trace_instruction(pc, mode) \
generate_save_flags(); \ generate_save_flags(); \
ARM_STMDB_WB(0, ARMREG_SP, 0x500C); \ ARM_STMDB_WB(0, ARMREG_SP, 0x500C); \
arm_load_imm_32bit(reg_a0, pc); \ arm_load_imm_32bit(reg_a0, pc); \
arm_load_imm_32bit(reg_a1, mode); \
generate_function_call(trace_instruction); \ generate_function_call(trace_instruction); \
ARM_LDMIA_WB(0, ARMREG_SP, 0x500C); \ ARM_LDMIA_WB(0, ARMREG_SP, 0x500C); \
generate_restore_flags(); generate_restore_flags();
#define emit_trace_thumb_instruction(pc) \ #define emit_trace_thumb_instruction(pc) \
emit_trace_instruction(pc) emit_trace_instruction(pc, 0)
#define emit_trace_arm_instruction(pc) \ #define emit_trace_arm_instruction(pc) \
emit_trace_instruction(pc) emit_trace_instruction(pc, 1)
#else #else
#define emit_trace_thumb_instruction(pc) #define emit_trace_thumb_instruction(pc)
#define emit_trace_arm_instruction(pc) #define emit_trace_arm_instruction(pc)

View File

@ -2346,19 +2346,23 @@ u32 execute_store_cpsr_body(u32 _cpsr, u32 store_mask, u32 address)
generate_function_call(mips_cheat_hook); generate_function_call(mips_cheat_hook);
#ifdef TRACE_INSTRUCTIONS #ifdef TRACE_INSTRUCTIONS
void trace_instruction(u32 pc) void trace_instruction(u32 pc, u32 mode)
{ {
printf("Executed %x\n", pc); if (mode)
printf("Executed arm %x\n", pc);
else
printf("Executed thumb %x\n", pc);
} }
#define emit_trace_instruction(pc) \ #define emit_trace_instruction(pc, mode) \
emit_save_regs(false); \ emit_save_regs(false); \
generate_load_imm(reg_a0, pc); \ generate_load_imm(reg_a0, pc); \
generate_load_imm(reg_a1, mode); \
genccall(&trace_instruction); \ genccall(&trace_instruction); \
mips_emit_nop(); \ mips_emit_nop(); \
emit_restore_regs(false) emit_restore_regs(false)
#define emit_trace_thumb_instruction(pc) emit_trace_instruction(pc) #define emit_trace_thumb_instruction(pc) emit_trace_instruction(pc, 0)
#define emit_trace_arm_instruction(pc) emit_trace_instruction(pc) #define emit_trace_arm_instruction(pc) emit_trace_instruction(pc, 1)
#else #else
#define emit_trace_thumb_instruction(pc) #define emit_trace_thumb_instruction(pc)
#define emit_trace_arm_instruction(pc) #define emit_trace_arm_instruction(pc)

View File

@ -529,22 +529,22 @@ typedef enum
generate_mov(ireg, rv) \ generate_mov(ireg, rv) \
#ifdef TRACE_INSTRUCTIONS #ifdef TRACE_INSTRUCTIONS
void function_cc trace_instruction(u32 pc) void function_cc trace_instruction(u32 pc, u32 mode)
{ {
printf("Executed %x\n", pc); if (mode)
printf("Executed arm %x\n", pc);
else
printf("Executed thumb %x\n", pc);
} }
#define emit_trace_thumb_instruction(pc) \ #define emit_trace_instruction(pc, mode) \
x86_emit_push_reg(eax); \ x86_emit_mov_reg_imm(reg_a0, pc); \
x86_emit_push_reg(ecx); \ x86_emit_mov_reg_imm(reg_a1, mode); \
x86_emit_push_reg(edx); \ generate_function_call(trace_instruction);
x86_emit_mov_reg_imm(eax, pc); \
generate_function_call(trace_instruction); \
x86_emit_pop_reg(edx); \
x86_emit_pop_reg(ecx); \
x86_emit_pop_reg(eax);
#define emit_trace_arm_instruction(pc) \ #define emit_trace_arm_instruction(pc) \
emit_trace_thumb_instruction(pc) emit_trace_instruction(pc, 1)
#define emit_trace_thumb_instruction(pc) \
emit_trace_instruction(pc, 0)
#else #else
#define emit_trace_thumb_instruction(pc) #define emit_trace_thumb_instruction(pc)
#define emit_trace_arm_instruction(pc) #define emit_trace_arm_instruction(pc)