From 159f5e3ae45be3cf3e8948135ef4281f4ab2d1b4 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Sun, 4 Apr 2021 13:15:42 +0100 Subject: [PATCH] Little optimisation attempt targeted only for ARM 32 bits, enabling "RunFast" mode ; benefits might depend on the board at hand. --- src/backends/generic/misc.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/backends/generic/misc.c b/src/backends/generic/misc.c index fb660cc3..a97a20cf 100644 --- a/src/backends/generic/misc.c +++ b/src/backends/generic/misc.c @@ -188,5 +188,21 @@ void Sys_SetupFPU(void) { } #else void Sys_SetupFPU(void) { +#if defined(__arm__) + // Enable RunFast mode if not enabled already + static const unsigned int bit = 0x04086060; + static const unsigned int fpscr = 0x03000000; + int ret; + + asm volatile("fmrx %0, fpscr" : "=r"(ret)); + if (ret != fpscr) { + asm volatile("fmrx %0, fpscr\n\t" + "and %0, %0, %1\n\t" + "orr %0, %0, %2\n\t" + "fmxr fpscr, %0" + : "=r"(ret) + : "r"(bit), "r"(fpscr)); + } +#endif } #endif