-
Notifications
You must be signed in to change notification settings - Fork 259
Development Resources
- NEON
- MVE/Helium
- SVE
- Arm HPC tools for SVE (resources)
- SVE Vector Length Agnostic (VLA) programming (introductory tutorial)
- ARM C Language Extensions for SVE (reference)
- SVE Programming Examples
- Intel Intrinsics Guide
- AMD64 Architecture Programmer’s Manual
- New “Bulldozer” and “Piledriver” Instructions
The best documentation I'm aware of right now is the Power Vector Intrinsic Programming Reference. It doesn't show when various functions were added; for that information, see this spreadsheet.
The AltiVec Technology Programming Interface Manual describes the original AltiVec (from 20 years ago), so it doesn't have everything, but it's great if you're a visual learner since there are a lot of diagrams. IBM's XL C/C++ Compiler Reference, specifically the "Vector built-in functions" section in Chapter 8, can also be useful.
The vector extensions for z/Arch are very similar to the ones for POWER, but more limited. The best documentation I've found is in the z/OS XL C/C++ Programming Guide.
The most reliable source is probably llvm's wasm_simd128.h
, but it doesn't really include documentation. If you want more than a header, the WebAssembly 128-bit packed SIMD Extension is probably your best bet, but be aware that it doesn't always quite correspond to what is in the header, so you'll want to check the header too.
MIPS SIMD has references for the SIMD ISA extensions for both 32 and 64 bit MIPS. The instruction names correspond closely to the names of the intrinsics.
- Explicit Vector Programming with OpenMP 4.0 SIMD Extensions (tutorial)
- OpenMP SIMD Directives (reference)
Most popular compilers (including GCC, clang, and ICC) support some version of this, but often only a subset. There are several SIMDE_VECTOR_*
macros in simde/simde-common.h
to help you detect which features are available.
-
SIMDE_CONVERT_VECTOR_
:__builtin_convertvector
(clang & GCC 9+) -
SIMDE_SHUFFLE_VECTOR_
-
__builtin_shuffle
(GCC) -
__builtin_shufflevector
(clang)
-