From e97f9b40e92458ca008029f0b8a1d09e2717bc00 Mon Sep 17 00:00:00 2001 From: Hyper <34012267+hyperbx@users.noreply.github.com> Date: Sat, 9 Nov 2024 20:58:38 +0000 Subject: [PATCH] function: support more types for function pointers --- UnleashedRecomp/kernel/function.h | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/UnleashedRecomp/kernel/function.h b/UnleashedRecomp/kernel/function.h index 4afc7721..ee41a742 100644 --- a/UnleashedRecomp/kernel/function.h +++ b/UnleashedRecomp/kernel/function.h @@ -1,4 +1,5 @@ #pragma once + #include #include #include "xbox.h" @@ -159,6 +160,14 @@ struct ArgTranslator { SetPrecisionArgumentValue(ctx, base, idx, value); } + else if constexpr (std::is_null_pointer_v) + { + SetIntegerArgumentValue(ctx, base, idx, 0); + } + else if constexpr (std::is_pointer_v) + { + SetIntegerArgumentValue(ctx, base, idx, g_memory.MapVirtual(value)); + } else { SetIntegerArgumentValue(ctx, base, idx, value); @@ -168,7 +177,7 @@ struct ArgTranslator template FORCEINLINE constexpr static std::enable_if_t, void> SetValue(PPCContext& ctx, uint8_t* base, size_t idx, T value) noexcept { - const auto v = g_memory.MapVirtual(value); + const auto v = g_memory.MapVirtual((void*)value); if (!v) { return; @@ -317,7 +326,7 @@ FORCEINLINE T GuestToHostFunction(uint32_t addr, TArgs... argv) } else if constexpr (std::is_pointer_v) { - return static_cast((uint64_t)g_memory.Translate(newCtx.r3.u32)); + return reinterpret_cast((uint64_t)g_memory.Translate(newCtx.r3.u32)); } else if constexpr (is_precise_v) {