arm: make sure RunFast is on
authornotaz <notasas@gmail.com>
Sun, 17 Nov 2024 00:17:52 +0000 (02:17 +0200)
committernotaz <notasas@gmail.com>
Sun, 17 Nov 2024 00:17:52 +0000 (02:17 +0200)
seems already to be the case on 3ds at least

frontend/main.c
plugins/gpulib/gpulib_thread_if.c

index eb4f149..9aeece9 100644 (file)
@@ -513,6 +513,16 @@ int emu_core_init(void)
        SysPrintf("Starting PCSX-ReARMed " REV "%s\n", get_build_info());
        SysPrintf("build time: " __DATE__ " " __TIME__ "\n");
 
+#if defined(__arm__) && defined(__VFP_FP__)
+       // RunFast mode
+       u32 fpscr = ~0;
+       __asm__ volatile("fmrx %0, fpscr" : "=r"(fpscr));
+       SysPrintf("old fpscr = %08x\n", fpscr);
+       fpscr &= ~0x00009f9f;
+       fpscr |=  0x03000000; // DN | FZ
+       __asm__ volatile("fmxr fpscr, %0" :: "r"(fpscr));
+#endif
+
 #ifdef HAVE_RTHREADS
        pcsxr_sthread_init();
 #endif
index 0b28fe3..6f927db 100644 (file)
@@ -76,6 +76,15 @@ static void *video_thread_main(void *arg) {
        static int processed = 0;
 #endif /* _3DS */
 
+#if defined(__arm__) && defined(__VFP_FP__)
+       // RunFast mode
+       u32 fpscr = ~0;
+       __asm__ volatile("fmrx %0, fpscr" : "=r"(fpscr));
+       fpscr &= ~0x00009f9f;
+       fpscr |=  0x03000000; // DN | FZ
+       __asm__ volatile("fmxr fpscr, %0" :: "r"(fpscr));
+#endif
+
        while(1) {
                int result, cycles_dummy = 0, last_cmd, start, end;
                video_thread_queue *queue;