From 2d4a7c7be5b3cf8412012d799b451c6b6e1e38b7 Mon Sep 17 00:00:00 2001 From: izzy Meyer Date: Wed, 21 Oct 2026 13:27:11 -0500 Subject: [PATCH 1/4] JIT: Re-enable ENABLE_JIT for x86_64 OS X --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c74f6b93a7..d193d1e490 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,7 +63,7 @@ detect_architecture("__arm__" ARM) detect_architecture("__aarch64__" ARM64) cmake_dependent_option(ENABLE_JIT "Enable JIT recompiler" ON - "ARCHITECTURE STREQUAL x86_64 OR ARCHITECTURE STREQUAL ARM64;NOT ARCHITECTURE STREQUAL x86_64 OR NOT APPLE" OFF) + "ARCHITECTURE STREQUAL x86_64 OR ARCHITECTURE STREQUAL ARM64" OFF) cmake_dependent_option(ENABLE_JIT_PROFILING "Enable JIT profiling with VTune" OFF "ENABLE_JIT" OFF) option(ENABLE_OGLRENDERER "Enable OpenGL renderer" ON) From 29a38f8f70141ae5ff39dc8a26bcf83f5948ca64 Mon Sep 17 00:00:00 2001 From: izzy Meyer Date: Wed, 21 Oct 2026 13:29:37 -0500 Subject: [PATCH 2/4] JIT: Force *ALL* OS X arch's to use dynamic JIT code paths --- src/ARMJIT_Global.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/ARMJIT_Global.cpp b/src/ARMJIT_Global.cpp index e4aa42f9b3..81d6f526b1 100644 --- a/src/ARMJIT_Global.cpp +++ b/src/ARMJIT_Global.cpp @@ -21,11 +21,7 @@ namespace ARMJIT_Global std::mutex globalMutex; -#if defined(__APPLE__) && defined(__aarch64__) -#define APPLE_AARCH64 -#endif - -#if !defined(APPLE_AARCH64) && !defined(__NetBSD__) && !defined(__OpenBSD__) +#if !defined(__APPLE__) && !defined(__NetBSD__) && !defined(__OpenBSD__) static constexpr size_t NumCodeMemSlices = 4; static constexpr size_t CodeMemoryAlignedSize = NumCodeMemSlices * CodeMemorySliceSize; @@ -46,7 +42,7 @@ void* AllocateCodeMem() { std::lock_guard guard(globalMutex); -#if !defined(APPLE_AARCH64) && !defined(__NetBSD__) && !defined(__OpenBSD__) +#if !defined(__APPLE__) && !defined(__NetBSD__) && !defined(__OpenBSD__) if (AvailableCodeMemSlices) { int slice = __builtin_ctz(AvailableCodeMemSlices); @@ -59,7 +55,7 @@ void* AllocateCodeMem() // allocate #ifdef _WIN32 return VirtualAlloc(nullptr, CodeMemorySliceSize, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE); -#elif defined(APPLE_AARCH64) +#elif defined(__APPLE__) return mmap(NULL, CodeMemorySliceSize, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS | MAP_JIT,-1, 0); #elif defined(__NetBSD__) return mmap(nullptr, CodeMemorySliceSize, PROT_MPROTECT(PROT_READ | PROT_WRITE | PROT_EXEC), MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); @@ -73,7 +69,7 @@ void FreeCodeMem(void* codeMem) { std::lock_guard guard(globalMutex); -#if !defined(APPLE_AARCH64) && !defined(__NetBSD__) && !defined(__OpenBSD__) +#if !defined(__APPLE__) && !defined(__NetBSD__) && !defined(__OpenBSD__) for (int i = 0; i < NumCodeMemSlices; i++) { if (codeMem == &GetAlignedCodeMemoryStart()[CodeMemorySliceSize * i]) @@ -102,8 +98,8 @@ void Init() #ifdef _WIN32 DWORD dummy; VirtualProtect(GetAlignedCodeMemoryStart(), CodeMemoryAlignedSize, PAGE_EXECUTE_READWRITE, &dummy); - #elif defined(APPLE_AARCH64) || defined(__NetBSD__) || defined(__OpenBSD__) - // Apple aarch64 always uses dynamic allocation + #elif defined(__APPLE__) || defined(__NetBSD__) || defined(__OpenBSD__) + // these platforms always use dynamic allocation #else mprotect(GetAlignedCodeMemoryStart(), CodeMemoryAlignedSize, PROT_EXEC | PROT_READ | PROT_WRITE); #endif From 2dcc472d21e4678921b3d11d1f19464af43b3b43 Mon Sep 17 00:00:00 2001 From: izzy Meyer Date: Wed, 21 Oct 2026 13:39:05 -0500 Subject: [PATCH 3/4] JIT: let arm64 OS X use dynamic memory alloc --- src/ARMJIT_Global.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/ARMJIT_Global.cpp b/src/ARMJIT_Global.cpp index 81d6f526b1..e269312afa 100644 --- a/src/ARMJIT_Global.cpp +++ b/src/ARMJIT_Global.cpp @@ -55,8 +55,6 @@ void* AllocateCodeMem() // allocate #ifdef _WIN32 return VirtualAlloc(nullptr, CodeMemorySliceSize, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE); -#elif defined(__APPLE__) - return mmap(NULL, CodeMemorySliceSize, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS | MAP_JIT,-1, 0); #elif defined(__NetBSD__) return mmap(nullptr, CodeMemorySliceSize, PROT_MPROTECT(PROT_READ | PROT_WRITE | PROT_EXEC), MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); #else From e47d8cf9c6d582fdce33b56cd56c0c26cb975fd1 Mon Sep 17 00:00:00 2001 From: izzy Meyer Date: Wed, 21 Oct 2026 15:22:55 -0500 Subject: [PATCH 4/4] JIT: revert "let arm64 OS X use dynamic memory alloc" & change the check to also check for arm64 --- src/ARMJIT_Global.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ARMJIT_Global.cpp b/src/ARMJIT_Global.cpp index e269312afa..44766a78f8 100644 --- a/src/ARMJIT_Global.cpp +++ b/src/ARMJIT_Global.cpp @@ -55,6 +55,8 @@ void* AllocateCodeMem() // allocate #ifdef _WIN32 return VirtualAlloc(nullptr, CodeMemorySliceSize, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE); +#elif defined(__APPLE__) && defined(__aarch64__) + return mmap(NULL, CodeMemorySliceSize, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS | MAP_JIT,-1, 0); #elif defined(__NetBSD__) return mmap(nullptr, CodeMemorySliceSize, PROT_MPROTECT(PROT_READ | PROT_WRITE | PROT_EXEC), MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); #else