[FFmpeg-devel] [PATCH] Fix configure to disable MMX for Pentium Pro

Måns Rullgård mans
Thu Aug 26 14:41:56 CEST 2010


Janne Grunau <janne-ffmpeg at jannau.net> writes:

> On Thu, Aug 26, 2010 at 01:52:22AM -0400, Jason Garrett-Glaser wrote:
>> On Thu, Aug 26, 2010 at 12:44 AM, Eli Friedman <eli.friedman at gmail.com> wrote:
>> > Attached. ?This is essentially fixing an oversight in r21277.
>> >
>> > -Eli
>> 
>> This means every distro who uses --cpu=i686 or similar will silently
>> have their ffmpeg crippled the next time they make a build.
>> 
>> I would rather roll back r21277 than apply this patch.
>
> What about requriring --enable-runtime-cpudetect for i686 with mmx and
> crippling emms() in that case like attached patch?

I'm not changing a thing until someone shows me evidence of ffmpeg
actually being used on such CPUs.

> Janne
> Index: configure
> ===================================================================
> --- configure	(revision 24944)
> +++ configure	(working copy)
> @@ -2104,6 +2104,21 @@
>              cpuflags="-march=$cpu"
>              disable cmov
>          ;;
> +        # targets that do support conditional mov (cmov) but not mmx
> +        i686|pentiumpro|core2)
> +            cpuflags="-march=$cpu"
> +            enable cmov
> +            enable fast_cmov
> +            if ! disabled runtime_cpudetect && ! enabled runtime_cpudetect; then
> +                enable runtime_cpudetect
> +                warn "CPU without MMX detected, assuming distro build and " \
> +                    "enabling runtime cpu detectinon. Use " \
> +                    "--disable-runtime-cpudetect if you are building " \
> +                    "especially for CPU without MMX. Performance will suffer!"
> +            else
> +                disable mmx
> +            fi
> +        ;;
>          # targets that do support conditional mov (cmov)
>          i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona|atom)
>              cpuflags="-march=$cpu"
> Index: libavcodec/dsputil.h
> ===================================================================
> --- libavcodec/dsputil.h	(revision 24944)
> +++ libavcodec/dsputil.h	(working copy)
> @@ -631,6 +631,14 @@
>
>  static inline void emms(void)
>  {
> +#if CONFIG_RUNTIME_CPUDETECT
> +    static mm_flags;
> +    if (unlikely(!mm_flags)) {
> +        mm_flags = mm_support();
> +        if (!mm_flags)
> +            mm_flags = FF_MM_FORCE;
> +    if (mm_flags & FF_MM_MMX)
> +#endif /* CONFIG_RUNTIME_CPUDETECT */
>      __asm__ volatile ("emms;":::"memory");
>  }

No way.

-- 
M?ns Rullg?rd
mans at mansr.com



More information about the ffmpeg-devel mailing list