diff options
author | bunnei <ericbunnie@gmail.com> | 2014-05-17 17:59:18 +0200 |
---|---|---|
committer | bunnei <ericbunnie@gmail.com> | 2014-05-17 17:59:18 +0200 |
commit | 265c770a9d663b96a9a422201bac3dd454fa95c0 (patch) | |
tree | e7a1682450b857d80cc2ed0f863f4a82b81142bd /src/core/arm/interpreter | |
parent | Merge pull request #17 from bunnei/arm-vfp (diff) | |
download | yuzu-265c770a9d663b96a9a422201bac3dd454fa95c0.tar yuzu-265c770a9d663b96a9a422201bac3dd454fa95c0.tar.gz yuzu-265c770a9d663b96a9a422201bac3dd454fa95c0.tar.bz2 yuzu-265c770a9d663b96a9a422201bac3dd454fa95c0.tar.lz yuzu-265c770a9d663b96a9a422201bac3dd454fa95c0.tar.xz yuzu-265c770a9d663b96a9a422201bac3dd454fa95c0.tar.zst yuzu-265c770a9d663b96a9a422201bac3dd454fa95c0.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/arm/interpreter/arm_interpreter.cpp | 19 | ||||
-rw-r--r-- | src/core/arm/interpreter/arm_interpreter.h | 7 | ||||
-rw-r--r-- | src/core/arm/interpreter/armdefs.h | 1 | ||||
-rw-r--r-- | src/core/arm/interpreter/armemu.cpp | 2 |
4 files changed, 14 insertions, 15 deletions
diff --git a/src/core/arm/interpreter/arm_interpreter.cpp b/src/core/arm/interpreter/arm_interpreter.cpp index 4652803de..23d96d292 100644 --- a/src/core/arm/interpreter/arm_interpreter.cpp +++ b/src/core/arm/interpreter/arm_interpreter.cpp @@ -85,16 +85,11 @@ u64 ARM_Interpreter::GetTicks() const { return ARMul_Time(m_state); } -/// Execture next instruction -void ARM_Interpreter::ExecuteInstruction() { - m_state->step++; - m_state->cycle++; - m_state->EndCondition = 0; - m_state->stop_simulator = 0; - m_state->NextInstr = RESUME; - m_state->last_pc = m_state->Reg[15]; - m_state->Reg[15] = ARMul_DoInstr(m_state); - m_state->Cpsr = ((m_state->Cpsr & 0x0fffffdf) | (m_state->NFlag << 31) | (m_state->ZFlag << 30) | - (m_state->CFlag << 29) | (m_state->VFlag << 28) | (m_state->TFlag << 5)); - m_state->NextInstr |= PRIMEPIPE; // Flush pipe +/** + * Executes the given number of instructions + * @param num_instructions Number of instructions to executes + */ +void ARM_Interpreter::ExecuteInstructions(int num_instructions) { + m_state->NumInstrsToExecute = num_instructions; + ARMul_Emulate32(m_state); } diff --git a/src/core/arm/interpreter/arm_interpreter.h b/src/core/arm/interpreter/arm_interpreter.h index 625c0c652..509025080 100644 --- a/src/core/arm/interpreter/arm_interpreter.h +++ b/src/core/arm/interpreter/arm_interpreter.h @@ -56,8 +56,11 @@ public: protected: - /// Execture next instruction - void ExecuteInstruction(); + /** + * Executes the given number of instructions + * @param num_instructions Number of instructions to executes + */ + void ExecuteInstructions(int num_instructions); private: diff --git a/src/core/arm/interpreter/armdefs.h b/src/core/arm/interpreter/armdefs.h index 821825ae6..5b2abc7f7 100644 --- a/src/core/arm/interpreter/armdefs.h +++ b/src/core/arm/interpreter/armdefs.h @@ -288,6 +288,7 @@ struct ARMul_State ARMword loaded_addr, decoded_addr; /* saved pipeline state addr*/ unsigned int NumScycles, NumNcycles, NumIcycles, NumCcycles, NumFcycles; /* emulated cycles used */ unsigned long long NumInstrs; /* the number of instructions executed */ + unsigned NumInstrsToExecute; unsigned NextInstr; unsigned VectorCatch; /* caught exception mask */ unsigned CallDebug; /* set to call the debugger */ diff --git a/src/core/arm/interpreter/armemu.cpp b/src/core/arm/interpreter/armemu.cpp index 87141653f..32e315f4b 100644 --- a/src/core/arm/interpreter/armemu.cpp +++ b/src/core/arm/interpreter/armemu.cpp @@ -4734,7 +4734,7 @@ TEST_EMULATE: else if (state->Emulate != RUN) break; } - while (!state->stop_simulator); + while (state->NumInstrsToExecute--); state->decoded = decoded; state->loaded = loaded; |