// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include #include "common/common_types.h" #include "core/arm/exclusive_monitor.h" namespace Core::Memory { class Memory; } namespace Core { class ArmDynarmic32; class ArmDynarmic64; 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(std::size_t core_index) 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 ArmDynarmic32; friend class ArmDynarmic64; Dynarmic::ExclusiveMonitor monitor; Core::Memory::Memory& memory; }; } // namespace Core