summaryrefslogtreecommitdiffstats
path: root/src/core/arm/dynarmic/arm_dynarmic.h
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2020-03-03 03:41:43 +0100
committerGitHub <noreply@github.com>2020-03-03 03:41:43 +0100
commit08c638f249e0cdde1afa2da31b1176d3b0ab4faf (patch)
tree98be947f2e12da0bfbb388fccfe2fa42799814c3 /src/core/arm/dynarmic/arm_dynarmic.h
parentMerge pull request #3475 from yuzu-emu/FearlessTobi-readme (diff)
parentARM_Interface: Cache the JITs instead of deleting/recreating. (diff)
downloadyuzu-08c638f249e0cdde1afa2da31b1176d3b0ab4faf.tar
yuzu-08c638f249e0cdde1afa2da31b1176d3b0ab4faf.tar.gz
yuzu-08c638f249e0cdde1afa2da31b1176d3b0ab4faf.tar.bz2
yuzu-08c638f249e0cdde1afa2da31b1176d3b0ab4faf.tar.lz
yuzu-08c638f249e0cdde1afa2da31b1176d3b0ab4faf.tar.xz
yuzu-08c638f249e0cdde1afa2da31b1176d3b0ab4faf.tar.zst
yuzu-08c638f249e0cdde1afa2da31b1176d3b0ab4faf.zip
Diffstat (limited to 'src/core/arm/dynarmic/arm_dynarmic.h')
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic.h12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/core/arm/dynarmic/arm_dynarmic.h b/src/core/arm/dynarmic/arm_dynarmic.h
index 9cd475cfb..ffbb69d76 100644
--- a/src/core/arm/dynarmic/arm_dynarmic.h
+++ b/src/core/arm/dynarmic/arm_dynarmic.h
@@ -5,9 +5,12 @@
#pragma once
#include <memory>
+#include <unordered_map>
+
#include <dynarmic/A64/a64.h>
#include <dynarmic/A64/exclusive_monitor.h>
#include "common/common_types.h"
+#include "common/hash.h"
#include "core/arm/arm_interface.h"
#include "core/arm/exclusive_monitor.h"
#include "core/arm/unicorn/arm_unicorn.h"
@@ -22,6 +25,10 @@ class ARM_Dynarmic_Callbacks;
class DynarmicExclusiveMonitor;
class System;
+using JitCacheKey = std::pair<Common::PageTable*, std::size_t>;
+using JitCacheType =
+ std::unordered_map<JitCacheKey, std::shared_ptr<Dynarmic::A64::Jit>, Common::PairHash>;
+
class ARM_Dynarmic final : public ARM_Interface {
public:
ARM_Dynarmic(System& system, ExclusiveMonitor& exclusive_monitor, std::size_t core_index);
@@ -53,12 +60,13 @@ public:
std::size_t new_address_space_size_in_bits) override;
private:
- std::unique_ptr<Dynarmic::A64::Jit> MakeJit(Common::PageTable& page_table,
+ std::shared_ptr<Dynarmic::A64::Jit> MakeJit(Common::PageTable& page_table,
std::size_t address_space_bits) const;
friend class ARM_Dynarmic_Callbacks;
std::unique_ptr<ARM_Dynarmic_Callbacks> cb;
- std::unique_ptr<Dynarmic::A64::Jit> jit;
+ JitCacheType jit_cache;
+ std::shared_ptr<Dynarmic::A64::Jit> jit;
ARM_Unicorn inner_unicorn;
std::size_t core_index;