diff options
| author | 2020-03-06 14:56:05 -0400 | |
|---|---|---|
| committer | 2020-06-27 11:35:29 -0400 | |
| commit | a33fbaddec5d516328d7cd179114dcf0b93cfb69 (patch) | |
| tree | 3c4a4ffaae67165e5d4fc380c3f6f899d73f8dac /src/core/arm | |
| parent | Scheduler: Release old thread fiber before trying to switch to the next threa... (diff) | |
| download | yuzu-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.cpp | 18 |
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; |