diff options
author | Fernando Sahmkow <fsahmkow27@gmail.com> | 2020-06-19 01:56:59 +0200 |
---|---|---|
committer | Fernando Sahmkow <fsahmkow27@gmail.com> | 2020-06-27 17:36:26 +0200 |
commit | b8df61c642310aeab3118f2637d4447740b8fcd3 (patch) | |
tree | 261ca5221675984cd2a00abc8855aeb5351a0cac /src/core/arm/dynarmic/arm_exclusive_monitor.h | |
parent | SVC: Add GetThreadPriority32 & SetThreadPriority32 (diff) | |
download | yuzu-b8df61c642310aeab3118f2637d4447740b8fcd3.tar yuzu-b8df61c642310aeab3118f2637d4447740b8fcd3.tar.gz yuzu-b8df61c642310aeab3118f2637d4447740b8fcd3.tar.bz2 yuzu-b8df61c642310aeab3118f2637d4447740b8fcd3.tar.lz yuzu-b8df61c642310aeab3118f2637d4447740b8fcd3.tar.xz yuzu-b8df61c642310aeab3118f2637d4447740b8fcd3.tar.zst yuzu-b8df61c642310aeab3118f2637d4447740b8fcd3.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/arm/dynarmic/arm_exclusive_monitor.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/core/arm/dynarmic/arm_exclusive_monitor.h b/src/core/arm/dynarmic/arm_exclusive_monitor.h new file mode 100644 index 000000000..964f4a55d --- /dev/null +++ b/src/core/arm/dynarmic/arm_exclusive_monitor.h @@ -0,0 +1,48 @@ +// Copyright 2020 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include <memory> +#include <unordered_map> + +#include <dynarmic/exclusive_monitor.h> + +#include "common/common_types.h" +#include "core/arm/dynarmic/arm_dynarmic_32.h" +#include "core/arm/dynarmic/arm_dynarmic_64.h" +#include "core/arm/exclusive_monitor.h" + +namespace Core::Memory { +class Memory; +} + +namespace Core { + +class DynarmicExclusiveMonitor final : public ExclusiveMonitor { +public: + explicit DynarmicExclusiveMonitor(Memory::Memory& memory, std::size_t core_count); + ~DynarmicExclusiveMonitor() override; + + u8 ExclusiveRead8(std::size_t core_index, VAddr addr) override; + u16 ExclusiveRead16(std::size_t core_index, VAddr addr) override; + u32 ExclusiveRead32(std::size_t core_index, VAddr addr) override; + u64 ExclusiveRead64(std::size_t core_index, VAddr addr) override; + u128 ExclusiveRead128(std::size_t core_index, VAddr addr) override; + void ClearExclusive() override; + + bool ExclusiveWrite8(std::size_t core_index, VAddr vaddr, u8 value) override; + bool ExclusiveWrite16(std::size_t core_index, VAddr vaddr, u16 value) override; + bool ExclusiveWrite32(std::size_t core_index, VAddr vaddr, u32 value) override; + bool ExclusiveWrite64(std::size_t core_index, VAddr vaddr, u64 value) override; + bool ExclusiveWrite128(std::size_t core_index, VAddr vaddr, u128 value) override; + +private: + friend class ARM_Dynarmic_32; + friend class ARM_Dynarmic_64; + Dynarmic::ExclusiveMonitor monitor; + Core::Memory::Memory& memory; +}; + +} // namespace Core |