Hi Saurabh,

> On 29 Aug 2024, at 09:51, saurabh....@arm.com wrote:
> 
> External email: Use caution opening links or attachments
> 
> 
> 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.
>        (enum aarch64_builtins): New enum values for faminmax builtins
> via aarch64-simd-pragma-builtins.def.
>        (aarch64_init_pragma_builtins): New function to define pragma builtins.
>        (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 builtins.
>        (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.
>        * config/arm/types.md: Introduce neon_fp_aminmax<q> attributes.
>        * 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.

Sorry for the back-and-forth, but I just realized, why can’t we reuse the 
existing aarch64_init_simd_intrinsics code in aarch64-builtins.cc 
<http://aarch64-builtins.cc/>?
It seems that it already handles most of the registration code, except that it 
doesn’t handle checking of arch extensions.
I think we should aim to refactor this a bit so that we can use that 
functionality.
But I appreciate that this would extend the scope of this patch a bit too much.
So I’m okay with this going in now, but it would be good to clean this area 
somewhat in a separate patch so that we can rely on just 
aarch64-simd-builtins.def, potentially augmented with extension information.
Thanks,
Kyrill


> ---
> gcc/config/aarch64/aarch64-builtins.cc        |  79 ++++++++++++
> .../aarch64/aarch64-option-extensions.def     |   2 +
> .../aarch64/aarch64-simd-pragma-builtins.def  |  31 +++++
> gcc/config/aarch64/aarch64-simd.md            |  11 ++
> gcc/config/aarch64/aarch64.h                  |   4 +
> gcc/config/aarch64/iterators.md               |   9 ++
> gcc/config/arm/types.md                       |   6 +
> gcc/doc/invoke.texi                           |   2 +
> .../aarch64/simd/faminmax-builtins-no-flag.c  |  10 ++
> .../aarch64/simd/faminmax-builtins.c          | 115 ++++++++++++++++++
> 10 files changed, 269 insertions(+)
> create mode 100644 gcc/config/aarch64/aarch64-simd-pragma-builtins.def
> create mode 100644 
> gcc/testsuite/gcc.target/aarch64/simd/faminmax-builtins-no-flag.c
> create mode 100644 gcc/testsuite/gcc.target/aarch64/simd/faminmax-builtins.c
> 
> <v6-0001-aarch64-Add-AdvSIMD-faminmax-intrinsics.patch>

Reply via email to