From patchwork Wed Oct 23 11:05:11 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yury Khrustalev X-Patchwork-Id: 99409 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CEE943858C5F for ; Wed, 23 Oct 2024 11:07:34 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id 40C1D3858C60; Wed, 23 Oct 2024 11:06:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 40C1D3858C60 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 40C1D3858C60 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1729681599; cv=none; b=B7JAYZzTg87gV57n03bdGSqoL5aOUjcqbCTlkD4DRAmA5+d3WaEJ4bJTnlXi2g9PPjdZaO4/jO/UOJC8L2gxtnFceNZJjV1rs0Vu6oK/i9B9dvWe5FzdC9gweVXCReTaAFZcXhAz55cZfVnK/qXQ1z8n3unEEjhovbVUBxEKxOE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1729681599; c=relaxed/simple; bh=DNuLmAOi/4EKo1F/6sMQSkyDg1ZZQhnGQKKYmnmuRHo=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=a+XoyPI3ySr5leTRiTx44Az7ebRBi8RFwhTC2b5kufG3DLNNMl3HoCwwVtxCBV7qNmqJgtpjKggzrrQK8Dnh/kByLN57X5jBgp5/GwAZkpmANvH42o36XuAPZTQhB5gOCoQCrq5cKR75EQwPxytY59sixXhNHOfNUxI6veQpUkk= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id B9B88497; Wed, 23 Oct 2024 04:07:05 -0700 (PDT) Received: from udebian.localdomain (unknown [10.1.39.30]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 503773F528; Wed, 23 Oct 2024 04:06:35 -0700 (PDT) From: Yury Khrustalev To: gcc-patches@gcc.gnu.org Cc: nsz@gcc.gnu.org, richard.earnshaw@arm.com, matthieu.longo@arm.com, richard.ball@arm.com Subject: [PATCH 05/22] aarch64: Add __builtin_aarch64_chkfeat tests Date: Wed, 23 Oct 2024 12:05:11 +0100 Message-Id: <20241023110528.487830-6-yury.khrustalev@arm.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20241023110528.487830-1-yury.khrustalev@arm.com> References: <20241023110528.487830-1-yury.khrustalev@arm.com> MIME-Version: 1.0 X-Spam-Status: No, score=-14.0 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_NONE, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, KAM_SHORT, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org From: Szabolcs Nagy gcc/testsuite/ChangeLog: * gcc.target/aarch64/chkfeat-1.c: New test. * gcc.target/aarch64/chkfeat-2.c: New test. --- gcc/testsuite/gcc.target/aarch64/chkfeat-1.c | 75 ++++++++++++++++++++ gcc/testsuite/gcc.target/aarch64/chkfeat-2.c | 15 ++++ 2 files changed, 90 insertions(+) create mode 100644 gcc/testsuite/gcc.target/aarch64/chkfeat-1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/chkfeat-2.c diff --git a/gcc/testsuite/gcc.target/aarch64/chkfeat-1.c b/gcc/testsuite/gcc.target/aarch64/chkfeat-1.c new file mode 100644 index 00000000000..2fae81e740f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/chkfeat-1.c @@ -0,0 +1,75 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mbranch-protection=none" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ + +/* +**foo1: +** mov x16, 1 +** hint 40 // chkfeat x16 +** mov x0, x16 +** ret +*/ +unsigned long long +foo1 (void) +{ + return __builtin_aarch64_chkfeat (1); +} + +/* +**foo2: +** mov x16, 1 +** movk x16, 0x5678, lsl 32 +** movk x16, 0x1234, lsl 48 +** hint 40 // chkfeat x16 +** mov x0, x16 +** ret +*/ +unsigned long long +foo2 (void) +{ + return __builtin_aarch64_chkfeat (0x1234567800000001); +} + +/* +**foo3: +** mov x16, x0 +** hint 40 // chkfeat x16 +** mov x0, x16 +** ret +*/ +unsigned long long +foo3 (unsigned long long x) +{ + return __builtin_aarch64_chkfeat (x); +} + +/* +**foo4: +** ldr x16, \[x0\] +** hint 40 // chkfeat x16 +** str x16, \[x0\] +** ret +*/ +void +foo4 (unsigned long long *p) +{ + *p = __builtin_aarch64_chkfeat (*p); +} + +/* +**foo5: +** mov x16, 1 +** hint 40 // chkfeat x16 +** cmp x16, 0 +**( +** csel w0, w1, w0, eq +**| +** csel w0, w0, w1, ne +**) +** ret +*/ +int +foo5 (int x, int y) +{ + return __builtin_aarch64_chkfeat (1) ? x : y; +} diff --git a/gcc/testsuite/gcc.target/aarch64/chkfeat-2.c b/gcc/testsuite/gcc.target/aarch64/chkfeat-2.c new file mode 100644 index 00000000000..682524e244f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/chkfeat-2.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-final { scan-assembler-times {hint\t40 // chkfeat x16} 2 } } */ + +void bar (void); + +/* Extern call may change enabled HW features. */ +unsigned long long +foo (void) +{ + unsigned long long a = __builtin_aarch64_chkfeat (1); + bar (); + unsigned long long b = __builtin_aarch64_chkfeat (1); + return a + b; +}