]> git.sesse.net Git - vlc/blobdiff - src/misc/cpu.c
decoder: remove unnecessary special case
[vlc] / src / misc / cpu.c
index c258e94582e1cf8b67b075713582d8b64f1ef8e8..eca79b5911178ec05fd82c46f7c368b4c7d83ff7 100644 (file)
@@ -38,7 +38,7 @@
 
 #ifndef __linux__
 #include <sys/types.h>
-#ifndef WIN32
+#ifndef _WIN32
 #include <unistd.h>
 #include <sys/wait.h>
 #include <signal.h>
@@ -63,7 +63,7 @@ static uint32_t cpu_flags;
 
 #if defined (__i386__) || defined (__x86_64__) || defined (__powerpc__) \
  || defined (__ppc__) || defined (__ppc64__) || defined (__powerpc64__)
-# if !defined (WIN32) && !defined (__OS2__)
+# if !defined (_WIN32) && !defined (__OS2__)
 static bool vlc_CPU_check (const char *name, void (*func) (void))
 {
     pid_t pid = fork();
@@ -99,37 +99,7 @@ VLC_SSE static void SSE_test (void)
     asm volatile ("xorps %%xmm0,%%xmm0\n" : : : "xmm0", "xmm1");
 }
 #endif
-#if defined (CAN_COMPILE_SSE2) && !defined (__SSE2__)
-VLC_SSE static void SSE2_test (void)
-{
-    asm volatile ("movupd %%xmm0, %%xmm0\n" : : : "xmm0", "xmm1");
-}
-#endif
-#if defined (CAN_COMPILE_SSE3) && !defined (__SSE3__)
-VLC_SSE static void SSE3_test (void)
-{
-    asm volatile ("movsldup %%xmm1, %%xmm0\n" : : : "xmm0", "xmm1");
-}
-#endif
-#if defined (CAN_COMPILE_SSSE3) && !defined (__SSSE3__)
-VLC_SSE static void SSSE3_test (void)
-{
-    asm volatile ("pabsw %%xmm1, %%xmm0\n" : : : "xmm0", "xmm1");
-}
-#endif
-#if defined (CAN_COMPILE_SSE4_1) && !defined (__SSE4_1__)
-VLC_SSE static void SSE4_1_test (void)
-{
-    asm volatile ("pmaxsb %%xmm1, %%xmm0\n" : : : "xmm0", "xmm1");
-}
-#endif
-#if defined (CAN_COMPILE_SSE4_2) && !defined (__SSE4_2__)
-VLC_SSE static void SSE4_2_test (void)
-{
-    asm volatile ("pcmpgtq %%xmm1, %%xmm0\n" : : : "xmm0", "xmm1");
-}
-#endif
-#if defined (CAN_COMPILE_3DNOW) && !defined (__3dNOW__)
+#if defined (CAN_COMPILE_3DNOW)
 VLC_MMX static void ThreeD_Now_test (void)
 {
     asm volatile ("pfadd %%mm0,%%mm0\n" "femms\n" : : : "mm0");
@@ -143,7 +113,7 @@ static void Altivec_test (void)
 }
 #endif
 
-#else /* WIN32 || __OS2__ */
+#else /* _WIN32 || __OS2__ */
 # define vlc_CPU_check(name, func) (1)
 #endif
 #endif
@@ -224,45 +194,25 @@ void vlc_CPU_init (void)
     i_capabilities |= VLC_CPU_MMX;
 
     if( i_edx & 0x02000000 )
-    {
         i_capabilities |= VLC_CPU_MMXEXT;
-#   ifdef CAN_COMPILE_SSE
-        if (vlc_CPU_check ("SSE", SSE_test))
+# if defined (CAN_COMPILE_SSE) && !defined (__SSE__)
+    if (( i_edx & 0x02000000 ) && vlc_CPU_check ("SSE", SSE_test))
+# endif
+    {
+        /*if( i_edx & 0x02000000 )*/
             i_capabilities |= VLC_CPU_SSE;
-#   endif
+        if (i_edx & 0x04000000)
+            i_capabilities |= VLC_CPU_SSE2;
+        if (i_ecx & 0x00000001)
+            i_capabilities |= VLC_CPU_SSE3;
+        if (i_ecx & 0x00000200)
+            i_capabilities |= VLC_CPU_SSSE3;
+        if (i_ecx & 0x00080000)
+            i_capabilities |= VLC_CPU_SSE4_1;
+        if (i_ecx & 0x00100000)
+            i_capabilities |= VLC_CPU_SSE4_2;
     }
 
-# if defined (CAN_COMPILE_SSE2)
-    if ((i_edx & 0x04000000) && vlc_CPU_check ("SSE2", SSE2_test))
-        i_capabilities |= VLC_CPU_SSE2;
-# endif
-
-# if defined (CAN_COMPILE_SSE3)
-    if ((i_ecx & 0x00000001) && vlc_CPU_check ("SSE3", SSE3_test))
-        i_capabilities |= VLC_CPU_SSE3;
-# endif
-
-# if defined (__SSSE3__)
-    i_capabilities |= CPU_CAPABILITY_SSSE3;
-# elif defined (CAN_COMPILE_SSSE3)
-    if ((i_ecx & 0x00000200) && vlc_CPU_check ("SSSE3", SSSE3_test))
-        i_capabilities |= CPU_CAPABILITY_SSSE3;
-# endif
-
-# if defined (__SSE4_1__)
-    i_capabilities |= CPU_CAPABILITY_SSE4_1;
-# elif defined (CAN_COMPILE_SSE4_1)
-    if ((i_ecx & 0x00080000) && vlc_CPU_check ("SSE4.1", SSE4_1_test))
-        i_capabilities |= CPU_CAPABILITY_SSE4_1;
-# endif
-
-# if defined (__SSE4_2__)
-    i_capabilities |= CPU_CAPABILITY_SSE4_2;
-# elif defined (CAN_COMPILE_SSE4_2)
-    if ((i_ecx & 0x00100000) && vlc_CPU_check ("SSE4.2", SSE4_2_test))
-        i_capabilities |= CPU_CAPABILITY_SSE4_2;
-# endif
-
     /* test for additional capabilities */
     cpuid( 0x80000000 );
 
@@ -272,12 +222,10 @@ void vlc_CPU_init (void)
     /* list these additional capabilities */
     cpuid( 0x80000001 );
 
-# if defined (__3dNOW__)
-    i_capabilities |= CPU_CAPABILITY_3DNOW;
-# elif defined (CAN_COMPILE_3DNOW)
+# if defined (CAN_COMPILE_3DNOW) && !defined (__3dNOW__)
     if ((i_edx & 0x80000000) && vlc_CPU_check ("3D Now!", ThreeD_Now_test))
-        i_capabilities |= CPU_CAPABILITY_3DNOW;
 # endif
+        i_capabilities |= VLC_CPU_3dNOW;
 
     if( b_amd && ( i_edx & 0x00400000 ) )
         i_capabilities |= VLC_CPU_MMXEXT;
@@ -323,7 +271,7 @@ unsigned vlc_CPU (void)
 {
 /* On Windows and OS/2,
  * initialized from DllMain() and _DLL_InitTerm() respectively, instead */
-#if !defined(WIN32) && !defined(__OS2__)
+#if !defined(_WIN32) && !defined(__OS2__)
     static pthread_once_t once = PTHREAD_ONCE_INIT;
     pthread_once (&once, vlc_CPU_init);
 #endif
@@ -336,21 +284,20 @@ void vlc_CPU_dump (vlc_object_t *obj)
     char buf[200], *p = buf;
 
 #if defined (__i386__) || defined (__x86_64__)
-    const unsigned flags = vlc_CPU();
-#define PRINT_CAPABILITY( capability, string ) \
-    if (flags & (capability)) \
-        p += sprintf (p, "%s ", (string) )
-
     if (vlc_CPU_MMX()) p += sprintf (p, "MMX ");
     if (vlc_CPU_MMXEXT()) p += sprintf (p, "MMXEXT ");
-    if (vlc_CPU_SSE()) p += sprintf (p, "SSE ");;
-    if (vlc_CPU_SSE2()) p += sprintf (p, "SSE2 ");;
-    if (vlc_CPU_SSE3()) p += sprintf (p, "SSE2 ");;
-    PRINT_CAPABILITY(CPU_CAPABILITY_SSSE3, "SSSE3");
-    PRINT_CAPABILITY(CPU_CAPABILITY_SSE4_1, "SSE4.1");
-    PRINT_CAPABILITY(CPU_CAPABILITY_SSE4_2, "SSE4.2");
-    PRINT_CAPABILITY(CPU_CAPABILITY_SSE4A,  "SSE4A");
-    PRINT_CAPABILITY(CPU_CAPABILITY_3DNOW, "3DNow!");
+    if (vlc_CPU_SSE()) p += sprintf (p, "SSE ");
+    if (vlc_CPU_SSE2()) p += sprintf (p, "SSE2 ");
+    if (vlc_CPU_SSE3()) p += sprintf (p, "SSE3 ");
+    if (vlc_CPU_SSSE3()) p += sprintf (p, "SSSE3 ");
+    if (vlc_CPU_SSE4_1()) p += sprintf (p, "SSE4.1 ");
+    if (vlc_CPU_SSE4_2()) p += sprintf (p, "SSE4.2 ");
+    if (vlc_CPU_SSE4A()) p += sprintf (p, "SSE4A ");
+    if (vlc_CPU_AVX()) p += sprintf (p, "AVX ");
+    if (vlc_CPU_AVX2()) p += sprintf (p, "AVX ");
+    if (vlc_CPU_3dNOW()) p += sprintf (p, "3DNow! ");
+    if (vlc_CPU_XOP()) p += sprintf (p, "XOP ");
+    if (vlc_CPU_FMA4()) p += sprintf (p, "FMA4 ");
 
 #elif defined (__powerpc__) || defined (__ppc__) || defined (__ppc64__)
     if (vlc_CPU_ALTIVEC())  p += sprintf (p, "AltiVec");