> On 31 Oct 2024, at 14:23, Yury Khrustalev <yury.khrusta...@arm.com> wrote:
> 
> From: Szabolcs Nagy <szabolcs.n...@arm.com>
> 
> Builtin for chkfeat: the input argument is used to initialize x16 then
> execute chkfeat and return the updated x16.
> 
> Note: ACLE __chkfeat(x) plans to flip the bits to be more intuitive
> (xor the input to output), but for the builtin that seems unnecessary
> complication.
> 
> gcc/ChangeLog:
> 
> * config/aarch64/aarch64-builtins.cc (enum aarch64_builtins):
> Define AARCH64_BUILTIN_CHKFEAT.
> (aarch64_general_init_builtins): Handle chkfeat.
> (aarch64_general_expand_builtin): Handle chkfeat.
> Co-authored-by: Richard Sandiford <richard.sandif...@arm.com>
> ---
> gcc/config/aarch64/aarch64-builtins.cc | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
> 
> diff --git a/gcc/config/aarch64/aarch64-builtins.cc 
> b/gcc/config/aarch64/aarch64-builtins.cc
> index 86d96e47f01..55506530ee4 100644
> --- a/gcc/config/aarch64/aarch64-builtins.cc
> +++ b/gcc/config/aarch64/aarch64-builtins.cc
> @@ -884,6 +884,8 @@ enum aarch64_builtins
>   AARCH64_PLDX,
>   AARCH64_PLI,
>   AARCH64_PLIX,
> +  /* Armv8.9-A / Armv9.4-A builtins.  */
> +  AARCH64_BUILTIN_CHKFEAT,
>   AARCH64_BUILTIN_MAX
> };
> 
> @@ -2294,6 +2296,12 @@ aarch64_general_init_builtins (void)
>   if (!TARGET_ILP32)
>     aarch64_init_pauth_hint_builtins ();
> 
> +  tree ftype_chkfeat
> +    = build_function_type_list (uint64_type_node, uint64_type_node, NULL);
> +  aarch64_builtin_decls[AARCH64_BUILTIN_CHKFEAT]
> +    = aarch64_general_add_builtin ("__builtin_aarch64_chkfeat", 
> ftype_chkfeat,
> +   AARCH64_BUILTIN_CHKFEAT);
> +

Is the builtin intended to be used just to implement the ACLE __chkfeat () 
intrinsic in the future or is it expected to be used directly by users?
If so, it should be documented somehow. I also note that Clang seems to have a 
similar builtin with a deviating name “__builtin_arm_chkfeat”.
This is fine, of course, if the user is only expected to use the arm_acle.h 
intrinsic. Do you intend to implement that in this cycle as well?

Thanks,
Kyrill


>   if (in_lto_p)
>     handle_arm_acle_h ();
> }
> @@ -3498,6 +3506,15 @@ aarch64_general_expand_builtin (unsigned int fcode, 
> tree exp, rtx target,
>     case AARCH64_PLIX:
>       aarch64_expand_prefetch_builtin (exp, fcode);
>       return target;
> +
> +    case AARCH64_BUILTIN_CHKFEAT:
> +      {
> + rtx x16_reg = gen_rtx_REG (DImode, R16_REGNUM);
> + op0 = expand_normal (CALL_EXPR_ARG (exp, 0));
> + emit_move_insn (x16_reg, op0);
> + expand_insn (CODE_FOR_aarch64_chkfeat, 0, 0);
> + return copy_to_reg (x16_reg);
> +      }
>     }
> 
>   if (fcode >= AARCH64_SIMD_BUILTIN_BASE && fcode <= AARCH64_SIMD_BUILTIN_MAX)
> -- 
> 2.39.5
> 

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to