[[osmotrx_arch_support]]
== OsmoTRX hardware architecture support

OsmoTRX comes out-of-the-box with several algorithms and operations
optimized for certain instruction-set architectures, as well as non-optimized
fall-back algorithms in case required instruction sets are not supported by the
compiler at compile time or by the executing machine at run-time. Support for
these optimized algorithms can be enabled and disabled by means of configure
flags. Accelerated operations include pulse shape filtering, resampling,
sequence correlation, and many other signal processing operations.

On Intel processors, OsmoTRX makes heavy use of the Streaming SIMD Extensions
(SSE) instruction set.  SSE3 is the minimum requirement for accelerated use.
SSE3 is present in the majority of Intel processors since later versions of the
Pentium 4 architecture and is also present on low power Atom processors. Support
is automatically detected at build time. SSE4.1 instruction set is supported
too. This feature is enabled by default unless explicitly disabled by passing
the configure flag _--with-sse=no_. When enabled, the compiler will build an
extra version of each of the supported algorithms using each of the supported
mentioned instruction sets. Then, at run-time, OsmoTRX will auto-detect
capabilities of the executing machine and enable an optimized algorithm using
the most suitable available (previously compiled) instruction set.

On ARM processors, NEON and NEON FMA are supported. Different to the x86, there
is no auto-detection in this case, nor difference between compile and runtime.
NEON support is disabled by default and can be enabled by passing the flag
_--with-neon=yes_ to the configure script; the used compiler must support NEON
instruction set and the resulting binary will only run fine on an ARM board
supporting NEON extensions. Running OsmoTRX built with flag _--with-neon_ on a
board without NEON instruction set support, will most probably end up in the
process being killed with a _SIGILL_ Illegal Instruction signal by the operating
system. NEON FMA (Fused Multiply-Add) is an extension to the NEON instruction
set, and its use in OsmoTRX can be enabled by passing the _--with_neon_vfpv4_
flag, which will also implicitly enable NEON support (_--with_neon_).
