NASM is more actively maintained and permits generating dependency information as a sideeffect of assembling, thus cutting build times in half.tags/n4.0
@@ -6,7 +6,7 @@ os: | |||||
addons: | addons: | ||||
apt: | apt: | ||||
packages: | packages: | ||||
- yasm | |||||
- nasm | |||||
- diffutils | - diffutils | ||||
compiler: | compiler: | ||||
- clang | - clang | ||||
@@ -17,7 +17,7 @@ cache: | |||||
before_install: | before_install: | ||||
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew update --all; fi | - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew update --all; fi | ||||
install: | install: | ||||
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew install yasm; fi | |||||
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew install nasm; fi | |||||
script: | script: | ||||
- mkdir -p libav-samples | - mkdir -p libav-samples | ||||
- ./configure --samples=libav-samples --cc=$CC | - ./configure --samples=libav-samples --cc=$CC | ||||
@@ -9,6 +9,8 @@ version <next>: | |||||
- config.log and other configuration files moved into avbuild/ directory | - config.log and other configuration files moved into avbuild/ directory | ||||
- VAAPI-accelerated MPEG-2 and VP8 encoding | - VAAPI-accelerated MPEG-2 and VP8 encoding | ||||
- Apple Pixlet decoder | - Apple Pixlet decoder | ||||
- The x86 assembler default switched from yasm to nasm, pass | |||||
--x86asmexe=yasm to configure to restore the old behavior. | |||||
version 12: | version 12: | ||||
@@ -2563,7 +2563,7 @@ shlibdir_default="$libdir_default" | |||||
ar_default="ar" | ar_default="ar" | ||||
cc_default="gcc" | cc_default="gcc" | ||||
host_cc_default="gcc" | host_cc_default="gcc" | ||||
x86asmexe_default="yasm" | |||||
x86asmexe_default="nasm" | |||||
ln_s="ln -s -f" | ln_s="ln -s -f" | ||||
nm_default="nm -g" | nm_default="nm -g" | ||||
pkg_config_default=pkg-config | pkg_config_default=pkg-config | ||||
@@ -4493,7 +4493,7 @@ EOF | |||||
} | } | ||||
if ! disabled_any asm mmx x86asm; then | if ! disabled_any asm mmx x86asm; then | ||||
for program in $x86asmexe yasm nasm; do | |||||
for program in $x86asmexe nasm yasm; do | |||||
probe_x86asm $program | probe_x86asm $program | ||||
test -n "$x86asm_type" && break | test -n "$x86asm_type" && break | ||||
done | done | ||||
@@ -4505,7 +4505,7 @@ EOF | |||||
esac | esac | ||||
check_x86asm "movbe ecx, [5]" && enable x86asm || | check_x86asm "movbe ecx, [5]" && enable x86asm || | ||||
die "yasm/nasm not found or too old. Use --disable-x86asm for a crippled build." | |||||
die "nasm/yasm not found or too old. Use --disable-x86asm for a crippled build." | |||||
check_x86asm "vextracti128 xmm0, ymm0, 0" || disable avx2_external | check_x86asm "vextracti128 xmm0, ymm0, 0" || disable avx2_external | ||||
check_x86asm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external | check_x86asm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external | ||||
check_x86asm "vfmadd132ps ymm0, ymm1, ymm2" || disable fma3_external | check_x86asm "vfmadd132ps ymm0, ymm1, ymm2" || disable fma3_external | ||||
@@ -161,8 +161,8 @@ do{ | |||||
For x86, mark registers that are clobbered in your asm. This means both | For x86, mark registers that are clobbered in your asm. This means both | ||||
general x86 registers (e.g. eax) as well as XMM registers. This last one is | general x86 registers (e.g. eax) as well as XMM registers. This last one is | ||||
particularly important on Win64, where xmm6-15 are callee-save, and not | particularly important on Win64, where xmm6-15 are callee-save, and not | ||||
restoring their contents leads to undefined results. In external asm (e.g. | |||||
yasm), you do this by using: | |||||
restoring their contents leads to undefined results. In external asm, | |||||
you do this by using: | |||||
cglobal function_name, num_args, num_regs, num_xmm_regs | cglobal function_name, num_args, num_regs, num_xmm_regs | ||||
In inline asm, you specify clobbered registers at the end of your asm: | In inline asm, you specify clobbered registers at the end of your asm: | ||||
__asm__(".." ::: "%eax"). | __asm__(".." ::: "%eax"). | ||||
@@ -194,12 +194,12 @@ The latter requires a good optimizing compiler which gcc is not. | |||||
Inline asm vs. external asm | Inline asm vs. external asm | ||||
--------------------------- | --------------------------- | ||||
Both inline asm (__asm__("..") in a .c file, handled by a compiler such as gcc) | Both inline asm (__asm__("..") in a .c file, handled by a compiler such as gcc) | ||||
and external asm (.s or .asm files, handled by an assembler such as yasm/nasm) | |||||
and external asm (.s or .asm files, handled by an assembler such as nasm/yasm) | |||||
are accepted in Libav. Which one to use differs per specific case. | are accepted in Libav. Which one to use differs per specific case. | ||||
- if your code is intended to be inlined in a C function, inline asm is always | - if your code is intended to be inlined in a C function, inline asm is always | ||||
better, because external asm cannot be inlined | better, because external asm cannot be inlined | ||||
- if your code calls external functions, yasm is always better | |||||
- if your code calls external functions, external asm is always better | |||||
- if your code takes huge and complex structs as function arguments (e.g. | - if your code takes huge and complex structs as function arguments (e.g. | ||||
MpegEncContext; note that this is not ideal and is discouraged if there | MpegEncContext; note that this is not ideal and is discouraged if there | ||||
are alternatives), then inline asm is always better, because predicting | are alternatives), then inline asm is always better, because predicting | ||||
@@ -69,9 +69,9 @@ OS X on PowerPC or ARM (iPhone) requires a preprocessor from | |||||
assembly functions. Put the Perl script somewhere | assembly functions. Put the Perl script somewhere | ||||
in your PATH, Libav's configure will pick it up automatically. | in your PATH, Libav's configure will pick it up automatically. | ||||
OS X on AMD64 and x86 requires @command{yasm} to build most of the | |||||
OS X on AMD64 and x86 requires @command{nasm} to build most of the | |||||
optimized assembly functions @url{http://mxcl.github.com/homebrew/, Homebrew}, | optimized assembly functions @url{http://mxcl.github.com/homebrew/, Homebrew}, | ||||
@url{http://www.gentoo.org/proj/en/gentoo-alt/prefix/bootstrap-macos.xml, Gentoo Prefix} | |||||
@url{https://wiki.gentoo.org/wiki/Project:Prefix, Gentoo Prefix} | |||||
or @url{http://www.macports.org, MacPorts} can easily provide it. | or @url{http://www.macports.org, MacPorts} can easily provide it. | ||||
@@ -134,7 +134,7 @@ them under @command{MinGW-w64 Win64 Shell} and @command{MinGW-w64 Win32 Shell}. | |||||
pacman -S make pkgconf diffutils | pacman -S make pkgconf diffutils | ||||
# mingw-w64 packages and toolchains | # mingw-w64 packages and toolchains | ||||
pacman -S mingw-w64-x86_64-yasm mingw-w64-x86_64-gcc mingw-w64-x86_64-SDL | |||||
pacman -S mingw-w64-x86_64-nasm mingw-w64-x86_64-gcc mingw-w64-x86_64-SDL | |||||
@end example | @end example | ||||
To target 32 bits replace @code{x86_64} with @code{i686} in the command above. | To target 32 bits replace @code{x86_64} with @code{i686} in the command above. | ||||
@@ -152,14 +152,14 @@ You will need the following prerequisites: | |||||
@item @uref{http://code.google.com/p/msinttypes/, msinttypes} | @item @uref{http://code.google.com/p/msinttypes/, msinttypes} | ||||
(if using MSVC 2012 or earlier) | (if using MSVC 2012 or earlier) | ||||
@item @uref{http://msys2.github.io/, MSYS2} | @item @uref{http://msys2.github.io/, MSYS2} | ||||
@item @uref{http://yasm.tortall.net/, YASM} | |||||
@item @uref{http://www.nasm.us/, NASM} | |||||
(Also available via MSYS2's package manager.) | (Also available via MSYS2's package manager.) | ||||
@end itemize | @end itemize | ||||
To set up a proper environment in MSYS2, you need to run @code{msys_shell.bat} from | To set up a proper environment in MSYS2, you need to run @code{msys_shell.bat} from | ||||
the Visual Studio or Intel Compiler command prompt. | the Visual Studio or Intel Compiler command prompt. | ||||
Place @code{yasm.exe} somewhere in your @code{PATH}. If using MSVC 2012 or | |||||
Place @code{nasm.exe} somewhere in your @code{PATH}. If using MSVC 2012 or | |||||
earlier, place @code{c99wrap.exe} and @code{c99conv.exe} somewhere in your | earlier, place @code{c99wrap.exe} and @code{c99conv.exe} somewhere in your | ||||
@code{PATH} as well. | @code{PATH} as well. | ||||
@@ -307,7 +307,7 @@ These library packages are only available from | |||||
@uref{http://sourceware.org/cygwinports/, Cygwin Ports}: | @uref{http://sourceware.org/cygwinports/, Cygwin Ports}: | ||||
@example | @example | ||||
yasm, libSDL-devel, libfaac-devel, libgsm-devel, libmp3lame-devel, | |||||
nasm, libSDL-devel, libfaac-devel, libgsm-devel, libmp3lame-devel, | |||||
libschroedinger1.0-devel, speex-devel, libtheora-devel, libxvidcore-devel | libschroedinger1.0-devel, speex-devel, libtheora-devel, libxvidcore-devel | ||||
@end example | @end example | ||||