mirror of
https://github.com/kanjitalk755/macemu.git
synced 2025-02-21 18:28:59 +00:00
Add gen_invoke_CPU_im_im() to invoke do_record_step(pc, opcode).
This commit is contained in:
parent
328bb9f239
commit
5dca41d253
@ -507,6 +507,12 @@ DEFINE_OP(op_invoke_CPU_im, {
|
||||
CALL(func(CPU, PARAM1));
|
||||
});
|
||||
|
||||
DEFINE_OP(op_invoke_CPU_im_im, {
|
||||
typedef void (*func_t)(void *, uint32, uint32);
|
||||
func_t func = (func_t)reg_A0;
|
||||
CALL(func(CPU, PARAM1, PARAM2));
|
||||
});
|
||||
|
||||
DEFINE_OP(op_invoke_direct, {
|
||||
typedef void (*func_t)(void);
|
||||
func_t func = (func_t)PARAM1;
|
||||
@ -543,4 +549,10 @@ DEFINE_OP(op_invoke_direct_CPU_im, {
|
||||
CALL(func(CPU, PARAM2));
|
||||
});
|
||||
|
||||
DEFINE_OP(op_invoke_direct_CPU_im_im, {
|
||||
typedef void (*func_t)(void *, uint32, uint32);
|
||||
func_t func = (func_t)PARAM1;
|
||||
CALL(func(CPU, PARAM2, PARAM3));
|
||||
});
|
||||
|
||||
#undef DEFINE_OP
|
||||
|
@ -102,3 +102,14 @@ basic_dyngen::gen_invoke_CPU_im(void (*func)(dyngen_cpu_base, uint32), uint32 va
|
||||
gen_op_invoke_CPU_im(value);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
basic_dyngen::gen_invoke_CPU_im_im(void (*func)(dyngen_cpu_base, uint32, uint32), uint32 param1, uint32 param2)
|
||||
{
|
||||
if (direct_call_possible((uintptr)func))
|
||||
gen_op_invoke_direct_CPU_im_im((uintptr)func, param1, param2);
|
||||
else {
|
||||
gen_op_mov_ad_A0_im((uintptr)func);
|
||||
gen_op_invoke_CPU_im_im(param1, param2);
|
||||
}
|
||||
}
|
||||
|
@ -81,6 +81,7 @@ public:
|
||||
void gen_invoke_CPU(void (*func)(dyngen_cpu_base));
|
||||
void gen_invoke_CPU_T0(void (*func)(dyngen_cpu_base, uint32));
|
||||
void gen_invoke_CPU_im(void (*func)(dyngen_cpu_base, uint32), uint32 value);
|
||||
void gen_invoke_CPU_im_im(void (*func)(dyngen_cpu_base, uint32, uint32), uint32 param1, uint32 param2);
|
||||
|
||||
// Raw aliases
|
||||
#define DEFINE_ALIAS_RAW(NAME, ARGLIST, ARGS) \
|
||||
|
@ -130,10 +130,10 @@ void powerpc_cpu::init_flight_recorder()
|
||||
#endif
|
||||
}
|
||||
|
||||
void powerpc_cpu::record_step(uint32 opcode)
|
||||
void powerpc_cpu::do_record_step(uint32 pc, uint32 opcode)
|
||||
{
|
||||
#if PPC_FLIGHT_RECORDER
|
||||
log[log_ptr].pc = pc();
|
||||
log[log_ptr].pc = pc;
|
||||
log[log_ptr].opcode = opcode;
|
||||
#ifdef SHEEPSHAVER
|
||||
log[log_ptr].sp = gpr(1);
|
||||
|
@ -176,7 +176,8 @@ private:
|
||||
#else
|
||||
static const bool logging = false;
|
||||
#endif
|
||||
void record_step(uint32 opcode);
|
||||
void do_record_step(uint32 pc, uint32 opcode);
|
||||
void record_step(uint32 opcode) { do_record_step(pc(), opcode); }
|
||||
|
||||
// Syscall callback must return TRUE if no error occurred
|
||||
typedef bool (*syscall_fn)(powerpc_cpu *cpu);
|
||||
|
@ -140,8 +140,11 @@ powerpc_cpu::compile_block(uint32 entry_point)
|
||||
done_compile = true;
|
||||
|
||||
#if PPC_FLIGHT_RECORDER
|
||||
if (is_logging())
|
||||
dg.gen_invoke_CPU_im(nv_mem_fun(&powerpc_cpu::record_step).ptr(), opcode);
|
||||
if (is_logging()) {
|
||||
typedef void (*func_t)(dyngen_cpu_base, uint32, uint32);
|
||||
func_t func = (func_t)nv_mem_fun((execute_pmf)&powerpc_cpu::do_record_step).ptr();
|
||||
dg.gen_invoke_CPU_im_im(func, dpc, opcode);
|
||||
}
|
||||
#endif
|
||||
|
||||
union operands_t {
|
||||
|
Loading…
x
Reference in New Issue
Block a user