Skip to content

ASM Support

Taner Sener edited this page Jul 15, 2026 · 2 revisions

Build scripts try to enable available CPU optimizations. The table below records ASM/SIMD status where scripts explicitly set ASM, SIMD, hardware-acceleration, NEON, SSE, or related options.

Library Android iOS / iPadOS macOS tvOS visionOS Linux
dav1d all: No all: No all: No all: No all: No x86-64: Yes
ffmpeg all except x86: Yes; x86: No1 all except x86-64, x86-64-mac-catalyst: Yes; x86-64, x86-64-mac-catalyst: No arm64: Yes; x86-64: No arm64, arm64-simulator: Yes; x86-64: No all: Yes x86-64: Yes
gmp all: No all: No all: No all: No all: No linux-gmp: Dep
gnutls all except x86: Yes; x86: No all: Yes all: Yes all: Yes all: Yes linux-gnutls: Dep
kvazaar Not specified all except x86-64, x86-64-mac-catalyst: Yes; x86-64, x86-64-mac-catalyst: No arm64: Yes; x86-64: No arm64, arm64-simulator: Yes; x86-64: No all: Yes Not specified
libaom arm-v7a: Partial; others: Yes arm slices: Yes; i386: Partial; x86-64, x86-64-mac-catalyst: No3 arm64: Yes; x86-64: No arm64, arm64-simulator: Yes; x86-64: No all: Yes x86-64: Yes
libass arm-v7a, arm-v7a-neon, arm64-v8a, x86: No; x86-64: Yes4 arm slices: No; x86-64, x86-64-mac-catalyst: No; i386: Yes all: No all: No all: No linux-libass: Dep
libjxl all: Partial5 all: Partial5 all: Partial5 all: Partial5 all: Partial5 x86-64: Partial5
libjpeg-turbo all: Yes arm slices: Yes; i386, x86-64, x86-64-mac-catalyst: No; arm64e: Yes2 all: Yes all: Yes all: Yes Not built
libpng arm-v7a: Partial6; others: Yes all: Yes all: Yes all: Yes all: Yes linux-zlib/system png deps: Dep
libtheora all: Yes Not specified Not specified Not specified Not specified linux-libtheora: Dep
libvpx arm-v7a: Partial7; others: Yes armv7, armv7s, i386: Yes; arm64-family: Partial8; x86-64-family: Partial arm64: Partial8; x86-64: Partial arm64, arm64-simulator: Partial8; x86-64: Partial all: Partial8 linux-libvpx: Dep
libwebp arm-v7a: No; others: Yes all except x86-64-mac-catalyst: Yes; x86-64-mac-catalyst: No all: Yes all: Yes all: Yes linux-libwebp: Dep
nettle assembler: No; arch crypto flags: Partial assembler: No; arch crypto flags: Partial assembler: No; arch crypto flags: Partial assembler: No; arch crypto flags: Partial assembler: No; arch crypto flags: Partial Not built
openh264 arm-v7a: No; others: Yes all except x86-64: Yes; x86-64: No9 arm64: Yes; x86-64: No9 arm64, arm64-simulator: Yes; x86-64: No9 all: Yes x86-64: Yes
openssl all: Yes arch target selected; 64-bit NIST EC optimization depends on __uint128_t arch target selected; 64-bit NIST EC optimization depends on __uint128_t arch target selected; 64-bit NIST EC optimization depends on __uint128_t arch target selected; 64-bit NIST EC optimization depends on __uint128_t x86-64: Yes
opus all: Yes all: Yes all: Yes all: Yes all: Yes linux-opus: Dep
soxr Not specified arm64*: Partial; others: Not specified arm64: Partial; x86-64: Not specified arm64, arm64-simulator: Partial; x86-64: Not specified all: Partial linux-soxr: Dep
speex x86, x86-64: Yes; arm: Not specified x86-family: Yes; arm: Not specified x86-64: Yes; arm64: Not specified x86-64: Yes; arm: Not specified arm: Not specified linux-speex: Dep
vo-amrwbenc arm-v7a-neon: Yes; others: Not specified Not specified Not specified Not specified Not specified linux-vo-amrwbenc: Dep
vvenc arm-v7a: No; arm-v7a-neon, arm64-v8a: Yes; x86: Not specified Not specified Not specified Not specified Not specified x86-64: Not specified
x264 all except x86: Yes; x86: No10 arm slices: Yes; i386, x86-64-family: No arm64: Yes; x86-64: No arm64, arm64-simulator: Yes; x86-64: No all: Yes x86-64: Yes
x265 arm-v7a, arm-v7a-neon, x86: No; arm64-v8a, x86-64: Yes armv7, armv7s, x86-64: Yes; arm64*, i386, x86-64-mac-catalyst: No arm64: No; x86-64: Yes arm64, arm64-simulator: No; x86-64: Yes all: No linux-x265: Dep
xvidcore all except x86: Yes; x86: No11 arm slices: Yes; i386, x86-64-family: No arm64: Yes; x86-64: No arm64, arm64-simulator: Yes; x86-64: No all: Yes linux-xvidcore: Dep
zimg Not specified armv7, armv7s: No; others: Yes all: Yes all: Yes all: Yes Not specified

Legend:

Value Meaning
Yes ASM/SIMD is explicitly enabled by the script, or the script preserves an ASM-enabled build path.
No ASM/SIMD is explicitly disabled by the script.
Partial Some ASM/SIMD families are enabled while others are explicitly disabled.
Dep Linux system dependency; ASM status is not known from these scripts.
Not specified The script does not explicitly set ASM/SIMD-related options.
Not built No build script exists for that platform in this project.

Notes

  1. Android ffmpeg disables asm on x86 because the script references FFmpeg ticket 4928.
  2. jpeg leaves the CMake architecture list empty for arm64e because libjpeg-turbo matches it as arm64, but arm64e is not a supported SIMD CPU type.
  3. Apple libaom patches aom_ports to disable asm on x86-64-family slices.
  4. Android libass disables asm on x86 because enabling it causes text relocations in libavfilter.so.
  5. libjxl disables AVX512, AVX512_SPR, AVX512_ZEN4, sizeless vectors, and forced NEON in scripts.
  6. Android libpng does not enable hardware optimizations on arm-v7a because that makes the build try ARM-NEON instructions and breaks compilation.
  7. Android libvpx disables NEON on arm-v7a because runtime CPU detection enables NEON for armv7 CPU.
  8. Apple libvpx enables NEON on arm64-family slices but disables --enable-neon-asm because that option is ARMv7-style 32-bit only; arm64e also disables NEON dotprod due ptrauth issues.
  9. Apple openh264 script says ASM is enabled for all iOS architectures except x86-64.
  10. Android x264 disables asm on x86 because enabling it causes text relocations in libavfilter.so.
  11. Android xvidcore disables assembly on x86 because enabling it causes text relocations in libavcodec.so.

Clone this wiki locally