X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_cpu.h;h=910900ab4e2b42c12cc85a35f7f305288df696d8;hb=fef26a45cc024d433bfa9ad08c7fefbdb47b2974;hp=a87589d9f6d7b41d46f85d5b4bae765520d31389;hpb=0ed12fd66fe7dbd390ed90f33fd137ba0f51908d;p=vlc diff --git a/include/vlc_cpu.h b/include/vlc_cpu.h index a87589d9f6..910900ab4e 100644 --- a/include/vlc_cpu.h +++ b/include/vlc_cpu.h @@ -30,23 +30,27 @@ VLC_API unsigned vlc_CPU(void); # if defined (__i386__) || defined (__x86_64__) # define HAVE_FPU 1 -# define VLC_CPU_MMX 8 -# define CPU_CAPABILITY_3DNOW (1<<4) -# define VLC_CPU_MMXEXT 32 -# define VLC_CPU_SSE 64 -# define VLC_CPU_SSE2 128 -# define VLC_CPU_SSE3 256 -# define VLC_CPU_SSSE3 512 -# define VLC_CPU_SSE4_1 1024 -# define VLC_CPU_SSE4_2 2048 -# define VLC_CPU_SSE4A 4096 +# define VLC_CPU_MMX 0x00000008 +# define VLC_CPU_3dNOW 0x00000010 +# define VLC_CPU_MMXEXT 0x00000020 +# define VLC_CPU_SSE 0x00000040 +# define VLC_CPU_SSE2 0x00000080 +# define VLC_CPU_SSE3 0x00000100 +# define VLC_CPU_SSSE3 0x00000200 +# define VLC_CPU_SSE4_1 0x00000400 +# define VLC_CPU_SSE4_2 0x00000800 +# define VLC_CPU_SSE4A 0x00001000 +# define VLC_CPU_AVX 0x00002000 +# define VLC_CPU_AVX2 0x00004000 +# define VLC_CPU_XOP 0x00008000 +# define VLC_CPU_FMA4 0x00010000 # if defined (__MMX__) # define vlc_CPU_MMX() (1) # define VLC_MMX # else # define vlc_CPU_MMX() ((vlc_CPU() & VLC_CPU_MMX) != 0) -# if VLC_GCC_VERSION(4, 4) +# if VLC_GCC_VERSION(4, 4) || defined(__clang__) # define VLC_MMX __attribute__ ((__target__ ("mmx"))) # else # define VLC_MMX VLC_MMX_is_not_implemented_on_this_compiler @@ -60,7 +64,7 @@ VLC_API unsigned vlc_CPU(void); # else # define vlc_CPU_MMXEXT() ((vlc_CPU() & VLC_CPU_MMXEXT) != 0) # define vlc_CPU_SSE() ((vlc_CPU() & VLC_CPU_SSE) != 0) -# if VLC_GCC_VERSION(4, 4) +# if VLC_GCC_VERSION(4, 4) || defined(__clang__) # define VLC_SSE __attribute__ ((__target__ ("sse"))) # else # define VLC_SSE VLC_SSE_is_not_implemented_on_this_compiler @@ -103,6 +107,36 @@ VLC_API unsigned vlc_CPU(void); # define vlc_CPU_SSE4A() ((vlc_CPU() & VLC_CPU_SSE4A) != 0) # endif +# ifdef __AVX__ +# define vlc_CPU_AVX() (1) +# else +# define vlc_CPU_AVX() ((vlc_CPU() & VLC_CPU_AVX) != 0) +# endif + +# ifdef __AVX2__ +# define vlc_CPU_AVX2() (1) +# else +# define vlc_CPU_AVX2() ((vlc_CPU() & VLC_CPU_AVX2) != 0) +# endif + +# ifdef __3dNOW__ +# define vlc_CPU_3dNOW() (1) +# else +# define vlc_CPU_3dNOW() ((vlc_CPU() & VLC_CPU_3dNOW) != 0) +# endif + +# ifdef __XOP__ +# define vlc_CPU_XOP() (1) +# else +# define vlc_CPU_XOP() ((vlc_CPU() & VLC_CPU_XOP) != 0) +# endif + +# ifdef __FMA4__ +# define vlc_CPU_FMA4() (1) +# else +# define vlc_CPU_FMA4() ((vlc_CPU() & VLC_CPU_FMA4) != 0) +# endif + # elif defined (__ppc__) || defined (__ppc64__) || defined (__powerpc__) # define HAVE_FPU 1 # define VLC_CPU_ALTIVEC 2 @@ -119,17 +153,38 @@ VLC_API unsigned vlc_CPU(void); # else # define HAVE_FPU 0 # endif +# define VLC_CPU_ARMv6 4 # define VLC_CPU_ARM_NEON 2 +# if defined (__ARM_ARCH_7A__) +# define VLC_CPU_ARM_ARCH 7 +# elif defined (__ARM_ARCH_6__) || defined (__ARM_ARCH_6T2__) +# define VLC_CPU_ARM_ARCH 6 +# else +# define VLC_CPU_ARM_ARCH 4 +# endif + +# if (VLC_CPU_ARM_ARCH >= 6) +# define vlc_CPU_ARMv6() (1) +# else +# define vlc_CPU_ARMv6() ((vlc_CPU() & VLC_CPU_ARMv6) != 0) +# endif + # ifdef __ARM_NEON__ # define vlc_CPU_ARM_NEON() (1) # else # define vlc_CPU_ARM_NEON() ((vlc_CPU() & VLC_CPU_ARM_NEON) != 0) # endif +# elif defined (__aarch64__) +# define HAVE_FPU 1 + # elif defined (__sparc__) # define HAVE_FPU 1 +# elif defined (__mips_hard_float) +# define HAVE_FPU 1 + # else /** * Are single precision floating point operations "fast"?