diff --git a/libavutil/x86/cpu.c b/libavutil/x86/cpu.c index 328ce6de9c..3b085e71f5 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 */