From 64d9cfbd9ba82cb32ef0e95248e7ce63d48c9544 Mon Sep 17 00:00:00 2001 From: Skyth <19259897+blueskythlikesclouds@users.noreply.github.com> Date: Fri, 18 Oct 2024 16:30:35 +0300 Subject: [PATCH] Force inline a few simple functions that Clang is refusing to inline. --- UnleashedRecomp/CMakeLists.txt | 5 +++++ UnleashedRecomp/gpu/video.cpp | 2 +- UnleashedRecomp/kernel/function.h | 6 +++--- UnleashedRecomp/kernel/memory.cpp | 10 ---------- UnleashedRecomp/kernel/memory.h | 11 +++++++++-- 5 files changed, 18 insertions(+), 16 deletions(-) diff --git a/UnleashedRecomp/CMakeLists.txt b/UnleashedRecomp/CMakeLists.txt index 9d76f2a..a02c36d 100644 --- a/UnleashedRecomp/CMakeLists.txt +++ b/UnleashedRecomp/CMakeLists.txt @@ -1,6 +1,11 @@ project("UnleashedRecomp") set(TARGET_NAME "SWA") +add_compile_options( + "/fp:strict" + "-march=sandybridge" + "-fno-strict-aliasing") + add_compile_definitions(SWA_IMPL) add_compile_definitions(SDL_MAIN_HANDLED) diff --git a/UnleashedRecomp/gpu/video.cpp b/UnleashedRecomp/gpu/video.cpp index 7ffd381..23b07e6 100644 --- a/UnleashedRecomp/gpu/video.cpp +++ b/UnleashedRecomp/gpu/video.cpp @@ -97,7 +97,7 @@ struct DirtyStates static DirtyStates g_dirtyStates(true); template -static void SetDirtyValue(bool& dirtyState, T& dest, const T& src) +static FORCEINLINE void SetDirtyValue(bool& dirtyState, T& dest, const T& src) { if (dest != src) { diff --git a/UnleashedRecomp/kernel/function.h b/UnleashedRecomp/kernel/function.h index 5cdafc5..089e5f8 100644 --- a/UnleashedRecomp/kernel/function.h +++ b/UnleashedRecomp/kernel/function.h @@ -157,13 +157,13 @@ struct arg_ordinal_t }; template -void _translate_args(PPCContext& ctx, uint8_t* base, std::tuple&) noexcept +FORCEINLINE void _translate_args(PPCContext& ctx, uint8_t* base, std::tuple&) noexcept requires (I >= sizeof...(TArgs)) { } template -std::enable_if_t<(I < sizeof...(TArgs)), void> _translate_args(PPCContext& ctx, uint8_t* base, std::tuple& tpl) noexcept +FORCEINLINE std::enable_if_t<(I < sizeof...(TArgs)), void> _translate_args(PPCContext& ctx, uint8_t* base, std::tuple& tpl) noexcept { using T = std::tuple_element_t>; std::get(tpl) = ArgTranslator::GetValue(ctx, base, arg_ordinal_t::value); @@ -172,7 +172,7 @@ std::enable_if_t<(I < sizeof...(TArgs)), void> _translate_args(PPCContext& ctx, } template -PPC_FUNC(GuestFunction) +FORCEINLINE PPC_FUNC(GuestFunction) { using ret_t = decltype(std::apply(Func, function_args(Func))); diff --git a/UnleashedRecomp/kernel/memory.cpp b/UnleashedRecomp/kernel/memory.cpp index cd4c2dc..417c7a7 100644 --- a/UnleashedRecomp/kernel/memory.cpp +++ b/UnleashedRecomp/kernel/memory.cpp @@ -21,16 +21,6 @@ void* Memory::Reserve(size_t offset, size_t size) return Alloc(offset, size, MEM_RESERVE); } -void* Memory::Translate(size_t offset) const noexcept -{ - return base + offset; -} - -uint32_t Memory::MapVirtual(void* host) const noexcept -{ - return static_cast(static_cast(host) - base); -} - SWA_API void* MmGetHostAddress(uint32_t ptr) { return g_memory.Translate(ptr); diff --git a/UnleashedRecomp/kernel/memory.h b/UnleashedRecomp/kernel/memory.h index bd2c5d9..d9a5af2 100644 --- a/UnleashedRecomp/kernel/memory.h +++ b/UnleashedRecomp/kernel/memory.h @@ -14,8 +14,15 @@ public: void* Commit(size_t offset, size_t size); void* Reserve(size_t offset, size_t size); - void* Translate(size_t offset) const noexcept; - uint32_t MapVirtual(void* host) const noexcept; + void* Translate(size_t offset) const noexcept + { + return base + offset; + } + + uint32_t MapVirtual(void* host) const noexcept + { + return static_cast(static_cast(host) - base); + } }; SWA_API void* MmGetHostAddress(uint32_t ptr);