From patchwork Fri Nov 8 16:10:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Claudio Bantaloukas X-Patchwork-Id: 2008634 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=LDSlf25K; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=LDSlf25K; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4XlP9Q2RWNz1xyM for ; Sat, 9 Nov 2024 03:12:42 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4E0E63857BB0 for ; Fri, 8 Nov 2024 16:12:39 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on20604.outbound.protection.outlook.com [IPv6:2a01:111:f403:2613::604]) by sourceware.org (Postfix) with ESMTPS id D77DB3858D3C for ; Fri, 8 Nov 2024 16:10:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D77DB3858D3C 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 D77DB3858D3C Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:2613::604 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1731082250; cv=pass; b=Ov05/G6v8GRhIGUEpkeBdyzXGfSMUf4290K9Ra1hizCZips0HmXddIE9BPXT5gL2tHU3JcdTLq61auhTDY2Oo5JWYwlPRtuhG2738z9s1cq5qHsX0GF9vrskcRIe/NRI9igHoikJcX6BKrqaXbjBDhgqVCc/XgpXicORXaypydE= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1731082250; c=relaxed/simple; bh=p/7Pu5elMqD4+VOPuVDfjPL6vX28EXrFiqLVBKGaKT8=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=WysZ3l0N2u65bmCoAZCP/oze158ciCWO7gxxPLC5uWo6BubGJjA8VCGGmYC8h4qTyWYfOtw9hfImPb5GxBjOKwfjNqkwDPkTTZtAIFqUJI19Uidaa0BdkgsfVP6CF8gpRlYO8v1ezXiluBgiOHDpzNWr5bVI35iLz4xzpULm85w= ARC-Authentication-Results: i=3; server2.sourceware.org ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=vI8kwxJpVEYJlVkIhVCJqgLLGiR/rYu/HUto1oIzrv53vfDmYR5TJYNmXLs1n+E7wXOyrk578h2hCh+1zcHTrD7j2PxuuTHEWSARfMr1VV6TmSnd0aC4HIDonn3abO0E3aUhPwMy4D4viXplzcQL057Ln1yVkQxUbuEZaSltcC+Sl3vJgvzsX8CKqWGLHmJ0q3iO1uH1O1mmix26nARqVQI1cA+5ArT7bMctp6QD6/srJJBuXS/Cwsac7spVlK3yLPH9FcyCGi0UdxHfx80LQOmitvoTTyk7etmeUFMQqMko+yVzvDPux6rP0wygb8Xdwogi2tEoqr6JbkO2h70yrQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=4BDWSNTL4wT0mbmjwqrHpSjKJbO6GjmF+h8Lqcb3EWo=; b=Vdl5i4SYZs4uxTGDQcc6oD44xqWDmDuzBqFLOHiMETvY6WljF9sNPIGEMEfgU4Z9m1z7SOs/SHmKQIvyKQTxLbMVNEUbVAsqnsokZwEngBAKFofReU4D1RgfcyiQoGgMkh/vEGadl2lBTZ2/sISpQDyV5NQVvzngxiEUGVH5D3gaR2Pqnx8NKLCJfJaPASfYVMP4ZN1/ETDidm0+1IMwskXLGCeimb0Wnn1fc3RNRtD9Ak8bh9GpDeaAmrvSYxgpai6d+gkCwTLkV7uXqKOooiFeTwXdWdbFnfKKmBfJxaY49g3rqj4MwcG/IYnXvB+Y/hAGYGot//XUBBkWYGn1iw== 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=arm.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=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4BDWSNTL4wT0mbmjwqrHpSjKJbO6GjmF+h8Lqcb3EWo=; b=LDSlf25KLg9gkT4OLy4kIftv20omE0c4e1ql4aUCS7Rjw1k6kVEe8oA237sa1ntOabRVK+oWTQrDdh1548Cub8FiTDL1TP1A5+mRIgGZX2w8KQAjDlpXXQpm2JPZMa0S2R0fZV6tTmKAzSnd+sW25TvshW79AMpT3tf/xS+Lnv8= Received: from AS4PR10CA0014.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:5dc::18) by VI1PR08MB10243.eurprd08.prod.outlook.com (2603:10a6:800:1bf::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.19; Fri, 8 Nov 2024 16:10:39 +0000 Received: from AM1PEPF000252DD.eurprd07.prod.outlook.com (2603:10a6:20b:5dc:cafe::9c) by AS4PR10CA0014.outlook.office365.com (2603:10a6:20b:5dc::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.21 via Frontend Transport; Fri, 8 Nov 2024 16:10:39 +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=arm.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 AM1PEPF000252DD.mail.protection.outlook.com (10.167.16.55) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8137.17 via Frontend Transport; Fri, 8 Nov 2024 16:10:39 +0000 Received: ("Tessian outbound c60e9fd8cfde:v490"); Fri, 08 Nov 2024 16:10:39 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 92f683af7a70fb11 X-TessianGatewayMetadata: hx9opW3U7oBdx1YCz+jleTqZUnmc6gRwonl+RRV/4RHI3bypBiEdef5UnAf0inZK+TXvUYrKHAgv9UFDQpq47r4gEg4tCRJyCH9prE3KCVP0VtTZVcmNKJNWQ2QQ7V2rk5ncMD89KGiGGpZld99WN8QDsw2HvQK76QXoIZX9mnk= X-CR-MTA-TID: 64aa7808 Received: from L7a01d5a9fe15.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 43274675-740D-40E9-9DAF-35309752FD82.1; Fri, 08 Nov 2024 16:10:33 +0000 Received: from EUR03-AM7-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id L7a01d5a9fe15.1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384); Fri, 08 Nov 2024 16:10:33 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kHJxyflFYXdMBNO0Wy95Vu3FQim4g53epkiJwTSjo/v9BSeIUXvWTmew5SzPF49ElnRLLwjqrC/5HKwJRy0GwrfXas26D24WTUFwzW+BY02pD11j0I1gG3ABi+GIWP9/0x11U1FzrQprCL5GeUjkGJd5PthtOrky0IQk12TWJaLEA0fqlSC86m1AQK3c5dmTNc/VTn/fJ54MpX5GbhjN2MgHjDvu6/DrgWcf9JvzNeN0qMOvQPvUDX7TQDgYUAi4a2oqIiTWTv5tp+iwUYKGa3swzmGERZYaMnS2EJ5JNCVOB6i/CzDQP+6iVq7GNBVuHZDLGCgnPFFkqEBoUgw9mw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=4BDWSNTL4wT0mbmjwqrHpSjKJbO6GjmF+h8Lqcb3EWo=; b=u3qRTn3Mus5UBM7NQWWm96T5weomlM6HChS3zhpeD5w2kclbF8LPdvk5mrQ/PW5qTu8gGUhs2LbgQqN4mOkau9ziVvxZ1xXMtrbc3DzN4UPHgdOao2dil9NMXvYYDV/4h4Xt1EgCcs/VBbw9RmbtU/dnXMx5iMm9Zi1VSUN0aE6qC8H58p0mhnF5zQfxdbSPkEkV3Mi69HZFU49Wj51z6G+K3ZL370Qgz3Zbl7JCDs9U31CLYjLkZgJlRqDXgTCEn8a1SCXEkT5ZQAuh/1hPR5z5sKFt8yq4w0uHkoz2FLvuDtGWkZ4qn2UN6akzxD8D2S0WVmhG+3UC1j1qWcgUUg== 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=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4BDWSNTL4wT0mbmjwqrHpSjKJbO6GjmF+h8Lqcb3EWo=; b=LDSlf25KLg9gkT4OLy4kIftv20omE0c4e1ql4aUCS7Rjw1k6kVEe8oA237sa1ntOabRVK+oWTQrDdh1548Cub8FiTDL1TP1A5+mRIgGZX2w8KQAjDlpXXQpm2JPZMa0S2R0fZV6tTmKAzSnd+sW25TvshW79AMpT3tf/xS+Lnv8= Received: from DB6PR0301CA0070.eurprd03.prod.outlook.com (2603:10a6:6:30::17) by GV1PR08MB10480.eurprd08.prod.outlook.com (2603:10a6:150:15f::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.19; Fri, 8 Nov 2024 16:10:26 +0000 Received: from DB5PEPF00014B8B.eurprd02.prod.outlook.com (2603:10a6:6:30:cafe::87) by DB6PR0301CA0070.outlook.office365.com (2603:10a6:6:30::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.21 via Frontend Transport; Fri, 8 Nov 2024 16:10:26 +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 DB5PEPF00014B8B.mail.protection.outlook.com (10.167.8.199) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8137.17 via Frontend Transport; Fri, 8 Nov 2024 16:10:26 +0000 Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 8 Nov 2024 16:10:25 +0000 Received: from 221664dbf3aa.euhpc2.arm.com (10.58.86.32) by mail.arm.com (10.251.24.32) with Microsoft SMTP Server id 15.1.2507.39 via Frontend Transport; Fri, 8 Nov 2024 16:10:25 +0000 From: Claudio Bantaloukas To: CC: Claudio Bantaloukas Subject: [PATCH v2 3/4] aarch64: specify fpm mode in function instances and groups Date: Fri, 8 Nov 2024 16:10:19 +0000 Message-ID: <20241108161020.921071-4-claudio.bantaloukas@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241108161020.921071-1-claudio.bantaloukas@arm.com> References: <20241108161020.921071-1-claudio.bantaloukas@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: DB5PEPF00014B8B:EE_|GV1PR08MB10480:EE_|AM1PEPF000252DD:EE_|VI1PR08MB10243:EE_ X-MS-Office365-Filtering-Correlation-Id: a5ab8ef7-7b8b-4a12-7646-08dd000fe378 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; ARA:13230040|1800799024|82310400026|36860700013|376014; X-Microsoft-Antispam-Message-Info-Original: ls9QX34OUjwv+Tt/eOt6Uw34/i1RTuOU110oyzh84zpc+Me285HjPpo62MsBKGVLgmLAd2Iwco0sUAnn6Yh/u0MKnq+fofJhpkYXdxuvMza2245EU3jZmTq3/84xNDkCHlAm8v1bBF/WO4g0An0BoNGc82l5rfLkQV2u/q+BzoIVRImVIW3bilOqbOtXPss+y49gK7T8fVC//ZaERI+g9nOQFRThPG0XmBbJ8QsFqcJYDDaYY8CQ/0SFC9jqiYa1AkCfInxCMyGnPt1Vzigr8di4nHPxYHcnjp+WMhWYOqEnUoG3vIWTotkL866SKn5V2PMKqR2GmG8Bv3dgVFyhusIvY8fb9f51SYsnsebZ3QIJb6lba1FTpcxPe23dQPZdY7oENxDyLVb/45xBVKHk2vHuARuTkz5TN8YsphcnMMTEq6F17N1pMW7BVSBc1NDLysW1mn2s10nWuVNig4z7r07LlgaLkP88jygt2fiYZRavTX7yfgyG9g4PWZDmCZktWKLrnHb+J6OHdRQ5LZBAj1RhBZiG+rOOZRtBVfFLqwG3APyR2hBpQ2uwz/hgpi4OzDZOQgHx/LU5QEDjFucD5iLTWPflNgsWO9+rJ6utx+aVdgTak+lUs0MCX+vk+d03fzRulAI61K861Va5ah1o3mYyTcXfi35EhlGnh808cjip7I4a8b+WTs0qAApQEQYseY7XWWOPrac8k4mxubwLABBDiV+Qz6zBwCQV6u5LxoFncBd6QZf2Dg/cJRH/2oQohUJhhuaefVjyoJj5p3A2qe7sHtdUGQKIss2m4tIk6U/eZdXZ5SmiixbqfJC7THdazT3wwVzGLUGW7tM7lj7uE6PB9e7r2J4ek0McNGiuvD7BnFFUJE7Jw0TlQD06yling2oLk4QzlmbrwBwxfMDh/chTIb+viMqHlzqlVVoqa/UvB+DFamZRCh987YQYC9OMdnojwMEqUSNKAZHLTnru+XwV+iOxXfpntS8Lu7rr2YEtuh2owH07Y2VhqD3IBH36l5B3oSU3uIc5xd7BiWggkgv6R1BgVCaesU84yfQ7UbYmxiNOsZnhf4fpKmI5iTs2AOEz+a1k1d2azyPomZWiy0b/YJBJZyQfLMJAP/Z3IuIrWO0xrLCgJVARAGBtvjBk41irkVCUEeFV152IMAngH7HchHxUqqcYpsVTBj2cpeEa2kJoTP3/pta12AUQ+sNQBMjwD4pQhy++uaiRe5bwriRUjGp98Ue1plFumdEsIIA7l6Kd7N48yygxMwx3m9waZkGanJWMdNubsRfBdk787ayYa1pe+zySJUOVR/S/geYU/OCafYMaJaE1Zm1ykrlQw/QxzjVkFYV2DnNYa0Wb9HW1fiIzmE90KF7QNVaIxuetxTo2xiwrDGKouoMKPh5qqL5qfWWdPLTcF61HyQ7eLQ== 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:(13230040)(1800799024)(82310400026)(36860700013)(376014); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR08MB10480 X-MS-Exchange-SkipListedInternetSender: ip=[2603:10a6:6:30::17]; domain=DB6PR0301CA0070.eurprd03.prod.outlook.com X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM1PEPF000252DD.eurprd07.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: a0399548-399c-4cfb-144a-08dd000fdb5f X-Microsoft-Antispam: BCL:0; ARA:13230040|35042699022|376014|82310400026|14060799003|36860700013|1800799024; X-Microsoft-Antispam-Message-Info: =?utf-8?q?0ufHCcyXpnbMOj6s+Ak3yufXd2TcYz4?= =?utf-8?q?yHlQyRTdARSUuSJFKp69Ku/uh/vLauylpM4cA8tr0RD0gM6dGfkEmXPsassQK56ub?= =?utf-8?q?HhhMOTA4eJRwBMxt5f5HCXxRPFCmOR1lThBTxV9U0ps6sYx3doD+GtpjPucGrkxyu?= =?utf-8?q?BrY8YgOARwbOc4h4y+5HbGeAh5WAwr+ACIM3Q0w4sohZ5qBbEyDPhYkfhKr7krki3?= =?utf-8?q?35MJTOA4QMqvjB5Y2ymdwfjruwBAiYZ81qpRHprTPR19ubEeGUrhJcoqRvBtMo4hx?= =?utf-8?q?U9VB9TUen/aqSKqVwBzh2GXrOn99GMFFvt+wCaqpXtXG5XJHga5+AgUl5sK6pR/xz?= =?utf-8?q?qdC0SpC9f8sFELT7QHzdVTsIeheGjast8e9VbLvSgNqU81vpvQahvAqoSGWDVuYXy?= =?utf-8?q?N30jUhZK0T303U39Lj6xBDLx0fTlgpHTMtH5Cvivr4s1T+1GWy+8BRm3AmWlW7/rZ?= =?utf-8?q?/bCjNuk0o9us3WU12ANg8CU/5UAfHX3QG4rVttXnrY0gW3aLExXJAlqZ5joCmH/fd?= =?utf-8?q?8uRdqtkl44BDH60Qq+INJLzTiQsW2M1Ni2jfNEl90JHw2lUoiZLirwVIQkki1Mdfn?= =?utf-8?q?kU6mcgX3ANDUTgO+FOq4aZDighf8MqNw5gvqbOx26QA9z5BvVJXaseriqC5OtcfiE?= =?utf-8?q?sbcP42Ou1UcPsagTVSSxUFDJli8WAUTqjtq5epSP1WLRBiq9r6JcQZW814HycLDSl?= =?utf-8?q?SHa7VIgicaBWMO19nT3c18LdV2xjzRbNlOxRuju9UNv436Zi6+MrU2WhUtvfsGkaq?= =?utf-8?q?Y3Sh9gxbQY2ipCwL7NkmJ9EQnmI7MK7iZCO2/tr8aeD8YJA23ggpwJ4xoQ5dl6wI8?= =?utf-8?q?vq4QYVkcEKncyOxwD8vn6yjG6D8lkKgiveE6SQH/ZukiTGuQUr312cicTm4BtSbaE?= =?utf-8?q?4QQPt34C94z0w4WYObf7BtiguL4pupY3J/0G7OtloloohRiTrzG1Ull6VMRumh0ML?= =?utf-8?q?EBzovYkZZ0+OT+K78Gp0gm+hj3sCWWJLvobFEzFJQAhL0zhLTLZy7KOVcJoXnfoQq?= =?utf-8?q?jfpWUqnSgb6QdaLVsvDUGxie5ilR0j4ZMUffhSdNHA6IYywvSd2aT/aHSp+n0JP3M?= =?utf-8?q?5ObAkixzPdfd0CdYfmpeXZIwWV6Oj5w2d1ryDOVkjaIcpvGjhWdDsJe0NzmhSnDL0?= =?utf-8?q?Lgj2Vt6QuPePJ1lxqFlW8d9SGkYCxmhk4p2ZHr72pWkyfRF8DttwLMAuFPi7LWLmS?= =?utf-8?q?eNgJei4lbfrBw07MQaadgGllct54G2kS2FaW2lOfzXCc5npqGe4u8+vcQ9htiNK8X?= =?utf-8?q?pRS4c+543IhJlH/64BeNcsNXohy9Jq0NfCFfDnSl7JRBUwTfwflsXQ5unXLDYrUdt?= =?utf-8?q?3kHfLAYz6OXXSw+L9v9hcO1MP7dWwK8QoA=3D=3D?= 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:(13230040)(35042699022)(376014)(82310400026)(14060799003)(36860700013)(1800799024); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Nov 2024 16:10:39.6529 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a5ab8ef7-7b8b-4a12-7646-08dd000fe378 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: AM1PEPF000252DD.eurprd07.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB10243 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~incoming=patchwork.ozlabs.org@gcc.gnu.org Some intrinsics require setting the fpm register before calling the specific asm opcode required. In order to simplify review, this patch: - adds the fpm_mode_index attribute to function_group_info and function_instance objects - updates existing initialisations and call sites. - updates equality and hash operations gcc/ * config/aarch64/aarch64-sve-builtins-base.cc (svdiv_impl): Specify FPM_unused when folding. (svmul_impl): Likewise. * config/aarch64/aarch64-sve-builtins-base.def (svreinterpret): Specify FPM_unused mode * config/aarch64/aarch64-sve-builtins-shapes.cc (build_one): Use the group fpm_mode when creating function instances. * config/aarch64/aarch64-sve-builtins-sme.def (DEF_SME_FUNCTION): specify FPM_unset mode (DEF_SME_ZA_FUNCTION_GS): Allow specifying fpm mode (DEF_SME_ZA_FUNCTION): specify FPM_unset mode (svadd,svadd_write,svdot, svdot_lane, svluti2_lane_zt, svluti4_lane_zt, svmla, svmla_lane, svmls, svmls_lane, svread, svread_hor, svread_ver, svsub, svsub_write, svsudot, svsudot_lane, svsuvdot_lane, svusdot, svusdot_lane, svusvdot_lane, svvdot_lane, svwrite, svwrite_hor, svwrite_ver): Likewise * config/aarch64/aarch64-sve-builtins-sve2.cc (svaba_impl, svqrshl_impl, svqshl_impl,svrshl_impl, svsra_impl): Specify FPM_unused when folding. * config/aarch64/aarch64-sve-builtins-sve2.def (svadd, svclamp, svcvt, svcvtn, svld1, svldnt1, svmax, svmaxnm, svmin, svminnm, svpext_lane, svqcvt, svqcvtn, svqdmulh, svqrshr, svqrshrn, svqrshru, svqrshrun, svrinta, svrintm, svrintn, svrintp, svrshl, svsel, svst1, svstnt1, svunpk, svuzp, svuzpq, svwhilege, svwhilegt, svwhilele, svwhilelt, svzip, svzipq): Likewise * config/aarch64/aarch64-sve-builtins.cc (function_groups): Set fpm_mode on all elements. (neon_sve_function_groups, sme_function_groups): Likewise. (function_instance::hash): Include fpm_mode in hash. (function_builder::add_overloaded_functions): Use the group fpm mode. (function_resolver::lookup_form): Use the function instance fpm_mode when looking up a function. * config/aarch64/aarch64-sve-builtins.def (DEF_SVE_FUNCTION_GS): add argument. (DEF_SVE_FUNCTION): specify FPM_unset mode. * config/aarch64/aarch64-sve-builtins.h (fpm_mode_index): New. (function_group_info): Add fpm_mode. (function_instance): Likewise. (function_instance::operator==): Handle fpm_mode. --- .../aarch64/aarch64-sve-builtins-base.cc | 15 +- .../aarch64/aarch64-sve-builtins-base.def | 3 +- .../aarch64/aarch64-sve-builtins-shapes.cc | 3 +- .../aarch64/aarch64-sve-builtins-sme.def | 130 ++++++++++-------- .../aarch64/aarch64-sve-builtins-sve2.cc | 20 ++- .../aarch64/aarch64-sve-builtins-sve2.def | 96 +++++++------ gcc/config/aarch64/aarch64-sve-builtins.cc | 23 ++-- gcc/config/aarch64/aarch64-sve-builtins.def | 4 +- gcc/config/aarch64/aarch64-sve-builtins.h | 25 +++- 9 files changed, 188 insertions(+), 131 deletions(-) diff --git a/gcc/config/aarch64/aarch64-sve-builtins-base.cc b/gcc/config/aarch64/aarch64-sve-builtins-base.cc index 1c9f515a52c..893ecb5f080 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-base.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins-base.cc @@ -774,7 +774,8 @@ public: { function_instance instance ("svneg", functions::svneg, shapes::unary, MODE_none, - f.type_suffix_ids, GROUP_none, f.pred); + f.type_suffix_ids, GROUP_none, f.pred, + FPM_unused); gcall *call = f.redirect_call (instance); unsigned offset_index = 0; if (f.pred == PRED_m) @@ -802,7 +803,8 @@ public: { function_instance instance ("svlsr", functions::svlsr, shapes::binary_uint_opt_n, MODE_n, - f.type_suffix_ids, GROUP_none, f.pred); + f.type_suffix_ids, GROUP_none, f.pred, + FPM_unused); call = f.redirect_call (instance); tree d = INTEGRAL_TYPE_P (TREE_TYPE (op2)) ? op2 : op2_cst; new_divisor = wide_int_to_tree (TREE_TYPE (d), tree_log2 (d)); @@ -815,7 +817,8 @@ public: function_instance instance ("svasrd", functions::svasrd, shapes::shift_right_imm, MODE_n, - f.type_suffix_ids, GROUP_none, f.pred); + f.type_suffix_ids, GROUP_none, f.pred, + FPM_unused); call = f.redirect_call (instance); new_divisor = wide_int_to_tree (scalar_types[VECTOR_TYPE_svuint64_t], tree_log2 (op2_cst)); @@ -2092,7 +2095,8 @@ public: { function_instance instance ("svneg", functions::svneg, shapes::unary, MODE_none, - f.type_suffix_ids, GROUP_none, f.pred); + f.type_suffix_ids, GROUP_none, f.pred, + FPM_unused); gcall *call = f.redirect_call (instance); unsigned offset_index = 0; if (f.pred == PRED_m) @@ -2133,7 +2137,8 @@ public: tree_log2 (shift_op2)); function_instance instance ("svlsl", functions::svlsl, shapes::binary_uint_opt_n, MODE_n, - f.type_suffix_ids, GROUP_none, f.pred); + f.type_suffix_ids, GROUP_none, f.pred, + FPM_unused); gcall *call = f.redirect_call (instance); gimple_call_set_arg (call, 1, shift_op1); gimple_call_set_arg (call, 2, shift_op2); diff --git a/gcc/config/aarch64/aarch64-sve-builtins-base.def b/gcc/config/aarch64/aarch64-sve-builtins-base.def index da2a0e41aa5..1230ad78d09 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-base.def +++ b/gcc/config/aarch64/aarch64-sve-builtins-base.def @@ -200,7 +200,8 @@ DEF_SVE_FUNCTION (svrbit, unary, all_integer, mxz) DEF_SVE_FUNCTION (svrecpe, unary, all_float, none) DEF_SVE_FUNCTION (svrecps, binary, all_float, none) DEF_SVE_FUNCTION (svrecpx, unary, all_float, mxz) -DEF_SVE_FUNCTION_GS (svreinterpret, reinterpret, reinterpret, x1234, none) +DEF_SVE_FUNCTION_GS (svreinterpret, reinterpret, reinterpret, x1234, none, + unused) DEF_SVE_FUNCTION (svreinterpret, reinterpret, reinterpret_b, none) DEF_SVE_FUNCTION (svrev, unary, all_data, none) DEF_SVE_FUNCTION (svrev, unary_pred, all_pred, none) diff --git a/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc b/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc index f190770250f..51f7cfdf96f 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins-shapes.cc @@ -350,7 +350,8 @@ build_one (function_builder &b, const char *signature, auto_vec argument_types; function_instance instance (group.base_name, *group.base, *group.shape, mode_suffix_id, group.types[ti], - group.groups[gi], group.preds[pi]); + group.groups[gi], group.preds[pi], + group.fpm_mode); tree return_type = parse_signature (instance, signature, argument_types); apply_predication (instance, return_type, argument_types); b.add_unique_function (instance, return_type, argument_types, diff --git a/gcc/config/aarch64/aarch64-sve-builtins-sme.def b/gcc/config/aarch64/aarch64-sve-builtins-sme.def index bc2c3323636..55d04900ec2 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-sme.def +++ b/gcc/config/aarch64/aarch64-sve-builtins-sme.def @@ -19,17 +19,17 @@ #ifndef DEF_SME_FUNCTION #define DEF_SME_FUNCTION(NAME, SHAPE, TYPES, PREDS) \ - DEF_SME_FUNCTION_GS (NAME, SHAPE, TYPES, none, PREDS) + DEF_SME_FUNCTION_GS (NAME, SHAPE, TYPES, none, PREDS, unused) #endif #ifndef DEF_SME_ZA_FUNCTION_GS -#define DEF_SME_ZA_FUNCTION_GS(NAME, SHAPE, TYPES, GROUP, PREDS) \ - DEF_SME_FUNCTION_GS (NAME, SHAPE, TYPES, GROUP, PREDS) +#define DEF_SME_ZA_FUNCTION_GS(NAME, SHAPE, TYPES, GROUP, PREDS, FPM_MODE) \ + DEF_SME_FUNCTION_GS (NAME, SHAPE, TYPES, GROUP, PREDS, FPM_MODE) #endif #ifndef DEF_SME_ZA_FUNCTION #define DEF_SME_ZA_FUNCTION(NAME, SHAPE, TYPES, PREDS) \ - DEF_SME_ZA_FUNCTION_GS (NAME, SHAPE, TYPES, none, PREDS) + DEF_SME_ZA_FUNCTION_GS (NAME, SHAPE, TYPES, none, PREDS, unused) #endif #define REQUIRED_EXTENSIONS streaming_compatible (0) @@ -97,113 +97,123 @@ DEF_SME_FUNCTION (svzero_zt, inherent_zt, none, none) floating-point function. They are needed because the integer and floating-point functions have different architecture requirements. */ #define REQUIRED_EXTENSIONS streaming_only (AARCH64_FL_SME2) -DEF_SME_ZA_FUNCTION_GS (svadd, unary_za_slice, za_s_data, vg1x24, none) -DEF_SME_ZA_FUNCTION_GS (svadd, unary_za_slice, d_za, vg1x24, none) +DEF_SME_ZA_FUNCTION_GS (svadd, unary_za_slice, za_s_data, vg1x24, none, unused) +DEF_SME_ZA_FUNCTION_GS (svadd, unary_za_slice, d_za, vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svadd_write, binary_za_slice_opt_single, za_s_integer, - vg1x24, none) + vg1x24, none, unused) DEF_SME_ZA_FUNCTION (svbmopa, binary_za_m, za_s_unsigned, za_m) DEF_SME_ZA_FUNCTION (svbmops, binary_za_m, za_s_unsigned, za_m) DEF_SME_ZA_FUNCTION_GS (svdot, binary_za_slice_opt_single, za_s_h_data, - vg1x24, none) + vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svdot, binary_za_slice_opt_single, za_s_b_integer, - vg1x24, none) + vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svdot_lane, dot_za_slice_lane, za_s_h_data, - vg1x24, none) + vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svdot_lane, dot_za_slice_lane, za_s_b_integer, - vg1x24, none) -DEF_SME_FUNCTION_GS (svluti2_lane_zt, luti2_lane_zt, bhs_data, x124, none) -DEF_SME_FUNCTION_GS (svluti4_lane_zt, luti4_lane_zt, bhs_data, x12, none) -DEF_SME_FUNCTION_GS (svluti4_lane_zt, luti4_lane_zt, hs_data, x4, none) + vg1x24, none, unused) +DEF_SME_FUNCTION_GS (svluti2_lane_zt, luti2_lane_zt, bhs_data, x124, none, + unused) +DEF_SME_FUNCTION_GS (svluti4_lane_zt, luti4_lane_zt, bhs_data, x12, none, + unused) +DEF_SME_FUNCTION_GS (svluti4_lane_zt, luti4_lane_zt, hs_data, x4, none, + unused) DEF_SME_ZA_FUNCTION_GS (svmla, binary_za_slice_opt_single, za_s_float, - vg1x24, none) + vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svmla, binary_za_slice_opt_single, za_s_h_data, - vg2, none) + vg2, none, unused) DEF_SME_ZA_FUNCTION_GS (svmla, binary_za_slice_opt_single, za_s_b_integer, - vg4, none) + vg4, none, unused) DEF_SME_ZA_FUNCTION_GS (svmla_lane, binary_za_slice_lane, za_s_float, - vg1x24, none) + vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svmla_lane, binary_za_slice_lane, za_s_h_data, - vg2, none) + vg2, none, unused) DEF_SME_ZA_FUNCTION_GS (svmla_lane, binary_za_slice_lane, za_s_b_integer, - vg4, none) + vg4, none, unused) DEF_SME_ZA_FUNCTION_GS (svmls, binary_za_slice_opt_single, za_s_float, - vg1x24, none) + vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svmls, binary_za_slice_opt_single, za_s_h_data, - vg2, none) + vg2, none, unused) DEF_SME_ZA_FUNCTION_GS (svmls, binary_za_slice_opt_single, za_s_b_integer, - vg4, none) + vg4, none, unused) DEF_SME_ZA_FUNCTION_GS (svmls_lane, binary_za_slice_lane, za_s_float, - vg1x24, none) + vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svmls_lane, binary_za_slice_lane, za_s_h_data, - vg2, none) + vg2, none, unused) DEF_SME_ZA_FUNCTION_GS (svmls_lane, binary_za_slice_lane, za_s_b_integer, - vg4, none) + vg4, none, unused) DEF_SME_ZA_FUNCTION (svmopa, binary_za_m, za_s_h_integer, za_m) DEF_SME_ZA_FUNCTION (svmops, binary_za_m, za_s_h_integer, za_m) -DEF_SME_ZA_FUNCTION_GS (svread, read_za_slice, za_bhsd_data, vg1x24, none) -DEF_SME_ZA_FUNCTION_GS (svread_hor, read_za, za_bhsd_data, vg24, none) -DEF_SME_ZA_FUNCTION_GS (svread_ver, read_za, za_bhsd_data, vg24, none) -DEF_SME_ZA_FUNCTION_GS (svsub, unary_za_slice, za_s_data, vg1x24, none) -DEF_SME_ZA_FUNCTION_GS (svsub, unary_za_slice, d_za, vg1x24, none) +DEF_SME_ZA_FUNCTION_GS (svread, read_za_slice, za_bhsd_data, vg1x24, none, unused) +DEF_SME_ZA_FUNCTION_GS (svread_hor, read_za, za_bhsd_data, vg24, none, unused) +DEF_SME_ZA_FUNCTION_GS (svread_ver, read_za, za_bhsd_data, vg24, none, unused) +DEF_SME_ZA_FUNCTION_GS (svsub, unary_za_slice, za_s_data, vg1x24, none, unused) +DEF_SME_ZA_FUNCTION_GS (svsub, unary_za_slice, d_za, vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svsub_write, binary_za_slice_opt_single, za_s_integer, - vg1x24, none) + vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svsudot, binary_za_slice_uint_opt_single, - za_s_b_signed, vg1x24, none) + za_s_b_signed, vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svsudot_lane, dot_za_slice_uint_lane, - za_s_b_signed, vg1x24, none) + za_s_b_signed, vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svsuvdot_lane, dot_za_slice_uint_lane, - za_s_b_signed, vg1x4, none) + za_s_b_signed, vg1x4, none, unused) DEF_SME_ZA_FUNCTION_GS (svusdot, binary_za_slice_int_opt_single, - za_s_b_unsigned, vg1x24, none) + za_s_b_unsigned, vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svusdot_lane, dot_za_slice_int_lane, - za_s_b_unsigned, vg1x24, none) + za_s_b_unsigned, vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svusvdot_lane, dot_za_slice_int_lane, - za_s_b_unsigned, vg1x4, none) + za_s_b_unsigned, vg1x4, none, unused) DEF_SME_ZA_FUNCTION_GS (svvdot_lane, dot_za_slice_lane, za_s_h_data, - vg1x2, none) + vg1x2, none, unused) DEF_SME_ZA_FUNCTION_GS (svvdot_lane, dot_za_slice_lane, za_s_b_integer, - vg1x4, none) -DEF_SME_ZA_FUNCTION_GS (svwrite, write_za_slice, za_bhsd_data, vg1x24, none) -DEF_SME_ZA_FUNCTION_GS (svwrite_hor, write_za, za_bhsd_data, vg24, none) -DEF_SME_ZA_FUNCTION_GS (svwrite_ver, write_za, za_bhsd_data, vg24, none) + vg1x4, none, unused) +DEF_SME_ZA_FUNCTION_GS (svwrite, write_za_slice, za_bhsd_data, vg1x24, none, + unused) +DEF_SME_ZA_FUNCTION_GS (svwrite_hor, write_za, za_bhsd_data, vg24, none, + unused) +DEF_SME_ZA_FUNCTION_GS (svwrite_ver, write_za, za_bhsd_data, vg24, none, + unused) #undef REQUIRED_EXTENSIONS #define REQUIRED_EXTENSIONS streaming_only (AARCH64_FL_SME2 \ | AARCH64_FL_SME_I16I64) -DEF_SME_ZA_FUNCTION_GS (svadd, unary_za_slice, za_d_integer, vg1x24, none) +DEF_SME_ZA_FUNCTION_GS (svadd, unary_za_slice, za_d_integer, vg1x24, none, + unused) DEF_SME_ZA_FUNCTION_GS (svadd_write, binary_za_slice_opt_single, za_d_integer, - vg1x24, none) + vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svdot, binary_za_slice_opt_single, za_d_h_integer, - vg1x24, none) + vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svdot_lane, dot_za_slice_lane, za_d_h_integer, - vg1x24, none) + vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svmla, binary_za_slice_opt_single, za_d_h_integer, - vg4, none) + vg4, none, unused) DEF_SME_ZA_FUNCTION_GS (svmla_lane, binary_za_slice_lane, za_d_h_integer, - vg4, none) + vg4, none, unused) DEF_SME_ZA_FUNCTION_GS (svmls, binary_za_slice_opt_single, za_d_h_integer, - vg4, none) + vg4, none, unused) DEF_SME_ZA_FUNCTION_GS (svmls_lane, binary_za_slice_lane, za_d_h_integer, - vg4, none) -DEF_SME_ZA_FUNCTION_GS (svsub, unary_za_slice, za_d_integer, vg1x24, none) + vg4, none, unused) +DEF_SME_ZA_FUNCTION_GS (svsub, unary_za_slice, za_d_integer, vg1x24, none, + unused) DEF_SME_ZA_FUNCTION_GS (svsub_write, binary_za_slice_opt_single, za_d_integer, - vg1x24, none) + vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svvdot_lane, dot_za_slice_lane, za_d_h_integer, - vg1x4, none) + vg1x4, none, unused) #undef REQUIRED_EXTENSIONS #define REQUIRED_EXTENSIONS streaming_only (AARCH64_FL_SME2 \ | AARCH64_FL_SME_F64F64) -DEF_SME_ZA_FUNCTION_GS (svadd, unary_za_slice, za_d_float, vg1x24, none) +DEF_SME_ZA_FUNCTION_GS (svadd, unary_za_slice, za_d_float, vg1x24, none, + unused) DEF_SME_ZA_FUNCTION_GS (svmla, binary_za_slice_opt_single, za_d_float, - vg1x24, none) + vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svmla_lane, binary_za_slice_lane, za_d_float, - vg1x24, none) + vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svmls, binary_za_slice_opt_single, za_d_float, - vg1x24, none) + vg1x24, none, unused) DEF_SME_ZA_FUNCTION_GS (svmls_lane, binary_za_slice_lane, za_d_float, - vg1x24, none) -DEF_SME_ZA_FUNCTION_GS (svsub, unary_za_slice, za_d_float, vg1x24, none) + vg1x24, none, unused) +DEF_SME_ZA_FUNCTION_GS (svsub, unary_za_slice, za_d_float, vg1x24, none, + unused) #undef REQUIRED_EXTENSIONS #undef DEF_SME_ZA_FUNCTION diff --git a/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc b/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc index f0ab7400ef5..d09b75b60c2 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins-sve2.cc @@ -90,7 +90,8 @@ public: return NULL; function_instance instance ("svabd", functions::svabd, shapes::binary_opt_n, f.mode_suffix_id, - f.type_suffix_ids, GROUP_none, PRED_x); + f.type_suffix_ids, GROUP_none, PRED_x, + FPM_unused); gcall *call = f.redirect_call (instance); /* Add a ptrue as predicate, because unlike svaba, svabd is predicated. */ @@ -338,7 +339,8 @@ public: that we can use for sensible shift amounts. */ function_instance instance ("svqshl", functions::svqshl, shapes::binary_int_opt_n, MODE_n, - f.type_suffix_ids, GROUP_none, f.pred); + f.type_suffix_ids, GROUP_none, f.pred, + FPM_unused); return f.redirect_call (instance); } else @@ -348,7 +350,7 @@ public: function_instance instance ("svrshl", functions::svrshl, shapes::binary_int_opt_single_n, MODE_n, f.type_suffix_ids, GROUP_none, - f.pred); + f.pred, FPM_unused); return f.redirect_call (instance); } } @@ -377,7 +379,8 @@ public: -wi::to_wide (amount)); function_instance instance ("svasr", functions::svasr, shapes::binary_uint_opt_n, MODE_n, - f.type_suffix_ids, GROUP_none, f.pred); + f.type_suffix_ids, GROUP_none, f.pred, + FPM_unused); if (f.type_suffix (0).unsigned_p) { instance.base_name = "svlsr"; @@ -412,7 +415,8 @@ public: that we can use for sensible shift amounts. */ function_instance instance ("svlsl", functions::svlsl, shapes::binary_uint_opt_n, MODE_n, - f.type_suffix_ids, GROUP_none, f.pred); + f.type_suffix_ids, GROUP_none, f.pred, + FPM_unused); gcall *call = f.redirect_call (instance); gimple_call_set_arg (call, 2, amount); return call; @@ -425,7 +429,8 @@ public: -wi::to_wide (amount)); function_instance instance ("svrshr", functions::svrshr, shapes::shift_right_imm, MODE_n, - f.type_suffix_ids, GROUP_none, f.pred); + f.type_suffix_ids, GROUP_none, f.pred, + FPM_unused); gcall *call = f.redirect_call (instance); gimple_call_set_arg (call, 2, amount); return call; @@ -461,7 +466,8 @@ public: return NULL; function_instance instance ("svlsr", functions::svlsr, shapes::binary_uint_opt_n, MODE_n, - f.type_suffix_ids, GROUP_none, PRED_x); + f.type_suffix_ids, GROUP_none, PRED_x, + FPM_unused); if (!f.type_suffix (0).unsigned_p) { instance.base_name = "svasr"; diff --git a/gcc/config/aarch64/aarch64-sve-builtins-sve2.def b/gcc/config/aarch64/aarch64-sve-builtins-sve2.def index e4021559f36..8d25bb33dad 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-sve2.def +++ b/gcc/config/aarch64/aarch64-sve-builtins-sve2.def @@ -227,61 +227,73 @@ DEF_SVE_FUNCTION (svrevd, unary, all_data, mxz) #undef REQUIRED_EXTENSIONS #define REQUIRED_EXTENSIONS streaming_only (AARCH64_FL_SME2) -DEF_SVE_FUNCTION_GS (svadd, binary_single, all_integer, x24, none) +DEF_SVE_FUNCTION_GS (svadd, binary_single, all_integer, x24, none, unused) DEF_SVE_FUNCTION (svbfmlslb, ternary_bfloat_opt_n, s_float, none) DEF_SVE_FUNCTION (svbfmlslb_lane, ternary_bfloat_lane, s_float, none) DEF_SVE_FUNCTION (svbfmlslt, ternary_bfloat_opt_n, s_float, none) DEF_SVE_FUNCTION (svbfmlslt_lane, ternary_bfloat_lane, s_float, none) DEF_SVE_FUNCTION (svclamp, clamp, all_float, none) -DEF_SVE_FUNCTION_GS (svclamp, clamp, all_arith, x24, none) +DEF_SVE_FUNCTION_GS (svclamp, clamp, all_arith, x24, none, unused) DEF_SVE_FUNCTION (svcntp, count_pred_c, all_count, none) -DEF_SVE_FUNCTION_GS (svcvt, unary_convertxn, cvt_h_s_float, x2, none) -DEF_SVE_FUNCTION_GS (svcvt, unary_convertxn, cvt_s_s, x24, none) -DEF_SVE_FUNCTION_GS (svcvtn, unary_convertxn, cvt_h_s_float, x2, none) +DEF_SVE_FUNCTION_GS (svcvt, unary_convertxn, cvt_h_s_float, x2, none, unused) +DEF_SVE_FUNCTION_GS (svcvt, unary_convertxn, cvt_s_s, x24, none, unused) +DEF_SVE_FUNCTION_GS (svcvtn, unary_convertxn, cvt_h_s_float, x2, none, unused) DEF_SVE_FUNCTION (svdot, ternary_qq_opt_n_or_011, s_narrow_fsu, none) DEF_SVE_FUNCTION (svdot_lane, ternary_qq_or_011_lane, s_narrow_fsu, none) -DEF_SVE_FUNCTION_GS (svld1, load, all_data, x24, implicit) -DEF_SVE_FUNCTION_GS (svldnt1, load, all_data, x24, implicit) -DEF_SVE_FUNCTION_GS (svmax, binary_opt_single_n, all_arith, x24, none) -DEF_SVE_FUNCTION_GS (svmaxnm, binary_opt_single_n, all_float, x24, none) -DEF_SVE_FUNCTION_GS (svmin, binary_opt_single_n, all_arith, x24, none) -DEF_SVE_FUNCTION_GS (svminnm, binary_opt_single_n, all_float, x24, none) -DEF_SVE_FUNCTION_GS (svpext_lane, extract_pred, all_count, x12, none) +DEF_SVE_FUNCTION_GS (svld1, load, all_data, x24, implicit, unused) +DEF_SVE_FUNCTION_GS (svldnt1, load, all_data, x24, implicit, unused) +DEF_SVE_FUNCTION_GS (svmax, binary_opt_single_n, all_arith, x24, none, unused) +DEF_SVE_FUNCTION_GS (svmaxnm, binary_opt_single_n, all_float, x24, none, + unused) +DEF_SVE_FUNCTION_GS (svmin, binary_opt_single_n, all_arith, x24, none, unused) +DEF_SVE_FUNCTION_GS (svminnm, binary_opt_single_n, all_float, x24, none, + unused) +DEF_SVE_FUNCTION_GS (svpext_lane, extract_pred, all_count, x12, none, unused) DEF_SVE_FUNCTION (svptrue, inherent, all_count, none) -DEF_SVE_FUNCTION_GS (svqcvt, unary_convertxn, qcvt_x2, x2, none) -DEF_SVE_FUNCTION_GS (svqcvt, unary_convertxn, qcvt_x4, x4, none) -DEF_SVE_FUNCTION_GS (svqcvtn, unary_convertxn, qcvt_x2, x2, none) -DEF_SVE_FUNCTION_GS (svqcvtn, unary_convertxn, qcvt_x4, x4, none) -DEF_SVE_FUNCTION_GS (svqdmulh, binary_opt_single_n, all_signed, x24, none) -DEF_SVE_FUNCTION_GS (svqrshr, shift_right_imm_narrowxn, qrshr_x2, x2, none) -DEF_SVE_FUNCTION_GS (svqrshr, shift_right_imm_narrowxn, qrshr_x4, x4, none) -DEF_SVE_FUNCTION_GS (svqrshrn, shift_right_imm_narrowxn, qrshr_x2, x2, none) -DEF_SVE_FUNCTION_GS (svqrshrn, shift_right_imm_narrowxn, qrshr_x4, x4, none) -DEF_SVE_FUNCTION_GS (svqrshru, shift_right_imm_narrowxn, qrshru_x2, x2, none) -DEF_SVE_FUNCTION_GS (svqrshru, shift_right_imm_narrowxn, qrshru_x4, x4, none) -DEF_SVE_FUNCTION_GS (svqrshrun, shift_right_imm_narrowxn, qrshru_x2, x2, none) -DEF_SVE_FUNCTION_GS (svqrshrun, shift_right_imm_narrowxn, qrshru_x4, x4, none) -DEF_SVE_FUNCTION_GS (svrinta, unaryxn, s_float, x24, none) -DEF_SVE_FUNCTION_GS (svrintm, unaryxn, s_float, x24, none) -DEF_SVE_FUNCTION_GS (svrintn, unaryxn, s_float, x24, none) -DEF_SVE_FUNCTION_GS (svrintp, unaryxn, s_float, x24, none) -DEF_SVE_FUNCTION_GS (svrshl, binary_int_opt_single_n, all_integer, x24, none) -DEF_SVE_FUNCTION_GS (svsel, binaryxn, all_data, x24, implicit) -DEF_SVE_FUNCTION_GS (svst1, storexn, all_data, x24, implicit) -DEF_SVE_FUNCTION_GS (svstnt1, storexn, all_data, x24, implicit) -DEF_SVE_FUNCTION_GS (svunpk, unary_convertxn, bhs_widen, x24, none) -DEF_SVE_FUNCTION_GS (svuzp, unaryxn, all_data, x24, none) -DEF_SVE_FUNCTION_GS (svuzpq, unaryxn, all_data, x24, none) -DEF_SVE_FUNCTION_GS (svwhilege, compare_scalar, while_x, x2, none) +DEF_SVE_FUNCTION_GS (svqcvt, unary_convertxn, qcvt_x2, x2, none, unused) +DEF_SVE_FUNCTION_GS (svqcvt, unary_convertxn, qcvt_x4, x4, none, unused) +DEF_SVE_FUNCTION_GS (svqcvtn, unary_convertxn, qcvt_x2, x2, none, unused) +DEF_SVE_FUNCTION_GS (svqcvtn, unary_convertxn, qcvt_x4, x4, none, unused) +DEF_SVE_FUNCTION_GS (svqdmulh, binary_opt_single_n, all_signed, x24, none, + unused) +DEF_SVE_FUNCTION_GS (svqrshr, shift_right_imm_narrowxn, qrshr_x2, x2, none, + unused) +DEF_SVE_FUNCTION_GS (svqrshr, shift_right_imm_narrowxn, qrshr_x4, x4, none, + unused) +DEF_SVE_FUNCTION_GS (svqrshrn, shift_right_imm_narrowxn, qrshr_x2, x2, none, + unused) +DEF_SVE_FUNCTION_GS (svqrshrn, shift_right_imm_narrowxn, qrshr_x4, x4, none, + unused) +DEF_SVE_FUNCTION_GS (svqrshru, shift_right_imm_narrowxn, qrshru_x2, x2, none, + unused) +DEF_SVE_FUNCTION_GS (svqrshru, shift_right_imm_narrowxn, qrshru_x4, x4, none, + unused) +DEF_SVE_FUNCTION_GS (svqrshrun, shift_right_imm_narrowxn, qrshru_x2, x2, none, + unused) +DEF_SVE_FUNCTION_GS (svqrshrun, shift_right_imm_narrowxn, qrshru_x4, x4, none, + unused) +DEF_SVE_FUNCTION_GS (svrinta, unaryxn, s_float, x24, none, unused) +DEF_SVE_FUNCTION_GS (svrintm, unaryxn, s_float, x24, none, unused) +DEF_SVE_FUNCTION_GS (svrintn, unaryxn, s_float, x24, none, unused) +DEF_SVE_FUNCTION_GS (svrintp, unaryxn, s_float, x24, none, unused) +DEF_SVE_FUNCTION_GS (svrshl, binary_int_opt_single_n, all_integer, x24, none, + unused) +DEF_SVE_FUNCTION_GS (svsel, binaryxn, all_data, x24, implicit, unused) +DEF_SVE_FUNCTION_GS (svst1, storexn, all_data, x24, implicit, unused) +DEF_SVE_FUNCTION_GS (svstnt1, storexn, all_data, x24, implicit, unused) +DEF_SVE_FUNCTION_GS (svunpk, unary_convertxn, bhs_widen, x24, none, unused) +DEF_SVE_FUNCTION_GS (svuzp, unaryxn, all_data, x24, none, unused) +DEF_SVE_FUNCTION_GS (svuzpq, unaryxn, all_data, x24, none, unused) +DEF_SVE_FUNCTION_GS (svwhilege, compare_scalar, while_x, x2, none, unused) DEF_SVE_FUNCTION (svwhilege, compare_scalar_count, while_x_c, none) -DEF_SVE_FUNCTION_GS (svwhilegt, compare_scalar, while_x, x2, none) +DEF_SVE_FUNCTION_GS (svwhilegt, compare_scalar, while_x, x2, none, unused) DEF_SVE_FUNCTION (svwhilegt, compare_scalar_count, while_x_c, none) -DEF_SVE_FUNCTION_GS (svwhilele, compare_scalar, while_x, x2, none) +DEF_SVE_FUNCTION_GS (svwhilele, compare_scalar, while_x, x2, none, unused) DEF_SVE_FUNCTION (svwhilele, compare_scalar_count, while_x_c, none) -DEF_SVE_FUNCTION_GS (svwhilelt, compare_scalar, while_x, x2, none) +DEF_SVE_FUNCTION_GS (svwhilelt, compare_scalar, while_x, x2, none, unused) DEF_SVE_FUNCTION (svwhilelt, compare_scalar_count, while_x_c, none) -DEF_SVE_FUNCTION_GS (svzip, unaryxn, all_data, x24, none) -DEF_SVE_FUNCTION_GS (svzipq, unaryxn, all_data, x24, none) +DEF_SVE_FUNCTION_GS (svzip, unaryxn, all_data, x24, none, unused) +DEF_SVE_FUNCTION_GS (svzipq, unaryxn, all_data, x24, none, unused) #undef REQUIRED_EXTENSIONS #define REQUIRED_EXTENSIONS \ diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc b/gcc/config/aarch64/aarch64-sve-builtins.cc index 34384c0f5d7..dfe6221e5c2 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins.cc @@ -890,9 +890,10 @@ static const predication_index preds_za_m[] = { PRED_za_m, NUM_PREDS }; /* A list of all arm_sve.h functions. */ static CONSTEXPR const function_group_info function_groups[] = { -#define DEF_SVE_FUNCTION_GS(NAME, SHAPE, TYPES, GROUPS, PREDS) \ +#define DEF_SVE_FUNCTION_GS(NAME, SHAPE, TYPES, GROUPS, PREDS, FPM_MODE) \ { #NAME, &functions::NAME, &shapes::SHAPE, types_##TYPES, groups_##GROUPS, \ - preds_##PREDS, aarch64_required_extensions::REQUIRED_EXTENSIONS }, + preds_##PREDS, aarch64_required_extensions::REQUIRED_EXTENSIONS, \ + FPM_##FPM_MODE }, #include "aarch64-sve-builtins.def" }; @@ -900,20 +901,22 @@ static CONSTEXPR const function_group_info function_groups[] = { static CONSTEXPR const function_group_info neon_sve_function_groups[] = { #define DEF_NEON_SVE_FUNCTION(NAME, SHAPE, TYPES, GROUPS, PREDS) \ { #NAME, &neon_sve_bridge_functions::NAME, &shapes::SHAPE, types_##TYPES, \ - groups_##GROUPS, preds_##PREDS, aarch64_required_extensions::ssve (0) }, + groups_##GROUPS, preds_##PREDS, aarch64_required_extensions::ssve (0), \ + FPM_unused }, #include "aarch64-neon-sve-bridge-builtins.def" }; /* A list of all arm_sme.h functions. */ static CONSTEXPR const function_group_info sme_function_groups[] = { -#define DEF_SME_FUNCTION_GS(NAME, SHAPE, TYPES, GROUPS, PREDS) \ +#define DEF_SME_FUNCTION_GS(NAME, SHAPE, TYPES, GROUPS, PREDS, FPM_MODE1) \ { #NAME, &functions::NAME, &shapes::SHAPE, types_##TYPES, groups_##GROUPS, \ - preds_##PREDS, aarch64_required_extensions::REQUIRED_EXTENSIONS }, -#define DEF_SME_ZA_FUNCTION_GS(NAME, SHAPE, TYPES, GROUPS, PREDS) \ + preds_##PREDS, aarch64_required_extensions::REQUIRED_EXTENSIONS, \ + FPM_##FPM_MODE1 }, +#define DEF_SME_ZA_FUNCTION_GS(NAME, SHAPE, TYPES, GROUPS, PREDS, FPM_MODE2) \ { #NAME, &functions::NAME##_za, &shapes::SHAPE, types_##TYPES, \ groups_##GROUPS, preds_##PREDS, \ aarch64_required_extensions::REQUIRED_EXTENSIONS \ - .and_also (AARCH64_FL_ZA_ON) }, + .and_also (AARCH64_FL_ZA_ON), FPM_##FPM_MODE2 }, #include "aarch64-sve-builtins-sme.def" }; @@ -1180,6 +1183,7 @@ function_instance::hash () const h.add_int (type_suffix_ids[1]); h.add_int (group_suffix_id); h.add_int (pred); + h.add_int (fpm_mode); return h.end (); } @@ -1606,7 +1610,8 @@ function_builder::add_overloaded_functions (const function_group_info &group, { function_instance instance (group.base_name, *group.base, *group.shape, mode, types, - group_suffix_id, group.preds[pi]); + group_suffix_id, group.preds[pi], + group.fpm_mode); add_overloaded_function (instance, group.required_extensions); }; @@ -1784,7 +1789,7 @@ function_resolver::lookup_form (mode_suffix_index mode, { type_suffix_pair types = { type0, type1 }; function_instance instance (base_name, base, shape, mode, types, - group, pred); + group, pred, fpm_mode); registered_function *rfn = function_table->find_with_hash (instance, instance.hash ()); return rfn ? rfn->decl : NULL_TREE; diff --git a/gcc/config/aarch64/aarch64-sve-builtins.def b/gcc/config/aarch64/aarch64-sve-builtins.def index 47c396b866d..982f9ed2312 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins.def +++ b/gcc/config/aarch64/aarch64-sve-builtins.def @@ -38,7 +38,7 @@ #endif #ifndef DEF_SVE_FUNCTION_GS -#define DEF_SVE_FUNCTION_GS(A, B, C, D, E) +#define DEF_SVE_FUNCTION_GS(A, B, C, D, E, F) #endif #ifndef DEF_SVE_NEON_TYPE_SUFFIX @@ -48,7 +48,7 @@ #ifndef DEF_SVE_FUNCTION #define DEF_SVE_FUNCTION(NAME, SHAPE, TYPES, PREDS) \ - DEF_SVE_FUNCTION_GS (NAME, SHAPE, TYPES, none, PREDS) + DEF_SVE_FUNCTION_GS (NAME, SHAPE, TYPES, none, PREDS, unused) #endif DEF_SVE_MODE (n, none, none, none) diff --git a/gcc/config/aarch64/aarch64-sve-builtins.h b/gcc/config/aarch64/aarch64-sve-builtins.h index 28726875401..41a9dfc56e5 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins.h +++ b/gcc/config/aarch64/aarch64-sve-builtins.h @@ -28,6 +28,7 @@ - the "mode" suffix ("_n", "_index", etc.) - the type suffixes ("_s32", "_b8", etc.) - the predication suffix ("_x", "_z", etc.) + - the "_fpm" suffix when the floating point mode register is set Each piece of information is individually useful, so we retain this classification throughout: @@ -42,6 +43,8 @@ - prediction_index extends the predication suffix with an additional alternative: PRED_implicit for implicitly-predicated operations + - fpm_mode represents whether the fpm register is set or not + In addition to its unique full name, a function may have a shorter overloaded alias. This alias removes pieces of the suffixes that can be inferred from the arguments, such as by shortening the mode @@ -164,6 +167,14 @@ enum predication_index NUM_PREDS }; +/* Classifies intrinsics on whether they set the FPM register */ +enum fpm_mode_index +{ + FPM_unused, + FPM_set, + NUM_FPM_MODES +}; + /* Classifies element types, based on type suffixes with the bit count removed. "count" isn't really an element type, but we pretend it is for consistency. */ @@ -366,6 +377,9 @@ struct function_group_info /* The architecture extensions that the functions require. */ aarch64_required_extensions required_extensions; + + /* Whether the floating point register is set */ + fpm_mode_index fpm_mode; }; /* Describes a single fully-resolved function (i.e. one that has a @@ -376,7 +390,7 @@ public: function_instance (const char *, const function_base *, const function_shape *, mode_suffix_index, const type_suffix_pair &, group_suffix_index, - predication_index); + predication_index, fpm_mode_index); bool operator== (const function_instance &) const; bool operator!= (const function_instance &) const; @@ -420,6 +434,7 @@ public: type_suffix_pair type_suffix_ids; group_suffix_index group_suffix_id; predication_index pred; + fpm_mode_index fpm_mode; }; class registered_function; @@ -878,10 +893,11 @@ function_instance (const char *base_name_in, mode_suffix_index mode_suffix_id_in, const type_suffix_pair &type_suffix_ids_in, group_suffix_index group_suffix_id_in, - predication_index pred_in) + predication_index pred_in, + fpm_mode_index fpm_mode_in) : base_name (base_name_in), base (base_in), shape (shape_in), mode_suffix_id (mode_suffix_id_in), group_suffix_id (group_suffix_id_in), - pred (pred_in) + pred (pred_in), fpm_mode(fpm_mode_in) { memcpy (type_suffix_ids, type_suffix_ids_in, sizeof (type_suffix_ids)); } @@ -895,7 +911,8 @@ function_instance::operator== (const function_instance &other) const && type_suffix_ids[0] == other.type_suffix_ids[0] && type_suffix_ids[1] == other.type_suffix_ids[1] && group_suffix_id == other.group_suffix_id - && pred == other.pred); + && pred == other.pred + && fpm_mode == other.fpm_mode); } inline bool