From 794dea819ae730d89037826e965d7b8b2a833038 Mon Sep 17 00:00:00 2001 From: lizzie Date: Sat, 31 Jan 2026 12:34:57 +0000 Subject: [PATCH] force ankerl + fixup for OO with prelude commits --- .patch/xbyak/0001-macro-stl.patch | 21 +++++++++++++ .patch/xbyak_sun/0001-macro-stl.patch | 21 +++++++++++++ src/core/arm/dynarmic/arm_dynarmic_32.cpp | 2 +- src/core/arm/dynarmic/arm_dynarmic_64.cpp | 2 +- .../backend/x64/a32_emit_x64_memory.cpp | 2 +- .../backend/x64/a64_emit_x64_memory.cpp | 2 +- src/dynarmic/src/dynarmic/backend/x64/abi.cpp | 2 +- .../dynarmic/backend/x64/block_of_code.cpp | 31 ++++++++++++++----- .../src/dynarmic/backend/x64/block_of_code.h | 4 +-- .../src/dynarmic/backend/x64/callback.h | 2 +- .../src/dynarmic/backend/x64/constant_pool.h | 2 +- .../src/dynarmic/backend/x64/emit_x64.h | 3 +- .../backend/x64/emit_x64_floating_point.cpp | 2 +- .../dynarmic/backend/x64/emit_x64_memory.h | 2 +- .../dynarmic/backend/x64/emit_x64_vector.cpp | 2 +- .../x64/emit_x64_vector_floating_point.cpp | 2 +- .../src/dynarmic/backend/x64/hostloc.h | 2 +- src/dynarmic/src/dynarmic/backend/x64/oparg.h | 2 +- .../src/dynarmic/backend/x64/reg_alloc.cpp | 2 +- .../src/dynarmic/backend/x64/reg_alloc.h | 2 +- src/dynarmic/src/dynarmic/backend/x64/xbyak.h | 15 +++++++++ .../src/dynarmic/common/spin_lock_x64.cpp | 2 +- .../src/dynarmic/common/spin_lock_x64.h | 2 +- 23 files changed, 100 insertions(+), 29 deletions(-) create mode 100644 .patch/xbyak/0001-macro-stl.patch create mode 100644 .patch/xbyak_sun/0001-macro-stl.patch create mode 100644 src/dynarmic/src/dynarmic/backend/x64/xbyak.h diff --git a/.patch/xbyak/0001-macro-stl.patch b/.patch/xbyak/0001-macro-stl.patch new file mode 100644 index 0000000000..5cfb9eeec6 --- /dev/null +++ b/.patch/xbyak/0001-macro-stl.patch @@ -0,0 +1,21 @@ +diff --git a/xbyak/xbyak.h b/xbyak/xbyak.h +index ed7706a..51b520d 100644 +--- a/xbyak/xbyak.h ++++ b/xbyak/xbyak.h +@@ -37,6 +37,7 @@ + #define XBYAK_GNUC_PREREQ(major, minor) 0 + #endif + ++#if !defined(XBYAK_STD_UNORDERED_SET) + // This covers -std=(gnu|c)++(0x|11|1y), -stdlib=libc++, and modern Microsoft. + #if ((defined(_MSC_VER) && (_MSC_VER >= 1600)) || defined(_LIBCPP_VERSION) ||\ + ((__cplusplus >= 201103) || defined(__GXX_EXPERIMENTAL_CXX0X__))) +@@ -71,6 +72,8 @@ + #define XBYAK_STD_UNORDERED_MAP std::map + #define XBYAK_STD_UNORDERED_MULTIMAP std::multimap + #endif ++#endif ++ + #ifdef _WIN32 + #ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN diff --git a/.patch/xbyak_sun/0001-macro-stl.patch b/.patch/xbyak_sun/0001-macro-stl.patch new file mode 100644 index 0000000000..5cfb9eeec6 --- /dev/null +++ b/.patch/xbyak_sun/0001-macro-stl.patch @@ -0,0 +1,21 @@ +diff --git a/xbyak/xbyak.h b/xbyak/xbyak.h +index ed7706a..51b520d 100644 +--- a/xbyak/xbyak.h ++++ b/xbyak/xbyak.h +@@ -37,6 +37,7 @@ + #define XBYAK_GNUC_PREREQ(major, minor) 0 + #endif + ++#if !defined(XBYAK_STD_UNORDERED_SET) + // This covers -std=(gnu|c)++(0x|11|1y), -stdlib=libc++, and modern Microsoft. + #if ((defined(_MSC_VER) && (_MSC_VER >= 1600)) || defined(_LIBCPP_VERSION) ||\ + ((__cplusplus >= 201103) || defined(__GXX_EXPERIMENTAL_CXX0X__))) +@@ -71,6 +72,8 @@ + #define XBYAK_STD_UNORDERED_MAP std::map + #define XBYAK_STD_UNORDERED_MULTIMAP std::multimap + #endif ++#endif ++ + #ifdef _WIN32 + #ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp index a556e7b0ce..eb130b165b 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp @@ -210,7 +210,7 @@ void ArmDynarmic32::MakeJit(Common::PageTable* page_table) { // Code cache size #if defined(__OPENORBIS__) - config.code_cache_size = std::uint32_t(8_MiB); + config.code_cache_size = std::uint32_t(32_MiB); #elif defined(ARCHITECTURE_arm64) || defined(__sun__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) config.code_cache_size = std::uint32_t(128_MiB); #else diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.cpp b/src/core/arm/dynarmic/arm_dynarmic_64.cpp index 0fa131f710..5f9e5fdb8d 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_64.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_64.cpp @@ -262,7 +262,7 @@ void ArmDynarmic64::MakeJit(Common::PageTable* page_table, std::size_t address_s // Code cache size #if defined(__OPENORBIS__) - config.code_cache_size = std::uint32_t(8_MiB); + config.code_cache_size = std::uint32_t(32_MiB); #elif defined(ARCHITECTURE_arm64) || defined(__sun__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) config.code_cache_size = std::uint32_t(128_MiB); #else diff --git a/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64_memory.cpp b/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64_memory.cpp index db7fef5334..3a34b207d7 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64_memory.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/a32_emit_x64_memory.cpp @@ -14,7 +14,7 @@ #include #include #include -#include +#include "dynarmic/backend/x64/xbyak.h" #include "dynarmic/backend/x64/a32_emit_x64.h" #include "dynarmic/backend/x64/abi.h" diff --git a/src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64_memory.cpp b/src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64_memory.cpp index 8ae5b30172..8871809a8d 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64_memory.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/a64_emit_x64_memory.cpp @@ -14,7 +14,7 @@ #include #include #include -#include +#include "dynarmic/backend/x64/xbyak.h" #include "dynarmic/backend/x64/a64_emit_x64.h" #include "dynarmic/backend/x64/abi.h" diff --git a/src/dynarmic/src/dynarmic/backend/x64/abi.cpp b/src/dynarmic/src/dynarmic/backend/x64/abi.cpp index 299bf1d1d6..65c96e52c9 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/abi.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/abi.cpp @@ -11,7 +11,7 @@ #include #include "dynarmic/common/common_types.h" -#include +#include "dynarmic/backend/x64/xbyak.h" #include "dynarmic/backend/x64/block_of_code.h" diff --git a/src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp b/src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp index 3ccdb8ca8f..39e39577e9 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/block_of_code.cpp @@ -26,7 +26,7 @@ #include "dynarmic/common/assert.h" #include -#include +#include "dynarmic/backend/x64/xbyak.h" #include "dynarmic/backend/x64/a32_jitstate.h" #include "dynarmic/backend/x64/abi.h" @@ -58,8 +58,13 @@ const std::array BlockOfCode::ABI_PARAMS = {Block namespace { +#ifdef __OPENORBIS__ +constexpr size_t CONSTANT_POOL_SIZE = 8 * 4096; +constexpr size_t PRELUDE_COMMIT_SIZE = 8 * 4096; +#else constexpr size_t CONSTANT_POOL_SIZE = 2 * 1024 * 1024; constexpr size_t PRELUDE_COMMIT_SIZE = 16 * 1024 * 1024; +#endif class CustomXbyakAllocator : public Xbyak::Allocator { public: @@ -67,8 +72,12 @@ public: uint8_t* alloc(size_t size) override { void* p = VirtualAlloc(nullptr, size, MEM_RESERVE, PAGE_READWRITE); if (p == nullptr) { +#ifndef XBYAK_NO_EXCEPTION using Xbyak::Error; XBYAK_THROW(Xbyak::ERR_CANT_ALLOC); +#else + std::abort(); +#endif } return static_cast(p); } @@ -106,8 +115,12 @@ public: #endif void* p = mmap(nullptr, size, prot, mode, -1, 0); if (p == MAP_FAILED) { +#ifndef XBYAK_NO_EXCEPTION using Xbyak::Error; XBYAK_THROW(Xbyak::ERR_CANT_ALLOC); +#else + std::abort(); +#endif } std::memcpy(p, &size, sizeof(size_t)); return static_cast(p) + DYNARMIC_PAGE_SIZE; @@ -233,14 +246,14 @@ bool IsUnderRosetta() { } // anonymous namespace -#ifdef DYNARMIC_ENABLE_NO_EXECUTE_SUPPORT -static const auto default_cg_mode = Xbyak::DontSetProtectRWE; +BlockOfCode::BlockOfCode(RunCodeCallbacks cb, JitStateInfo jsi, size_t total_code_size, std::function rcp) noexcept +#ifdef __OPENORBIS__ + : Xbyak::CodeGenerator(total_code_size, Xbyak::AutoGrow, &s_allocator) +#elif defined(DYNARMIC_ENABLE_NO_EXECUTE_SUPPORT) + : Xbyak::CodeGenerator(total_code_size, Xbyak::DontSetProtectRWE, &s_allocator) #else -static const auto default_cg_mode = nullptr; //Allow RWE + : Xbyak::CodeGenerator(total_code_size, nullptr, &s_allocator) #endif - -BlockOfCode::BlockOfCode(RunCodeCallbacks cb, JitStateInfo jsi, size_t total_code_size, std::function rcp) noexcept - : Xbyak::CodeGenerator(total_code_size, default_cg_mode, &s_allocator) , cb(std::move(cb)) , jsi(jsi) , constant_pool(*this, CONSTANT_POOL_SIZE) @@ -533,8 +546,12 @@ size_t BlockOfCode::GetTotalCodeSize() const { void* BlockOfCode::AllocateFromCodeSpace(size_t alloc_size) { if (size_ + alloc_size >= maxSize_) { +#ifndef XBYAK_NO_EXCEPTION using Xbyak::Error; XBYAK_THROW(Xbyak::ERR_CODE_IS_TOO_BIG); +#else + std::abort(); +#endif } EnsureMemoryCommitted(alloc_size); diff --git a/src/dynarmic/src/dynarmic/backend/x64/block_of_code.h b/src/dynarmic/src/dynarmic/backend/x64/block_of_code.h index 8bdc8f5f7e..315833645c 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/block_of_code.h +++ b/src/dynarmic/src/dynarmic/backend/x64/block_of_code.h @@ -15,9 +15,7 @@ #include #include "dynarmic/common/common_types.h" -#include -#include - +#include "dynarmic/backend/x64/xbyak.h" #include "dynarmic/backend/x64/abi.h" #include "dynarmic/backend/x64/callback.h" #include "dynarmic/backend/x64/constant_pool.h" diff --git a/src/dynarmic/src/dynarmic/backend/x64/callback.h b/src/dynarmic/src/dynarmic/backend/x64/callback.h index 3254eea66c..a12eee637e 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/callback.h +++ b/src/dynarmic/src/dynarmic/backend/x64/callback.h @@ -12,7 +12,7 @@ #include #include "dynarmic/common/common_types.h" -#include +#include "dynarmic/backend/x64/xbyak.h" namespace Dynarmic::Backend::X64 { diff --git a/src/dynarmic/src/dynarmic/backend/x64/constant_pool.h b/src/dynarmic/src/dynarmic/backend/x64/constant_pool.h index 8115dcff26..c4489681a3 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/constant_pool.h +++ b/src/dynarmic/src/dynarmic/backend/x64/constant_pool.h @@ -15,7 +15,7 @@ #include "dynarmic/common/common_types.h" #include -#include +#include "dynarmic/backend/x64/xbyak.h" namespace Dynarmic::Backend::X64 { diff --git a/src/dynarmic/src/dynarmic/backend/x64/emit_x64.h b/src/dynarmic/src/dynarmic/backend/x64/emit_x64.h index c63004ee6f..5de5f2dc7a 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/emit_x64.h +++ b/src/dynarmic/src/dynarmic/backend/x64/emit_x64.h @@ -18,8 +18,7 @@ #include #include -#include -#include +#include "dynarmic/backend/x64/xbyak.h" #include #include "dynarmic/backend/exception_handler.h" diff --git a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_floating_point.cpp b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_floating_point.cpp index 6e618130c4..de8fd9334e 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_floating_point.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_floating_point.cpp @@ -19,7 +19,7 @@ #include #include "dynarmic/common/common_types.h" #include -#include +#include "dynarmic/backend/x64/xbyak.h" #include "dynarmic/backend/x64/abi.h" #include "dynarmic/backend/x64/block_of_code.h" diff --git a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.h b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.h index 2836e0aad2..211f620ceb 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.h +++ b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_memory.h @@ -7,7 +7,7 @@ */ #include -#include +#include "dynarmic/backend/x64/xbyak.h" #include "dynarmic/backend/x64/a32_emit_x64.h" #include "dynarmic/backend/x64/a64_emit_x64.h" diff --git a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_vector.cpp b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_vector.cpp index 5c5b376a8b..1f96939d88 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_vector.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_vector.cpp @@ -18,7 +18,7 @@ #include #include "dynarmic/common/common_types.h" #include -#include +#include "dynarmic/backend/x64/xbyak.h" #include "dynarmic/backend/x64/abi.h" #include "dynarmic/backend/x64/block_of_code.h" diff --git a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_vector_floating_point.cpp b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_vector_floating_point.cpp index c2bd071b99..2db31f81f9 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/emit_x64_vector_floating_point.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/emit_x64_vector_floating_point.cpp @@ -21,7 +21,7 @@ #include #include #include -#include +#include "dynarmic/backend/x64/xbyak.h" #include "dynarmic/backend/x64/abi.h" #include "dynarmic/backend/x64/block_of_code.h" diff --git a/src/dynarmic/src/dynarmic/backend/x64/hostloc.h b/src/dynarmic/src/dynarmic/backend/x64/hostloc.h index 1158e48253..cbceacdb38 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/hostloc.h +++ b/src/dynarmic/src/dynarmic/backend/x64/hostloc.h @@ -9,7 +9,7 @@ #include "dynarmic/common/assert.h" #include "dynarmic/common/common_types.h" -#include +#include "dynarmic/backend/x64/xbyak.h" namespace Dynarmic::Backend::X64 { diff --git a/src/dynarmic/src/dynarmic/backend/x64/oparg.h b/src/dynarmic/src/dynarmic/backend/x64/oparg.h index 8aa2f35034..d335a90bbb 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/oparg.h +++ b/src/dynarmic/src/dynarmic/backend/x64/oparg.h @@ -9,7 +9,7 @@ #pragma once #include "dynarmic/common/assert.h" -#include +#include "dynarmic/backend/x64/xbyak.h" namespace Dynarmic::Backend::X64 { diff --git a/src/dynarmic/src/dynarmic/backend/x64/reg_alloc.cpp b/src/dynarmic/src/dynarmic/backend/x64/reg_alloc.cpp index 115cb22ee9..2e5c1f8cfb 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/reg_alloc.cpp +++ b/src/dynarmic/src/dynarmic/backend/x64/reg_alloc.cpp @@ -16,7 +16,7 @@ #include #include "dynarmic/common/assert.h" #include -#include +#include "dynarmic/backend/x64/xbyak.h" #include "dynarmic/backend/x64/abi.h" #include "dynarmic/backend/x64/stack_layout.h" diff --git a/src/dynarmic/src/dynarmic/backend/x64/reg_alloc.h b/src/dynarmic/src/dynarmic/backend/x64/reg_alloc.h index a4467e32c7..77f2816780 100644 --- a/src/dynarmic/src/dynarmic/backend/x64/reg_alloc.h +++ b/src/dynarmic/src/dynarmic/backend/x64/reg_alloc.h @@ -14,7 +14,7 @@ #include "boost/container/small_vector.hpp" #include "dynarmic/common/common_types.h" -#include +#include "dynarmic/backend/x64/xbyak.h" #include #include #include diff --git a/src/dynarmic/src/dynarmic/backend/x64/xbyak.h b/src/dynarmic/src/dynarmic/backend/x64/xbyak.h new file mode 100644 index 0000000000..e8c779d83a --- /dev/null +++ b/src/dynarmic/src/dynarmic/backend/x64/xbyak.h @@ -0,0 +1,15 @@ +#pragma once + +#ifdef __OPENORBIS__ +#define XBYAK_NO_EXCEPTION 1 +#endif + +#define XBYAK_STD_UNORDERED_SET ankerl::unordered_dense::set +#define XBYAK_STD_UNORDERED_MAP ankerl::unordered_dense::map +#define XBYAK_STD_UNORDERED_MULTIMAP std::unordered_multimap + +#include +#include + +#include +#include diff --git a/src/dynarmic/src/dynarmic/common/spin_lock_x64.cpp b/src/dynarmic/src/dynarmic/common/spin_lock_x64.cpp index aa2f25803d..b059c10bcd 100644 --- a/src/dynarmic/src/dynarmic/common/spin_lock_x64.cpp +++ b/src/dynarmic/src/dynarmic/common/spin_lock_x64.cpp @@ -8,7 +8,7 @@ #include #include -#include +#include "dynarmic/backend/x64/xbyak.h" #include "dynarmic/backend/x64/abi.h" #include "dynarmic/backend/x64/hostloc.h" diff --git a/src/dynarmic/src/dynarmic/common/spin_lock_x64.h b/src/dynarmic/src/dynarmic/common/spin_lock_x64.h index df6860e2f2..ffe35eab66 100644 --- a/src/dynarmic/src/dynarmic/common/spin_lock_x64.h +++ b/src/dynarmic/src/dynarmic/common/spin_lock_x64.h @@ -8,7 +8,7 @@ #pragma once -#include +#include "dynarmic/backend/x64/xbyak.h" namespace Dynarmic {