Add new absolute difference accumulate intrinsic.
New SVE/SME2.3 intrinsics for absolute difference accumulation are now supported on AArch64.
GCC now supports a set of new absolute difference accumulation intrinsics for the AArch64 architecture, specifically for SVE/SME2.3. These intrinsics, such as svabal_s16 and svabal_u64, allow for efficient computation of accumulated absolute differences on vector data.
In Details
This commit introduces support for several SVE/SME2.3 intrinsics related to absolute difference accumulation on AArch64. The new intrinsics (e.g., svabal_s16, svabal_n_s16, svabal_s32, etc.) are defined in aarch64-sve-builtins-sve2.cc and declared in aarch64-sve-builtins-sve2.h. The corresponding UNSPECs (UNSPEC_SABAL, UNSPEC_UABAL) and pattern definitions have been added to iterators.md to integrate them into the SVE instruction selection logic.
- AArch64
- The 64-bit ARM architecture.
- SVE
- Scalable Vector Extension. An ARM instruction set architecture extension that provides vector processing capabilities with a vector length that can vary at runtime.
- SME
- Scalable Matrix Extension. An ARM architecture extension that provides matrix processing capabilities, often built upon SVE.
- Intrinsic
- A function provided by a compiler that corresponds directly to a specific machine instruction or a small sequence of machine instructions. Intrinsics provide a way to access hardware capabilities from high-level code.
- vector<bool>
- A specialized version of C++'s
std::vectortemplate that stores boolean values as individual bits for space efficiency. It uses a proxy reference type (reference) to allow modification of these bits.