diff options
Diffstat (limited to 'src/ARMJIT.h')
-rw-r--r-- | src/ARMJIT.h | 58 |
1 files changed, 41 insertions, 17 deletions
diff --git a/src/ARMJIT.h b/src/ARMJIT.h index 6390855..7ea5472 100644 --- a/src/ARMJIT.h +++ b/src/ARMJIT.h @@ -23,7 +23,10 @@ #include <optional> #include <memory> #include "types.h" +#include "MemConstants.h" +#include "Args.h" +#ifdef JIT_ENABLED #include "ARMJIT_Memory.h" #include "JitBlock.h" @@ -32,8 +35,6 @@ #endif #include "ARMJIT_Compiler.h" -#include "Args.h" -#include "MemConstants.h" namespace melonDS { @@ -52,17 +53,16 @@ public: BranchOptimizations(jit.has_value() ? jit->BranchOptimizations : false), FastMemory(jit.has_value() ? jit->FastMemory : false) {} - ~ARMJIT() noexcept NOOP_IF_NO_JIT; - void InvalidateByAddr(u32) noexcept NOOP_IF_NO_JIT; - void CheckAndInvalidateWVRAM(int) noexcept NOOP_IF_NO_JIT; - void CheckAndInvalidateITCM() noexcept NOOP_IF_NO_JIT; - void Reset() noexcept NOOP_IF_NO_JIT; - void JitEnableWrite() noexcept NOOP_IF_NO_JIT; - void JitEnableExecute() noexcept NOOP_IF_NO_JIT; - void CompileBlock(ARM* cpu) noexcept NOOP_IF_NO_JIT; - void ResetBlockCache() noexcept NOOP_IF_NO_JIT; + ~ARMJIT() noexcept; + void InvalidateByAddr(u32) noexcept; + void CheckAndInvalidateWVRAM(int) noexcept; + void CheckAndInvalidateITCM() noexcept; + void Reset() noexcept; + void JitEnableWrite() noexcept; + void JitEnableExecute() noexcept; + void CompileBlock(ARM* cpu) noexcept; + void ResetBlockCache() noexcept; -#ifdef JIT_ENABLED template <u32 num, int region> void CheckAndInvalidate(u32 addr) noexcept { @@ -73,10 +73,6 @@ public: JitBlockEntry LookUpBlock(u32 num, u64* entries, u32 offset, u32 addr) noexcept; bool SetupExecutableRegion(u32 num, u32 blockAddr, u64*& entry, u32& start, u32& size) noexcept; u32 LocaliseCodeAddress(u32 num, u32 addr) const noexcept; -#else - template <u32, int> - void CheckAndInvalidate(u32) noexcept {} -#endif ARMJIT_Memory Memory; private: @@ -185,5 +181,33 @@ public: // Defined in assembly extern "C" void ARM_Dispatch(melonDS::ARM* cpu, melonDS::JitBlockEntry entry); +#else +namespace melonDS +{ +class ARM; + +// This version is a stub; the methods all do nothing, +// but there's still a Memory member. +class ARMJIT +{ +public: + ARMJIT(melonDS::NDS& nds, std::optional<JITArgs>) noexcept : Memory(nds) {} + ~ARMJIT() noexcept {} + void InvalidateByAddr(u32) noexcept {} + void CheckAndInvalidateWVRAM(int) noexcept {} + void CheckAndInvalidateITCM() noexcept {} + void Reset() noexcept {} + void JitEnableWrite() noexcept {} + void JitEnableExecute() noexcept {} + void CompileBlock(ARM*) noexcept {} + void ResetBlockCache() noexcept {} + template <u32, int> + void CheckAndInvalidate(u32 addr) noexcept {} + + ARMJIT_Memory Memory; +}; +} +#endif // JIT_ENABLED + +#endif // ARMJIT_H -#endif |