From patchwork Mon Oct 14 14:19:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wilco Dijkstra X-Patchwork-Id: 1997004 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=q8Ov/0oy; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=q8Ov/0oy; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; 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 [IPv6:2620:52:3:1:0:246e:9693:128c]) (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 4XRzsB1D73z1xvK for ; Tue, 15 Oct 2024 01:20:14 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4D4D5385AE53 for ; Mon, 14 Oct 2024 14:20:12 +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-vi1eur05on20629.outbound.protection.outlook.com [IPv6:2a01:111:f403:2613::629]) by sourceware.org (Postfix) with ESMTPS id 5575A3857003 for ; Mon, 14 Oct 2024 14:19:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5575A3857003 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 5575A3857003 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:2613::629 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1728915589; cv=pass; b=UGRaVM+LWym+1FTY4zTNiRy+Lri8uu2c7I1VdR+ZlIhmYo4/xesndEmJxstQBmz+UQXisGgJ9vZskKqH19v6CRTQzOfB5SskGElZAsLSkJSrdTavMi4ZcnGCEBSSSMPZ39hCs6Y3JupUutVml1hRySrsy+yAA96yMwGqUrhNUzY= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1728915589; c=relaxed/simple; bh=hO1fVNfytIBFnzAdDnXw/HYKucPhEs0BPPhuhLHHHdA=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=RMTGUO8wTHKtgZePA/BTAopjLVKZl7eSBcqKlhTn6lPd/lp4s06mZ0A17nX6sLOAcPS37NDt26ffDfT5GSTduV0b96Tjt27JOfxVvaTPLOKjzNUwU97e2KR96adGKbUzK8WPQWGmFERgHdG/wcXYzgMlaNopxDQpWXU51ylYSrk= ARC-Authentication-Results: i=3; server2.sourceware.org ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=MtzlX3jcj84BdxCJHbEsiuGX5y1lwxZ67UNlTg7VB31bAaec4c7jbD/9bylgBRlLhCL/DTx93FDxdDY/CcMsCzrrb8LGsWolMEYyqOjlKHe7wDG4JD7G2F3xke3uM0xgNofTTYyXTXpjancF5uZdKDbvPJk84eTn5v6+48pYT0q/0Ef2bpVSAN6xNhoF/TFomIv/Bj2V25DRrl7vND6NP8rhgn31E01LDf7EC7YSjha7KWN1sBna/h+nnjzn6TIDx3s++xDxuOeTyP95Yf4A73LwBhGcqZ/aQaB1YerkzfSbrecJ8gw8P5q3bWYnd0/Q9PKkrBvwiwY1iLzMt9QQEQ== 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=GXgZk4u6XNtzTghjeYlTB0BIeVBcL7ghivG8NPMpefE=; b=aozVrNta+oaXk9KAJFLjTCz+YXRGe5JHsEDp1uNLz2HEHvZKx/k0tOtuf+IPmJDCPNalwIP8J+RPrXLBzKCvutiFBtmAfGSddlhz1AvJtgE8YvTJ8n5G2WOCC1kLLcHhamI7V/P6i1zi0uNEeGX0+U4wnmf1aXmk1Vo6ggDXJ5jLWcheC84ZZ3v1y/5yXvf9vBL1xsJgWUY4QXAWN2yVPOBLPPjUL+sQppacnRwolgTALIZjvr3LEnJZUnryp/E49yI//OlHiXrBPUpSFaUGVoNTi86GFczgFWmhafOyv7eZZtaBUrOhyUE36PRVA9adn9Lop2Dr5DjpF7S2FVzojQ== 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] dkim=[1,1,header.d=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=GXgZk4u6XNtzTghjeYlTB0BIeVBcL7ghivG8NPMpefE=; b=q8Ov/0oy15MAC3ne5vo5y1OTjmzt6jvpNXv3XCbJ773G0epaHOKkyM1icvZ1UfmT6nioIF8biTrY50DGkfP/D1H1LojEXXxi0ANwyXx2cB3DQPJD34F4AXbUJfHZnrXHLae1V+GUFCsgx3cWiUYHkg8w5YsFN5/3ug84d4Dk1pw= Received: from AS4P189CA0016.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:5db::8) by DB4PR08MB9861.eurprd08.prod.outlook.com (2603:10a6:10:3f2::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8048.21; Mon, 14 Oct 2024 14:19:31 +0000 Received: from AMS0EPF000001B4.eurprd05.prod.outlook.com (2603:10a6:20b:5db:cafe::1d) by AS4P189CA0016.outlook.office365.com (2603:10a6:20b:5db::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8048.27 via Frontend Transport; Mon, 14 Oct 2024 14:19:31 +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 AMS0EPF000001B4.mail.protection.outlook.com (10.167.16.168) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.7918.13 via Frontend Transport; Mon, 14 Oct 2024 14:19:30 +0000 Received: ("Tessian outbound da7ba6582322:v473"); Mon, 14 Oct 2024 14:19:30 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: a89cc64006aa2744 X-TessianGatewayMetadata: DceS5Qcm4Q0+E6NC4iHDAln94PM4yRMWF1zawmuSJugkTuBFc7ondoYLuoAqo3HjZ4j1BMRsIw9HpF7p6NOP9xuBGnMiSGLFXAlc5oeywxHUQzLd8Wh4BxLEw0uTq79RpEjmfWnof64EjZLTjSsQDinFFtaNH6gK1qFUY1d9OdqW5RAmV4DXj8+BeM7LHZUU3Vk2jEe1oa2KgmxzQ7qR9Q== X-CR-MTA-TID: 64aa7808 Received: from L9fd693e1badc.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 83486161-1AD1-405E-9B1D-C620D308DD26.1; Mon, 14 Oct 2024 14:19:23 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id L9fd693e1badc.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Mon, 14 Oct 2024 14:19:23 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Gnf7/qJJ02HcFxh8YzpIOlnF5S9X4hsG/Ph17phzsJ1cMJSOwEeacSzn8k7mHwqpmrmO/813KAfYfaPdROZG3/fc3Ad03wA0I2ZbUfKpfRf6VU0KsRJsMDxIDI5b4XzIGj2eXdLdH6+3ACARkws565pHHk0/fysWes5D4q3E8veZ7BbxHwpRGh7EidmzoqvE3eQa185dxMhrVixlJvYSaWuC/V/vCh43yy6Ul793870xs9ZNePp+DiHpbglLxcDe5p1ODeeEH0S97H2mipM3NDT3+Lz0mgtfKXizY8SmdeqnwWccQtXoau6aajARGxwB+YvqA9m1lAT9y2eahaxswg== 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=GXgZk4u6XNtzTghjeYlTB0BIeVBcL7ghivG8NPMpefE=; b=MQ2SHXDBj7Pa943bbMb03aEb5hcauycjvdolN63zGJA8AbfNNuwmUrIKH18UNoWr6JNhel+aADV9B1ZwCRvLAouOgQ26vJmKkmSxEEvDjn2FeJe/A2ZXEGOt5Sqmk9HdoIAbNOpdhlUa8orD6Q9woiaJNT/bsrxHHgwYzMPu1wk90mgc56Y9nV5ZQbJ6k4gUqdLecES/0lB1ttffXvrc4ivTzZc03it0FgQhYEQs0WBeBOH+X5GQRzGUMvFAcaAWRhEYBd4Q4hefITHsn2roR1Wphfurwl+QUD9p80chKqzPPg28hlwIiNzv4W/0tf4hBNRmGzBWOwaGmxAUOKD83A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none 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=GXgZk4u6XNtzTghjeYlTB0BIeVBcL7ghivG8NPMpefE=; b=q8Ov/0oy15MAC3ne5vo5y1OTjmzt6jvpNXv3XCbJ773G0epaHOKkyM1icvZ1UfmT6nioIF8biTrY50DGkfP/D1H1LojEXXxi0ANwyXx2cB3DQPJD34F4AXbUJfHZnrXHLae1V+GUFCsgx3cWiUYHkg8w5YsFN5/3ug84d4Dk1pw= Received: from PAWPR08MB8982.eurprd08.prod.outlook.com (2603:10a6:102:33f::20) by DU0PR08MB8472.eurprd08.prod.outlook.com (2603:10a6:10:404::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8048.18; Mon, 14 Oct 2024 14:19:21 +0000 Received: from PAWPR08MB8982.eurprd08.prod.outlook.com ([fe80::b366:6358:236e:352d]) by PAWPR08MB8982.eurprd08.prod.outlook.com ([fe80::b366:6358:236e:352d%4]) with mapi id 15.20.8048.017; Mon, 14 Oct 2024 14:19:21 +0000 From: Wilco Dijkstra To: Richard Sandiford CC: GCC Patches , Richard Earnshaw , "ktkachov@nvidia.com" Subject: [PATCH 1/2] AArch64: Improve SIMD immediate generation Thread-Topic: [PATCH 1/2] AArch64: Improve SIMD immediate generation Thread-Index: AQHbHkHm0dzup96UzU2enKQJjrKK9Q== Date: Mon, 14 Oct 2024 14:19:20 +0000 Message-ID: Accept-Language: en-GB, en-US Content-Language: en-GB X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: PAWPR08MB8982:EE_|DU0PR08MB8472:EE_|AMS0EPF000001B4:EE_|DB4PR08MB9861:EE_ X-MS-Office365-Filtering-Correlation-Id: 5eecf433-f7ea-4cc7-a049-08dcec5b3828 x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; ARA:13230040|376014|1800799024|366016|38070700018; X-Microsoft-Antispam-Message-Info-Original: =?iso-8859-1?q?rpqe2mjhZ+yN8WST3?= =?iso-8859-1?q?MZphWw3mYq0KR04byO+hLB72V1LQ37wItMmgJ4LfiSzmrSFuOQFtOqG4Z8Rt?= =?iso-8859-1?q?J8Sv4hFJ+K3uo7StUqXvJ5B9NOiQecdCvapWO/QoihrwFeCfdNWWr+yNd6F2?= =?iso-8859-1?q?mNHlynZP8QAjafcplPxP3XtNi2ZmGIji5Mat1PVooq9kMh8Lw7VJxFheJgTG?= =?iso-8859-1?q?4RZgq08iWL3yijqN7UC6siDcm+4FHinZuUP0RCvwtQ+zLOP5Bb7uQhRkTavr?= =?iso-8859-1?q?nfJbHqotGYtOFJFyPzFIq0ZtPUTQCSOa0kLp1qh+p97vXjinuk+4BhgbFQWl?= =?iso-8859-1?q?fpEWDQmR8TExyfRlqsz7lN8tV3+f0pp4ZMRJsKTYOfj9N/Ad+mLxMA5C+btN?= =?iso-8859-1?q?de9PHm/gfJBLvnCdLGoyyzakpS4ZVy3afBvQGwDb1ZOr2RAzzFBpZQaZAuX1?= =?iso-8859-1?q?eMa3Xfq2LWQHAgc4wOtgDN09kMWO8XTETtJr4y3XBzRf7jECdPBQX8HF/ro2?= =?iso-8859-1?q?TVxsLrt0EM8P/q5S+mhlKVZARXQn6QLuunBtM3CWCIAksrRDPVZcji6//ipk?= =?iso-8859-1?q?0ejbBvdMUZjRSoN9ogUg2SONfScZI8WtEwF1Nrq/bCRSR0F9CK0cmHF3BYQo?= =?iso-8859-1?q?qjjr0yiiJjwmNixo5XxFcCiSZ6leeBGyoVLkqm8thjZ7CyBANbwVMA5vJFtp?= =?iso-8859-1?q?opZ1hnyGqKINRliouJQkOCNAgyqLXEkNqo/LkpRc0rCNegrUmZtvm4wxgU4Q?= =?iso-8859-1?q?r2IGXKjYp1C3Lig2/Wp/SRLnkqW9wUIFBTK+N8YeSz7M8ZdZRwebWd6V3oiF?= =?iso-8859-1?q?xDYmzRzr5/+JkjZDa/by8g+Y/YTpP5h2RVk7gbySoIF6UKRi+feCKMtR0f1K?= =?iso-8859-1?q?LgfDqQBCHyMSmI8LyZZZN79oqu26Wliftdwn3Ea65Lk5j4xU6yCP0VSuyKyr?= =?iso-8859-1?q?8zC11SVhjcaTwbBmvXER/57k9u4eroZcguXHZI2fCzjv4piGIFPKh2UfI+rz?= =?iso-8859-1?q?EBOJ9cnDTdG4p+tvT8vwbcCfajXfe/dCqiUk7ykU9kWAHFc3b/TIkdpDEBc4?= =?iso-8859-1?q?qhrQv/aqcJUuqNyTiEtioUQnk+vDnlCulI/akpCoIJRYinN5W+OZzpMZmrET?= =?iso-8859-1?q?WUDCxR2x1Lko0lNOUCZLIv9OZT1of6KzBGCYSuuD5Zcve5OpijXoEpza0UaB?= =?iso-8859-1?q?brzGV7vhTjGHFwDHPG9bExIP6mz1kftluOdqOLovoCqtIOL+ng7ULTHJMp/s?= =?iso-8859-1?q?+c1FtYaPYUSy/ujNLvRlPM1fqO2zlbmwGZo5FggLE//A5WtHxFh5mbdb2R+A?= =?iso-8859-1?q?3Nutckwp7fcmdWujz1GY7LZq61Wn76ZM49nVKIRyM0hXHvGZdwydETM+mFxd?= =?iso-8859-1?q?pllYcFoITwfIbUkmsu2A/BjExxwEA=3D=3D?= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAWPR08MB8982.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016)(38070700018); DIR:OUT; SFP:1101; MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB8472 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-SkipListedInternetSender: ip=[2603:10a6:102:33f::20]; domain=PAWPR08MB8982.eurprd08.prod.outlook.com X-MS-Exchange-Transport-CrossTenantHeadersStripped: AMS0EPF000001B4.eurprd05.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 6c1bf855-6c19-4f96-45f8-08dcec5b3250 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|35042699022|376014|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: =?iso-8859-1?q?zQTbkWHKNT1orUDNlW0v9GivcL?= =?iso-8859-1?q?cx0PbXdqsmBg50eDAJgEvuvntgPPkTWIjwGWFPzzHVBtgZqFzqOGmHM2PMcv?= =?iso-8859-1?q?yp1wOtuvtBT06DBRAlqDD79nMpFu8jpKvSOXOENriKFoZQ96NTntt/HXgI39?= =?iso-8859-1?q?RxZA3QDx9w8EvWQCDgxPEOMYVmiEln4bgR6Q1bXtlSQzzkV4HgAnSJGoGOd1?= =?iso-8859-1?q?kQTZkwaBvQLg8L5WPYTEmKyvXmXXyup1k1X35EmQEUeJ7jk8CF8ven7tuqYx?= =?iso-8859-1?q?bLM0VLwFdp6RjWFflJxb6Xo9AmhGi8DobIpIOk1fAOZ2GJvnJa12leNwZT9l?= =?iso-8859-1?q?R1HjjBCCaTkQoRzC7MhjlR6ntKrYv/+ZOZI3M58SWj5QC8R1QSxDW1Aomgpd?= =?iso-8859-1?q?ozbABGIjAiV965b5esIA7saNaTU4lUEevIivm9UWqw7A5Otl3IdOaQiHsPW0?= =?iso-8859-1?q?m/iabIxBAe4fp8u9H04bMp4BrZhWyE08CVunJxMm++1/4gQdFHTWZmBzuNCG?= =?iso-8859-1?q?CWIDoGYL9c8N+ErWSAwwJyUFAdNdtaV23wEw+GT0BMQBX374+EvsZ0sG5E1b?= =?iso-8859-1?q?kIHJSuYDFWvBsMCd2WKFnZKEYfiYJHTCzDKv8q/p8bT7lglSAhvuwSSbF8M9?= =?iso-8859-1?q?GytmA36+/bd4/JEJkgTiDTWOrY9UH9kJxVHwmiIfcIfE1Sq0sC6kbA8dUKmV?= =?iso-8859-1?q?4zMT9X4BwCP3A5srrslENDnww7XNbgzPdkqY58uwaZPZjByDcrw7EKMMxWQO?= =?iso-8859-1?q?GU8KW/Pz8oihot8yCEUw/7MsdgW6ik0Cf8u1gKcRgPv5ZqMnp6wRDCR6lxc8?= =?iso-8859-1?q?SfoqzqgyIxXA9IxhNB1K/sKyjsKR1PB6Xwck4YORN5VxmyiHSY6zv358ifnt?= =?iso-8859-1?q?Tu1sBTrRm8oObT+zW36U469trggb23oIhvw13nfB6nF/xwq5CCWSu+2GPBYr?= =?iso-8859-1?q?nEqv9UI7NtcU63gvzdtMPq9B6ZNAQZ8GsGKmXhZ/4ErHpLKLCSwktatwhF9u?= =?iso-8859-1?q?/F315SinaEw6YFDKZ6++OONOJzk4QXdAuZfXjb6Od80S7lYjEyMbnvGuCypo?= =?iso-8859-1?q?n9tugTUphs4PMs6/gKbkgEMSY2mH2IFz3YPPn4qtb1e+RC22dpkUT/x7/+TP?= =?iso-8859-1?q?e4NAQOS/z2oNM1B3Fa4QG1PZ1roqxdaNqOQbBWRbX0vwh6wOn3pu59ZmmrAE?= =?iso-8859-1?q?oqaKvm362VsqnrQkidPES7Nz5Nwyi5xJManhFnFd7htUNjlQOBAcxeJV9gaa?= =?iso-8859-1?q?BstUvNidht4it7UNxGfMzU7CTzAST2UUVwdNJHUI7HV/dPYy5+Z5/3P6mRP0?= =?iso-8859-1?q?K7mMbaS2WqbkJUJYEDLCjxCDSIxvkt7lmeFioDkJOsTion4iCKCGOPrrh6tP?= =?iso-8859-1?q?tIAY5a9xoz1nqnBhvaqQHargmuHxn1knBRCs/L8p8XzYgi9C0l16sQ5eD9tn?= =?iso-8859-1?q?Q9?= 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)(1800799024)(35042699022)(376014)(82310400026)(36860700013); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Oct 2024 14:19:30.7508 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5eecf433-f7ea-4cc7-a049-08dcec5b3828 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: AMS0EPF000001B4.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR08MB9861 X-Spam-Status: No, score=-11.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FORGED_SPF_HELO, GIT_PATCH_0, KAM_LOTSOFHASH, 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~incoming=patchwork.ozlabs.org@gcc.gnu.org Cleanup the various interfaces related to SIMD immediate generation. Introduce new functions that make it clear which operation (AND, OR, MOV) we are testing for rather than guessing the final instruction. Reduce the use of overly long names, unused and default parameters for clarity. No changes to internals or generated code. Passes regress & bootstrap, OK for commit? gcc/ChangeLog: * config/aarch64/aarch64-protos.h (enum simd_immediate_check): Move to aarch64.cc. (aarch64_output_simd_mov_immediate): Remove. (aarch64_output_simd_mov_imm): New prototype. (aarch64_output_simd_orr_imm): Likewise. (aarch64_output_simd_and_imm): Likewise. (aarch64_simd_valid_immediate): Remove. (aarch64_simd_valid_and_imm): New prototype. (aarch64_simd_valid_mov_imm): Likewise. (aarch64_simd_valid_orr_imm): Likewise. * config/aarch64/aarch64-simd.md: Use aarch64_output_simd_mov_imm. * config/aarch64/aarch64.cc (enum simd_immediate_check): Moved from aarch64-protos.h. Use AARCH64_CHECK_AND rather than AARCH64_CHECk_BIC. (aarch64_expand_sve_const_vector): Use aarch64_simd_valid_mov_imm. (aarch64_expand_mov_immediate): Likewise. (aarch64_can_const_movi_rtx_p): Likewise. (aarch64_secondary_reload): Likewise. (aarch64_legitimate_constant_p): Likewise. (aarch64_advsimd_valid_immediate): Simplify checks on 'which' param. (aarch64_sve_valid_immediate): Add extra param for move vs logical. (aarch64_simd_valid_immediate): Rename to aarch64_simd_valid_imm. (aarch64_simd_valid_mov_imm): New function. (aarch64_simd_valid_orr_imm): Likewise. (aarch64_simd_valid_and_imm): Likewise. (aarch64_mov_operand_p): Use aarch64_simd_valid_mov_imm. (aarch64_simd_scalar_immediate_valid_for_move): Likewise. (aarch64_simd_make_constant): Likewise. (aarch64_expand_vector_init_fallback): Likewise. (aarch64_output_simd_mov_immediate): Rename to aarch64_output_simd_imm. (aarch64_output_simd_orr_imm): New function. (aarch64_output_simd_and_imm): Likewise. (aarch64_output_simd_mov_imm): Likewise. (aarch64_output_scalar_simd_mov_immediate): Use aarch64_output_simd_mov_imm. (aarch64_output_sve_mov_immediate): Use aarch64_simd_valid_imm. (aarch64_output_sve_ptrues): Likewise. * config/aarch64/constraints.md (Do): Use aarch64_simd_valid_orr_imm. (Db): Use aarch64_simd_valid_and_imm. * config/aarch64/predicates.md (aarch64_reg_or_bic_imm): Use aarch64_simd_valid_orr_imm. (aarch64_reg_or_and_imm): Use aarch64_simd_valid_and_imm. diff --git a/gcc/config/aarch64/aarch64-protos.h b/gcc/config/aarch64/aarch64-protos.h index d03c1fe798b2ccc2258b8581473a6eb7dc4af850..e789ca9358341363b976988f01d7c7c7aa88cfe4 100644 --- a/gcc/config/aarch64/aarch64-protos.h +++ b/gcc/config/aarch64/aarch64-protos.h @@ -665,16 +665,6 @@ enum aarch64_extra_tuning_flags AARCH64_EXTRA_TUNE_ALL = (1u << AARCH64_EXTRA_TUNE_index_END) - 1 }; -/* Enum to distinguish which type of check is to be done in - aarch64_simd_valid_immediate. This is used as a bitmask where - AARCH64_CHECK_MOV has both bits set. Thus AARCH64_CHECK_MOV will - perform all checks. Adding new types would require changes accordingly. */ -enum simd_immediate_check { - AARCH64_CHECK_ORR = 1 << 0, - AARCH64_CHECK_BIC = 1 << 1, - AARCH64_CHECK_MOV = AARCH64_CHECK_ORR | AARCH64_CHECK_BIC -}; - extern struct tune_params aarch64_tune_params; /* The available SVE predicate patterns, known in the ACLE as "svpattern". */ @@ -834,8 +824,10 @@ char *aarch64_output_sve_rdvl (rtx); char *aarch64_output_sve_addvl_addpl (rtx); char *aarch64_output_sve_vector_inc_dec (const char *, rtx); char *aarch64_output_scalar_simd_mov_immediate (rtx, scalar_int_mode); -char *aarch64_output_simd_mov_immediate (rtx, unsigned, - enum simd_immediate_check w = AARCH64_CHECK_MOV); +char *aarch64_output_simd_mov_imm (rtx, unsigned); +char *aarch64_output_simd_orr_imm (rtx, unsigned); +char *aarch64_output_simd_and_imm (rtx, unsigned); + char *aarch64_output_sve_mov_immediate (rtx); char *aarch64_output_sve_ptrues (rtx); bool aarch64_pad_reg_upward (machine_mode, const_tree, bool); @@ -849,8 +841,9 @@ bool aarch64_pars_overlap_p (rtx, rtx); bool aarch64_simd_scalar_immediate_valid_for_move (rtx, scalar_int_mode); bool aarch64_simd_shift_imm_p (rtx, machine_mode, bool); bool aarch64_sve_ptrue_svpattern_p (rtx, struct simd_immediate_info *); -bool aarch64_simd_valid_immediate (rtx, struct simd_immediate_info *, - enum simd_immediate_check w = AARCH64_CHECK_MOV); +bool aarch64_simd_valid_and_imm (rtx); +bool aarch64_simd_valid_mov_imm (rtx); +bool aarch64_simd_valid_orr_imm (rtx); bool aarch64_valid_sysreg_name_p (const char *); const char *aarch64_retrieve_sysreg (const char *, bool, bool); rtx aarch64_check_zero_based_sve_index_immediate (rtx); diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 11d405ed640f7937f985c4bae43ecd634a096604..6eeb5aa4871eceabb8e46e52bd63f0aa634b9f3d 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -160,7 +160,7 @@ (define_insn_and_split "*aarch64_simd_mov" [?r, w ; neon_to_gp , * , *] fmov\t%x0, %d1 [?w, r ; f_mcr , * , *] fmov\t%d0, %1 [?r, r ; mov_reg , * , *] mov\t%0, %1 - [w , Dn; neon_move , simd , *] << aarch64_output_simd_mov_immediate (operands[1], 64); + [w , Dn; neon_move , simd , *] << aarch64_output_simd_mov_imm (operands[1], 64); [w , Dz; f_mcr , * , *] fmov\t%d0, xzr [w , Dx; neon_move , simd , 8] # } @@ -189,7 +189,7 @@ (define_insn_and_split "*aarch64_simd_mov" [?r , w ; multiple , * , 8] # [?w , r ; multiple , * , 8] # [?r , r ; multiple , * , 8] # - [w , Dn; neon_move , simd, 4] << aarch64_output_simd_mov_immediate (operands[1], 128); + [w , Dn; neon_move , simd, 4] << aarch64_output_simd_mov_imm (operands[1], 128); [w , Dz; fmov , * , 4] fmov\t%d0, xzr [w , Dx; neon_move , simd, 8] # } @@ -1122,11 +1122,11 @@ (define_insn "fabd3" (define_insn "and3" [(set (match_operand:VDQ_I 0 "register_operand") (and:VDQ_I (match_operand:VDQ_I 1 "register_operand") - (match_operand:VDQ_I 2 "aarch64_reg_or_bic_imm")))] + (match_operand:VDQ_I 2 "aarch64_reg_or_and_imm")))] "TARGET_SIMD" {@ [ cons: =0 , 1 , 2 ] [ w , w , w ] and\t%0., %1., %2. - [ w , 0 , Db ] << aarch64_output_simd_mov_immediate (operands[2], , AARCH64_CHECK_BIC); + [ w , 0 , Db ] << aarch64_output_simd_and_imm (operands[2], ); } [(set_attr "type" "neon_logic")] ) @@ -1141,8 +1141,7 @@ (define_insn "ior3" [ w , w , w ; simd ] orr\t%0., %1., %2. [ w , 0 , vsl; sve ] orr\t%Z0., %Z0., #%2 [ w , 0 , Do ; simd ] \ - << aarch64_output_simd_mov_immediate (operands[2], , \ - AARCH64_CHECK_ORR); + << aarch64_output_simd_orr_imm (operands[2], ); } [(set_attr "type" "neon_logic")] ) diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index 102680a0efca1ce928e6945033c01cfb68a65152..d38345770ebab15cf872c24b3ec8ab8cc5cce3e7 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -129,6 +129,14 @@ constexpr auto AARCH64_STATE_SHARED = 1U << 0; constexpr auto AARCH64_STATE_IN = 1U << 1; constexpr auto AARCH64_STATE_OUT = 1U << 2; +/* Enum to distinguish which type of check is to be done in + aarch64_simd_valid_imm. */ +enum simd_immediate_check { + AARCH64_CHECK_MOV, + AARCH64_CHECK_ORR, + AARCH64_CHECK_AND +}; + /* Information about a legitimate vector immediate operand. */ struct simd_immediate_info { @@ -5657,7 +5665,7 @@ aarch64_expand_sve_const_vector (rtx target, rtx src) builder.quick_push (CONST_VECTOR_ENCODED_ELT (src, srci)); } rtx vq_src = builder.build (); - if (aarch64_simd_valid_immediate (vq_src, NULL)) + if (aarch64_simd_valid_mov_imm (vq_src)) { vq_src = force_reg (vq_mode, vq_src); return aarch64_expand_sve_dupq (target, mode, vq_src); @@ -6169,8 +6177,7 @@ aarch64_expand_mov_immediate (rtx dest, rtx imm) } } - if (GET_CODE (imm) == HIGH - || aarch64_simd_valid_immediate (imm, NULL)) + if (GET_CODE (imm) == HIGH || aarch64_simd_valid_mov_imm (imm)) { emit_insn (gen_rtx_SET (dest, imm)); return; @@ -11112,7 +11119,7 @@ aarch64_can_const_movi_rtx_p (rtx x, machine_mode mode) vmode = aarch64_simd_container_mode (imode, width); rtx v_op = aarch64_simd_gen_const_vector_dup (vmode, ival); - return aarch64_simd_valid_immediate (v_op, NULL); + return aarch64_simd_valid_mov_imm (v_op); } @@ -12893,7 +12900,7 @@ aarch64_secondary_reload (bool in_p ATTRIBUTE_UNUSED, rtx x, unsigned int vec_flags = aarch64_classify_vector_mode (mode); if (reg_class_subset_p (rclass, FP_REGS) && !((REG_P (x) && HARD_REGISTER_P (x)) - || aarch64_simd_valid_immediate (x, NULL)) + || aarch64_simd_valid_mov_imm (x)) && mode != VNx16QImode && (vec_flags & VEC_SVE_DATA) && ((vec_flags & VEC_PARTIAL) || BYTES_BIG_ENDIAN)) @@ -15479,7 +15486,7 @@ cost_plus: case CONST_VECTOR: { /* Load using MOVI/MVNI. */ - if (aarch64_simd_valid_immediate (x, NULL)) + if (aarch64_simd_valid_mov_imm (x)) *cost = extra_cost->vect.movi; else /* Load using constant pool. */ *cost = extra_cost->ldst.load; @@ -21155,7 +21162,7 @@ aarch64_legitimate_constant_p (machine_mode mode, rtx x) ??? It would be possible (but complex) to handle rematerialization of other constants via secondary reloads. */ if (!GET_MODE_SIZE (mode).is_constant ()) - return aarch64_simd_valid_immediate (x, NULL); + return aarch64_simd_valid_mov_imm (x); /* Otherwise, accept any CONST_VECTOR that, if all else fails, can at least be forced to memory and loaded from there. */ @@ -22909,12 +22916,12 @@ aarch64_advsimd_valid_immediate (unsigned HOST_WIDE_INT val64, if (val32 == (val64 >> 32)) { - if ((which & AARCH64_CHECK_ORR) != 0 + if ((which == AARCH64_CHECK_MOV || which == AARCH64_CHECK_ORR) && aarch64_advsimd_valid_immediate_hs (val32, info, which, simd_immediate_info::MOV)) return true; - if ((which & AARCH64_CHECK_BIC) != 0 + if ((which == AARCH64_CHECK_MOV || which == AARCH64_CHECK_AND) && aarch64_advsimd_valid_immediate_hs (~val32, info, which, simd_immediate_info::MVN)) return true; @@ -22955,7 +22962,8 @@ aarch64_advsimd_valid_immediate (unsigned HOST_WIDE_INT val64, static bool aarch64_sve_valid_immediate (unsigned HOST_WIDE_INT val64, - simd_immediate_info *info) + simd_immediate_info *info, + enum simd_immediate_check which) { scalar_int_mode mode = DImode; unsigned int val32 = val64 & 0xffffffff; @@ -22972,19 +22980,23 @@ aarch64_sve_valid_immediate (unsigned HOST_WIDE_INT val64, } } HOST_WIDE_INT val = trunc_int_for_mode (val64, mode); - if (IN_RANGE (val, -0x80, 0x7f)) - { - /* DUP with no shift. */ - if (info) - *info = simd_immediate_info (mode, val); - return true; - } - if ((val & 0xff) == 0 && IN_RANGE (val, -0x8000, 0x7f00)) + + if (which == AARCH64_CHECK_MOV) { - /* DUP with LSL #8. */ - if (info) - *info = simd_immediate_info (mode, val); - return true; + if (IN_RANGE (val, -0x80, 0x7f)) + { + /* DUP with no shift. */ + if (info) + *info = simd_immediate_info (mode, val); + return true; + } + if ((val & 0xff) == 0 && IN_RANGE (val, -0x8000, 0x7f00)) + { + /* DUP with LSL #8. */ + if (info) + *info = simd_immediate_info (mode, val); + return true; + } } if (aarch64_bitmask_imm (val64, mode)) { @@ -23070,9 +23082,9 @@ aarch64_sve_pred_valid_immediate (rtx x, simd_immediate_info *info) /* Return true if OP is a valid SIMD immediate for the operation described by WHICH. If INFO is nonnull, use it to describe valid immediates. */ -bool -aarch64_simd_valid_immediate (rtx op, simd_immediate_info *info, - enum simd_immediate_check which) +static bool +aarch64_simd_valid_imm (rtx op, simd_immediate_info *info, + enum simd_immediate_check which) { machine_mode mode = GET_MODE (op); unsigned int vec_flags = aarch64_classify_vector_mode (mode); @@ -23196,11 +23208,32 @@ aarch64_simd_valid_immediate (rtx op, simd_immediate_info *info, << (i * BITS_PER_UNIT)); if (vec_flags & VEC_SVE_DATA) - return aarch64_sve_valid_immediate (val64, info); + return aarch64_sve_valid_immediate (val64, info, which); else return aarch64_advsimd_valid_immediate (val64, info, which); } +/* Return true if OP is a valid SIMD move immediate for SVE or AdvSIMD. */ +bool +aarch64_simd_valid_mov_imm (rtx op) +{ + return aarch64_simd_valid_imm (op, NULL, AARCH64_CHECK_MOV); +} + +/* Return true if OP is a valid SIMD orr immediate for SVE or AdvSIMD. */ +bool +aarch64_simd_valid_orr_imm (rtx op) +{ + return aarch64_simd_valid_imm (op, NULL, AARCH64_CHECK_ORR); +} + +/* Return true if OP is a valid SIMD and immediate for SVE or AdvSIMD. */ +bool +aarch64_simd_valid_and_imm (rtx op) +{ + return aarch64_simd_valid_imm (op, NULL, AARCH64_CHECK_AND); +} + /* Check whether X is a VEC_SERIES-like constant that starts at 0 and has a step in the range of INDEX. Return the index expression if so, otherwise return null. */ @@ -23264,7 +23297,7 @@ aarch64_mov_operand_p (rtx x, machine_mode mode) && GET_MODE (x) != VNx16BImode) return false; - return aarch64_simd_valid_immediate (x, NULL); + return aarch64_simd_valid_mov_imm (x); } /* Remove UNSPEC_SALT_ADDR before checking symbol reference. */ @@ -23365,7 +23398,7 @@ aarch64_simd_scalar_immediate_valid_for_move (rtx op, scalar_int_mode mode) vmode = aarch64_simd_container_mode (mode, 64); rtx op_v = aarch64_simd_gen_const_vector_dup (vmode, INTVAL (op)); - return aarch64_simd_valid_immediate (op_v, NULL); + return aarch64_simd_valid_mov_imm (op_v); } /* Construct and return a PARALLEL RTX vector with elements numbering the @@ -23845,7 +23878,7 @@ aarch64_simd_make_constant (rtx vals) gcc_unreachable (); if (const_vec != NULL_RTX - && aarch64_simd_valid_immediate (const_vec, NULL)) + && aarch64_simd_valid_mov_imm (const_vec)) /* Load using MOVI/MVNI. */ return const_vec; else if ((const_dup = aarch64_simd_dup_constant (vals)) != NULL_RTX) @@ -24050,7 +24083,7 @@ aarch64_expand_vector_init_fallback (rtx target, rtx vals) /* Load constant part of vector. We really don't care what goes into the parts we will overwrite, but we're more likely to be able to load the constant efficiently if it has fewer, larger, repeating parts - (see aarch64_simd_valid_immediate). */ + (see aarch64_simd_valid_imm). */ for (int i = 0; i < n_elts; i++) { rtx x = XVECEXP (vals, 0, i); @@ -25298,12 +25331,11 @@ aarch64_float_const_representable_p (rtx x) return (exponent >= 0 && exponent <= 7); } -/* Returns the string with the instruction for AdvSIMD MOVI, MVNI, ORR or BIC - immediate with a CONST_VECTOR of MODE and WIDTH. WHICH selects whether to - output MOVI/MVNI, ORR or BIC immediate. */ +/* Returns the string with the instruction for the SIMD immediate + CONST_VECTOR of WIDTH bits. WHICH selects a move, and(bic) or orr. */ char* -aarch64_output_simd_mov_immediate (rtx const_vector, unsigned width, - enum simd_immediate_check which) +aarch64_output_simd_imm (rtx const_vector, unsigned width, + enum simd_immediate_check which) { bool is_valid; static char templ[40]; @@ -25314,11 +25346,7 @@ aarch64_output_simd_mov_immediate (rtx const_vector, unsigned width, struct simd_immediate_info info; - /* This will return true to show const_vector is legal for use as either - a AdvSIMD MOVI instruction (or, implicitly, MVNI), ORR or BIC immediate. - It will also update INFO to show how the immediate should be generated. - WHICH selects whether to check for MOVI/MVNI, ORR or BIC. */ - is_valid = aarch64_simd_valid_immediate (const_vector, &info, which); + is_valid = aarch64_simd_valid_imm (const_vector, &info, which); gcc_assert (is_valid); element_char = sizetochar (GET_MODE_BITSIZE (info.elt_mode)); @@ -25381,7 +25409,7 @@ aarch64_output_simd_mov_immediate (rtx const_vector, unsigned width, } else { - /* For AARCH64_CHECK_BIC and AARCH64_CHECK_ORR. */ + /* AARCH64_CHECK_ORR or AARCH64_CHECK_AND. */ mnemonic = info.insn == simd_immediate_info::MVN ? "bic" : "orr"; if (info.u.mov.shift) snprintf (templ, sizeof (templ), "%s\t%%0.%d%c, #" @@ -25396,6 +25424,30 @@ aarch64_output_simd_mov_immediate (rtx const_vector, unsigned width, return templ; } +/* Returns the string with the ORR instruction for the SIMD immediate + CONST_VECTOR of WIDTH bits. */ +char* +aarch64_output_simd_orr_imm (rtx const_vector, unsigned width) +{ + return aarch64_output_simd_imm (const_vector, width, AARCH64_CHECK_ORR); +} + +/* Returns the string with the AND/BIC instruction for the SIMD immediate + CONST_VECTOR of WIDTH bits. */ +char* +aarch64_output_simd_and_imm (rtx const_vector, unsigned width) +{ + return aarch64_output_simd_imm (const_vector, width, AARCH64_CHECK_AND); +} + +/* Returns the string with the MOV instruction for the SIMD immediate + CONST_VECTOR of WIDTH bits. */ +char* +aarch64_output_simd_mov_imm (rtx const_vector, unsigned width) +{ + return aarch64_output_simd_imm (const_vector, width, AARCH64_CHECK_MOV); +} + char* aarch64_output_scalar_simd_mov_immediate (rtx immediate, scalar_int_mode mode) { @@ -25417,7 +25469,7 @@ aarch64_output_scalar_simd_mov_immediate (rtx immediate, scalar_int_mode mode) vmode = aarch64_simd_container_mode (mode, width); rtx v_op = aarch64_simd_gen_const_vector_dup (vmode, INTVAL (immediate)); - return aarch64_output_simd_mov_immediate (v_op, width); + return aarch64_output_simd_mov_imm (v_op, width); } /* Return the output string to use for moving immediate CONST_VECTOR @@ -25429,8 +25481,9 @@ aarch64_output_sve_mov_immediate (rtx const_vector) static char templ[40]; struct simd_immediate_info info; char element_char; + bool is_valid; - bool is_valid = aarch64_simd_valid_immediate (const_vector, &info); + is_valid = aarch64_simd_valid_imm (const_vector, &info, AARCH64_CHECK_MOV); gcc_assert (is_valid); element_char = sizetochar (GET_MODE_BITSIZE (info.elt_mode)); @@ -25499,9 +25552,10 @@ char * aarch64_output_sve_ptrues (rtx const_unspec) { static char templ[40]; - struct simd_immediate_info info; - bool is_valid = aarch64_simd_valid_immediate (const_unspec, &info); + bool is_valid; + + is_valid = aarch64_simd_valid_imm (const_unspec, &info, AARCH64_CHECK_MOV); gcc_assert (is_valid && info.insn == simd_immediate_info::PTRUE); char element_char = sizetochar (GET_MODE_BITSIZE (info.elt_mode)); diff --git a/gcc/config/aarch64/constraints.md b/gcc/config/aarch64/constraints.md index f491e4bd6a069bc9f8a3c71bdec14496c862a94d..3f9fd92a1911e0b18a163dc6c4c2c97c871458e0 100644 --- a/gcc/config/aarch64/constraints.md +++ b/gcc/config/aarch64/constraints.md @@ -464,21 +464,19 @@ (define_constraint "Do" "@internal A constraint that matches vector of immediates for orr." (and (match_code "const_vector") - (match_test "aarch64_simd_valid_immediate (op, NULL, - AARCH64_CHECK_ORR)"))) + (match_test "aarch64_simd_valid_orr_imm (op)"))) (define_constraint "Db" "@internal - A constraint that matches vector of immediates for bic." + A constraint that matches vector of immediates for and/bic." (and (match_code "const_vector") - (match_test "aarch64_simd_valid_immediate (op, NULL, - AARCH64_CHECK_BIC)"))) + (match_test "aarch64_simd_valid_and_imm (op)"))) (define_constraint "Dn" "@internal A constraint that matches vector of immediates." (and (match_code "const,const_vector") - (match_test "aarch64_simd_valid_immediate (op, NULL)"))) + (match_test "aarch64_simd_valid_mov_imm (op)"))) (define_constraint "Dh" "@internal diff --git a/gcc/config/aarch64/predicates.md b/gcc/config/aarch64/predicates.md index 8f3aab2272c62d5dcc06dfd14fd00067e4db6b8e..0a171387b1a73b85db0ae2ccbc788a3d7f28a082 100644 --- a/gcc/config/aarch64/predicates.md +++ b/gcc/config/aarch64/predicates.md @@ -118,14 +118,12 @@ (define_predicate "aarch64_reg_zero_or_m1_or_1" (define_predicate "aarch64_reg_or_orr_imm" (ior (match_operand 0 "register_operand") (and (match_code "const_vector") - (match_test "aarch64_simd_valid_immediate (op, NULL, - AARCH64_CHECK_ORR)")))) + (match_test "aarch64_simd_valid_orr_imm (op)")))) -(define_predicate "aarch64_reg_or_bic_imm" +(define_predicate "aarch64_reg_or_and_imm" (ior (match_operand 0 "register_operand") (and (match_code "const_vector") - (match_test "aarch64_simd_valid_immediate (op, NULL, - AARCH64_CHECK_BIC)")))) + (match_test "aarch64_simd_valid_and_imm (op)")))) (define_predicate "aarch64_fp_compare_operand" (ior (match_operand 0 "register_operand")