Exclude JIT-related declarations more aggressively

This commit is contained in:
Jesse Talavera-Greenberg 2023-12-06 09:19:24 -05:00 committed by Nadia Holmquist Pedersen
parent 733769303c
commit 53e5aa6298
5 changed files with 53 additions and 29 deletions

View File

@ -23,7 +23,10 @@
#include <optional> #include <optional>
#include <memory> #include <memory>
#include "types.h" #include "types.h"
#include "MemConstants.h"
#include "Args.h"
#ifdef JIT_ENABLED
#include "ARMJIT_Memory.h" #include "ARMJIT_Memory.h"
#include "JitBlock.h" #include "JitBlock.h"
@ -32,8 +35,6 @@
#endif #endif
#include "ARMJIT_Compiler.h" #include "ARMJIT_Compiler.h"
#include "Args.h"
#include "MemConstants.h"
namespace melonDS namespace melonDS
{ {
@ -52,17 +53,16 @@ public:
BranchOptimizations(jit.has_value() ? jit->BranchOptimizations : false), BranchOptimizations(jit.has_value() ? jit->BranchOptimizations : false),
FastMemory(jit.has_value() ? jit->FastMemory : false) FastMemory(jit.has_value() ? jit->FastMemory : false)
{} {}
~ARMJIT() noexcept NOOP_IF_NO_JIT; ~ARMJIT() noexcept;
void InvalidateByAddr(u32) noexcept NOOP_IF_NO_JIT; void InvalidateByAddr(u32) noexcept;
void CheckAndInvalidateWVRAM(int) noexcept NOOP_IF_NO_JIT; void CheckAndInvalidateWVRAM(int) noexcept;
void CheckAndInvalidateITCM() noexcept NOOP_IF_NO_JIT; void CheckAndInvalidateITCM() noexcept;
void Reset() noexcept NOOP_IF_NO_JIT; void Reset() noexcept;
void JitEnableWrite() noexcept NOOP_IF_NO_JIT; void JitEnableWrite() noexcept;
void JitEnableExecute() noexcept NOOP_IF_NO_JIT; void JitEnableExecute() noexcept;
void CompileBlock(ARM* cpu) noexcept NOOP_IF_NO_JIT; void CompileBlock(ARM* cpu) noexcept;
void ResetBlockCache() noexcept NOOP_IF_NO_JIT; void ResetBlockCache() noexcept;
#ifdef JIT_ENABLED
template <u32 num, int region> template <u32 num, int region>
void CheckAndInvalidate(u32 addr) noexcept void CheckAndInvalidate(u32 addr) noexcept
{ {
@ -73,10 +73,6 @@ public:
JitBlockEntry LookUpBlock(u32 num, u64* entries, u32 offset, u32 addr) noexcept; JitBlockEntry LookUpBlock(u32 num, u64* entries, u32 offset, u32 addr) noexcept;
bool SetupExecutableRegion(u32 num, u32 blockAddr, u64*& entry, u32& start, u32& size) noexcept; bool SetupExecutableRegion(u32 num, u32 blockAddr, u64*& entry, u32& start, u32& size) noexcept;
u32 LocaliseCodeAddress(u32 num, u32 addr) const noexcept; u32 LocaliseCodeAddress(u32 num, u32 addr) const noexcept;
#else
template <u32, int>
void CheckAndInvalidate(u32) noexcept {}
#endif
ARMJIT_Memory Memory; ARMJIT_Memory Memory;
private: private:
@ -185,5 +181,33 @@ public:
// Defined in assembly // Defined in assembly
extern "C" void ARM_Dispatch(melonDS::ARM* cpu, melonDS::JitBlockEntry entry); 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

View File

@ -19,6 +19,8 @@
#ifndef ARMJIT_A64_COMPILER_H #ifndef ARMJIT_A64_COMPILER_H
#define ARMJIT_A64_COMPILER_H #define ARMJIT_A64_COMPILER_H
#if defined(JIT_ENABLED) && defined(__aarch64__)
#include "../ARM.h" #include "../ARM.h"
#include "../dolphin/Arm64Emitter.h" #include "../dolphin/Arm64Emitter.h"
@ -96,11 +98,7 @@ class Compiler : public Arm64Gen::ARM64XEmitter
public: public:
typedef void (Compiler::*CompileFunc)(); typedef void (Compiler::*CompileFunc)();
#ifdef JIT_ENABLED
explicit Compiler(melonDS::NDS& nds); explicit Compiler(melonDS::NDS& nds);
#else
explicit Compiler(melonDS::NDS& nds) : XEmitter(), NDS(nds) {}
#endif
~Compiler() override; ~Compiler() override;
void PushRegs(bool saveHiRegs, bool saveRegsToBeChanged, bool allowUnload = true); void PushRegs(bool saveHiRegs, bool saveRegsToBeChanged, bool allowUnload = true);
@ -291,3 +289,5 @@ public:
} }
#endif #endif
#endif

View File

@ -20,10 +20,6 @@
#define ARMJIT_COMPILER_H #define ARMJIT_COMPILER_H
#ifdef JIT_ENABLED #ifdef JIT_ENABLED
#define NOOP_IF_NO_JIT
#else
#define NOOP_IF_NO_JIT {}
#endif
#if defined(__x86_64__) #if defined(__x86_64__)
#include "ARMJIT_x64/ARMJIT_Compiler.h" #include "ARMJIT_x64/ARMJIT_Compiler.h"
@ -34,3 +30,5 @@
#endif #endif
#endif #endif
#endif

View File

@ -19,6 +19,8 @@
#ifndef ARMJIT_X64_COMPILER_H #ifndef ARMJIT_X64_COMPILER_H
#define ARMJIT_X64_COMPILER_H #define ARMJIT_X64_COMPILER_H
#if defined(JIT_ENABLED) && defined(__x86_64__)
#include "../dolphin/x64Emitter.h" #include "../dolphin/x64Emitter.h"
#include "../ARMJIT_Internal.h" #include "../ARMJIT_Internal.h"
@ -81,11 +83,7 @@ struct Op2
class Compiler : public Gen::XEmitter class Compiler : public Gen::XEmitter
{ {
public: public:
#ifdef JIT_ENABLED
explicit Compiler(melonDS::NDS& nds); explicit Compiler(melonDS::NDS& nds);
#else
explicit Compiler(melonDS::NDS& nds) : XEmitter(), NDS(nds) {}
#endif
void Reset(); void Reset();
@ -284,5 +282,6 @@ public:
}; };
} }
#endif
#endif #endif

View File

@ -36,6 +36,9 @@
#include "AREngine.h" #include "AREngine.h"
#include "GPU.h" #include "GPU.h"
#include "ARMJIT.h" #include "ARMJIT.h"
#include "MemRegion.h"
#include "ARMJIT_Memory.h"
#include "ARM.h"
#include "DMA.h" #include "DMA.h"
#include "FreeBIOS.h" #include "FreeBIOS.h"