X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fposix%2Flinux_cpu.c;h=1ef2539e453c9131a58b49f4de66f158b357435e;hb=5ebd61f421602d9df5ab47d0044c0d0f32b0156a;hp=f239d2cb76c52cabb98b93de2e2f6d9f6ddbfc72;hpb=58dd22531f1fa4aa858badb45bf5c63ae099b2a6;p=vlc diff --git a/src/posix/linux_cpu.c b/src/posix/linux_cpu.c index f239d2cb76..1ef2539e45 100644 --- a/src/posix/linux_cpu.c +++ b/src/posix/linux_cpu.c @@ -54,12 +54,17 @@ static void vlc_CPU_init (void) while (getline (&line, &linelen, info) != -1) { - if (strncmp (line, CPU_FLAGS, strlen (CPU_FLAGS))) - continue; - char *p = line, *cap; uint_fast32_t core_caps = 0; +#if defined (__arm__) + unsigned ver; + if (sscanf (line, "Processor\t: ARMv%u", &ver) >= 1 && ver >= 6) + core_caps |= VLC_CPU_ARMv6; +#endif + if (strncmp (line, CPU_FLAGS, strlen (CPU_FLAGS))) + continue; + while ((cap = strsep (&p, " ")) != NULL) { #if defined (__arm__) @@ -79,20 +84,22 @@ static void vlc_CPU_init (void) core_caps |= VLC_CPU_SSE3; if (!strcmp (cap, "ssse3")) core_caps |= VLC_CPU_SSSE3; -# ifndef __SSE4_1__ if (!strcmp (cap, "sse4_1")) - core_caps |= CPU_CAPABILITY_SSE4_1; -# endif -# ifndef __SSE4_2__ + core_caps |= VLC_CPU_SSE4_1; if (!strcmp (cap, "sse4_2")) - core_caps |= CPU_CAPABILITY_SSE4_1; -# endif + core_caps |= VLC_CPU_SSE4_2; if (!strcmp (cap, "sse4a")) - core_caps |= CPU_CAPABILITY_SSE4A; -# ifndef __3dNOW__ + core_caps |= VLC_CPU_SSE4A; + if (!strcmp (cap, "avx")) + core_caps |= VLC_CPU_AVX; + if (!strcmp (cap, "avx2")) + core_caps |= VLC_CPU_AVX2; if (!strcmp (cap, "3dnow")) - core_caps |= CPU_CAPABILITY_3DNOW; -# endif + core_caps |= VLC_CPU_3dNOW; + if (!strcmp (cap, "xop")) + core_caps |= VLC_CPU_XOP; + if (!strcmp (cap, "fma4")) + core_caps |= VLC_CPU_FMA4; #elif defined (__powerpc__) || defined (__powerpc64__) if (!strcmp (cap, "altivec supported")) @@ -109,19 +116,6 @@ static void vlc_CPU_init (void) if (all_caps == 0xFFFFFFFF) /* Error parsing of cpuinfo? */ all_caps = 0; /* Do not assume any capability! */ - /* Always enable capabilities that were forced during compilation */ -#if defined (__i386__) || defined (__x86_64__) -# ifdef __SSE4_1__ - all_caps |= CPU_CAPABILITY_SSE4_1; -# endif -# ifdef __SSE4_2__ - all_caps |= CPU_CAPABILITY_SSE4_2; -# endif -# ifdef __3dNOW__ - all_caps |= CPU_CAPABILITY_3DNOW; -# endif - -#endif cpu_flags = all_caps; }