main: log missing CPU features
authornotaz <notasas@gmail.com>
Fri, 16 Sep 2022 19:59:25 +0000 (22:59 +0300)
committernotaz <notasas@gmail.com>
Fri, 16 Sep 2022 20:22:08 +0000 (23:22 +0300)
will probably be too late but ohwell

frontend/main.c

index d846d3c..d52fe21 100644 (file)
 #include "arm_features.h"
 #include "revision.h"
 
+#if defined(__has_builtin)
+#define DO_CPU_CHECKS __has_builtin(__builtin_cpu_init)
+#elif defined(__x86_64__) || defined(__i386__)
+#define DO_CPU_CHECKS 1
+#else
+#define DO_CPU_CHECKS 0
+#endif
+
 #ifndef NO_FRONTEND
 #include "libpicofe/input.h"
 #include "libpicofe/plat.h"
@@ -411,6 +419,24 @@ void emu_on_new_cd(int show_hud_msg)
        }
 }
 
+static void log_wrong_cpu(void)
+{
+#if DO_CPU_CHECKS
+       __builtin_cpu_init();
+       #define CHECK_CPU(name) if (!__builtin_cpu_supports(name)) \
+               SysPrintf("ERROR: compiled for " name ", which is unsupported by the CPU\n")
+#ifdef __SSE2__
+       CHECK_CPU("sse2");
+#endif
+#ifdef __SSSE3__
+       CHECK_CPU("ssse3");
+#endif
+#ifdef __SSE4_1__
+       CHECK_CPU("sse4");
+#endif
+#endif // DO_CPU_CHECKS
+}
+
 int emu_core_preinit(void)
 {
        // what is the name of the config file?
@@ -425,6 +451,8 @@ int emu_core_preinit(void)
 #endif
        emuLog = stdout;
 
+       log_wrong_cpu();
+
        SetIsoFile(NULL);
 
        memset(&Config, 0, sizeof(Config));