Port NEON rounding intrinsics to pragma-based framework
Integrates NEON rounding intrinsics into GCC's pragma framework, improving their management and optimization potential.
This commit ports a set of NEON rounding intrinsics, including vrnd, vrnda, vrndi, vrndm, vrndn, vrndns, vrndp, and vrndx (along with their vector variants), to the pragma-based framework on aarch64. By moving these intrinsics into this unified framework, GCC can manage their lowering and optimization more consistently. This change removes direct function definitions from arm_neon.h and introduces new function bases and definition groups in aarch64-neon-builtins-base.cc and .def, respectively. New test cases are added to verify the functionality of these ported intrinsics.
In Details
Continuing the integration of NEON intrinsics into the pragma-based framework, this patch addresses the rounding-related intrinsics (vrnd*). It defines new function bases and definition groups for these operations in aarch64-neon-builtins-base.cc and .def, respectively. The corresponding header declarations in arm_neon.h are removed, signifying that the lowering logic is now handled internally by the pragma system. This approach centralizes the implementation details and facilitates optimizations. New test cases are added to cover the various rounding modes and vector sizes for these…
- NEON
- ARM's Advanced SIMD extension, a set of single instruction, multiple data (SIMD) instructions used for accelerating multimedia and signal processing tasks on ARM processors.
- intrinsics
- Special functions that allow C/C++ code to directly access specific hardware instructions, such as those in NEON. They provide a higher-level abstraction than inline assembly but offer similar control.
- pragma-based framework
- An internal compiler framework that uses pragmas to define and manage the behavior and lowering of specific language constructs or intrinsic functions. It aims to centralize and simplify the compiler's handling of these features.
- SIMD
- Single Instruction, Multiple Data. A class of parallel computers in Flynn's taxonomy that perform the same operation on multiple data points simultaneously using a single instruction.
- rounding
- The process of approximating a number by another number with fewer digits or a simpler form. Floating-point operations involve various rounding modes (e.g., to nearest, zero, positive infinity, negative infinity).