Support compiling without posix_memalign() function
[pcsx_rearmed.git] / frontend / libretro.c
index 6b5256c..64df703 100644 (file)
@@ -1881,7 +1881,7 @@ static void update_variables(bool in_flight)
 
 #ifdef GPU_NEON
    var.value = NULL;
-   var.key = "pcsx_rearmed_neon_interlace_enable";
+   var.key = "pcsx_rearmed_neon_interlace_enable_v2";
 
    if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
    {
@@ -1889,6 +1889,8 @@ static void update_variables(bool in_flight)
          pl_rearmed_cbs.gpu_neon.allow_interlace = 0;
       else if (strcmp(var.value, "enabled") == 0)
          pl_rearmed_cbs.gpu_neon.allow_interlace = 1;
+      else // auto
+         pl_rearmed_cbs.gpu_neon.allow_interlace = 2;
    }
 
    var.value = NULL;
@@ -2045,6 +2047,16 @@ static void update_variables(bool in_flight)
          Config.icache_emulation = 1;
    }
 
+   var.value = NULL;
+   var.key = "pcsx_rearmed_exception_emulation";
+   if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
+   {
+      if (strcmp(var.value, "enabled") == 0)
+         Config.PreciseExceptions = 1;
+      else
+         Config.PreciseExceptions = 0;
+   }
+
    psxCpu->ApplyConfig();
 
    // end of CPU emu config
@@ -2086,28 +2098,28 @@ static void update_variables(bool in_flight)
          spu_config.iUseThread = 0;
    }
 
-#ifndef _WIN32
-   var.value = NULL;
-   var.key = "pcsx_rearmed_async_cd";
-   if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
-   {
-      if (strcmp(var.value, "async") == 0)
-      {
-         Config.AsyncCD = 1;
-         Config.CHD_Precache = 0;
-      }
-      else if (strcmp(var.value, "sync") == 0)
-      {
-         Config.AsyncCD = 0;
-         Config.CHD_Precache = 0;
-      }
-      else if (strcmp(var.value, "precache") == 0)
-      {
-         Config.AsyncCD = 0;
-         Config.CHD_Precache = 1;
-      }
+   if (HAVE_PTHREAD) {
+          var.value = NULL;
+          var.key = "pcsx_rearmed_async_cd";
+          if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
+          {
+                 if (strcmp(var.value, "async") == 0)
+                 {
+                        Config.AsyncCD = 1;
+                        Config.CHD_Precache = 0;
+                 }
+                 else if (strcmp(var.value, "sync") == 0)
+                 {
+                        Config.AsyncCD = 0;
+                        Config.CHD_Precache = 0;
+                 }
+                 else if (strcmp(var.value, "precache") == 0)
+                 {
+                        Config.AsyncCD = 0;
+                        Config.CHD_Precache = 1;
+                 }
+       }
    }
-#endif
 
    var.value = NULL;
    var.key = "pcsx_rearmed_noxadecoding";
@@ -2815,7 +2827,7 @@ static bool find_any_bios(const char *dirpath, char *path, size_t path_size)
    if (dir == NULL)
       return false;
 
-   for (i = 0; sizeof(substrings) / sizeof(substrings[0]); i++)
+   for (i = 0; i < (sizeof(substrings) / sizeof(substrings[0])); i++)
    {
       const char *substr = substrings[i];
       size_t len = strlen(substr);
@@ -3025,7 +3037,7 @@ void retro_init(void)
 
 #ifdef _3DS
    vout_buf = linearMemAlign(VOUT_MAX_WIDTH * VOUT_MAX_HEIGHT * 2, 0x80);
-#elif defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200112L) && !defined(VITA) && !defined(__SWITCH__)
+#elif defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200112L) && HAVE_POSIX_MEMALIGN
    if (posix_memalign(&vout_buf, 16, VOUT_MAX_WIDTH * VOUT_MAX_HEIGHT * 2) != 0)
       vout_buf = (void *) 0;
 #else