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
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(); \
ARM_STMDB_WB(0, ARMREG_SP, 0x500C); \
arm_load_imm_32bit(reg_a0, pc); \
arm_load_imm_32bit(reg_a1, mode); \
generate_function_call(trace_instruction); \
ARM_LDMIA_WB(0, ARMREG_SP, 0x500C); \
generate_restore_flags();
#define emit_trace_thumb_instruction(pc) \
emit_trace_instruction(pc)
emit_trace_instruction(pc, 0)
#define emit_trace_arm_instruction(pc) \
emit_trace_instruction(pc)
emit_trace_instruction(pc, 1)
#else
#define emit_trace_thumb_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);
#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); \
generate_load_imm(reg_a0, pc); \
generate_load_imm(reg_a1, mode); \
genccall(&trace_instruction); \
mips_emit_nop(); \
emit_restore_regs(false)
#define emit_trace_thumb_instruction(pc) emit_trace_instruction(pc)
#define emit_trace_arm_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, 1)
#else
#define emit_trace_thumb_instruction(pc)
#define emit_trace_arm_instruction(pc)

View File

@ -529,22 +529,22 @@ typedef enum
generate_mov(ireg, rv) \
#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) \
x86_emit_push_reg(eax); \
x86_emit_push_reg(ecx); \
x86_emit_push_reg(edx); \
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_instruction(pc, mode) \
x86_emit_mov_reg_imm(reg_a0, pc); \
x86_emit_mov_reg_imm(reg_a1, mode); \
generate_function_call(trace_instruction);
#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
#define emit_trace_thumb_instruction(pc)
#define emit_trace_arm_instruction(pc)