From: notaz Date: Wed, 31 Jan 2018 21:44:45 +0000 (+0200) Subject: ctr/3ds: attempt to improve cache flushing X-Git-Tag: v1.93~4 X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fd587b673e51820d82cfeec142048a97faeafd05;p=picodrive.git ctr/3ds: attempt to improve cache flushing --- diff --git a/platform/libretro/3ds/3ds_utils.c b/platform/libretro/3ds/3ds_utils.c index e0f76ca2..7fe47639 100644 --- a/platform/libretro/3ds/3ds_utils.c +++ b/platform/libretro/3ds/3ds_utils.c @@ -20,48 +20,29 @@ static void ctr_enable_all_svc_kernel(void) svc_access_control[3]=0x3FFFFFFF; } - -static void ctr_invalidate_ICache_kernel(void) -{ - __asm__ volatile( - "cpsid aif\n\t" - "mov r0, #0\n\t" - "mcr p15, 0, r0, c7, c5, 0\n\t"); -} - -static void ctr_flush_DCache_kernel(void) -{ - __asm__ volatile( - "cpsid aif\n\t" - "mov r0, #0\n\t" - "mcr p15, 0, r0, c7, c10, 0\n\t"); - -} - - static void ctr_enable_all_svc(void) { svcBackdoor((ctr_callback_type)ctr_enable_all_svc_kernel); } -void ctr_invalidate_ICache(void) +static void ctr_clean_invalidate_kernel(void) { -// __asm__ volatile("svc 0x2E\n\t"); - svcBackdoor((ctr_callback_type)ctr_invalidate_ICache_kernel); - -} - -void ctr_flush_DCache(void) -{ -// __asm__ volatile("svc 0x4B\n\t"); - svcBackdoor((ctr_callback_type)ctr_flush_DCache_kernel); + __asm__ volatile( + "mrs r1, cpsr\n" + "cpsid aif\n" // disable interrupts + "mov r0, #0\n" + "mcr p15, 0, r0, c7, c10, 0\n" // clean dcache + "mcr p15, 0, r0, c7, c10, 4\n" // DSB + "mcr p15, 0, r0, c7, c5, 0\n" // invalidate icache+BTAC + "msr cpsr_cx, r1\n" // restore interrupts + ::: "r0", "r1"); } - void ctr_flush_invalidate_cache(void) { - ctr_flush_DCache(); - ctr_invalidate_ICache(); +// __asm__ volatile("svc 0x2E\n\t"); +// __asm__ volatile("svc 0x4B\n\t"); + svcBackdoor((ctr_callback_type)ctr_clean_invalidate_kernel); } int ctr_svchack_init(void) diff --git a/platform/libretro/3ds/3ds_utils.h b/platform/libretro/3ds/3ds_utils.h index fe97985c..ae917b0e 100644 --- a/platform/libretro/3ds/3ds_utils.h +++ b/platform/libretro/3ds/3ds_utils.h @@ -1,9 +1,6 @@ #ifndef _3DS_UTILS_H #define _3DS_UTILS_H -void ctr_invalidate_ICache(void); -void ctr_flush_DCache(void); - void ctr_flush_invalidate_cache(void); int ctr_svchack_init(void);