From patchwork Wed Sep 18 15:28:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Saurabh Jha X-Patchwork-Id: 1986892 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=LLoFHcD/; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=LLoFHcD/; 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 4X82dq116Mz1y2l for ; Thu, 19 Sep 2024 01:30:07 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id F2C27385C6CB for ; Wed, 18 Sep 2024 15:30:04 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on20615.outbound.protection.outlook.com [IPv6:2a01:111:f400:7e1a::615]) by sourceware.org (Postfix) with ESMTPS id E0631385B503 for ; Wed, 18 Sep 2024 15:29:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E0631385B503 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 E0631385B503 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f400:7e1a::615 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1726673373; cv=pass; b=Xi0yDlesdVypFczdPViAbZRIzx/L1GMCRABy61ym5DHnR/3w3HuOd59C78LywH+wAFQq7MAfrbzpjAHEzC4ZX8QHdo43Pq+Ph+MenyHYj+/mhzzGiMXViOCSE8gpUUcIJrAChVc8xTQZeo7rfaD62jfwTcK5+E2blABjXf2GYzA= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1726673373; c=relaxed/simple; bh=GT7mJmI10Fx9GUVLdO0gdHLuW/93uEQel4YtoTXSb6E=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=gP7SV4AogOgtVeRm7ZePF3/k3bz8jLzlfMGCrrKBz3rYrMJ7b/M2e86o3Qefh7lljCnLl44InYFaPAO0QakrZoqPXXFXCyF65fMfRINbnhVtN0K1r2sTedeZDEqJ+GjN8TN41tOn6vynM9yvkBAZzhZWUd/bYlCShYKgtNMN04Y= ARC-Authentication-Results: i=3; server2.sourceware.org ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=XQuxQ5PhRnOLdUBYUUkeESOC5TYEBVqkFt0S7eJLKv0071TmSjzAFc7MMi1TwPOkhDQcCs/gCjR4L3ZOoULyMO0bTDtGIImu9Sy6hrHNGLKL6FDzIbkRY91K0i3IS40gCdZrqPs7k7Vt+XaDJitzdq8Rj4OndKUqzzuNCjFV+K1kDugCDItVBkZGL4vdX/WuDsl0EsX0J/BWO276QngVZoMbRm3T325iBetloybUD22RMRxmyTu4CnZvPUZQ+gfO+0t0fvL2VvTn9oq/mzZ5hkR4dZvfBe/84X0xxTLcVgow6RibMJqfo/PpqslkmRMwTMtu446Rt1i5FWtX5N8qhA== 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=xoo2C/y1Y2FztmbanXVkvgblwnERbzdEhp3DMFKrws8=; b=VEKRwI9q8c3lGqsevTJWtS3RLnNoaoJZWkvE+asWbNMqD9yuMIsT6t3L74LJBzi7mqZX2zQHvsPVQT7gfDjU4CW301xx36Df0pERWF81B0Hpjl/6kKrNXBnj8cML7Uk5X7kIrCdeDwVk/vF/DYqc+s+CWvH1lBBLQiCLtBoHPbzAoSfE51AnPQh602BMtsHBsFsVOgH0kHFBjLNgNNvDUGuUKvg3CfGDLtqduLRnF8sV0bFPTbInBrCXHNLV7pqJR84gWHT1Tv2pLHy01zS4+TWWW0P7A02CRPbNxzZi2iajM68xRVM6+sM7CXu194xER90AZMLLRkipcCOJapNXIg== 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=xoo2C/y1Y2FztmbanXVkvgblwnERbzdEhp3DMFKrws8=; b=LLoFHcD/+NxnBgSZydAH4fAOfQhGMuMHs/LcqieuulMfYi8OJ1kLiLniDZEiJQivpUWScl745bArbbvatzQy0V+plSFhPDcNNVoq+NEu0bXt43MSz66bgWwynX+YY05oimMgDT0txRmO9wI8uG/X7ajoBcX4CQpLKSZ96uCt9MA= Received: from DB6PR0301CA0076.eurprd03.prod.outlook.com (2603:10a6:6:30::23) by PAVPR08MB9377.eurprd08.prod.outlook.com (2603:10a6:102:302::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7982.15; Wed, 18 Sep 2024 15:29:24 +0000 Received: from DB5PEPF00014B88.eurprd02.prod.outlook.com (2603:10a6:6:30:cafe::9) by DB6PR0301CA0076.outlook.office365.com (2603:10a6:6:30::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7939.30 via Frontend Transport; Wed, 18 Sep 2024 15:29:24 +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 DB5PEPF00014B88.mail.protection.outlook.com (10.167.8.196) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.7918.13 via Frontend Transport; Wed, 18 Sep 2024 15:29:24 +0000 Received: ("Tessian outbound 0881e36152ee:v457"); Wed, 18 Sep 2024 15:29:24 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: be91c2ff7164b67b X-TessianGatewayMetadata: BKqOQ690oKTQSRZScFD1qMtle/obX+1KQeGd8E0kGxmgisLtWgqoDNfJ/oaztHEJ2H1+1p0RVOBuUzYMj14f0JMtWLyuJQaZYu3rS6CP25yY8AVGz3mMR06kUfAhhMHN8hGjYTJp+C7YEpOA8zSJ6dQXMT9eat8dK7F2yZDAOK0= X-CR-MTA-TID: 64aa7808 Received: from L4a9c6534936e.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 78A1A4DF-87FB-4179-A904-1294E54AFF0C.1; Wed, 18 Sep 2024 15:29:17 +0000 Received: from EUR02-VI1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id L4a9c6534936e.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 18 Sep 2024 15:29:17 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xyXR6Dci8PYuhu3wx0ODW53B0klNjXxRKHM+yFwiCSyoXe3NO5EVaNZaIHf/Gr5QiXOBTQTgldalvOIz7V5MV3V7rnywlLufj/AG5hC/jnpxEhanlMnHD11Ax03Os/WitMkvkLjtnyC0N5IirnFQHcyedFYLhdhnK3lurPxVBGm3XQy/LakWhA4DE7eoC08FGyKfw04+V+79E65VGCrQVobNiXWfvlXI3CoL4lLqWL9qLtMINfdqxdxbkqaBJXzNd+24/FPgoOTW8eTix3O3UVNrBQs6mmkGL9CbCBvf5rTrbeXVMFkxJXufxqxpxeHo9b4bhHoqrZQP0OQmuvx4uQ== 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=xoo2C/y1Y2FztmbanXVkvgblwnERbzdEhp3DMFKrws8=; b=GnMIGcaNkV/HH7FfrFDCJ6erroYz44h+8OzGErKVyTKZ9Ga3Vj7JME7fonaTlqgb1buNxZdbbiojppD/Wt0PUI0VKBhI7popM8qJONu8Enlp6tmNX3FdDO9Yo01tcPm0/YCK6ovYJPF6TaL1HcXnvWsHqa6ZoiT4XOjtuPBsTcolglTIuY+gq7Sctb6BahsR/6hR77b2BGXW522GKlGyTn5ZwVkmBZaiaNmMUNtqIKO1qkbpWklZblSE0HS6upwHz3FSd5eG+5HQOZCXv6M7qVGITmSbB1X9dpg3EcPvhBgqyNlpYkNQQZo23ae6+zJk9qeY8SlHil8yWLwiHrp0cA== 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=xoo2C/y1Y2FztmbanXVkvgblwnERbzdEhp3DMFKrws8=; b=LLoFHcD/+NxnBgSZydAH4fAOfQhGMuMHs/LcqieuulMfYi8OJ1kLiLniDZEiJQivpUWScl745bArbbvatzQy0V+plSFhPDcNNVoq+NEu0bXt43MSz66bgWwynX+YY05oimMgDT0txRmO9wI8uG/X7ajoBcX4CQpLKSZ96uCt9MA= Received: from AS8PR07CA0025.eurprd07.prod.outlook.com (2603:10a6:20b:451::25) by DB9PR08MB8338.eurprd08.prod.outlook.com (2603:10a6:10:3dd::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7982.15; Wed, 18 Sep 2024 15:29:12 +0000 Received: from AM2PEPF0001C711.eurprd05.prod.outlook.com (2603:10a6:20b:451:cafe::7) by AS8PR07CA0025.outlook.office365.com (2603:10a6:20b:451::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7982.16 via Frontend Transport; Wed, 18 Sep 2024 15:29:12 +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 AM2PEPF0001C711.mail.protection.outlook.com (10.167.16.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.7918.13 via Frontend Transport; Wed, 18 Sep 2024 15:29:11 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) 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, 18 Sep 2024 15:29:10 +0000 Received: from e130340.cambridge.arm.com (10.2.80.47) by mail.arm.com (10.251.24.31) with Microsoft SMTP Server id 15.1.2507.39 via Frontend Transport; Wed, 18 Sep 2024 15:29:10 +0000 From: To: CC: , , Saurabh Jha Subject: [PATCH v10 2/2] aarch64: Add codegen support for AdvSIMD faminmax Date: Wed, 18 Sep 2024 16:28:18 +0100 Message-ID: <20240918152818.2345370-3-saurabh.jha@arm.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20240918152818.2345370-1-saurabh.jha@arm.com> References: <20240918152818.2345370-1-saurabh.jha@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM2PEPF0001C711:EE_|DB9PR08MB8338:EE_|DB5PEPF00014B88:EE_|PAVPR08MB9377:EE_ X-MS-Office365-Filtering-Correlation-Id: a97273fd-147c-4ef6-4cd2-08dcd7f6ad2b x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; ARA:13230040|36860700013|1800799024|376014|82310400026; X-Microsoft-Antispam-Message-Info-Original: UqKrrILemnPubUNhUt41dq/TqXyfvDyIXA3DuS53QaHPv/VXTz84A/Dccu9zblbXmEosYLU7GEtSrhOidKgqNUx1rlS8Zv82kljqvXNe80ksWfxRPa5NJWWos5EihFUA5vXtwODrg9k1BzD0MMNklnjECsYqlzN0cioXSnG2q7JAXUIz+HEYZbiZ/5u+nQ3ZCV+YoIKpSfxlab3tX/UqEstqFg8dU6dwwKo4inadaKhVYvoo7m2YH7QoCxu93MNBW/ti0xMglFA7CoFBPKbMMvyOwsua84MrkCNoLx1PGRd8yq3JoLKPWl1y5790jw/0jQRilV0AUjVabK9opK7/eQd4ZdXr06B1ivMtGnUaillQ3fNCXOIYimqqL3rhDP4/LRHEdFjGjXhWmrxrNoBrLMSQSLgp6s7fCy12+GqIZuLN83e8EzL/o3oDV8dp+IbkGzMC4wWGcJXJEfsgTRESeHhIN9WxZRz8kyr3NwcUK5C/XQHOp+oIvHC8r6sIM0F5N2RP3q9gle5wHgTn4HsxmL7oK4O8Fs9PmntIoJDngZUGyWiq1QJxPkhu60TmYjcs7M2GTpvtEe7DzxYCPuq9DYGIg7Jxvwj9Ir+BM5O4Sjp8HlCb6x2l97GNHd/tefjdR13pdLUneIxlVFeiMnSEEliY8H77wXpgVS/yJLtE3KA2uE3RI7TTR4vvmPi6rchFSXdcEeOOT61zzut9nRwpTTU308pAa8CPtMXBDfkNKYK2JCm1LZve8wbZHfKNXNp2EuD9jIRR8w6QY79bELlBln008mGG6gCiwPus8lNuQkE9gETIGW+Hrga8wnwJ+O66j+7KtgTVh07tHHdT64TEvHxyxN2Y+as4QjtwQlg6XOppvfUxwruWuW8KnW9ipTiwdAhyfBXMVp7CMxCfqPNy65a5gVGvrPNPyugpyFvVs6D8RwUCSz73B9SejJ4sFziI8U+xXOfHB4513tB5a3TAWiYXGkC+DtaRedmWcg7ByVgojeC23nbKku5C+tezKWpC1PHjG7O3i1gKoqUFCpntG5CV4x/1PVDVwmbZBQW4RVXB12qYLNmnMJ76JzeEMFljkdvi0xJJ6oYuBhAWWsxVqRgvlCGcWl8+irDxjcMaosaFWFovy1hovwHFMWfL8JAdT82YFuoqdN/WpN4CAEToZk1pWKolBPANMypIETgBdfmS9Di7Sd4+vRScJmTw1cCMQUZW1mwlctMmvHBtmMnyImZxpHBw3J8gKMmS9w4E3GGPYu6OukN9Yus4qaFGUXPKZCOo+YAJ3+AM0rdLi88oXUMmOpFn7r4745Jx4U5BapYcyJ0/863AYQWcCpvK07csEc3ld0NQkdtDuergrnefpLd1e6aL3h63BEiBbg/fJXONkP/OqniXKZVol1M5dZUaNl+74AphGsPHnDcxFSS7dg== 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)(36860700013)(1800799024)(376014)(82310400026); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB8338 X-MS-Exchange-SkipListedInternetSender: ip=[2603:10a6:20b:451::25]; domain=AS8PR07CA0025.eurprd07.prod.outlook.com X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5PEPF00014B88.eurprd02.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 55fad65b-b6cc-4eec-7a6f-08dcd7f6a578 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|1800799024|35042699022|82310400026|376014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?j792H+i2YK3kZFo92+JKqufDXi2QRBK?= =?utf-8?q?elVgx2cwz7eFEqr8zRR3A3d554eiMCrwPQz8nnG2rQ6/TB/XxUwTSVmUwd9OtC6At?= =?utf-8?q?xFnTqy1TItq4QCY6eJyUtXLURnbEJNCMA9dcfR0a3oQtv3WvBX6H6Z8K+6FFQvy7H?= =?utf-8?q?CjWyreoWx9EuSalhefXjfAnTqGTKHYUGELZ4W6k+CwlnWNgM4Lm+hpQHH4zJpdHGw?= =?utf-8?q?uhvsBa3G3cIP2uz0nQTqBGBDp7h/85XpQCdqzBUm0/gVIVVIabZIucAI4e+X+nYmk?= =?utf-8?q?5h124QqUH6hCEF4izAExTQY592SHZg8Ybjc+GM3QuVgEX6svAuMrfSPh6die6K19V?= =?utf-8?q?Yr6pRaIWeItvq6I8q4NnggaZ51x1gCawb5nI0+iSLrMG4ylvD1pOgIZpyQCQ2GdST?= =?utf-8?q?a/Rwp2rFSabEbZIRgeCPXCKeeQZmlvqm31cmY5ubToATgW8gfYAcjU5KNa4+a9vwu?= =?utf-8?q?B0oeu4NWkGo2Ty43v1i/l8gk61v0gOLzYATIwfJMlW2XiGs6W++BrKiZRVJ/78h3a?= =?utf-8?q?ke346kTCjksv7G20/0xDQg0/A4xhOXKP3X2Dwat43lQFPTMqwPwycH+Kfqay/aija?= =?utf-8?q?eYN6YUg39I02QJ7lSMDzVJGXG2Q7cZRJjyMlU/gifiUFBmozRg79AaCca/oEZlf9Q?= =?utf-8?q?2Z1i96YmUvoEjn9/TIB1/ok95f6uJ4OlBvaSgF5St1ZgignvNDP4AYRYFhHbcHlmN?= =?utf-8?q?fE6FUn2Wtc2LIhJW4b0uvI51tt+kTQEqkMRTMlUvAVqtl+4Xukb+Md3+EbAhq4OLO?= =?utf-8?q?Vb3YiUgbxOlyufXUjcgCfpZ3zywi419OnKBxH5+7x+uo72Dfg+jICadFYTWhxX23n?= =?utf-8?q?zLlWNsfukOfNyuOf0hIo+k51scXX/kucVnqY5EF6c8De6clkoDBSPeufX0Ypm8Olj?= =?utf-8?q?WYOxzmMtZYhei/Vk0PWIs4dcrNI4u1wrl+jOT9B8P3UJxBjNbBmH6hZLq9AjFxFac?= =?utf-8?q?Bd4DIeA9KO6r/6k73pQB1ixsQx11QwsuyC7p+yCpBu3Cp1KI/F7pJxDaQwH2Elbyq?= =?utf-8?q?WOwbFCBcaPxH0d8qtGq3pl1jooqbK+KMP8Cc3aNB8eEptHNB1qnbAJi5KBPfnqCz7?= =?utf-8?q?AFPJtgNceT0GDttWAowE2auk8mGTzeqz27oI9lOUdtkmXptenOJ8bWHXKam1bSySI?= =?utf-8?q?TXdmBsckNoiwQQpsCr4U+ZaT4swNg9Wo454tPl9/klXuF09AnaF0ZNoHAby9cssPn?= =?utf-8?q?IONgS3s/jVt3xCJY8Iv7ez+RCpWP33nMoSZog4gnidR1ywNYr0QlqdViHPid0AS91?= =?utf-8?q?bKBPwWW3slr+QH6QkqVAMLKLVV5MYKbBBqPXYCKpyBmZMknZnmxkMLrQ8lneHKKsB?= =?utf-8?q?vie91mfhp+Yk5Sze18uboQZK1tdpLEXMPg=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)(36860700013)(1800799024)(35042699022)(82310400026)(376014); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Sep 2024 15:29:24.6521 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a97273fd-147c-4ef6-4cd2-08dcd7f6ad2b 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: DB5PEPF00014B88.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR08MB9377 X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FORGED_SPF_HELO, GIT_PATCH_0, KAM_SHORT, 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~incoming=patchwork.ozlabs.org@gcc.gnu.org The AArch64 FEAT_FAMINMAX extension is optional from Armv9.2-a and mandatory from Armv9.5-a. It introduces instructions for computing the floating point absolute maximum and minimum of the two vectors element-wise. This patch adds code generation support for famax and famin in terms of existing RTL operators. famax/famin is equivalent to first taking abs of the operands and then taking smax/smin on the results of abs. famax/famin (a, b) = smax/smin (abs (a), abs (b)) This fusion of operators is only possible when -march=armv9-a+faminmax flags are passed. We also need to pass -ffast-math flag; if we don't, then a statement like c[i] = __builtin_fmaxf16 (a[i], b[i]); is RTL expanded to UNSPEC_FMAXNM instead of smax (likewise for smin). This code generation is only available on -O2 or -O3 as that is when auto-vectorization is enabled. gcc/ChangeLog: * config/aarch64/aarch64-simd.md (*aarch64_faminmax_fused): Instruction pattern for faminmax codegen. * config/aarch64/iterators.md: Attribute for faminmax codegen. gcc/testsuite/ChangeLog: * gcc.target/aarch64/simd/faminmax-codegen-no-flag.c: New test. * gcc.target/aarch64/simd/faminmax-codegen.c: New test. * gcc.target/aarch64/simd/faminmax-no-codegen.c: New test. --- gcc/config/aarch64/aarch64-simd.md | 9 + gcc/config/aarch64/iterators.md | 3 + .../aarch64/simd/faminmax-codegen-no-flag.c | 217 ++++++++++++++ .../aarch64/simd/faminmax-codegen.c | 197 +++++++++++++ .../aarch64/simd/faminmax-no-codegen.c | 267 ++++++++++++++++++ 5 files changed, 693 insertions(+) create mode 100644 gcc/testsuite/gcc.target/aarch64/simd/faminmax-codegen-no-flag.c create mode 100644 gcc/testsuite/gcc.target/aarch64/simd/faminmax-codegen.c create mode 100644 gcc/testsuite/gcc.target/aarch64/simd/faminmax-no-codegen.c diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 67f0fe26f93..2a44aa3fcc3 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -9920,3 +9920,12 @@ "TARGET_FAMINMAX" "\t%0., %1., %2." ) + +(define_insn "*aarch64_faminmax_fused" + [(set (match_operand:VHSDF 0 "register_operand" "=w") + (FMAXMIN:VHSDF + (abs:VHSDF (match_operand:VHSDF 1 "register_operand" "w")) + (abs:VHSDF (match_operand:VHSDF 2 "register_operand" "w"))))] + "TARGET_FAMINMAX" + "\t%0., %1., %2." +) diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md index 17ac5e073aa..c2fcd18306e 100644 --- a/gcc/config/aarch64/iterators.md +++ b/gcc/config/aarch64/iterators.md @@ -4472,3 +4472,6 @@ (define_int_attr faminmax_uns_op [(UNSPEC_FAMAX "famax") (UNSPEC_FAMIN "famin")]) + +(define_code_attr faminmax_op + [(smax "famax") (smin "famin")]) diff --git a/gcc/testsuite/gcc.target/aarch64/simd/faminmax-codegen-no-flag.c b/gcc/testsuite/gcc.target/aarch64/simd/faminmax-codegen-no-flag.c new file mode 100644 index 00000000000..6688a7883b7 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/simd/faminmax-codegen-no-flag.c @@ -0,0 +1,217 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-O3 -ffast-math -march=armv9-a" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include "arm_neon.h" + +#pragma GCC target "+nosve" + +/* +** test_vamax_f16: +** fabs v1.4h, v1.4h +** fabs v0.4h, v0.4h +** fmaxnm v0.4h, v0.4h, v1.4h +** ret +*/ +float16x4_t +test_vamax_f16 (float16x4_t a, float16x4_t b) +{ + int i; + float16x4_t c; + + for (i = 0; i < 4; ++i) { + a[i] = __builtin_fabsf16 (a[i]); + b[i] = __builtin_fabsf16 (b[i]); + c[i] = __builtin_fmaxf16 (a[i], b[i]); + } + return c; +} + +/* +** test_vamaxq_f16: +** fabs v1.8h, v1.8h +** fabs v0.8h, v0.8h +** fmaxnm v0.8h, v0.8h, v1.8h +** ret +*/ +float16x8_t +test_vamaxq_f16 (float16x8_t a, float16x8_t b) +{ + int i; + float16x8_t c; + + for (i = 0; i < 8; ++i) { + a[i] = __builtin_fabsf16 (a[i]); + b[i] = __builtin_fabsf16 (b[i]); + c[i] = __builtin_fmaxf16 (a[i], b[i]); + } + return c; +} + +/* +** test_vamax_f32: +** fabs v1.2s, v1.2s +** fabs v0.2s, v0.2s +** fmaxnm v0.2s, v0.2s, v1.2s +** ret +*/ +float32x2_t +test_vamax_f32 (float32x2_t a, float32x2_t b) +{ + int i; + float32x2_t c; + + for (i = 0; i < 2; ++i) { + a[i] = __builtin_fabsf32 (a[i]); + b[i] = __builtin_fabsf32 (b[i]); + c[i] = __builtin_fmaxf32 (a[i], b[i]); + } + return c; +} + +/* +** test_vamaxq_f32: +** fabs v1.4s, v1.4s +** fabs v0.4s, v0.4s +** fmaxnm v0.4s, v0.4s, v1.4s +** ret +*/ +float32x4_t +test_vamaxq_f32 (float32x4_t a, float32x4_t b) +{ + int i; + float32x4_t c; + + for (i = 0; i < 4; ++i) { + a[i] = __builtin_fabsf32 (a[i]); + b[i] = __builtin_fabsf32 (b[i]); + c[i] = __builtin_fmaxf32 (a[i], b[i]); + } + return c; +} + +/* +** test_vamaxq_f64: +** fabs v1.2d, v1.2d +** fabs v0.2d, v0.2d +** fmaxnm v0.2d, v0.2d, v1.2d +** ret +*/ +float64x2_t +test_vamaxq_f64 (float64x2_t a, float64x2_t b) +{ + int i; + float64x2_t c; + + for (i = 0; i < 2; ++i) { + a[i] = __builtin_fabsf64 (a[i]); + b[i] = __builtin_fabsf64 (b[i]); + c[i] = __builtin_fmaxf64 (a[i], b[i]); + } + return c; +} + +/* +** test_vamin_f16: +** fabs v1.4h, v1.4h +** fabs v0.4h, v0.4h +** fminnm v0.4h, v0.4h, v1.4h +** ret +*/ +float16x4_t +test_vamin_f16 (float16x4_t a, float16x4_t b) +{ + int i; + float16x4_t c; + + for (i = 0; i < 4; ++i) { + a[i] = __builtin_fabsf16 (a[i]); + b[i] = __builtin_fabsf16 (b[i]); + c[i] = __builtin_fminf16 (a[i], b[i]); + } + return c; +} + +/* +** test_vaminq_f16: +** fabs v1.8h, v1.8h +** fabs v0.8h, v0.8h +** fminnm v0.8h, v0.8h, v1.8h +** ret +*/ +float16x8_t +test_vaminq_f16 (float16x8_t a, float16x8_t b) +{ + int i; + float16x8_t c; + + for (i = 0; i < 8; ++i) { + a[i] = __builtin_fabsf16 (a[i]); + b[i] = __builtin_fabsf16 (b[i]); + c[i] = __builtin_fminf16 (a[i], b[i]); + } + return c; +} + +/* +** test_vamin_f32: +** fabs v1.2s, v1.2s +** fabs v0.2s, v0.2s +** fminnm v0.2s, v0.2s, v1.2s +** ret +*/ +float32x2_t +test_vamin_f32 (float32x2_t a, float32x2_t b) +{ + int i; + float32x2_t c; + + for (i = 0; i < 2; ++i) { + a[i] = __builtin_fabsf32 (a[i]); + b[i] = __builtin_fabsf32 (b[i]); + c[i] = __builtin_fminf32 (a[i], b[i]); + } + return c; +} + +/* +** test_vaminq_f32: +** fabs v1.4s, v1.4s +** fabs v0.4s, v0.4s +** fminnm v0.4s, v0.4s, v1.4s +** ret +*/ +float32x4_t +test_vaminq_f32 (float32x4_t a, float32x4_t b) +{ + int i; + float32x4_t c; + + for (i = 0; i < 4; ++i) { + a[i] = __builtin_fabsf32 (a[i]); + b[i] = __builtin_fabsf32 (b[i]); + c[i] = __builtin_fminf32 (a[i], b[i]); + } + return c; +} + +/* +** test_vaminq_f64: +** fabs v1.2d, v1.2d +** fabs v0.2d, v0.2d +** fminnm v0.2d, v0.2d, v1.2d +** ret +*/ +float64x2_t +test_vaminq_f64 (float64x2_t a, float64x2_t b) +{ + int i; + float64x2_t c; + + for (i = 0; i < 2; ++i) { + a[i] = __builtin_fabsf64 (a[i]); + b[i] = __builtin_fabsf64 (b[i]); + c[i] = __builtin_fminf64 (a[i], b[i]); + } + return c; +} diff --git a/gcc/testsuite/gcc.target/aarch64/simd/faminmax-codegen.c b/gcc/testsuite/gcc.target/aarch64/simd/faminmax-codegen.c new file mode 100644 index 00000000000..d77bd905230 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/simd/faminmax-codegen.c @@ -0,0 +1,197 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-O2 -ffast-math -march=armv9-a+faminmax" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include "arm_neon.h" + +#pragma GCC target "+nosve" + +/* +** test_vamax_f16: +** famax v0.4h, v1.4h, v0.4h +** ret +*/ +float16x4_t +test_vamax_f16 (float16x4_t a, float16x4_t b) +{ + int i; + float16x4_t c; + + for (i = 0; i < 4; ++i) { + a[i] = __builtin_fabsf16 (a[i]); + b[i] = __builtin_fabsf16 (b[i]); + c[i] = __builtin_fmaxf16 (a[i], b[i]); + } + return c; +} + +/* +** test_vamaxq_f16: +** famax v0.8h, v1.8h, v0.8h +** ret +*/ +float16x8_t +test_vamaxq_f16 (float16x8_t a, float16x8_t b) +{ + int i; + float16x8_t c; + + for (i = 0; i < 8; ++i) { + a[i] = __builtin_fabsf16 (a[i]); + b[i] = __builtin_fabsf16 (b[i]); + c[i] = __builtin_fmaxf16 (a[i], b[i]); + } + return c; +} + +/* +** test_vamax_f32: +** famax v0.2s, v1.2s, v0.2s +** ret +*/ +float32x2_t +test_vamax_f32 (float32x2_t a, float32x2_t b) +{ + int i; + float32x2_t c; + + for (i = 0; i < 2; ++i) { + a[i] = __builtin_fabsf32 (a[i]); + b[i] = __builtin_fabsf32 (b[i]); + c[i] = __builtin_fmaxf32 (a[i], b[i]); + } + return c; +} + +/* +** test_vamaxq_f32: +** famax v0.4s, v1.4s, v0.4s +** ret +*/ +float32x4_t +test_vamaxq_f32 (float32x4_t a, float32x4_t b) +{ + int i; + float32x4_t c; + + for (i = 0; i < 4; ++i) { + a[i] = __builtin_fabsf32 (a[i]); + b[i] = __builtin_fabsf32 (b[i]); + c[i] = __builtin_fmaxf32 (a[i], b[i]); + } + return c; +} + +/* +** test_vamaxq_f64: +** famax v0.2d, v1.2d, v0.2d +** ret +*/ +float64x2_t +test_vamaxq_f64 (float64x2_t a, float64x2_t b) +{ + int i; + float64x2_t c; + + for (i = 0; i < 2; ++i) { + a[i] = __builtin_fabsf64 (a[i]); + b[i] = __builtin_fabsf64 (b[i]); + c[i] = __builtin_fmaxf64 (a[i], b[i]); + } + return c; +} + +/* +** test_vamin_f16: +** famin v0.4h, v1.4h, v0.4h +** ret +*/ +float16x4_t +test_vamin_f16 (float16x4_t a, float16x4_t b) +{ + int i; + float16x4_t c; + + for (i = 0; i < 4; ++i) { + a[i] = __builtin_fabsf16 (a[i]); + b[i] = __builtin_fabsf16 (b[i]); + c[i] = __builtin_fminf16 (a[i], b[i]); + } + return c; +} + +/* +** test_vaminq_f16: +** famin v0.8h, v1.8h, v0.8h +** ret +*/ +float16x8_t +test_vaminq_f16 (float16x8_t a, float16x8_t b) +{ + int i; + float16x8_t c; + + for (i = 0; i < 8; ++i) { + a[i] = __builtin_fabsf16 (a[i]); + b[i] = __builtin_fabsf16 (b[i]); + c[i] = __builtin_fminf16 (a[i], b[i]); + } + return c; +} + +/* +** test_vamin_f32: +** famin v0.2s, v1.2s, v0.2s +** ret +*/ +float32x2_t +test_vamin_f32 (float32x2_t a, float32x2_t b) +{ + int i; + float32x2_t c; + + for (i = 0; i < 2; ++i) { + a[i] = __builtin_fabsf32 (a[i]); + b[i] = __builtin_fabsf32 (b[i]); + c[i] = __builtin_fminf32 (a[i], b[i]); + } + return c; +} + +/* +** test_vaminq_f32: +** famin v0.4s, v1.4s, v0.4s +** ret +*/ +float32x4_t +test_vaminq_f32 (float32x4_t a, float32x4_t b) +{ + int i; + float32x4_t c; + + for (i = 0; i < 4; ++i) { + a[i] = __builtin_fabsf32 (a[i]); + b[i] = __builtin_fabsf32 (b[i]); + c[i] = __builtin_fminf32 (a[i], b[i]); + } + return c; +} + +/* +** test_vaminq_f64: +** famin v0.2d, v1.2d, v0.2d +** ret +*/ +float64x2_t +test_vaminq_f64 (float64x2_t a, float64x2_t b) +{ + int i; + float64x2_t c; + + for (i = 0; i < 2; ++i) { + a[i] = __builtin_fabsf64 (a[i]); + b[i] = __builtin_fabsf64 (b[i]); + c[i] = __builtin_fminf64 (a[i], b[i]); + } + return c; +} diff --git a/gcc/testsuite/gcc.target/aarch64/simd/faminmax-no-codegen.c b/gcc/testsuite/gcc.target/aarch64/simd/faminmax-no-codegen.c new file mode 100644 index 00000000000..3ec0a52b522 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/simd/faminmax-no-codegen.c @@ -0,0 +1,267 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-O2 -ffast-math -march=armv9-a+faminmax" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include "arm_neon.h" + +#pragma GCC target "+nosve" + +/* +** test_abs_max_f16: +** fabs v1.4h, v1.4h +** fabs v0.4h, v0.4h +** fmax v0.4h, v0.4h, v1.4h +** ret +*/ +float16x4_t +test_abs_max_f16 (float16x4_t a, float16x4_t b) +{ + return vmax_f16 (vabs_f16 (a), vabs_f16 (b)); +} + +/* +** test_abs_maxnm_f16: +** fabs v1.4h, v1.4h +** fabs v0.4h, v0.4h +** fmaxnm v0.4h, v0.4h, v1.4h +** ret +*/ +float16x4_t +test_abs_maxnm_f16 (float16x4_t a, float16x4_t b) +{ + return vmaxnm_f16 (vabs_f16 (a), vabs_f16 (b)); +} + +/* +** test_abs_maxq_f16: +** fabs v1.8h, v1.8h +** fabs v0.8h, v0.8h +** fmax v0.8h, v0.8h, v1.8h +** ret +*/ +float16x8_t +test_abs_maxq_f16 (float16x8_t a, float16x8_t b) +{ + return vmaxq_f16 (vabsq_f16 (a), vabsq_f16 (b)); +} + +/* +** test_abs_maxnmq_f16: +** fabs v1.8h, v1.8h +** fabs v0.8h, v0.8h +** fmaxnm v0.8h, v0.8h, v1.8h +** ret +*/ +float16x8_t +test_abs_maxnmq_f16 (float16x8_t a, float16x8_t b) +{ + return vmaxnmq_f16 (vabsq_f16 (a), vabsq_f16 (b)); +} + +/* +** test_abs_max_f32: +** fabs v1.2s, v1.2s +** fabs v0.2s, v0.2s +** fmax v0.2s, v0.2s, v1.2s +** ret +*/ +float32x2_t +test_abs_max_f32 (float32x2_t a, float32x2_t b) +{ + return vmax_f32 (vabs_f32 (a), vabs_f32 (b)); +} + +/* +** test_abs_maxnm_f32: +** fabs v1.2s, v1.2s +** fabs v0.2s, v0.2s +** fmaxnm v0.2s, v0.2s, v1.2s +** ret +*/ +float32x2_t +test_abs_maxnm_f32 (float32x2_t a, float32x2_t b) +{ + return vmaxnm_f32 (vabs_f32 (a), vabs_f32 (b)); +} + +/* +** test_abs_maxq_f32: +** fabs v1.4s, v1.4s +** fabs v0.4s, v0.4s +** fmax v0.4s, v0.4s, v1.4s +** ret +*/ +float32x4_t +test_abs_maxq_f32 (float32x4_t a, float32x4_t b) +{ + return vmaxq_f32 (vabsq_f32 (a), vabsq_f32 (b)); +} + +/* +** test_abs_maxnmq_f32: +** fabs v1.4s, v1.4s +** fabs v0.4s, v0.4s +** fmaxnm v0.4s, v0.4s, v1.4s +** ret +*/ +float32x4_t +test_abs_maxnmq_f32 (float32x4_t a, float32x4_t b) +{ + return vmaxnmq_f32 (vabsq_f32 (a), vabsq_f32 (b)); +} + +/* +** test_abs_maxq_f64: +** fabs v1.2d, v1.2d +** fabs v0.2d, v0.2d +** fmax v0.2d, v0.2d, v1.2d +** ret +*/ +float64x2_t +test_abs_maxq_f64 (float64x2_t a, float64x2_t b) +{ + return vmaxq_f64 (vabsq_f64 (a), vabsq_f64 (b)); +} + +/* +** test_abs_maxnmq_f64: +** fabs v1.2d, v1.2d +** fabs v0.2d, v0.2d +** fmaxnm v0.2d, v0.2d, v1.2d +** ret +*/ +float64x2_t +test_abs_maxnmq_f64 (float64x2_t a, float64x2_t b) +{ + return vmaxnmq_f64 (vabsq_f64 (a), vabsq_f64 (b)); +} + +/* +** test_abs_min_f16: +** fabs v1.4h, v1.4h +** fabs v0.4h, v0.4h +** fmin v0.4h, v0.4h, v1.4h +** ret +*/ +float16x4_t +test_abs_min_f16 (float16x4_t a, float16x4_t b) +{ + return vmin_f16 (vabs_f16 (a), vabs_f16 (b)); +} + +/* +** test_abs_minnm_f16: +** fabs v1.4h, v1.4h +** fabs v0.4h, v0.4h +** fminnm v0.4h, v0.4h, v1.4h +** ret +*/ +float16x4_t +test_abs_minnm_f16 (float16x4_t a, float16x4_t b) +{ + return vminnm_f16 (vabs_f16 (a), vabs_f16 (b)); +} + +/* +** test_abs_minq_f16: +** fabs v1.8h, v1.8h +** fabs v0.8h, v0.8h +** fmin v0.8h, v0.8h, v1.8h +** ret +*/ +float16x8_t +test_abs_minq_f16 (float16x8_t a, float16x8_t b) +{ + return vminq_f16 (vabsq_f16 (a), vabsq_f16 (b)); +} + +/* +** test_abs_minnmq_f16: +** fabs v1.8h, v1.8h +** fabs v0.8h, v0.8h +** fminnm v0.8h, v0.8h, v1.8h +** ret +*/ +float16x8_t +test_abs_minnmq_f16 (float16x8_t a, float16x8_t b) +{ + return vminnmq_f16 (vabsq_f16 (a), vabsq_f16 (b)); +} + +/* +** test_abs_min_f32: +** fabs v1.2s, v1.2s +** fabs v0.2s, v0.2s +** fmin v0.2s, v0.2s, v1.2s +** ret +*/ +float32x2_t +test_abs_min_f32 (float32x2_t a, float32x2_t b) +{ + return vmin_f32 (vabs_f32 (a), vabs_f32 (b)); +} + +/* +** test_abs_minnm_f32: +** fabs v1.2s, v1.2s +** fabs v0.2s, v0.2s +** fminnm v0.2s, v0.2s, v1.2s +** ret +*/ +float32x2_t +test_abs_minnm_f32 (float32x2_t a, float32x2_t b) +{ + return vminnm_f32 (vabs_f32 (a), vabs_f32 (b)); +} + +/* +** test_abs_minq_f32: +** fabs v1.4s, v1.4s +** fabs v0.4s, v0.4s +** fmin v0.4s, v0.4s, v1.4s +** ret +*/ +float32x4_t +test_abs_minq_f32 (float32x4_t a, float32x4_t b) +{ + return vminq_f32 (vabsq_f32 (a), vabsq_f32 (b)); +} + +/* +** test_abs_minnmq_f32: +** fabs v1.4s, v1.4s +** fabs v0.4s, v0.4s +** fminnm v0.4s, v0.4s, v1.4s +** ret +*/ +float32x4_t +test_abs_minnmq_f32 (float32x4_t a, float32x4_t b) +{ + return vminnmq_f32 (vabsq_f32 (a), vabsq_f32 (b)); +} + +/* +** test_abs_minq_f64: +** fabs v1.2d, v1.2d +** fabs v0.2d, v0.2d +** fmin v0.2d, v0.2d, v1.2d +** ret +*/ +float64x2_t +test_abs_minq_f64 (float64x2_t a, float64x2_t b) +{ + return vminq_f64 (vabsq_f64 (a), vabsq_f64 (b)); +} + +/* +** test_abs_minnmq_f64: +** fabs v1.2d, v1.2d +** fabs v0.2d, v0.2d +** fminnm v0.2d, v0.2d, v1.2d +** ret +*/ +float64x2_t +test_abs_minnmq_f64 (float64x2_t a, float64x2_t b) +{ + return vminnmq_f64 (vabsq_f64 (a), vabsq_f64 (b)); +}