Exemplo n.º 1
0
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();
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
    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();
    }
Exemplo n.º 4
0
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]);
}
Exemplo n.º 5
0
void ARM_DynCom::ExecuteInstructions(int num_instructions) {
    state->NumInstrsToExecute = num_instructions;
    unsigned ticks_executed = InterpreterMainLoop(state.get());
    CoreTiming::AddTicks(ticks_executed);
}