- {
-# if defined(CAN_COMPILE_SSE)
- /* We test if OS supports the SSE instructions */
- psz_capability = "SSE2";
- i_illegal = 0;
-
- if( setjmp( env ) == 0 )
- {
- /* Test a SSE2 instruction */
- __asm__ __volatile__ ( "movupd %%xmm0, %%xmm0\n" : : );
- }
-
- if( i_illegal == 0 )
- {
- i_capabilities |= CPU_CAPABILITY_SSE2;
- }
-# endif
- }
+ check_capability( "SSE2", CPU_CAPABILITY_SSE2,
+ "movupd %%xmm0, %%xmm0\n", );
+# endif
+
+# if defined (__SSE3__)
+ i_capabilities |= CPU_CAPABILITY_SSE3;
+# elif defined (CAN_COMPILE_SSE3)
+ if( i_ecx & 0x00000001 )
+ check_capability( "SSE3", CPU_CAPABILITY_SSE3,
+ "movsldup %%xmm1, %%xmm0\n", );
+# endif
+
+# if defined (__SSSE3__)
+ i_capabilities |= CPU_CAPABILITY_SSSE3;
+# elif defined (CAN_COMPILE_SSSE3)
+ if( i_ecx & 0x00000200 )
+ check_capability( "SSSE3", CPU_CAPABILITY_SSSE3,
+ "pabsw %%xmm1, %%xmm0\n", );
+# endif
+
+# if defined (__SSE4_1__)
+ i_capabilities |= CPU_CAPABILITY_SSE4_1;
+# elif defined (CAN_COMPILE_SSE4_1)
+ if( i_ecx & 0x00080000 )
+ check_capability( "SSE4.1", CPU_CAPABILITY_SSE4_1,
+ "pmaxsb %%xmm1, %%xmm0\n", );
+# endif
+
+# if defined (__SSE4_2__)
+ i_capabilities |= CPU_CAPABILITY_SSE4_2;
+# elif defined (CAN_COMPILE_SSE4_2)
+ if( i_ecx & 0x00100000 )
+ check_capability( "SSE4.2", CPU_CAPABILITY_SSE4_2,
+ "pcmpgtq %%xmm1, %%xmm0\n", );
+# endif