Skip to content

ASM Support

Taner Sener edited this page Jul 28, 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, WebAssembly SIMD, or related options. Web builds enable WebAssembly SIMD, while native assembly paths remain disabled.

Library Android iOS / iPadOS macOS tvOS visionOS Linux Web
dav1d all: No all: No all: No all: No all: No arm64, x86-64: Yes Wasm SIMD; asm: No12
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 arm64, x86-64: Yes Wasm SIMD; simd128: Yes12
gmp all: No all: No all: No all: No all: No linux-gmp: Dep Wasm SIMD; assembly: No12
gnutls all except x86: Yes; x86: No all: Yes all: Yes all: Yes all: Yes linux-gnutls: Dep Wasm SIMD12
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 Wasm SIMD12
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 arm64, x86-64: Yes Wasm SIMD; target: generic12
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 Wasm SIMD; asm: No12
libjxl all: Partial5 all: Partial5 all: Partial5 all: Partial5 all: Partial5 arm64, x86-64: Partial5 Wasm SIMD12
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 Wasm SIMD; turbo SIMD: No12
libpng arm-v7a: Partial6; others: Yes all: Yes all: Yes all: Yes all: Yes linux-zlib/system png deps: Dep Wasm SIMD12
libtheora all: Yes Not specified Not specified Not specified Not specified linux-libtheora: Dep Wasm SIMD; asm: No12
libvidstab arm: SSE disabled; x86-family: Not specified arm slices: SSE disabled; x86-family: Not specified arm slices: SSE disabled; x86-family: Not specified arm slices: SSE disabled; x86-family: Not specified arm slices: SSE disabled linux-libvidstab: Dep Wasm SIMD; SSE: No12
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 Wasm SIMD; runtime CPU detect: No12
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 Wasm SIMD; WebP SIMD: No12
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 Wasm SIMD12
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 arm64, x86-64: Yes Wasm SIMD; asm: No12
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 arm64, x86-64: Yes Wasm SIMD; asm: No12
opus all: Yes all: Yes all: Yes all: Yes all: Yes linux-opus: Dep Wasm SIMD; asm: No12
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 Wasm SIMD12
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 Wasm SIMD12
vo-amrwbenc arm-v7a-neon: Yes; others: Not specified Not specified Not specified Not specified Not specified linux-vo-amrwbenc: Dep Wasm SIMD12
vvenc arm-v7a: No; arm-v7a-neon, arm64-v8a: Yes; x86: Not specified Not specified Not specified Not specified Not specified arm64: Partial; x86-64: Not specified Wasm SIMD; native SIMD: No12
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 arm64: Not specified; x86-64: Yes Wasm SIMD; asm: No12
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 Wasm SIMD; assembly: No12
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 Wasm SIMD; assembly: No12
zimg Not specified armv7, armv7s: No; others: Yes all: Yes all: Yes all: Yes Not specified Wasm SIMD; zimg SIMD: No12

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.
Wasm SIMD WebAssembly SIMD is enabled through Emscripten flags for the Web build. This is the Web SIMD support indicator.
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.
  12. Web builds target wasm32-unknown-emscripten and compile with -msimd128; --enable-relaxed-simd additionally adds -mrelaxed-simd. FFmpeg is configured with --enable-simd128 while native asm, inline asm and x86 asm are disabled. Row text such as asm: No, assembly: No, SSE: No, or native SIMD: No means that library's native CPU-specific path is disabled even though WebAssembly SIMD flags are enabled.

Clone this wiki locally