SIMD macro assembler unified for ARM, MIPS, PPC and x86
MIT License
UniSIMD assembler is a high-level C/C++ macro assembler framework unified across ARM, MIPS, POWER and x86 architectures. It establishes a subset of both BASE and SIMD instruction sets with clearly defined common API, so that application logic can be written and maintained in one place without code replication. The assembler itself isn't a separate tool, but rather a collection of C/C++ header files, which applications need to include directly in order to use.
Initial documentation for the assembler is provided in core/config/rtdocs.h.
At present, Intel SSE/SSE2/SSE4 and AVX/AVX2/AVX-512 (32/64-bit x86 ISAs), ARMv7 NEON/NEONv2, ARMv8 AArch32 and AArch64 NEON, SVE (32/64-bit ARM ISAs), MIPS 32/64-bit r5/r6 MSA and POWER 32/64-bit VMX/VSX (little/big-endian ISAs) are mostly implemented (w/ horizontal reductions and byte/half SIMD+BASE ops) although scalar improvements, wider SIMD vectors with zeroing/merging predicates in 3/4-operand instructions, cross-precision fp-converters on modern CPU targets are planned as extensions to current 2/3-operand SPMD-driven vertical SIMD ISA.
The project has a test framework for Linux/GCC/Clang and Windows/VC++/TDM64-GCC. Support for macOS is provided via Command Line Tools with GCC and Clang options. Instructions for resolving dependencies and building the binaries for supported platforms can be found in the accompanying INSTALL file.
UniSIMD core features: