From patchwork Wed Oct 30 16:31:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Claudio Bantaloukas X-Patchwork-Id: 99831 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 86853385780D for ; Wed, 30 Oct 2024 16:33:08 +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-vi1eur05on2062c.outbound.protection.outlook.com [IPv6:2a01:111:f403:2613::62c]) by sourceware.org (Postfix) with ESMTPS id 7B4A33858D28 for ; Wed, 30 Oct 2024 16:32:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7B4A33858D28 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 7B4A33858D28 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:2613::62c ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1730305948; cv=pass; b=NBknDRzD3wyirjVvboZj1Z+6uWHBYIors5fka6j4/82P21dyFtXNTJtwkqgKjMI7jFYvvZ60hwUClNsIL0hf76/rWu/rGHdjlnUKNo/WNRaDKgza7EuPIOR/8kUavQd23foN22zhj2NlnF8ZqRBQlXkkB5Ckdu/9G362amoCHZY= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1730305948; c=relaxed/simple; bh=ZEFsMbCi/2P/loVir7hhquXkkBBAUJELMu2jIvW12+c=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=cEay94KOaKOdMbOIESPcIH9QpVhHkuPlCWc+eosKGBEwK1RlKiRhZujdiiIiDfjaxpBkjQRukn3q9wotEWdrlrNVVpUUfuOMqlBvesGIlNPPxsea2mJXD6Nwj6yR7AhQPRAbpDgBr/VADaINqX5a+/U1GoOGZ1UVbThoBfY+Rpg= ARC-Authentication-Results: i=3; server2.sourceware.org ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=yWRdzKvp3/jEE1v12MM3yJhsOEc7jik3Hm1O1hb3cnK989vwcBfVe5FCqaH9UUtBgVQx+AvOSo+P0qyZ5Y6W/vJZ2Zu6Gb8EEQ28UP0oIdQ4tM5RrUdPV7ZcK82706YhzPQtDflX3GKFjHZ0gPDkJbJ2FZRdhwltleUNJ9zZqECjmGNrfLxDWdpQgryR3lLZnEwuhUmZFbDOA6/KHHLqC6qjqWbqFKvQw3abQadk/uS3pI702O8s2YwYLKuA50w5xYqiP+JrFstTw/FcoX7EBaoECERpJHsf+3f7uxNLXJMzyJ0Hw2LMaXqjp74lY6T7uUaUiNpNW/+09QSsZdKGrA== 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=orHzgHvEqS45o1DBmJosigfqQ08Zyz39wPSzZHXI9fU=; b=t1+Thvc2y4m0N93YgAe4t8tLi1DLngBEyTIfAG6L3zjWvKI2FQdfPTVwJWWCv6b12WDQrwQ7z3yz5Y4ayl/nhJovmhh7YlsugPdpPjMVtvGyzUqvHVgbOADs8VYBdWPfJxf+4yD8+QxUrKcKtuYr7fXnhBT+C1ghhoFeAdWkWwMPDJHVAjL2fJHVJUG3X071sm7KpC0zy35VX/FniDzS0fAL8psup/MHtoQ063C9cBY35rR2mYllfIshwTmDk5sn6Ge+QwALCnDfeDsWG9I968aaRdwDXTuK5NKfkzdUCuQTRIhTq6dHVjeHfc4bFjW7ngLn+0KMGZlAbbpc5N2feA== 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=orHzgHvEqS45o1DBmJosigfqQ08Zyz39wPSzZHXI9fU=; b=QTfmlM5RlVRyag+72ydWVYAn09o7miRowp4ZigaKM4sxYOL9deODR2OoYJK0a+Ga8wkaB9f2fCNKBVF5cNYcFKQBqqUJieQhxxV2bTdMJBsWzyZcoOtMbAlYmUE7dSy1ABnKBgFUAgktBNWjV3ygCbInhi5Q9C9Aju8IEynySAg= Received: from DU7P194CA0011.EURP194.PROD.OUTLOOK.COM (2603:10a6:10:553::17) by DB9PR08MB6394.eurprd08.prod.outlook.com (2603:10a6:10:25b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.20; Wed, 30 Oct 2024 16:32:11 +0000 Received: from DB5PEPF00014B97.eurprd02.prod.outlook.com (2603:10a6:10:553:cafe::e1) by DU7P194CA0011.outlook.office365.com (2603:10a6:10:553::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.20 via Frontend Transport; Wed, 30 Oct 2024 16:32:11 +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 DB5PEPF00014B97.mail.protection.outlook.com (10.167.8.235) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8114.16 via Frontend Transport; Wed, 30 Oct 2024 16:32:11 +0000 Received: ("Tessian outbound 4f9bb016c0c5:v490"); Wed, 30 Oct 2024 16:32:11 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 70a19156333c5a73 X-TessianGatewayMetadata: 2apU73bPhh7VYfFT44JF2pCAIvsLSzljHDb5NU3BuLUqZHet8ko3lTDSdEZqBBlZXI1CrwS+JF2IWTqAIW5B2dF67ocVpNx4M/LAlMy81vqiEnF8swa0nLsasqHxYN9Q0mDKl05f71P/dznIhnpy265a/mggrPo7I+xSt5ZrR44= X-CR-MTA-TID: 64aa7808 Received: from L3adac2044129.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 932AD138-416F-4BA5-AE3E-1560CDEE7874.1; Wed, 30 Oct 2024 16:32:05 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id L3adac2044129.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 30 Oct 2024 16:32:05 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZOKk5ghFqRjhN2qdZhRnc/fL/Pzi9gSCc4pynezWgNo5bi4X9pZB+tqtOJvhcE3A6YaHdKIVoNpmAfWC5Fz7JvZ+AjJaeMqiq9ddCYmUdJIrGHPaG1METLed4KkuGwnZ2M7W9D/tQJIMVaQb3Pw3Rq7i0W4hME1s+pNx+6j+fFGBgTqfJh6CgdpU2+haI1M+3Jf/VheBCwNGESXVmGxbo0UH5gYKd/FJwdL++OEGav3pqJf0Rfe5ZmIeW8kbg24E4qIsDgg9jWTg8TISuWPhEWIYMVnlCLiFSLKqFaLE0xMezzQ5yLGCg6/kKmTUH+OGpk6Q6P8Pp2ptN/ezmeq8Lw== 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=orHzgHvEqS45o1DBmJosigfqQ08Zyz39wPSzZHXI9fU=; b=R7nH0VlLG2PNK3R1qxbUNtLh5o7qKQBGdwhQSbUMfX16d3GbKi0BP5HnMXYhLWdccG+eBbkvuniD4GwsH3JZNzVqMQ40ANnaRVKaxhrkIzXorY0YNxtAOUh4JSt8xszw7VmUPNMqb92rZaxTONuf/yjbFgiQg0pQKsBadaPV3qCTl2wyl91CzXpf+0u86XAK08aCUxTyCI+wMTYZvbfLkEx4/W1977nHYRC50aRtIzus7dkMogxCUt8BO//zdbYloajh4YjgkqS9l9hlGYBg7JzJcBn9npuGjJYNRTV0f/y0NOXPQmk5E1hvWfJtPs0Lg7RhNumbgS3XWAF54p/VUA== 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=orHzgHvEqS45o1DBmJosigfqQ08Zyz39wPSzZHXI9fU=; b=QTfmlM5RlVRyag+72ydWVYAn09o7miRowp4ZigaKM4sxYOL9deODR2OoYJK0a+Ga8wkaB9f2fCNKBVF5cNYcFKQBqqUJieQhxxV2bTdMJBsWzyZcoOtMbAlYmUE7dSy1ABnKBgFUAgktBNWjV3ygCbInhi5Q9C9Aju8IEynySAg= Received: from DB3PR08CA0014.eurprd08.prod.outlook.com (2603:10a6:8::27) by AM9PR08MB5921.eurprd08.prod.outlook.com (2603:10a6:20b:2d4::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.20; Wed, 30 Oct 2024 16:32:01 +0000 Received: from DB5PEPF00014B92.eurprd02.prod.outlook.com (2603:10a6:8:0:cafe::10) by DB3PR08CA0014.outlook.office365.com (2603:10a6:8::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8114.20 via Frontend Transport; Wed, 30 Oct 2024 16:32:01 +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 DB5PEPF00014B92.mail.protection.outlook.com (10.167.8.230) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8114.16 via Frontend Transport; Wed, 30 Oct 2024 16:32:01 +0000 Received: from AZ-NEU-EX06.Arm.com (10.240.25.134) 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.39; Wed, 30 Oct 2024 16:32:00 +0000 Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX06.Arm.com (10.240.25.134) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 30 Oct 2024 16:31:59 +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; Wed, 30 Oct 2024 16:31:59 +0000 From: Claudio Bantaloukas To: CC: Claudio Bantaloukas Subject: [PATCH v1 2/2] aarch64: specify fpm mode in function instances and groups Date: Wed, 30 Oct 2024 16:31:56 +0000 Message-ID: <20241030163156.775854-3-claudio.bantaloukas@arm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241030163156.775854-1-claudio.bantaloukas@arm.com> References: <20241030163156.775854-1-claudio.bantaloukas@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: DB5PEPF00014B92:EE_|AM9PR08MB5921:EE_|DB5PEPF00014B97:EE_|DB9PR08MB6394:EE_ X-MS-Office365-Filtering-Correlation-Id: 12142a9e-e8d7-4354-04ac-08dcf90067bc x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; ARA:13230040|82310400026|376014|36860700013|1800799024; X-Microsoft-Antispam-Message-Info-Original: azmLyIBSJc/xQ6HbDjJpaAgvfFlRbrUdbeSYxlbJppGRlt933vakwgDAvKJlXRW3BGSdZiSa8ik+WB5lpucTz4+5+vCKsfDJXIKaHeRFpLe1A7lUi0Sq3d6jwSO+HQi8n4u6B8dlUgG1nJUSrqci0QUbW4tJS5XP/CXDq9l53aKKHn0F0p8GOoOSPiJ/ytP2j/Lmo+/iVIjoqgQ8hiIPKZN+Kg8wk07gGmi9hqvVfDZQ3u4rwzvf5Y+1f9RhfAoN3IMBgNMjExWiD66wp3r0svRXhvcIc5Ke7fX+yqEHZGplEw9w/oFi+zJm5fNGgxHuUrfPzQ+2TE7xSWigYJ2YZNrAvxwaRbJGORg9C1GHDzAIT+cDdLObkwG2AhXaTI2FZ44gKo8Cs/nfEUFqj8fS2D4F9HQsQtcSOLymOYTg0WJiN7GqH7eTXfO6WWf8IrGGZ1zfQo/efL5XH2nb03bJFjco+nlOggusEimDa6yYyxFcsYTAZeaeQKWrns4nTwLKEExlnilcvzUvhbRwR7gaLnA5gWn3VezEDrqK/Vb0u6aJ8aR7zaA08wkCJag8xNRHQlHR4Z/ggQNHA1jVeV3ZaKqqUHNgBcibyWc4M4TSFw4LNVUjekVHvufJx10JU6nE5AJJ4+Cm4m6QlXjaTe0sAwfBXPoxhZnkJ/5OS/QcBeo6mij/8+52icN78+Fa3XY5Gd/3Hq/Y/KV1Zu1qtvkAhUO4I7ygQbi/qqQxe9xVpTyY2iuE0Msr1Dk2b5b0BqAmdaQd7tRY8iaTQvRgmgGIB3IHrQoz6KyH8vEtdm+Fex0mefL+kK3cmYJDFrayy72rwHH8vdCzwEYOLQRIKVKk8H+/f9FAD4OAP91Nr8ZPAOkhJyL5WYZOQ3TlD0OB0h4Orn+g+ueG0AtLkNtPOOQUHoWgsa/MuLjrQzA1NSALOo1AkBiNu4MBCRB6ViLI8ERf7ZK1yu8O2U1BjEmVlmLt1yZQWnpV3hLjJALJQknrMWEZ/RpiR9H2RJu1tIIc7t0RXtWjaaRZZPIinpkH/HVAQspwWRL4hX7A+Whz6MHwMI280nDO2m/c65blsKI7dY3Stn6Ybf2Jo56h13Ug4YtNUtn81sRhiqkwJS+45bHkYYYganGFTUGFLA1PLBiE4KOqIcLLgEwyF+vQEINuJd2ipnAiZ8T+B2wz6Gd6+ufyRVF0qs8fePM84yKiE63Sp87RK/k6yCgxKqAb5l/xtPwBpM9+X2CO5YFuL+mkXC6wfjbONvzixiBFmfVybbecf2E19hr92Nt/PuoPZXCUHj+RvwxAlJve2LCLlF9u3bcZbyB0TR3JObJd+f3NNe8z8Wmf3LhIrk4DGrts/cXaEwO+b9bIYTZrS7bN3n2Kbe6pROAlt4wpeyn/CaOHqqpQyHeTIee/8oDxNo48Fuz4k4wPuw== 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)(82310400026)(376014)(36860700013)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR08MB5921 X-MS-Exchange-SkipListedInternetSender: ip=[2603:10a6:8::27]; domain=DB3PR08CA0014.eurprd08.prod.outlook.com X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5PEPF00014B97.eurprd02.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 35babbc5-8ecb-4c97-a191-08dcf90061ee X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|376014|35042699022|36860700013|1800799024; X-Microsoft-Antispam-Message-Info: =?utf-8?q?lHPJu/PSOIU+8KsXeKvoHD/rmerAvQs?= =?utf-8?q?zS8srfUxsO9n5jsUHCUkKhlqaeVdac98vzUgngIoBMREnML6x2nFaxa9QY4yt6kNs?= =?utf-8?q?nbiB1JCQEghVCXrbweX4Z3r0VUizuQ9Iukbtd9Axeq863Y+nCFMMfMNEmSdJUXmgp?= =?utf-8?q?Or6ZRhOb/6DJdi0dQqt83agtaeAalaw2UBUZBXSlV+5ygMGNwbQKKEPuUIeYLaeCj?= =?utf-8?q?wHp8KZr8pWOW7dCmIaGTK2nwgW/KdLgNTCeEi4+PJPJ6QAegTN/2CnagPJFOQB5lb?= =?utf-8?q?ZC+ku1Uk4o0AuEg1Digq8uwWdaSGHJXkJAKQ383i11tRroe+/EbpsXcUHKmKI9Mp2?= =?utf-8?q?hAhn00CdtKc7mU7Ok20lPf8zPdS3xFxxPNr59rFXA4xRXpCot71cYOoZ1OY8qZUES?= =?utf-8?q?noqkL7XaOj9qcZ/t1mdPHQfJlaD/4dOqyE1yPWFWtXxdZQIrBs/7r+y8Hkqog0EeM?= =?utf-8?q?oCDq7GFoHLVxzwBx8J8Q3KTlf0QI1LcJguY1DRae8cXmYTC8CyRhg7LM2rLFQw2Co?= =?utf-8?q?QeDgJ57d7DyrtknEpa9KS+p9qI/EoI+hLe6ZwMCUAGVdsHYoOqzXnAjgRB1srA9TO?= =?utf-8?q?EpKBIqo9xQL8NV4yL9qnoOO69NKHi3vzmpcTLAPxDn9rPA66/3+9WwI9WR4oJ+FAN?= =?utf-8?q?7anGZej0uIrMTOSrObn2cwEjhn8IYsIrse8dv/Tqor0NVuHoBbPqHzn3RlkJFnPrq?= =?utf-8?q?if0iQhnwVCdF3Li85bWmy5cVg9u1+9WQ3cvhEhDkowv4+qmEV7LtRjbCxT/ESShbW?= =?utf-8?q?qANHPeLw0TFZkLjZ5mcLx11NZ6Xc/pTectfiRdUYwZEA2v1TYvol1Jr5I7jYPHaTe?= =?utf-8?q?zzG6P/acrvGKc2Z1+ImmipAqIaPDtPfzDkpgrH8U8PJl6GGMst4ydMI1AjgjtduIS?= =?utf-8?q?T0ThNa7Ty8lw+J5Il6bGJDaEKQtYEX63XF9H9K3wY6Kt+HLykFuqYgsi+SL4sjCkC?= =?utf-8?q?/fw3lPsBpfxGsZwd81GmjA4yhigmiwAwWLQJgjGyQV/Y8iBghQgVMkplEd5NWNk4b?= =?utf-8?q?QTu2aI5NugcotvX29vK+uDaU88jVf7han1ESigRnp3jIexXB0LdmbiIGDTjUEJH+x?= =?utf-8?q?WVwcuLYgZ/AxlGcCBsBtk4W0WTdLBer5w5nopOoRw+/uBI4RY3QSwosCwn1HVCUyU?= =?utf-8?q?sUxtlNsVk0EaLmcXQG3B082ceFoOcIn5isQvZ8nn3xH2pt2+Z/GDzUYfAl+Y3vXQ8?= =?utf-8?q?QUUEtWmaXP3xoOpG3VQax88N8jUzQmmSGwBEMsBA0WlrUIWTgXEQD96EabTYqOzE+?= =?utf-8?q?h1RPoqU5Hx1lis+lO0oZw6ucwHyp0dkl7nMjrScv6uiJxwuT0gTRPApmmAivgzkId?= =?utf-8?q?dXopV+3qAUjU7x6zcY+cGa21rWgK9Kl/sg=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)(82310400026)(376014)(35042699022)(36860700013)(1800799024); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Oct 2024 16:32:11.5302 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 12142a9e-e8d7-4354-04ac-08dcf90067bc 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: DB5PEPF00014B97.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB6394 X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FORGED_SPF_HELO, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_NONE, TXREP, 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 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 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 | 2 +- .../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 | 21 +-- gcc/config/aarch64/aarch64-sve-builtins.def | 4 +- gcc/config/aarch64/aarch64-sve-builtins.h | 25 +++- 9 files changed, 185 insertions(+), 131 deletions(-) diff --git a/gcc/config/aarch64/aarch64-sve-builtins-base.cc b/gcc/config/aarch64/aarch64-sve-builtins-base.cc index fe16d93adcd..47d9a01c3dc 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 95e04e4393d..c353e6ed81a 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-base.def +++ b/gcc/config/aarch64/aarch64-sve-builtins-base.def @@ -200,7 +200,7 @@ 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 416df0b3637..7bdf9e3bf82 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 0 @@ -101,117 +101,127 @@ 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 AARCH64_FL_SME | AARCH64_FL_SME2 | AARCH64_FL_SM_ON -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 (AARCH64_FL_SME \ | AARCH64_FL_SME2 \ | AARCH64_FL_SME_I16I64 \ | AARCH64_FL_SM_ON) -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 (AARCH64_FL_SME \ | AARCH64_FL_SME2 \ | AARCH64_FL_SME_F64F64 \ | AARCH64_FL_SM_ON) -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 d29c2209fdf..41445bc23a0 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. */ @@ -322,7 +323,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 @@ -332,7 +334,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); } } @@ -361,7 +363,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"; @@ -396,7 +399,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; @@ -409,7 +413,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; @@ -445,7 +450,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 318dfff06f0..cdccf9fb680 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-sve2.def +++ b/gcc/config/aarch64/aarch64-sve-builtins-sve2.def @@ -244,59 +244,71 @@ DEF_SVE_FUNCTION (svrevd, unary, all_data, mxz) | AARCH64_FL_SME \ | AARCH64_FL_SME2 \ | AARCH64_FL_SM_ON) -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 diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc b/gcc/config/aarch64/aarch64-sve-builtins.cc index c6dc28eff55..5d86480787f 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins.cc @@ -887,9 +887,9 @@ 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, REQUIRED_EXTENSIONS }, + preds_##PREDS, REQUIRED_EXTENSIONS, FPM_##FPM_MODE }, #include "aarch64-sve-builtins.def" }; @@ -897,18 +897,19 @@ 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, 0 }, + groups_##GROUPS, preds_##PREDS, 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, REQUIRED_EXTENSIONS }, -#define DEF_SME_ZA_FUNCTION_GS(NAME, SHAPE, TYPES, GROUPS, PREDS) \ + preds_##PREDS, 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, (REQUIRED_EXTENSIONS | AARCH64_FL_ZA_ON) }, + groups_##GROUPS, preds_##PREDS, (REQUIRED_EXTENSIONS | AARCH64_FL_ZA_ON), \ + FPM_##FPM_MODE2 }, #include "aarch64-sve-builtins-sme.def" }; @@ -1175,6 +1176,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 (); } @@ -1595,7 +1597,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); }; @@ -1773,7 +1776,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 93de4254657..d4bc1bb9309 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. */ @@ -367,6 +378,9 @@ struct function_group_info /* The architecture extensions that the functions require, as a set of AARCH64_FL_* flags. */ aarch64_feature_flags 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 @@ -377,7 +391,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; @@ -421,6 +435,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; @@ -879,10 +894,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)); } @@ -896,7 +912,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