diff --git a/libavutil/x86/cpu.c b/libavutil/x86/cpu.c index f3a49c6772..1b80847d19 100644 --- a/libavutil/x86/cpu.c +++ b/libavutil/x86/cpu.c @@ -221,6 +221,12 @@ int ff_get_cpu_flags_x86(void) * functions on the Atom. */ if (family == 6 && model == 28) rval |= AV_CPU_FLAG_ATOM; + + /* Conroe has a slow shuffle unit. Check the model number to ensure not + * to include crippled low-end Penryns and Nehalems that lack SSE4. */ + if ((rval & AV_CPU_FLAG_SSSE3) && !(rval & AV_CPU_FLAG_SSE4) && + family == 6 && model < 23) + rval |= AV_CPU_FLAG_SSSE3SLOW; } #endif /* cpuid */