#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"
void emu_set_default_config(void)
{
// try to set sane config on which most games work
- Config.Xa = Config.Cdda = Config.Sio =
- Config.icache_emulation = Config.SpuIrq = Config.RCntFix = Config.VSyncWA = 0;
+ Config.Xa = Config.Cdda = 0;
+ Config.icache_emulation = 0;
Config.PsxAuto = 1;
pl_rearmed_cbs.gpu_neon.allow_interlace = 2; // auto
}
}
+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.1");
+#endif
+#endif // DO_CPU_CHECKS
+}
+
int emu_core_preinit(void)
{
// what is the name of the config file?
#endif
emuLog = stdout;
+ log_wrong_cpu();
+
SetIsoFile(NULL);
memset(&Config, 0, sizeof(Config));
tmp++;
for (i = 0; i < ARRAY_SIZE(builtin_plugins); i++)
if (strcmp(tmp, builtin_plugins[i]) == 0)
- return (void *)(long)(PLUGIN_DL_BASE + builtin_plugin_ids[i]);
+ return (void *)(uintptr_t)(PLUGIN_DL_BASE + builtin_plugin_ids[i]);
}
#ifndef _WIN32
}
void *SysLoadSym(void *lib, const char *sym) {
- unsigned int plugid = (unsigned int)(long)lib;
+ unsigned int plugid = (unsigned int)(uintptr_t)lib;
if (PLUGIN_DL_BASE <= plugid && plugid < PLUGIN_DL_BASE + ARRAY_SIZE(builtin_plugins))
return plugin_link(plugid - PLUGIN_DL_BASE, sym);
}
void SysCloseLibrary(void *lib) {
- unsigned int plugid = (unsigned int)(long)lib;
+ unsigned int plugid = (unsigned int)(uintptr_t)lib;
if (PLUGIN_DL_BASE <= plugid && plugid < PLUGIN_DL_BASE + ARRAY_SIZE(builtin_plugins))
return;