From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1944) id 8347E3858415; Wed, 10 Apr 2024 10:48:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8347E3858415 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1712746093; bh=PIl7RGO7/urSefjkkOWpJwohkcmmFiq/xi6qKe5jZec=; h=From:To:Subject:Date:From; b=FH+MfpnAVSVs+GqYhEl5cYKMiS8CS2MfzoUSdnPSREQsFDiCYNvUOGtRJGpRhLWyg HDTptx5IszjSTun5zGNLme8Xp0z+D5sIewsxnoBpT1SS4H1+LCD9mQo6BJHQRXSfMo 9xzg7tXpefQG2X4UuABzLenzSCRTlfnWoE10XbBY= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Szabolcs Nagy To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/vendors/ARM/heads/gcs)] aarch64: Add __builtin_aarch64_chkfeat X-Act-Checkin: gcc X-Git-Author: Szabolcs Nagy X-Git-Refname: refs/vendors/ARM/heads/gcs X-Git-Oldrev: 309f26c530aaaa1d11891a6adddf9515adf5a9b0 X-Git-Newrev: e26ccd302f4face487da5b530d4dbeb4eebf7d43 Message-Id: <20240410104813.8347E3858415@sourceware.org> Date: Wed, 10 Apr 2024 10:48:13 +0000 (GMT) List-Id: https://gcc.gnu.org/g:e26ccd302f4face487da5b530d4dbeb4eebf7d43 commit e26ccd302f4face487da5b530d4dbeb4eebf7d43 Author: Szabolcs Nagy Date: Tue May 9 15:24:18 2023 +0100 aarch64: Add __builtin_aarch64_chkfeat 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. Diff: --- gcc/config/aarch64/aarch64-builtins.cc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/gcc/config/aarch64/aarch64-builtins.cc b/gcc/config/aarch64/aarch64-builtins.cc index 75d21de1401..1c08f56ab6b 100644 --- a/gcc/config/aarch64/aarch64-builtins.cc +++ b/gcc/config/aarch64/aarch64-builtins.cc @@ -788,6 +788,8 @@ enum aarch64_builtins AARCH64_PLDX, AARCH64_PLI, AARCH64_PLIX, + /* Armv8.9-A / Armv9.4-A builtins. */ + AARCH64_BUILTIN_CHKFEAT, AARCH64_BUILTIN_MAX }; @@ -2084,6 +2086,12 @@ aarch64_general_init_builtins (void) if (TARGET_MEMTAG) aarch64_init_memtag_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); + if (in_lto_p) handle_arm_acle_h (); } @@ -3137,6 +3145,16 @@ 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); + emit_move_insn (target, x16_reg); + return target; + } } if (fcode >= AARCH64_SIMD_BUILTIN_BASE && fcode <= AARCH64_SIMD_BUILTIN_MAX)