From 8ba7993c5794b70c48c6ab749f91a3d12b54bc1c Mon Sep 17 00:00:00 2001 From: Paul Cercueil Date: Thu, 30 May 2024 11:44:15 +0200 Subject: [PATCH] lightrec: Move lightrec_code_inv() out of glue code We're not going to add a lightrec_code_inv() in there for every port of PCSX there is. Instead, add a on/off macro that will tell the glue code to reference an external lightrec_code_inv(), which has to be provided externally. The WiiU implementation has moved to libpcsxcore/lightrec/mem_wiiu.c. The Wii/GC implementation will move to the external WiiSX project directly. Signed-off-by: Paul Cercueil --- Makefile | 2 ++ Makefile.libretro | 1 + jni/Android.mk | 2 +- libpcsxcore/lightrec/mem_wiiu.c | 7 +++++++ libpcsxcore/lightrec/plugin.c | 22 +++------------------- 5 files changed, 14 insertions(+), 20 deletions(-) diff --git a/Makefile b/Makefile index dade5ca6..b0c56452 100644 --- a/Makefile +++ b/Makefile @@ -106,7 +106,9 @@ CFLAGS += -Ideps/lightning/include -Ideps/lightrec -Iinclude/lightning -Iinclude LIGHTREC_CUSTOM_MAP ?= 0 LIGHTREC_CUSTOM_MAP_OBJ ?= libpcsxcore/lightrec/mem.o LIGHTREC_THREADED_COMPILER ?= 0 +LIGHTREC_CODE_INV ?= 0 CFLAGS += -DLIGHTREC_CUSTOM_MAP=$(LIGHTREC_CUSTOM_MAP) \ + -DLIGHTREC_CODE_INV=$(LIGHTREC_CODE_INV) \ -DLIGHTREC_ENABLE_THREADED_COMPILER=$(LIGHTREC_THREADED_COMPILER) ifeq ($(LIGHTREC_CUSTOM_MAP),1) LDLIBS += -lrt diff --git a/Makefile.libretro b/Makefile.libretro index 3381d0ee..265ae696 100644 --- a/Makefile.libretro +++ b/Makefile.libretro @@ -358,6 +358,7 @@ else ifneq (,$(filter $(platform),ngc wii wiiu)) CFLAGS += -DZ7_DECL_Int32_AS_long LIGHTREC_CUSTOM_MAP := 1 LIGHTREC_CUSTOM_MAP_OBJ := libpcsxcore/lightrec/mem_wiiu.o + LIGHTREC_CODE_INV := 1 endif ARCH = powerpc BUILTIN_GPU = peops diff --git a/jni/Android.mk b/jni/Android.mk index 6081b93c..bce8dcd5 100644 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -161,7 +161,7 @@ endif SOURCES_C += $(DYNAREC_DIR)/emu_if.c ifeq ($(HAVE_LIGHTREC),1) - COREFLAGS += -DLIGHTREC -DLIGHTREC_STATIC + COREFLAGS += -DLIGHTREC -DLIGHTREC_STATIC -DLIGHTREC_CODE_INV=0 EXTRA_INCLUDES += $(DEPS_DIR)/lightning/include \ $(DEPS_DIR)/lightrec \ $(DEPS_DIR)/lightrec/tlsf \ diff --git a/libpcsxcore/lightrec/mem_wiiu.c b/libpcsxcore/lightrec/mem_wiiu.c index f62b8b33..7cba547f 100644 --- a/libpcsxcore/lightrec/mem_wiiu.c +++ b/libpcsxcore/lightrec/mem_wiiu.c @@ -14,6 +14,8 @@ #include "mem.h" +void wiiu_clear_cache(void *start, void *end); + static void* wiiu_mmap(uint32_t requested_va, size_t length, void* backing_mem) { if (length < OS_PAGE_SIZE) length = OS_PAGE_SIZE; @@ -104,3 +106,8 @@ void lightrec_free_mmap(void) { free(psx_scratch); free(psx_bios); } + +void lightrec_code_inv(void *ptr, uint32_t len) +{ + wiiu_clear_cache(ptr, (void *)((uintptr_t)ptr + len)); +} diff --git a/libpcsxcore/lightrec/plugin.c b/libpcsxcore/lightrec/plugin.c index c8e6bf7f..200ce816 100644 --- a/libpcsxcore/lightrec/plugin.c +++ b/libpcsxcore/lightrec/plugin.c @@ -68,6 +68,8 @@ static bool block_stepping; extern u32 lightrec_hacks; +extern void lightrec_code_inv(void *ptr, uint32_t len); + enum my_cp2_opcodes { OP_CP2_RTPS = 0x01, OP_CP2_NCLIP = 0x06, @@ -417,29 +419,11 @@ static bool lightrec_can_hw_direct(u32 kaddr, bool is_write, u8 size) } } -#if defined(HW_DOL) || defined(HW_RVL) -static void lightrec_code_inv(void *ptr, uint32_t len) -{ - extern void DCFlushRange(void *ptr, u32 len); - extern void ICInvalidateRange(void *ptr, u32 len); - - DCFlushRange(ptr, len); - ICInvalidateRange(ptr, len); -} -#elif defined(HW_WUP) -static void lightrec_code_inv(void *ptr, uint32_t len) -{ - wiiu_clear_cache(ptr, (void *)((uintptr_t)ptr + len)); -} -#endif - static const struct lightrec_ops lightrec_ops = { .cop2_op = cop2_op, .enable_ram = lightrec_enable_ram, .hw_direct = lightrec_can_hw_direct, -#if defined(HW_DOL) || defined(HW_RVL) || defined(HW_WUP) - .code_inv = lightrec_code_inv, -#endif + .code_inv = LIGHTREC_CODE_INV ? lightrec_code_inv : NULL, }; static int lightrec_plugin_init(void) -- 2.39.2