void ARM_DynCom::ExecuteInstructions(u64 num_instructions) { state->NumInstrsToExecute = num_instructions; unsigned ticks_executed = InterpreterMainLoop(state.get()); if (system != nullptr) { system->CoreTiming().AddTicks(ticks_executed); } state->ServeBreak(); }
void ARM_DynCom::ExecuteInstructions(int num_instructions) { state->NumInstrsToExecute = num_instructions; // Dyncom only breaks on instruction dispatch. This only happens on every instruction when // executing one instruction at a time. Otherwise, if a block is being executed, more // instructions may actually be executed than specified. unsigned ticks_executed = InterpreterMainLoop(state.get()); AddTicks(ticks_executed); }
void InterpreterFallback(VAddr pc, std::size_t num_instructions) override { parent.interpreter_state->Reg = parent.jit->Regs(); parent.interpreter_state->Cpsr = parent.jit->Cpsr(); parent.interpreter_state->Reg[15] = pc; parent.interpreter_state->ExtReg = parent.jit->ExtRegs(); parent.interpreter_state->VFP[VFP_FPSCR] = parent.jit->Fpscr(); parent.interpreter_state->NumInstrsToExecute = num_instructions; InterpreterMainLoop(parent.interpreter_state.get()); bool is_thumb = (parent.interpreter_state->Cpsr & (1 << 5)) != 0; parent.interpreter_state->Reg[15] &= (is_thumb ? 0xFFFFFFFE : 0xFFFFFFFC); parent.jit->Regs() = parent.interpreter_state->Reg; parent.jit->SetCpsr(parent.interpreter_state->Cpsr); parent.jit->ExtRegs() = parent.interpreter_state->ExtReg; parent.jit->SetFpscr(parent.interpreter_state->VFP[VFP_FPSCR]); parent.interpreter_state->ServeBreak(); }
static void InterpreterFallback(u32 pc, Dynarmic::Jit* jit, void* user_arg) { ARMul_State* state = static_cast<ARMul_State*>(user_arg); state->Reg = jit->Regs(); state->Cpsr = jit->Cpsr(); state->Reg[15] = pc; state->ExtReg = jit->ExtRegs(); state->VFP[VFP_FPSCR] = jit->Fpscr(); state->NumInstrsToExecute = 1; InterpreterMainLoop(state); bool is_thumb = (state->Cpsr & (1 << 5)) != 0; state->Reg[15] &= (is_thumb ? 0xFFFFFFFE : 0xFFFFFFFC); jit->Regs() = state->Reg; jit->Cpsr() = state->Cpsr; jit->ExtRegs() = state->ExtReg; jit->SetFpscr(state->VFP[VFP_FPSCR]); }
void ARM_DynCom::ExecuteInstructions(int num_instructions) { state->NumInstrsToExecute = num_instructions; unsigned ticks_executed = InterpreterMainLoop(state.get()); CoreTiming::AddTicks(ticks_executed); }