-
- Downloads
aarch64: Add AdvSIMD faminmax intrinsics
The AArch64 FEAT_FAMINMAX extension is optional from Armv9.2-a and mandatory from Armv9.5-a. It introduces instructions for computing the floating point absolute maximum and minimum of the two vectors element-wise. This patch introduces AdvSIMD faminmax intrinsics. The intrinsics of this extension are implemented as the following builtin functions: * vamax_f16 * vamaxq_f16 * vamax_f32 * vamaxq_f32 * vamaxq_f64 * vamin_f16 * vaminq_f16 * vamin_f32 * vaminq_f32 * vaminq_f64 We are defining a new way to add AArch64 AdvSIMD intrinsics by listing all the intrinsics in a .def file and then using that .def file to initialise various data structures. This would lead to more concise code and easier addition of the new AdvSIMD intrinsics in future. The faminmax intrinsics are defined using the new approach. gcc/ChangeLog: * config/aarch64/aarch64-builtins.cc (ENTRY): Macro to parse the contents of aarch64-simd-pragma-builtins.def. (ENTRY_VHSDF): Macro to parse the contents of aarch64-simd-pragma-builtins.def. (enum aarch64_builtins): New enum values for faminmax builtins via aarch64-simd-pragma-builtins.def. (enum class aarch64_builtin_signatures): Enum class to specify the number of operands a builtin will take. (struct aarch64_pragma_builtins_data): Struct to hold data from aarch64-simd-pragma-builtins.def. (aarch64_fntype): New function to define function types of intrinsics given an object of type aarch64_pragma_builtins_data. (aarch64_init_pragma_builtins): New function to define pragma builtins. (aarch64_get_pragma_builtin): New function to get a row of aarch64_pragma_builtins, given code. (handle_arm_neon_h): Modify to call aarch64_init_pragma_builtins. (aarch64_general_check_builtin_call): Modify to check whether required flag is being used for pragma builtins. (aarch64_expand_pragma_builtin): New function to emit instructions of pragma_builtin. (aarch64_general_expand_builtin): Modify to call aarch64_expand_pragma_builtin. * config/aarch64/aarch64-option-extensions.def (AARCH64_OPT_EXTENSION): Introduce new flag for this extension. * config/aarch64/aarch64-simd.md (@aarch64_<faminmax_uns_op><mode>): Instruction pattern for faminmax intrinsics. * config/aarch64/aarch64.h (TARGET_FAMINMAX): Introduce new flag for this extension. * config/aarch64/iterators.md: New iterators and unspecs. * doc/invoke.texi: Document extension in AArch64 Options. * config/aarch64/aarch64-simd-pragma-builtins.def: New file to list pragma builtins. gcc/testsuite/ChangeLog: * gcc.target/aarch64/simd/faminmax-builtins-no-flag.c: New test. * gcc.target/aarch64/simd/faminmax-builtins.c: New test.
Showing
- gcc/config/aarch64/aarch64-builtins.cc 119 additions, 0 deletionsgcc/config/aarch64/aarch64-builtins.cc
- gcc/config/aarch64/aarch64-option-extensions.def 2 additions, 0 deletionsgcc/config/aarch64/aarch64-option-extensions.def
- gcc/config/aarch64/aarch64-simd-pragma-builtins.def 23 additions, 0 deletionsgcc/config/aarch64/aarch64-simd-pragma-builtins.def
- gcc/config/aarch64/aarch64-simd.md 10 additions, 0 deletionsgcc/config/aarch64/aarch64-simd.md
- gcc/config/aarch64/aarch64.h 4 additions, 0 deletionsgcc/config/aarch64/aarch64.h
- gcc/config/aarch64/iterators.md 9 additions, 0 deletionsgcc/config/aarch64/iterators.md
- gcc/doc/invoke.texi 2 additions, 0 deletionsgcc/doc/invoke.texi
- gcc/testsuite/gcc.target/aarch64/simd/faminmax-builtins-no-flag.c 10 additions, 0 deletions...suite/gcc.target/aarch64/simd/faminmax-builtins-no-flag.c
- gcc/testsuite/gcc.target/aarch64/simd/faminmax-builtins.c 115 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/simd/faminmax-builtins.c
Loading
Please register or sign in to comment