[FFmpeg-devel] [FFmpeg-cvslog] r15994 - trunk/libavcodec/armv4l/dsputil_vfp.S

Måns Rullgård mans
Thu Dec 4 01:49:11 CET 2008


Siarhei Siamashka <siarhei.siamashka at gmail.com> writes:

> On Wednesday 03 December 2008, M?ns Rullg?rd wrote:
>> matthieu castet <castet.matthieu at free.fr> writes:
>> > mru wrote:
>> >> Author: mru
>> >> Date: Wed Dec  3 21:16:01 2008
>> >> New Revision: 15994
>> >>
>> >> Log:
>> >> ARM: convert VFP code to UAL syntax
>> >
>> > Doesn't vfp also present on core without neon (armv5 for example) ?
>>
>> Yes, but that file only uses VFPv2 instructions.  The machine code is
>> the same.
>>
>> > What's the benefit of using this syntax ?
>>
>> The instruction mnemonics match those used in the manual.  To me that
>> makes a difference.
>
> Still probably it is preferable to use legacy syntax in this file for a few
> reasons:
> 1. Better compatibility with older versions of binutils which do not know
> about NEON, but support VFP perfectly fine

UAL != NEON, even if binutils seems to think so.

> 2. ARMv5 Architecture Reference Manual uses legacy syntax (it is much more 
> easily available for everyone than ARMv7 manual)
> 3. VFP11 VectorFloating-point Coprocessor Technical Reference Manual uses
> legacy syntax (it has VFP11 pipeline description which is good to have when
> doing optimizations)
>
> Also I'm curious about the rationale for converting these VFP
> functions from gcc inline assembly embedded in .c file into .S file? 
> Having some short summary of rules/recommendations for doing ARM
> assembly optimizations in FFmpeg can help to avoid confusion when
> submitting patches. You must have some reasons, but just looking
> from the outside, the last changes may seem somewhat chaotic and not
> always obviously beneficial.

I find gcc inline assembler more difficult to read and work with.
Separating it also allows FFmpeg to be built with the ARM RVCT
compiler, which gives faster code.

> Also we have iPhone users who sometimes try to compile FFmpeg and have
> problems: http://www.nabble.com/Compile-FFMPEG-for-ARMv6-td20418745r0.html

I don't care about that.  Nobody is stopping them using a modern
binutils version.  The version in that SDK is completely useless by
the looks of it.

> It would be nice to have some decision what to do about them.
> Whether we may try to improve compatibility of the sources across
> various versions of GNU assembler and its clones whenever it is easy
> to do.  For example, '.word' and '.long' are aliases with the former
> one not supported by the assembler from iPhone SDK.  Preferring
> '.long' everywhere can provide a bit better compatibility with
> almost no efforts, also it will make the sources more consistent. On
> the other hand I would prefer to be able to use such standard GNU
> assembler features as ".balign", ".ltorg" and the others (which are
> supported by binutils for ages).
>
> I really want to know what GNU assembler features are allowed to be used
> before starting to implement VFP11 optimized split-radix FFT.

I would say anything supported by binutils 2.19 is permissible.  I
can't think of any reason to keep using an older version.

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




More information about the ffmpeg-devel mailing list