--- tools/archopt.c.old
+++ tools/archopt.c
@@ -1,8 +1,30 @@
+/*
+Copyright (C) 2005-2007 Nach, grinvader ( http://www.zsnes.com )
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+version 2 as published by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
 
+#ifdef _M_X64
+#define __x86_64__
+#endif
+
+#ifdef __GNUC__
 #ifdef __x86_64__
 #define cpuid(in, a, b, c, d) asm volatile("cpuid": "=a" (a), "=b" (b), "=c" (c), "=d" (d) : "a" (in));
 #else
@@ -13,6 +35,22 @@
   movl %%ebx,%%edi;\
   popl %%ebx": "=a" (a), "=D" (b), "=c" (c), "=d" (d) : "a" (in));
 #endif
+#else
+char cpubuf[256];
+int z_in, z_a, z_b, z_c, z_d;
+void cpuid_run()
+{
+  _asm {
+    mov eax,z_in
+    cpuid
+    mov z_a,eax
+    mov z_b,ebx
+    mov z_c,ecx
+    mov z_d,edx
+  };
+}
+#define cpuid(in, a, b, c, d) z_in = in; cpuid_run(); a = z_a; b = z_b; c = z_c; d = z_d;
+#endif
 
 char *x86_flags[] =
 {      "fpu",        "vme",        "de",         "pse",        "tsc",    "msr",      "pae",    "mce",
@@ -62,6 +100,7 @@
 {
   int have = 0x200000;
   #ifndef __x86_64__
+  #ifdef __GNUC__
   asm volatile
   (
   "  pushfl;"
@@ -76,6 +115,23 @@
     : "=a" (have)
     : "c" (have)
   );
+  #else
+  z_c = have;
+  _asm {
+    mov ecx,z_c
+    pushfd
+    pop eax
+    mov edx,eax
+    xor eax,ecx
+    push eax
+    popfd
+    pushfd
+    pop eax
+    xor eax,edx
+    mov z_a,eax
+  };
+  have = z_a;
+  #endif
   #endif
   return(have);
 }
@@ -196,238 +252,268 @@
   cpu = "native";
 #endif
 #endif
-
-  if (!cpu && *cpu_family && *vendor_id)
+  if (!cpu)
   {
-    if (!strcmp(vendor_id, "AuthenticAMD") || strstr(model_name, "AMD"))
+    if (!cpu && *cpu_family && *vendor_id)
     {
-      if (strstr(flags, " mmx "))
+      #ifdef __GNUC__
+      if (!strcmp(vendor_id, "AuthenticAMD") || strstr(model_name, "AMD"))
       {
-        #if __GNUC__ > 2
-        if (strstr(flags, " 3dnow "))
+        if (strstr(flags, " mmx "))
         {
-          if (strstr(flags, " 3dnowext ") && (atoi(cpu_family) > 5))
+          #if __GNUC__ > 2
+          if (strstr(flags, " 3dnow "))
           {
-            #if __GNUC__ > 3 || __GNUC_MINOR__ > 0
-            if (strstr(flags, " sse "))
+            if (strstr(flags, " 3dnowext ") && (atoi(cpu_family) > 5))
             {
-              #if __GNUC__ > 3 || __GNUC_MINOR__ > 3
-              if (strstr(flags, " sse2 ") && strstr(flags, " lm ")) //Need two checks to protect Semprons
+              #if __GNUC__ > 3 || __GNUC_MINOR__ > 0
+              if (strstr(flags, " sse "))
               {
-                if (strstr(model_name, "Opteron"))
-                {
-                  cpu = "opteron";
-                }
-                else if (strstr(model_name, "Athlon(tm) 64")) //Also athlon-fx
+                #if __GNUC__ > 3 || __GNUC_MINOR__ > 3
+                if (strstr(flags, " sse2 ") && strstr(flags, " lm ")) //Need two checks to protect Semprons
                 {
-                  cpu = "athlon64";
+                  if (strstr(model_name, "Opteron"))
+                  {
+                    cpu = "opteron";
+                  }
+                  else if (strstr(model_name, "Athlon(tm) 64")) //Also athlon-fx
+                  {
+                    cpu = "athlon64";
+                  }
+                  else
+                  {
+                    cpu = "k8";
+                  }
                 }
-                else
+                #endif
+                if (!cpu)
                 {
-                  cpu = "k8";
+                  if (strstr(model_name, "Athlon(tm) 4"))
+                  {
+                    cpu = "athlon-4";
+                  }
+                  else if (strstr(model_name, "Athlon(tm) MP"))
+                  {
+                    cpu = "athlon-mp";
+                  }
+                  else
+                  {
+                    cpu = "athlon-xp";
+                  }
                 }
               }
+
+              if (!cpu && (atoi(model) > 3))
+              {
+                cpu = "athlon-tbird";
+              }
               #endif
+
               if (!cpu)
               {
-                if (strstr(model_name, "Athlon(tm) 4"))
-                {
-                  cpu = "athlon-4";
-                }
-                else if (strstr(model_name, "Athlon(tm) MP"))
-                {
-                  cpu = "athlon-mp";
-                }
-                else
-                {
-                  cpu = "athlon-xp";
-                }
+                cpu = "athlon";
               }
             }
 
-            if (!cpu && (atoi(model) > 3))
-            {
-              cpu = "athlon-tbird";
-            }
-            #endif
-
+            #if __GNUC__ > 3 || __GNUC_MINOR__ > 0
             if (!cpu)
             {
-              cpu = "athlon";
+              int model_num = atoi(model);
+              if ((model_num == 9) || (model_num >= 13))
+              {
+                cpu = "k6-3";
+              }
+              else
+              {
+                cpu = "k6-2";
+              }
             }
+            #endif
           }
+          #endif
 
-          #if __GNUC__ > 3 || __GNUC_MINOR__ > 0
           if (!cpu)
           {
-            int model_num = atoi(model);
-            if ((model_num == 9) || (model_num >= 13))
-            {
-              cpu = "k6-3";
-            }
-            else
-            {
-              cpu = "k6-2";
-            }
+            cpu = "k6";
           }
-          #endif
-        }
-        #endif
-
-        if (!cpu)
-        {
-          cpu = "k6";
         }
       }
-    }
-    else if (!strcmp(vendor_id, "GenuineIntel") || strstr(model_name, "Intel"))
-    {
-      #if __GNUC__ > 2
-      if (strstr(flags, " mmx "))
+      else if (!strcmp(vendor_id, "GenuineIntel") || strstr(model_name, "Intel"))
       {
-        if (strstr(flags, " sse "))
+        #if __GNUC__ > 2
+        if (strstr(flags, " mmx "))
         {
-          if (strstr(flags, " sse2 "))
+          if (strstr(flags, " sse "))
           {
-            #if __GNUC__ > 3 || __GNUC_MINOR__ > 2
-            if (strstr(flags, " pni ") && strcmp(cpu_family, "6"))
+            if (strstr(flags, " sse2 "))
             {
-              if (strstr(flags, " lm "))
+              #if __GNUC__ > 3 || __GNUC_MINOR__ > 2
+              if (strstr(flags, " pni ") && strcmp(cpu_family, "6"))
               {
-                cpu = "nocona";
+                if (strstr(flags, " lm "))
+                {
+                  cpu = "nocona";
+                }
+                else
+                {
+                  cpu = "prescott";
+                }
               }
-              else
+              #endif
+
+              if (!cpu)
               {
-                cpu = "prescott";
+                if (!strcmp(cpu_family, "6"))
+                {
+                  #if __GNUC__ > 3 || __GNUC_MINOR__ > 3
+                  cpu = "pentium-m";
+                  #else
+                  cpu = "pentium3";
+                  #endif
+                }
+                else
+                {
+                  #if __GNUC__ > 3 || __GNUC_MINOR__ > 3
+                  if (strstr(model_name, "Mobile"))
+                  {
+                    cpu = "pentium4m";
+                  }
+                  #endif
+
+                  if (!cpu)
+                  {
+                    cpu = "pentium4";
+                  }
+                }
               }
             }
-            #endif
-
-            if (!cpu)
+            else
             {
-              if (!strcmp(cpu_family, "6"))
+              #if __GNUC__ > 3 || __GNUC_MINOR__ > 3
+              if (strstr(model_name, "Mobile"))
               {
-                #if __GNUC__ > 3 || __GNUC_MINOR__ > 3
-                cpu = "pentium-m";
-                #else
-                cpu = "pentium3";
-                #endif
+                cpu = "pentium3m";
               }
-              else
-              {
-                #if __GNUC__ > 3 || __GNUC_MINOR__ > 3
-                if (strstr(model_name, "Mobile"))
-                {
-                  cpu = "pentium4m";
-                }
-                #endif
+              #endif
 
-                if (!cpu)
-                {
-                  cpu = "pentium4";
-                }
+              if (!cpu)
+              {
+                cpu = "pentium3";
               }
             }
           }
           else
           {
-            #if __GNUC__ > 3 || __GNUC_MINOR__ > 3
-            if (strstr(model_name, "Mobile"))
+            if (!strcmp(cpu_family, "6"))
             {
-              cpu = "pentium3m";
+              cpu = "pentium2";
             }
-            #endif
-
-            if (!cpu)
+            else
             {
-              cpu = "pentium3";
+              cpu = "pentium-mmx";
             }
           }
         }
-        else
+        #endif
+
+        if (!cpu)
+        {
+          int family = atoi(cpu_family);
+          if (family > 5)
+          {
+            cpu = "pentiumpro";
+          }
+          else if (family == 5)
+          {
+            cpu = "pentium";
+          }
+        }
+      }
+      #if __GNUC__ > 2
+      #if __GNUC__ > 3 || __GNUC_MINOR__ > 2
+      else if (!strcmp(vendor_id, "CentaurHauls") && strstr(flags, " mmx "))
+      {
+        if (strstr(flags, " 3dnow "))
         {
-          if (!strcmp(cpu_family, "6"))
+          if (atoi(cpu_family) > 5)
           {
-            cpu = "pentium2";
+            cpu = "c3";
           }
           else
           {
-            cpu = "pentium-mmx";
+            cpu = "winchip2";
           }
         }
+        #if __GNUC__ > 3 || __GNUC_MINOR__ > 3
+        else if (strstr(flags, " sse "))
+        {
+          cpu = "c3-2";
+        }
+        #endif
+
+        if (!cpu)
+        {
+          cpu = "winchip-c6";
+        }
       }
       #endif
+      #endif
 
       if (!cpu)
       {
         int family = atoi(cpu_family);
         if (family > 5)
         {
-          cpu = "pentiumpro";
+          cpu = "i686";
         }
         else if (family == 5)
         {
-          cpu = "pentium";
+          cpu = "i586";
         }
-      }
-    }
-    #if __GNUC__ > 2
-    #if __GNUC__ > 3 || __GNUC_MINOR__ > 2
-    else if (!strcmp(vendor_id, "CentaurHauls") && strstr(flags, " mmx "))
-    {
-      if (strstr(flags, " 3dnow "))
-      {
-        if (atoi(cpu_family) > 5)
+        else if (family == 4)
         {
-          cpu = "c3";
+          cpu = "i486";
         }
         else
         {
-          cpu = "winchip2";
+          cpu = "i386";
         }
       }
-      #if __GNUC__ > 3 || __GNUC_MINOR__ > 3
+      #else //MSVC
+      cpu = cpubuf;
+      *cpu = 0;
+
+      if (strstr(flags, " sse2 "))
+      {
+        strcat(cpu, " /arch:SSE2");
+      }
       else if (strstr(flags, " sse "))
       {
-        cpu = "c3-2";
+        strcat(cpu, " /arch:SSE");
       }
-      #endif
 
-      if (!cpu)
+      #ifdef __x86_64__
+      if (strstr(flags, " lm ")) //64 bit
       {
-        cpu = "winchip-c6";
+        if (!strcmp(vendor_id, "AuthenticAMD") || strstr(model_name, "AMD"))
+        {
+          strcat(cpu, " /favor:AMD64");
+        }
+        else if (!strcmp(vendor_id, "GenuineIntel") || strstr(model_name, "Intel"))
+        {
+          strcat(cpu, " /favor:EM64T");
+        }
       }
+      #endif
+      #endif
     }
-    #endif
-    #endif
-
-    if (!cpu)
+    else
     {
-      int family = atoi(cpu_family);
-      if (family > 5)
-      {
-        cpu = "i686";
-      }
-      else if (family == 5)
-      {
-        cpu = "i586";
-      }
-      else if (family == 4)
-      {
-        cpu = "i486";
-      }
-      else
-      {
-        cpu = "i386";
-      }
+      puts("Could not open /proc/cpuinfo, and CPUID instruction not available.");
+      return(1);
     }
-    puts(cpu);
-  }
-  else
-  {
-    puts("Could not open /proc/cpuinfo, and CPUID instruction not available.");
-    return(1);
   }
+  puts(cpu);
 
   return(0);
 }
