Another Wave of x86 Assembly Porting

Written for FFmpeg by Timothy Gu on 2014-05-27

As introduced in the last announcement I made [1], FFmpeg's hand-tuned assembly code is what makes it so fast. In FFmpeg, x86 assembly comes in two flavors: inline assembly, which is compiled by GCC as a special kind of C code; and NASM assembly, which is assembled by the Yasm or NASM assembler. NASM assembly has been the flavor we would like new code to be in, because it supports Microsoft's Visual Studio with the installation of the Yasm assembler. To compile the inline assembly for Windows, you would need a full MinGW toolchain, which is something MSVC users would like to avoid.

However, due to some historic reasons, many old codes in FFmpeg are in the form of inline assembly, which is a very significant disadvantage to our MSVC users. So here comes what we have been trying to do: porting the inline assembly code to NASM syntax. The job is easy for most functions; but for some, the macros and dependencies are intertwined together, which makes reading the code, let alone porting it, extremely difficult. FFmpeg developers, James Almer and Christophe Gisquet, took on this job and made lots of progress on it [2].

As we make more code easily usable by MSVC users, more projects running on Windows will utilize FFmpeg, which in turn will make FFmpeg a even more active project that it already is.

[1] SIMD Optimization Season:
[2] See the recent Git log of libavcodec/x86:;a=history;f=libavcodec/x86;hb=58632070866a529913355df1d9c7cc71fa91ffde

Read all announcements