From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on2082.outbound.protection.outlook.com [40.107.13.82]) by sourceware.org (Postfix) with ESMTPS id 38FA93857C44 for ; Tue, 7 Nov 2023 10:32:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 38FA93857C44 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 38FA93857C44 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=40.107.13.82 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1699353180; cv=pass; b=ikw64z3lv4tGoe4zkCR1TsQuF5E01kFG1mVQtaxy2jcHuiPGpcuee1mk0+3m4E0JWQlNfGaxjVvdd9Ubps7WCN1zxisyfSDecTMoWYfGnXgmSpTjh9EuUKh3YxrRgQLRE+Jfz9bbVfV50+pZm1JOsdh0Q3MhDj9+yeFiPxAxVU0= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1699353180; c=relaxed/simple; bh=+x+3CzCrGyNN+gub7GFn2VEo4oTWt4YNTt/OcY/NTQA=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=odOPxdlZFXZ8voZVSh3iZYoGTYAi0xVc+rQSud/EmDIKLi8Hpho/SBnUgi4OCbzJN6ppxQVMKREQOOmYbZGH/Iz4XPUe+FDCb4VsPSB62/pCw4pu9+cX8hBGCI+Fk0327753qJtd9QbiPcoRboDlnaFlPVvPUqi8Rr/y/KmYky4= ARC-Authentication-Results: i=3; server2.sourceware.org ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=UKNceFSCCnnHJxcoJnQHb8bijKWKkURWflZIx4XEX3kArcWcwVlybV08neqJBY94JOjScTsUS/SAtTlOna5xiNcc4R5Bh9i1/RHjZDSKLUN+j9osXfTvdjhv00f1CXNQcYKTVLFrVoFgVe9IDe0Z+AQB5tnY49xXidgvL2vkYHf83Auwpf7iIPwSZyR1CMIWk04aa5mUJMcd5veyycepynusWhCAJly9hHxX4pl2bza4oUsB1+z3n2v5UYLhaXHyLr7ActoZfrRNwg9DzKj0YHM/BUcWAK6IBm3c4uT5zF1uaK0UuyRy/JzI7rjAKOuZnYT/upzWj9fVOSZ2nqPP+g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=VNfhmDqA5gI+scm3x3JvXwoqfgxDgsNjCDJn6wB4LJM=; b=nUrm/SDKitJJW6LwJNf3TJes2PHVsKdvtjihPpIw8cOVw9vcoE+USnl0yW+WAPmCgUBqIjZyRDVuzVrWTL8hBG023ThTvVlgadmP1a169UZTPLoXwDvFDfZ3ECvjZTtQS6Xgxc+7RijTsRn0dKG7UOkA13pCkLQfPf45lu1PNFjYb4SgGJLRitZ908gxrMERUqgqQjK89E6/S2Swc2IbDFd2ULCJ77FEGpF3D1s2qo0FW3mARwhBQQxpjK5t+2j3gEY8BRVaH+zAZWtbnfl9RGYackeZPnZ175SXkSuYOJx4GH871tz0JPfWw1kaw+YLiFdI/4gvRRAn/VFT/sEo4Q== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VNfhmDqA5gI+scm3x3JvXwoqfgxDgsNjCDJn6wB4LJM=; b=HXVElavgD5CS8dWzDGedgodrgDTJ7oc7XTNwYsp63boDmNFf8quJLW6OPDBRBEWmNghHQDIeZ/kOEknXtrSFqXygDgcVmXJDwxXsv5k2m5z+9o7NP+q5NYYX/DrLlMKSIpb5Y+noAT83mFaDWkGYmUuX+zGz8f0E31xcGGNFfOM= Received: from DU2PR04CA0004.eurprd04.prod.outlook.com (2603:10a6:10:3b::9) by PAVPR08MB9353.eurprd08.prod.outlook.com (2603:10a6:102:302::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.28; Tue, 7 Nov 2023 10:32:47 +0000 Received: from DB5PEPF00014B9A.eurprd02.prod.outlook.com (2603:10a6:10:3b:cafe::5f) by DU2PR04CA0004.outlook.office365.com (2603:10a6:10:3b::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.28 via Frontend Transport; Tue, 7 Nov 2023 10:32:46 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DB5PEPF00014B9A.mail.protection.outlook.com (10.167.8.167) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6977.16 via Frontend Transport; Tue, 7 Nov 2023 10:32:46 +0000 Received: ("Tessian outbound 385ad2f98d71:v228"); Tue, 07 Nov 2023 10:32:46 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 920c1e2a7ce30a06 X-CR-MTA-TID: 64aa7808 Received: from 0e64e28d718f.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id F23C4DBE-0F41-48C7-A097-085C7F771539.1; Tue, 07 Nov 2023 10:32:41 +0000 Received: from EUR05-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 0e64e28d718f.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 07 Nov 2023 10:32:41 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DWAM5Xx8CbCXlVdnr9Y+gr4YUgzpBH3doM0d2xMK22wvQGzmJUlGO5ktI2/kGblY8AVAoERUn1PBygu8I4Erh4nJ34SvJR+JpcHebPnTJcKZ40b72QQ8C42UabvhhCAKKPr+elEKi4lWTtBDzDtIvBJNY7b7GoYYJphTFQjpXhrW96CloaOUuCJkPXGb1gEI6ifBS/jxCExm1q4ijpaeilg4TppIGzv5dO/aFPBP0m2vUxtXU+ruBvY7hy+UErMWiJ+11D0OWahN4LZ8nl4gSEyc3cHCFhXiAb8QbBadUbck2tMiWLrNjE4+UITUn4ypQ58Ww1tzd7Wu3jLKCIN3UA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=VNfhmDqA5gI+scm3x3JvXwoqfgxDgsNjCDJn6wB4LJM=; b=EnpchAxk/CNg0qCqF42xv3OQHTc4E/XmhE9ONvpi1uDhWTjE7MYZM7vd0r/m8DNSgZkcPeNq3FzEKVSeQN0g8dqQHXpnmgMGajaA27dVyMmGvLROAchg1bfWLPY/0XgtLEkWOjbOMtMqGiyQ58d3XLFGNsMj3pIR6k+TohH4n/zaCRhXIpPQtu4C9l53bUe3BlEzlcxZe9JeZWMFP1iZd82OsyyN9xVJ/sc5057ScyvtIBoIW25TPjWGJy/vJgupK1zb7Ev8T0DDFQ/gV2I6xpAVipd7VfqC4CWyka4LYVcyhZzt9cKwzBnqRufagtc19TtiXkJDh4fTxy27QoKZ6Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 40.67.248.234) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VNfhmDqA5gI+scm3x3JvXwoqfgxDgsNjCDJn6wB4LJM=; b=HXVElavgD5CS8dWzDGedgodrgDTJ7oc7XTNwYsp63boDmNFf8quJLW6OPDBRBEWmNghHQDIeZ/kOEknXtrSFqXygDgcVmXJDwxXsv5k2m5z+9o7NP+q5NYYX/DrLlMKSIpb5Y+noAT83mFaDWkGYmUuX+zGz8f0E31xcGGNFfOM= Received: from DUZP191CA0049.EURP191.PROD.OUTLOOK.COM (2603:10a6:10:4fa::24) by DBAPR08MB5560.eurprd08.prod.outlook.com (2603:10a6:10:1ac::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29; Tue, 7 Nov 2023 10:32:38 +0000 Received: from DU6PEPF00009524.eurprd02.prod.outlook.com (2603:10a6:10:4fa:cafe::a3) by DUZP191CA0049.outlook.office365.com (2603:10a6:10:4fa::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.29 via Frontend Transport; Tue, 7 Nov 2023 10:32:38 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234) smtp.mailfrom=arm.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 40.67.248.234 as permitted sender) receiver=protection.outlook.com; client-ip=40.67.248.234; helo=nebula.arm.com; pr=C Received: from nebula.arm.com (40.67.248.234) by DU6PEPF00009524.mail.protection.outlook.com (10.167.8.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6977.16 via Frontend Transport; Tue, 7 Nov 2023 10:32:38 +0000 Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.32; Tue, 7 Nov 2023 10:32:34 +0000 Received: from e125768.cambridge.arm.com (10.2.78.50) by mail.arm.com (10.251.24.32) with Microsoft SMTP Server id 15.1.2507.32 via Frontend Transport; Tue, 7 Nov 2023 10:32:33 +0000 From: Victor Do Nascimento To: CC: , , , Victor Do Nascimento Subject: [PATCH 4/5] aarch64: Implement 128-bit extension to ACLE sysreg r/w builtins Date: Tue, 7 Nov 2023 10:30:13 +0000 Message-ID: <20231107103211.2837188-5-victor.donascimento@arm.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231107103211.2837188-1-victor.donascimento@arm.com> References: <20231107103211.2837188-1-victor.donascimento@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: DU6PEPF00009524:EE_|DBAPR08MB5560:EE_|DB5PEPF00014B9A:EE_|PAVPR08MB9353:EE_ X-MS-Office365-Filtering-Correlation-Id: e43b73a9-556c-4577-fa21-08dbdf7ce250 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: gqPEuGsgUmwXUSpXY3vHJx/pe55/ZL8JnDQdG249HNjIspNnpuxZMtGxJd+c3OYxwO5oaPjj/mSRg4lJJzxp5lkKMRuUNxexhvB/9g/BACx7AehcWXFi/KqHse2P7A8Ya5tcP3Se5SZZaehT7WUfUoIRfL04rVYmevavb6cw5f1PApiw3vn8PGIlxry/q8VheyB3+zKhkU6bU6tKrd4IMMFIMhoCapSi0Z5WGj6p94jzedDsliSP4uNc7MJLgnRBPUr1JXMW71+Lv0nwZaCJ4qr/1Dem1XCPa9DTVVVUgfOwZtMhVcJe4Vs/RIKvpEo444bDCrySzjtLfWQGIsoVHwCEhJ685VTzfciix/kGhHBSGpQhOdM8U98Lf5t+LEq2s/AoVAyHGCkfazNgabtN7vz1M7s3II4Pni2z/0PzrhLOFtJqvnhCZxxQfoPMmpvziP8SGss7zIf3Bb4Ebej3xnY/pgrpzppsGEaBW/E5/xHRP2KaQUFD/8TnMCtE2639hgbK4k0v2TVbgFLKL3uDlLm3Q+OrmJlbiqDNglQXSrFUnZXce81V7CNGVPJjN+iR5BoY0+XExHH1SL+DkzSmIQn6WKHKXXdU1S9amk6RlQEum/Yes61d4Lv9ohvBqoG8lUXppYPJE34LWRiZki/nW5XP/EsgJjRqvIkxs3b8VoIrGP8xNoXt8xkwcA38p2zlojSxhoE4IqQVcgCn+cA4g/xNRAgxTdMsQEvKIK9+sN4= X-Forefront-Antispam-Report-Untrusted: CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230031)(4636009)(136003)(376002)(39850400004)(396003)(346002)(230922051799003)(451199024)(1800799009)(64100799003)(186009)(82310400011)(36840700001)(46966006)(40480700001)(478600001)(47076005)(36860700001)(82740400003)(36756003)(86362001)(356005)(81166007)(83380400001)(7696005)(2616005)(336012)(426003)(316002)(70586007)(70206006)(54906003)(6916009)(6666004)(26005)(1076003)(2906002)(5660300002)(41300700001)(8936002)(4326008)(8676002)(36900700001);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBAPR08MB5560 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5PEPF00014B9A.eurprd02.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 77655030-61a9-4299-8a85-08dbdf7cdd56 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3i1W/MHYHFbzIk2uDsUU9Um5458MJcL6ezZdKh1/KiIuPUQTZZO/qKtMXxgQhCBh/B43UtUQk3ALT5+PfhJPv0XTHT3yfKRwv9ynK7uh/BgYLKtNcaHsnz+rV181NlgrW467OFo8mIkLwskQhkfvOtOKa9Wirxgi2jH8B9rPoF/6FcfJyY7YaDGKnrgZyrq3imhStJJx9iWAH6QFOQzlXaLytVv3ycbJkn21HnR/J+nxE+u/LFocbZrHiD/pt6OD6tW5V8KYPKtALlk8LfGsAfmRW4Xwxztb3BeGNkI36LNT0E+huz0IGpx94R9JDdt6VGQr+TL3fQfbEb+oM9UWuaKmN4l3H2U/TQhuZnqUn7tuudtE87/DY9pvvgaIs03tWYrfNt6LWhoD414xpQgIJ/7K1Wp/eNCv4UKZ8nAW4qQQ2dropj6ItwlKUS+99maRDbxjI3MbgkhGVqgdFzTmcYLn63woh13Haw933sSYhN5Bo1hMTCBnVzabDck7OQk0YTYBcPdA165XHNnofDSQ5EWgOOVN8o4ehwVR7zhpxf+S3dU6zhjjdHLPSV7cfLxkdYvOM6yBPJlsNquHZn/aC0/xDSg2DpCUC6fFhBzdDHOL2Y35IBhaCUMhrjYWAEcoGBtIDY3gm9Uc2SV4+zKskP6nb3AU4LXvHoZoKewqj2CHhYNLlOo5xkoa0+R8QfARlwEZpfU5XeGXNULyhcwyM7rUsoBfejMhPSWn4RaWmmY= X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230031)(4636009)(376002)(136003)(39860400002)(396003)(346002)(230922051799003)(451199024)(64100799003)(1800799009)(186009)(82310400011)(40470700004)(46966006)(36840700001)(82740400003)(81166007)(40460700003)(40480700001)(6666004)(36756003)(7696005)(70586007)(70206006)(86362001)(336012)(26005)(426003)(2616005)(1076003)(478600001)(47076005)(83380400001)(8676002)(2906002)(316002)(41300700001)(54906003)(5660300002)(4326008)(6916009)(8936002)(36860700001);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Nov 2023 10:32:46.8797 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e43b73a9-556c-4577-fa21-08dbdf7ce250 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DB5PEPF00014B9A.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR08MB9353 X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Implement the ACLE builtins for 128-bit system register manipulation: * __uint128_t __arm_rsr128(const char *special_register); * void __arm_wsr128(const char *special_register, __uint128_t value); gcc/ChangeLog: * config/aarch64/aarch64-builtins.cc (AARCH64_RSR128): New `enum aarch64_builtins' value. (AARCH64_WSR128): Likewise. (aarch64_init_rwsr_builtins): Init `__builtin_aarch64_rsr128' and `__builtin_aarch64_wsr128' builtins. (aarch64_expand_rwsr_builtin): Extend function to handle `__builtin_aarch64_{rsr|wsr}128'. * config/aarch64/aarch64-protos.h (aarch64_retrieve_sysreg): Update function signature. * config/aarch64/aarch64.cc (F_REG_128): New. (aarch64_retrieve_sysreg): Add 128-bit register mode check. * config/aarch64/aarch64.md (UNSPEC_SYSREG_RTI): New. (UNSPEC_SYSREG_WTI): Likewise. (aarch64_read_sysregti): Likewise. (aarch64_write_sysregti): Likewise. --- gcc/config/aarch64/aarch64-builtins.cc | 50 +++++++++++++++++++++----- gcc/config/aarch64/aarch64-protos.h | 2 +- gcc/config/aarch64/aarch64.cc | 6 +++- gcc/config/aarch64/aarch64.md | 18 ++++++++++ gcc/config/aarch64/arm_acle.h | 11 ++++++ 5 files changed, 77 insertions(+), 10 deletions(-) diff --git a/gcc/config/aarch64/aarch64-builtins.cc b/gcc/config/aarch64/aarch64-builtins.cc index c5f20f68bca..40d3788b5e0 100644 --- a/gcc/config/aarch64/aarch64-builtins.cc +++ b/gcc/config/aarch64/aarch64-builtins.cc @@ -815,11 +815,13 @@ enum aarch64_builtins AARCH64_RSR64, AARCH64_RSRF, AARCH64_RSRF64, + AARCH64_RSR128, AARCH64_WSR, AARCH64_WSRP, AARCH64_WSR64, AARCH64_WSRF, AARCH64_WSRF64, + AARCH64_WSR128, AARCH64_BUILTIN_MAX }; @@ -1842,6 +1844,10 @@ aarch64_init_rwsr_builtins (void) = build_function_type_list (double_type_node, const_char_ptr_type, NULL); AARCH64_INIT_RWSR_BUILTINS_DECL (RSRF64, rsrf64, fntype); + fntype + = build_function_type_list (uint128_type_node, const_char_ptr_type, NULL); + AARCH64_INIT_RWSR_BUILTINS_DECL (RSR128, rsr128, fntype); + fntype = build_function_type_list (void_type_node, const_char_ptr_type, uint32_type_node, NULL); @@ -1867,6 +1873,12 @@ aarch64_init_rwsr_builtins (void) = build_function_type_list (void_type_node, const_char_ptr_type, double_type_node, NULL); AARCH64_INIT_RWSR_BUILTINS_DECL (WSRF64, wsrf64, fntype); + + fntype + = build_function_type_list (void_type_node, const_char_ptr_type, + uint128_type_node, NULL); + AARCH64_INIT_RWSR_BUILTINS_DECL (WSR128, wsr128, fntype); + } /* Initialize the memory tagging extension (MTE) builtins. */ @@ -2710,6 +2722,7 @@ aarch64_expand_rwsr_builtin (tree exp, rtx target, int fcode) tree arg0, arg1; rtx const_str, input_val, subreg; enum machine_mode mode; + enum insn_code icode; class expand_operand ops[2]; arg0 = CALL_EXPR_ARG (exp, 0); @@ -2718,7 +2731,18 @@ aarch64_expand_rwsr_builtin (tree exp, rtx target, int fcode) || fcode == AARCH64_WSRP || fcode == AARCH64_WSR64 || fcode == AARCH64_WSRF - || fcode == AARCH64_WSRF64); + || fcode == AARCH64_WSRF64 + || fcode == AARCH64_WSR128); + + bool op128 = (fcode == AARCH64_RSR128 || fcode == AARCH64_WSR128); + enum machine_mode sysreg_mode = op128 ? TImode : DImode; + + if (op128 && !TARGET_D128) + { + error_at (EXPR_LOCATION (exp), "128-bit system register suppport requires " + "the +d128 Armv9.4-A extension"); + return const0_rtx; + } /* Argument 0 (system register name) must be a string literal. */ gcc_assert (TREE_CODE (arg0) == ADDR_EXPR @@ -2741,7 +2765,7 @@ aarch64_expand_rwsr_builtin (tree exp, rtx target, int fcode) sysreg_name[pos] = TOLOWER (sysreg_name[pos]); const char* name_output = aarch64_retrieve_sysreg ((const char *) sysreg_name, - write_op); + write_op, op128); if (name_output == NULL) { error_at (EXPR_LOCATION (exp), "invalid system register name provided"); @@ -2760,13 +2784,17 @@ aarch64_expand_rwsr_builtin (tree exp, rtx target, int fcode) mode = TYPE_MODE (TREE_TYPE (arg1)); input_val = copy_to_mode_reg (mode, expand_normal (arg1)); + icode = (op128 ? CODE_FOR_aarch64_write_sysregti + : CODE_FOR_aarch64_write_sysregdi); + switch (fcode) { case AARCH64_WSR: case AARCH64_WSRP: case AARCH64_WSR64: case AARCH64_WSRF64: - subreg = lowpart_subreg (DImode, input_val, mode); + case AARCH64_WSR128: + subreg = lowpart_subreg (sysreg_mode, input_val, mode); break; case AARCH64_WSRF: subreg = gen_lowpart_SUBREG (SImode, input_val); @@ -2775,8 +2803,8 @@ aarch64_expand_rwsr_builtin (tree exp, rtx target, int fcode) } create_fixed_operand (&ops[0], const_str); - create_input_operand (&ops[1], subreg, DImode); - expand_insn (CODE_FOR_aarch64_write_sysregdi, 2, ops); + create_input_operand (&ops[1], subreg, sysreg_mode); + expand_insn (icode, 2, ops); return target; } @@ -2784,10 +2812,13 @@ aarch64_expand_rwsr_builtin (tree exp, rtx target, int fcode) /* Read operations are implied by !write_op. */ gcc_assert (call_expr_nargs (exp) == 1); + icode = (op128 ? CODE_FOR_aarch64_read_sysregti + : CODE_FOR_aarch64_read_sysregdi); + /* Emit the initial read_sysregdi rtx. */ - create_output_operand (&ops[0], target, DImode); + create_output_operand (&ops[0], target, sysreg_mode); create_fixed_operand (&ops[1], const_str); - expand_insn (CODE_FOR_aarch64_read_sysregdi, 2, ops); + expand_insn (icode, 2, ops); target = ops[0].value; /* Do any necessary post-processing on the result. */ @@ -2797,7 +2828,8 @@ aarch64_expand_rwsr_builtin (tree exp, rtx target, int fcode) case AARCH64_RSRP: case AARCH64_RSR64: case AARCH64_RSRF64: - return lowpart_subreg (TYPE_MODE (TREE_TYPE (exp)), target, DImode); + case AARCH64_RSR128: + return lowpart_subreg (TYPE_MODE (TREE_TYPE (exp)), target, sysreg_mode); case AARCH64_RSRF: subreg = gen_lowpart_SUBREG (SImode, target); return gen_lowpart_SUBREG (SFmode, subreg); @@ -3048,11 +3080,13 @@ aarch64_general_expand_builtin (unsigned int fcode, tree exp, rtx target, case AARCH64_RSR64: case AARCH64_RSRF: case AARCH64_RSRF64: + case AARCH64_RSR128: case AARCH64_WSR: case AARCH64_WSRP: case AARCH64_WSR64: case AARCH64_WSRF: case AARCH64_WSRF64: + case AARCH64_WSR128: return aarch64_expand_rwsr_builtin (exp, target, fcode); } diff --git a/gcc/config/aarch64/aarch64-protos.h b/gcc/config/aarch64/aarch64-protos.h index dbd486cfea4..6a306134c2d 100644 --- a/gcc/config/aarch64/aarch64-protos.h +++ b/gcc/config/aarch64/aarch64-protos.h @@ -831,7 +831,7 @@ bool aarch64_sve_ptrue_svpattern_p (rtx, struct simd_immediate_info *); bool aarch64_simd_valid_immediate (rtx, struct simd_immediate_info *, enum simd_immediate_check w = AARCH64_CHECK_MOV); bool aarch64_valid_sysreg_name_p (const char *); -const char *aarch64_retrieve_sysreg (const char *, bool); +const char *aarch64_retrieve_sysreg (const char *, bool, bool); rtx aarch64_check_zero_based_sve_index_immediate (rtx); bool aarch64_sve_index_immediate_p (rtx); bool aarch64_sve_arith_immediate_p (machine_mode, rtx, bool); diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index c0d75f167be..ff7e75e1f19 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -2846,6 +2846,8 @@ typedef struct { #define F_ARCHEXT (1 << 4) /* Flag indicating register name is alias for another system register. */ #define F_REG_ALIAS (1 << 5) +/* Flag indicatinig registers which may be implemented with 128-bits. */ +#define F_REG_128 (1 << 6) /* Database of system registers, their encodings and architectural requirements. */ @@ -28245,7 +28247,7 @@ aarch64_valid_sysreg_name_p (const char *regname) name, otherwise NULL. WRITE_P is true iff the register is being written to. */ const char * -aarch64_retrieve_sysreg (const char *regname, bool write_p) +aarch64_retrieve_sysreg (const char *regname, bool write_p, bool is128op) { const sysreg_t *sysreg = aarch64_lookup_sysreg_map (regname); if (sysreg == NULL) @@ -28255,6 +28257,8 @@ aarch64_retrieve_sysreg (const char *regname, bool write_p) else return NULL; } + if (is128op && !(sysreg->properties & F_REG_128)) + return NULL; if ((write_p && (sysreg->properties & F_REG_READ)) || (!write_p && (sysreg->properties & F_REG_WRITE))) return NULL; diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index aee8f8ad65a..3be813efcd4 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -282,7 +282,9 @@ UNSPEC_RDFFR UNSPEC_WRFFR UNSPEC_SYSREG_RDI + UNSPEC_SYSREG_RTI UNSPEC_SYSREG_WDI + UNSPEC_SYSREG_WTI ;; Represents an SVE-style lane index, in which the indexing applies ;; within the containing 128-bit block. UNSPEC_SVE_LANE_SELECT @@ -486,6 +488,14 @@ "mrs\t%x0, %1" ) +(define_insn "aarch64_read_sysregti" + [(set (match_operand:TI 0 "register_operand" "=r") + (unspec_volatile:TI [(match_operand 1 "aarch64_sysreg_string" "")] + UNSPEC_SYSREG_RTI))] + "TARGET_D128" + "mrrs\t%x0, %H0, %x1" +) + (define_insn "aarch64_write_sysregdi" [(unspec_volatile:DI [(match_operand 0 "aarch64_sysreg_string" "") (match_operand:DI 1 "register_operand" "rZ")] @@ -494,6 +504,14 @@ "msr\t%0, %x1" ) +(define_insn "aarch64_write_sysregti" + [(unspec_volatile:TI [(match_operand 0 "aarch64_sysreg_string" "") + (match_operand:TI 1 "register_operand" "r")] + UNSPEC_SYSREG_WTI)] + "TARGET_D128" + "msrr\t%x0, %x1, %H1" +) + (define_insn "indirect_jump" [(set (pc) (match_operand:DI 0 "register_operand" "r"))] "" diff --git a/gcc/config/aarch64/arm_acle.h b/gcc/config/aarch64/arm_acle.h index 71ada878299..80282b361a4 100644 --- a/gcc/config/aarch64/arm_acle.h +++ b/gcc/config/aarch64/arm_acle.h @@ -344,6 +344,17 @@ __rndrrs (uint64_t *__res) #define __arm_wsrf64(__regname, __value) \ __builtin_aarch64_wsrf64 (__regname, __value) +#pragma GCC push_options +#pragma GCC target ("+nothing+d128") + +#define __arm_rsr128(__regname) \ + __builtin_aarch64_rsr128 (__regname) + +#define __arm_wsr128(__regname, __value) \ + __builtin_aarch64_wsr128 (__regname, __value) + +#pragma GCC pop_options + #ifdef __cplusplus } #endif -- 2.41.0