summaryrefslogtreecommitdiff
path: root/src/core/arm
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2020-03-06 14:56:05 -0400
committerGravatar Fernando Sahmkow2020-06-27 11:35:29 -0400
commita33fbaddec5d516328d7cd179114dcf0b93cfb69 (patch)
tree3c4a4ffaae67165e5d4fc380c3f6f899d73f8dac /src/core/arm
parentScheduler: Release old thread fiber before trying to switch to the next threa... (diff)
downloadyuzu-a33fbaddec5d516328d7cd179114dcf0b93cfb69.tar.gz
yuzu-a33fbaddec5d516328d7cd179114dcf0b93cfb69.tar.xz
yuzu-a33fbaddec5d516328d7cd179114dcf0b93cfb69.zip
Core: Correct rebase.
Diffstat (limited to 'src/core/arm')
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic_32.cpp18
1 files changed, 6 insertions, 12 deletions
diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp
index 0b7aa6a69..30bf62ac1 100644
--- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp
@@ -8,6 +8,7 @@
8#include <dynarmic/A32/config.h> 8#include <dynarmic/A32/config.h>
9#include <dynarmic/A32/context.h> 9#include <dynarmic/A32/context.h>
10#include "common/microprofile.h" 10#include "common/microprofile.h"
11#include "core/arm/cpu_interrupt_handler.h"
11#include "core/arm/dynarmic/arm_dynarmic_32.h" 12#include "core/arm/dynarmic/arm_dynarmic_32.h"
12#include "core/arm/dynarmic/arm_dynarmic_64.h" 13#include "core/arm/dynarmic/arm_dynarmic_64.h"
13#include "core/arm/dynarmic/arm_dynarmic_cp15.h" 14#include "core/arm/dynarmic/arm_dynarmic_cp15.h"
@@ -72,20 +73,13 @@ public:
72 } 73 }
73 74
74 void AddTicks(u64 ticks) override { 75 void AddTicks(u64 ticks) override {
75 // Divide the number of ticks by the amount of CPU cores. TODO(Subv): This yields only a 76 /// We are using host timing, NOP
76 // rough approximation of the amount of executed ticks in the system, it may be thrown off
77 // if not all cores are doing a similar amount of work. Instead of doing this, we should
78 // device a way so that timing is consistent across all cores without increasing the ticks 4
79 // times.
80 u64 amortized_ticks = (ticks - num_interpreted_instructions) / Core::NUM_CPU_CORES;
81 // Always execute at least one tick.
82 amortized_ticks = std::max<u64>(amortized_ticks, 1);
83
84 parent.system.CoreTiming().AddTicks(amortized_ticks);
85 num_interpreted_instructions = 0;
86 } 77 }
87 u64 GetTicksRemaining() override { 78 u64 GetTicksRemaining() override {
88 return std::max(parent.system.CoreTiming().GetDowncount(), {}); 79 if (!parent.interrupt_handler.IsInterrupted()) {
80 return 1000ULL;
81 }
82 return 0ULL;
89 } 83 }
90 84
91 ARM_Dynarmic_32& parent; 85 ARM_Dynarmic_32& parent;