// SPDX-FileCopyrightText: 2017 Citra Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include #include #include "common/common_types.h" namespace Core { class ArmDynarmic32; class DynarmicCP15 final : public Dynarmic::A32::Coprocessor { public: using CoprocReg = Dynarmic::A32::CoprocReg; explicit DynarmicCP15(ArmDynarmic32& parent_) : parent{parent_} {} std::optional CompileInternalOperation(bool two, unsigned opc1, CoprocReg CRd, CoprocReg CRn, CoprocReg CRm, unsigned opc2) override; CallbackOrAccessOneWord CompileSendOneWord(bool two, unsigned opc1, CoprocReg CRn, CoprocReg CRm, unsigned opc2) override; CallbackOrAccessTwoWords CompileSendTwoWords(bool two, unsigned opc, CoprocReg CRm) override; CallbackOrAccessOneWord CompileGetOneWord(bool two, unsigned opc1, CoprocReg CRn, CoprocReg CRm, unsigned opc2) override; CallbackOrAccessTwoWords CompileGetTwoWords(bool two, unsigned opc, CoprocReg CRm) override; std::optional CompileLoadWords(bool two, bool long_transfer, CoprocReg CRd, std::optional option) override; std::optional CompileStoreWords(bool two, bool long_transfer, CoprocReg CRd, std::optional option) override; ArmDynarmic32& parent; u32 uprw = 0; u32 uro = 0; friend class ArmDynarmic32; }; } // namespace Core