From patchwork Wed Aug 7 15:11:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Saurabh Jha X-Patchwork-Id: 1970109 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=kGnY9V8+; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=kGnY9V8+; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4WfDGG0Lq0z1yXs for ; Thu, 8 Aug 2024 01:13:42 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3F7FB385C6C1 for ; Wed, 7 Aug 2024 15:13:40 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on20630.outbound.protection.outlook.com [IPv6:2a01:111:f403:2612::630]) by sourceware.org (Postfix) with ESMTPS id 78F60385B82F for ; Wed, 7 Aug 2024 15:12:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 78F60385B82F 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 78F60385B82F Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:2612::630 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1723043528; cv=pass; b=fmnrVZOv65Fin2ponhljX6N8owTGp88+0VaiMwnWU7KAeBRaqGo53x9u47QJSePU5t3aAoW4oIn2JDoLavGSHlYJ8273mNV7u9ir34M/F+DUXiVPfLVkYTx7MhvRxo+lSdeqNg8c8NYrBL9dd0YRR7IS7kEV7m3WAoOPGtX+jHI= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1723043528; c=relaxed/simple; bh=gkKHC7C9tP/WAzxNEmE+BvU7kjgZtIkQT54MSukjrGo=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=k0WOubb/eIR6yFIZlUxzxiRH4dUycqlD06Y2ua/MUg6vFSf43ABByW2vNOI8sZPVt2ud3jCUW+91zVN9ZlT7GFwdnYuVqO9HgJwPEwW552vNqCAB/M2FSF/F7RjRiM8j8h9kL+67ol8BU6Pa7gx93F33K8qdv7JaksHQR0G2d4s= ARC-Authentication-Results: i=3; server2.sourceware.org ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=tJwq5LjMzHIkinEZaODfcx32YRbA0vDrgTT7H6ZWM82Z9YoV/zRG4PXDbARNGTny+V24/duVfOR8IOA2YH1Asc7TwD5DmuYpPgV7ClUaO9CGogIVgSVCL4v6RqORfk7bBiMr+NKBxMaGSrMaBrP8nbN6aLzXAEXSBRRB+bEtZ806+rHr24yi9dG0k82xZ2tmRwZ18jpjJqajXZ6Yx5X1FWk7h0p37BobGY1pZEdVQda0NDIWNh8J9LBTsiRuGUTfuHLSKWxBxzpYerSGRbUjk3Fe2Zx+NwmSEX4ufE4RUOP1ptLX7Hh2xp0XA512kzi1Wrh1uo2kVgwDiWxYau9p3Q== 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=06kODOm+pwhCnhFVGP8Gw8sKd5HWz+YoVLOvwDnnMCM=; b=AibxAv2sLwQED6LP0EyrOTJrHSo243Y6SRu/KvU6qptPFna+S32ZR9QgXO5ey3DTlfWLUGJeClFxSC580DGE1dUxKmQlsmSbFREP5282NZPHMwVPNrpmyF6WUC58Rtxw6u+r7cIt/qrGR233kqiWshPMhC+SVZVGbhCU7vaFcQRlSNnt3HsQertzuFhtbaDa2RglAWKOUV1BwVd4IPz6TCTrtJXknGcM6qmJZUlX3XzOaz8ZGsMMFUPQsJMgXRtWGV+IQDNYfGh4KhJV+41pUNMOrM2m+8h9p4Y2wFj+xez0QzLVw9ldRBZ0JukjRmUT3AhQ+WgsvdPxtsOLElgFLg== 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=06kODOm+pwhCnhFVGP8Gw8sKd5HWz+YoVLOvwDnnMCM=; b=kGnY9V8+8i3aYcgobSydykEmKf40xjXLdwHLNwyUUXTg5UeeEu03TQvE8eRUzRLGH25qoH6DGA93i1h17CU5rKl9tX/zt/+s03ROTnhGGgKQYI8Bmn3EGtts+gDt9TEvoFAgx/lhBgypYLdcm+9yR50fXLQsDk+1llITtha7mnc= Received: from AM6P195CA0021.EURP195.PROD.OUTLOOK.COM (2603:10a6:209:81::34) by AS2PR08MB9545.eurprd08.prod.outlook.com (2603:10a6:20b:60e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.27; Wed, 7 Aug 2024 15:12:00 +0000 Received: from AM4PEPF00027A63.eurprd04.prod.outlook.com (2603:10a6:209:81:cafe::a9) by AM6P195CA0021.outlook.office365.com (2603:10a6:209:81::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7849.13 via Frontend Transport; Wed, 7 Aug 2024 15:12:00 +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 AM4PEPF00027A63.mail.protection.outlook.com (10.167.16.73) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.7849.8 via Frontend Transport; Wed, 7 Aug 2024 15:12:00 +0000 Received: ("Tessian outbound 6c4cfdcc8c7d:v365"); Wed, 07 Aug 2024 15:12:00 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 924740a14be26586 X-CR-MTA-TID: 64aa7808 Received: from L607b586f248e.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id BC613CCF-BB7E-477B-87F1-A673B4297B5D.1; Wed, 07 Aug 2024 15:11:52 +0000 Received: from EUR02-DB5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id L607b586f248e.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 07 Aug 2024 15:11:52 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NrOpQYSZfgQpmNJk6OVoBWBMLD/sNoLZMOLIwU6UyeaPuyOhDcOE0ZgK5qqL8sHyjtaNWQUgRx3YGPKahd2LYk6A/4gN6U7Y+VA+d/b1s1BtZdZaf1l4iD/oMBQY8/pyCZCXg7k4LiJVO3j9hrlDnfO5+1PqApfUVkKfW5bEeksvZ2N28DNXY7lsYK0cNCJZHjchoHE13ddjPiEvBORY1Qa8/zi1IjxUufMw3UdBk4Ao1V4VJwCSV+BNAJ/j018Eef6uOWTaspLyevvWJDfiTn3ONPgAMxoIcTjta1bzfjbY+ALahdmklfV+GWevIE0vFD8zDiNYrCaf4b2h0cc3mQ== 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=06kODOm+pwhCnhFVGP8Gw8sKd5HWz+YoVLOvwDnnMCM=; b=hDc+dcP1DEN9empPjfrIlOWrCirmzGsaMcYp/0BttCx+vNS/FC8cSYgXfLbXVcQ9Y6062RAxdEd2ST4FNfo0EXPIFcqPkVyTCSghmpiSG7zjRtlq7GXWGawGrAcSGTJT+orB963UI7BAq3oKL9RoqA7TOr+Cl8RapQy0SOv+KWVY2Xu/+ev1YkeAXWNjFtB2eluuaJYDBsTzPB3fTcy3pMrtvrs1oC+MRz6lOI3ilbAem8d1hdJ0SbTSspVKn70MLJXeHPeRZXfLGypHNwJFbU6D6C/TsUYg69W8Z6212pGXLCMfuINcAbNYZ7Fi+EhpdIU7idctCGvEu2Ew6EDRFg== 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=06kODOm+pwhCnhFVGP8Gw8sKd5HWz+YoVLOvwDnnMCM=; b=kGnY9V8+8i3aYcgobSydykEmKf40xjXLdwHLNwyUUXTg5UeeEu03TQvE8eRUzRLGH25qoH6DGA93i1h17CU5rKl9tX/zt/+s03ROTnhGGgKQYI8Bmn3EGtts+gDt9TEvoFAgx/lhBgypYLdcm+9yR50fXLQsDk+1llITtha7mnc= Received: from DB7PR02CA0008.eurprd02.prod.outlook.com (2603:10a6:10:52::21) by DU0PR08MB7543.eurprd08.prod.outlook.com (2603:10a6:10:314::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.26; Wed, 7 Aug 2024 15:11:45 +0000 Received: from DU2PEPF00028D03.eurprd03.prod.outlook.com (2603:10a6:10:52:cafe::b7) by DB7PR02CA0008.outlook.office365.com (2603:10a6:10:52::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.26 via Frontend Transport; Wed, 7 Aug 2024 15:11:45 +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 DU2PEPF00028D03.mail.protection.outlook.com (10.167.242.187) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.7849.8 via Frontend Transport; Wed, 7 Aug 2024 15:11:45 +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, 7 Aug 2024 15:11:44 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) 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, 7 Aug 2024 15:11:42 +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, 7 Aug 2024 15:11:42 +0000 From: To: CC: , , Saurabh Jha Subject: [PATCH v3 1/2] aarch64: Add AdvSIMD faminmax intrinsics Date: Wed, 7 Aug 2024 16:11:13 +0100 Message-ID: <20240807151114.36785-2-saurabh.jha@arm.com> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20240807151114.36785-1-saurabh.jha@arm.com> References: <20240807151114.36785-1-saurabh.jha@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: DU2PEPF00028D03:EE_|DU0PR08MB7543:EE_|AM4PEPF00027A63:EE_|AS2PR08MB9545:EE_ X-MS-Office365-Filtering-Correlation-Id: 67c1a08d-3300-469f-ab2c-08dcb6f3497e 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|82310400026|36860700013|1800799024; X-Microsoft-Antispam-Message-Info-Original: 93zw9Cwre/oeKXAQu1LaAKTq9oYa5HgRci9eTuBVoNPX5dyOetO/QUsEvZPsklK7uI3GQESY9YB60XS4xv2KkuZXHgk8Kh3fm4kW6Lw7Ioj5uYgRyOSbWFb1JtPctx0Oc2NpsTvj2IcMh5kkt6LGB7ut55xOUEjfAw1AV7QsJOadgtZJ8afvIIdfsZSzBZtLG5lwmpdZXijGsr3CoPTUhJSb6KCED3a6Zg6w050CW3tjykbyHJDs4ZXbwduvJ/2Xr3g+XEVblkgMlJkBh1kH6pzMnX4ew/RL+gKrQKNaAt7F/bH+ZEk5piF5jbwhaVCBqaiIs8+F84qbPfxBukkUDZkDZaLD8YmiuCSo0oBgRaBNk+3Pw4/rtBqVYgPSCSZJqBbTws89Xmfq4KA8pRV8Ju6AlqEc57GCxxb256HT57Qf9KorQhjQBv5NsiLL1vpXMycvPA+f0gJbpwOVPEkqeGUgO/FkmCQ4U06TQUSngYi2pcehc/35EuD6BxnUmSh89mHJd0i20q0hj9hXEGaR6YoOQhdX4D5DPQ7wT5jwlxjrjQkpWnAuyC27ksgB3uNEP1tv5ecW40ZQD6JcBczvdHkTAyRHAHmqjZvWiphT2HGc3MD7hMC2E6vetwJPPNzxh+3qX36R+P1cu/5P0M28YFjZsKV+R0DF4CvpVCQjk4yXTFzaioaVRhTz9UyyAZG3a5THk5OvC59aQ/L821vTmX8Gm9Fvj/dL8XCTIY3p14ADGo8DQPQ11kYQ7EXYePh8aDIXWLRPHahFN6Ehg9o584RSY9l3hIiH9vXOMerwAU6TGMgLEU7dQ3w4zOZrSfVwJ/4c+RqVFKZ5o7GB8awdjfkfSVwDx7gxwqjXEJyUwuRfn4NJmqLCSp84SglE+/MmY4UW9Ecd02R5esskJtMmIB9XtOiMwEmLWL3WmrbdzGDC2KpadZ4kW7p+vb6MajVysNK1UW+cvOro/UfapTc8/l3ovw3oGSQRP+1aSP5k/q3bsc+f889J8j4ZYb4bqbjZtBs8I4Eui79QhU2N4uw8kBBSuSHvoneN73QFCnUPxiRSi7hXLuhGfNoC8pqwwXNd7tEd0bEpdTkskgIl+2NCrmxHTZ0IeT88f2L78625vdu2lwYknXeYqDBzldgncKQe1de6I8zUkKcp/sr+qB76v6jlcr9I4oEoHFrC50VeJB9yrvlnXCgW5KowB+9lAej+tEz9CWPVXr70F7dw7ucG4SrYXU7THazKohY0eTcDXrU5OYddbXtVwGtrII6EorfZGpCFLvqkY4kaNQqDACJiyq6NtQR5APBVItLgChLiETEDuDPrysFLbvEkdPeZhQWn/PmvP+zvgCewRH9jyxdZx+AJIrjIx5jl6hC/Eof93AjB7VnaIfpA/ahKA8WIYSuG07u2wtY6MRD04okjwDnQkQ== 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)(376014)(82310400026)(36860700013)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB7543 X-MS-Exchange-SkipListedInternetSender: ip=[2603:10a6:10:52::21]; domain=DB7PR02CA0008.eurprd02.prod.outlook.com X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM4PEPF00027A63.eurprd04.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: df56bfc5-0116-4c20-47e8-08dcb6f340ab X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|82310400026|36860700013|35042699022|1800799024; X-Microsoft-Antispam-Message-Info: =?utf-8?q?qy82q3jZ9Qn30pU210tuUgxnIbqjJ1O?= =?utf-8?q?8HUcRtNrmeRRH8RlIucIPrMRCNtgraoVm3J1HuJ7SuJUWSNKMIwEmpaqV3Gqmq+uH?= =?utf-8?q?AxdXGuBly2mZUJ8aUd61L1iWDTnB/YSeKlOBh7rcDYRt6LJFpKUcB9vkBP7pNsOD7?= =?utf-8?q?GfL3RJ49GE0EbowaLcPpM2NSuXjckMvw/NvP9Npes/KuznoOarOGCi1TIGr4NiAlh?= =?utf-8?q?yDz3wUL61fKdA3F7lVlYvVL6RA0qU1iE3KOjgZodoWZPZ3CHdayCvJQUrAM7UQMVh?= =?utf-8?q?pGqNL7AzAQE5wdaSZ+/cae2V8ERbKlfGkC2T99ZI+8N6latp0YYqYuceIrKeSEknI?= =?utf-8?q?Zye5PR8GjJsB3rtfAaNvszy/Y99oMp1mBGkHfSMz2gdEAXMElhmdSufSW/GhUDfcK?= =?utf-8?q?VlkNpb93M77WThuoNmcgC/KCWD6CZNkPO6b98p8ffKdbzPzB/ivRERAgow0uPJXLD?= =?utf-8?q?4M560nzMPPOqfy0zPO0qPK/4izrXGlVMPCZPsnxCotttSwS/ifUGK44ms0jCv2oq9?= =?utf-8?q?L42rNdQiHz0zPeaXABziO8ViCvpCoPFUMcuyG4homcSz2ud1t8jmc32+e4BB8/Eym?= =?utf-8?q?4AuCpiUBgLkfx0U44Z1e2Vm3zAoDjaLTT2SWkmf5FtVW3ZkMyGQR8XmP1WZXMs5mF?= =?utf-8?q?O1bfCVaSgWDaTp3T/CgHyufCf2kYWKWH9yWd5PHKV9EylAFJVmEH5fa9p6FVkY3N2?= =?utf-8?q?Rxg9z9tvdeK7w2PFu4AIDIcxLaAh1NgFrsfzdoEHKC19HeOK2ayj2vYGVdQxxh/yA?= =?utf-8?q?BApnzcJR8Bfx1MT2keGuWXv69oEBRHEFBdXo3FtdRA7cKvR3m1Nbh7+y7Vl9jIxt4?= =?utf-8?q?wxRgUl8bxNSPGx0s8xTLeUOZY7SqfDACj4sOMrdmy170ajoaG7VOPy01j1wFncLdl?= =?utf-8?q?/HRx88krNmtrJXe/6j3v2M6pmfftNT7kVxQu+izra69EPFb5US1iG7gLf4z3yZ6Ag?= =?utf-8?q?WyFXkiENN0VePWY8O///+i85W3NSix5A+KPR4XqwJ2PApBGN9EAwt5ftJxMDayPTu?= =?utf-8?q?04ezs8m3tj6yHh69ef/e4TpRqKiSw7RxWiDOznGjbE4qUYIOSIjpSvls/szfEDWVO?= =?utf-8?q?bnPPmeYddYS1O7Vn8Glj19s3tBMj+4uNr8p9qY1OhklNzp25iSrW8BFP8i4i5A4xx?= =?utf-8?q?j1vXRpK/23+lFcCVTSNJowJhawcUCQNKkq8w27di6LF3+oNfaRcsXPO5BuhWmbqix?= =?utf-8?q?xQdewHMze8TwVf6bfTjc6/5SWrNlOPE88oLzKa1hTMOIWabm2DiYyhX4hQqn2o3YD?= =?utf-8?q?1mtrWjqzDQYWjisbN4fWoILHas2iQtSV+i7Tsas56A7KOHRvEPnkWeg7t9R7/D9/2?= =?utf-8?q?gmcILCEzAr/NRk551/5clcxLWpdAl17Q3w=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)(376014)(82310400026)(36860700013)(35042699022)(1800799024); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Aug 2024 15:12:00.5176 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 67c1a08d-3300-469f-ab2c-08dcb6f3497e 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: AM4PEPF00027A63.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB9545 X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FORGED_SPF_HELO, GIT_PATCH_0, KAM_SHORT, 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 does two things: 1. Introduces AdvSIMD faminmax intrinsics. 2. Move report_missing_extension and reported_missing_extension_p to make it more usable. The intrinsics of this extension are implemented as the following builtin functions: * vamax_f16 * vamaxq_f16 * vamax_f32 * vamaxq_f32 * vamaxq_f64 * vamin_f16 * vaminq_f16 * vamin_f32 * vaminq_f32 * vaminq_f64 We moved the definition of `report_missing_extension` from gcc/config/aarch64/aarch64-sve-builtins.cc to gcc/config/aarch64/aarch64-builtins.cc and its declaration to gcc/config/aarch64/aarch64-builtins.h. We also moved the declaration of `reported_missing_extension_p` from gcc/config/aarch64/aarch64-sve-builtins.cc to gcc/config/aarch64/aarch64-builtins.cc, closer to the definition of `report_missing_extension`. In the exsiting code structure, this leads to `report_missing_extension` being usable from both normal builtins and sve builtins. gcc/ChangeLog: * config/aarch64/aarch64-builtins.cc (enum aarch64_builtins): New enum values for faminmax builtins. (aarch64_init_faminmax_builtins): New function to declare new builtins. (handle_arm_neon_h): Modify to call aarch64_init_faminmax_builtins. (aarch64_general_check_builtin_call): Modify to check whether +faminmax flag is being used and printing error message if not being used. (aarch64_expand_builtin_faminmax): New function to emit instructions of this extension. (aarch64_general_expand_builtin): Modify to call aarch64_expand_builtin_faminmax. (report_missing_extension): Move from config/aarch64/aarch64-sve-builtins.cc. * config/aarch64/aarch64-builtins.h (report_missing_extension): Declaration for this function so that it can be used wherever this header is included. (reported_missing_extension_p): Move from config/aarch64/aarch64-sve-builtins.cc * config/aarch64/aarch64-option-extensions.def (AARCH64_OPT_EXTENSION): Introduce new flag for this extension. * config/aarch64/aarch64-simd.md (aarch64_): Instruction pattern for faminmax intrinsics. * config/aarch64/aarch64-sve-builtins.cc (reported_missing_extension_p): Move to config/aarch64/aarch64-builtins.c (report_missing_extension): Move to config/aarch64/aarch64-builtins.cc * config/aarch64/aarch64.h (TARGET_FAMINMAX): Introduce new flag for this extension. * config/aarch64/iterators.md: Introduce new iterators for faminmax intrinsics. * config/arm/types.md: Introduce neon_fp_aminmax attributes. * doc/invoke.texi: Document extension in AArch64 Options. gcc/testsuite/ChangeLog: * gcc.target/aarch64/simd/faminmax-builtins-no-flag.c: New test. * gcc.target/aarch64/simd/faminmax-builtins.c: New test. --- gcc/config/aarch64/aarch64-builtins.cc | 173 +++++++++++++++++- gcc/config/aarch64/aarch64-builtins.h | 5 +- .../aarch64/aarch64-option-extensions.def | 2 + gcc/config/aarch64/aarch64-simd.md | 11 ++ gcc/config/aarch64/aarch64-sve-builtins.cc | 22 --- gcc/config/aarch64/aarch64.h | 4 + gcc/config/aarch64/iterators.md | 9 + gcc/config/arm/types.md | 6 + gcc/doc/invoke.texi | 2 + .../aarch64/simd/faminmax-builtins-no-flag.c | 10 + .../aarch64/simd/faminmax-builtins.c | 115 ++++++++++++ 11 files changed, 327 insertions(+), 32 deletions(-) create mode 100644 gcc/testsuite/gcc.target/aarch64/simd/faminmax-builtins-no-flag.c create mode 100644 gcc/testsuite/gcc.target/aarch64/simd/faminmax-builtins.c diff --git a/gcc/config/aarch64/aarch64-builtins.cc b/gcc/config/aarch64/aarch64-builtins.cc index 30669f8aa18..cd590186f22 100644 --- a/gcc/config/aarch64/aarch64-builtins.cc +++ b/gcc/config/aarch64/aarch64-builtins.cc @@ -829,6 +829,17 @@ enum aarch64_builtins AARCH64_RBIT, AARCH64_RBITL, AARCH64_RBITLL, + /* FAMINMAX builtins. */ + AARCH64_FAMINMAX_BUILTIN_FAMAX4H, + AARCH64_FAMINMAX_BUILTIN_FAMAX8H, + AARCH64_FAMINMAX_BUILTIN_FAMAX2S, + AARCH64_FAMINMAX_BUILTIN_FAMAX4S, + AARCH64_FAMINMAX_BUILTIN_FAMAX2D, + AARCH64_FAMINMAX_BUILTIN_FAMIN4H, + AARCH64_FAMINMAX_BUILTIN_FAMIN8H, + AARCH64_FAMINMAX_BUILTIN_FAMIN2S, + AARCH64_FAMINMAX_BUILTIN_FAMIN4S, + AARCH64_FAMINMAX_BUILTIN_FAMIN2D, /* System register builtins. */ AARCH64_RSR, AARCH64_RSRP, @@ -1547,6 +1558,66 @@ aarch64_init_simd_builtin_functions (bool called_from_pragma) } } +/* Initialize the absolute maximum/minimum (FAMINMAX) builtins. */ + +typedef struct +{ + const char *name; + unsigned int code; + tree eltype; + machine_mode mode; +} faminmax_builtins_data; + +static void +aarch64_init_faminmax_builtins () +{ + faminmax_builtins_data data[] = { + /* Absolute maximum. */ + {"vamax_f16", AARCH64_FAMINMAX_BUILTIN_FAMAX4H, + aarch64_simd_types[Float16x4_t].eltype, + aarch64_simd_types[Float16x4_t].mode}, + {"vamaxq_f16", AARCH64_FAMINMAX_BUILTIN_FAMAX8H, + aarch64_simd_types[Float16x8_t].eltype, + aarch64_simd_types[Float16x8_t].mode}, + {"vamax_f32", AARCH64_FAMINMAX_BUILTIN_FAMAX2S, + aarch64_simd_types[Float32x2_t].eltype, + aarch64_simd_types[Float32x2_t].mode}, + {"vamaxq_f32", AARCH64_FAMINMAX_BUILTIN_FAMAX4S, + aarch64_simd_types[Float32x4_t].eltype, + aarch64_simd_types[Float32x4_t].mode}, + {"vamaxq_f64", AARCH64_FAMINMAX_BUILTIN_FAMAX2D, + aarch64_simd_types[Float64x2_t].eltype, + aarch64_simd_types[Float64x2_t].mode}, + /* Absolute minimum. */ + {"vamin_f16", AARCH64_FAMINMAX_BUILTIN_FAMIN4H, + aarch64_simd_types[Float16x4_t].eltype, + aarch64_simd_types[Float16x4_t].mode}, + {"vaminq_f16", AARCH64_FAMINMAX_BUILTIN_FAMIN8H, + aarch64_simd_types[Float16x8_t].eltype, + aarch64_simd_types[Float16x8_t].mode}, + {"vamin_f32", AARCH64_FAMINMAX_BUILTIN_FAMIN2S, + aarch64_simd_types[Float32x2_t].eltype, + aarch64_simd_types[Float32x2_t].mode}, + {"vaminq_f32", AARCH64_FAMINMAX_BUILTIN_FAMIN4S, + aarch64_simd_types[Float32x4_t].eltype, + aarch64_simd_types[Float32x4_t].mode}, + {"vaminq_f64", AARCH64_FAMINMAX_BUILTIN_FAMIN2D, + aarch64_simd_types[Float64x2_t].eltype, + aarch64_simd_types[Float64x2_t].mode}, + }; + + for (size_t i = 0; i < ARRAY_SIZE (data); ++i) + { + tree type + = build_vector_type (data[i].eltype, GET_MODE_NUNITS (data[i].mode)); + tree fntype = build_function_type_list (type, type, type, NULL_TREE); + unsigned int code = data[i].code; + const char *name = data[i].name; + aarch64_builtin_decls[code] + = aarch64_general_simulate_builtin (name, fntype, code); + } +} + /* Register the tuple type that contains NUM_VECTORS of the AdvSIMD type indexed by TYPE_INDEX. */ static void @@ -1640,6 +1711,7 @@ handle_arm_neon_h (void) aarch64_init_simd_builtin_functions (true); aarch64_init_simd_intrinsics (); + aarch64_init_faminmax_builtins (); } static void @@ -2197,15 +2269,35 @@ aarch64_general_check_builtin_call (location_t location, vec, case AARCH64_WSR64: case AARCH64_WSRF: case AARCH64_WSRF64: - tree addr = STRIP_NOPS (args[0]); - if (TREE_CODE (TREE_TYPE (addr)) != POINTER_TYPE - || TREE_CODE (addr) != ADDR_EXPR - || TREE_CODE (TREE_OPERAND (addr, 0)) != STRING_CST) - { - error_at (location, "first argument to %qD must be a string literal", - fndecl); - return false; - } + { + tree addr = STRIP_NOPS (args[0]); + if (TREE_CODE (TREE_TYPE (addr)) != POINTER_TYPE + || TREE_CODE (addr) != ADDR_EXPR + || TREE_CODE (TREE_OPERAND (addr, 0)) != STRING_CST) + { + error_at (location, + "first argument to %qD must be a string literal", + fndecl); + return false; + } + } + case AARCH64_FAMINMAX_BUILTIN_FAMAX4H: + case AARCH64_FAMINMAX_BUILTIN_FAMAX8H: + case AARCH64_FAMINMAX_BUILTIN_FAMAX2S: + case AARCH64_FAMINMAX_BUILTIN_FAMAX4S: + case AARCH64_FAMINMAX_BUILTIN_FAMAX2D: + case AARCH64_FAMINMAX_BUILTIN_FAMIN4H: + case AARCH64_FAMINMAX_BUILTIN_FAMIN8H: + case AARCH64_FAMINMAX_BUILTIN_FAMIN2S: + case AARCH64_FAMINMAX_BUILTIN_FAMIN4S: + case AARCH64_FAMINMAX_BUILTIN_FAMIN2D: + { + if (!TARGET_FAMINMAX) + { + report_missing_extension (location, fndecl, "faminmax"); + return false; + } + } } /* Default behavior. */ return true; @@ -3071,6 +3163,44 @@ aarch64_expand_builtin_data_intrinsic (unsigned int fcode, tree exp, rtx target) return ops[0].value; } +static rtx +aarch64_expand_builtin_faminmax (unsigned int fcode, tree exp, rtx target) +{ + machine_mode mode = TYPE_MODE (TREE_TYPE (exp)); + rtx op0 = force_reg (mode, expand_normal (CALL_EXPR_ARG (exp, 0))); + rtx op1 = force_reg (mode, expand_normal (CALL_EXPR_ARG (exp, 1))); + + enum insn_code icode; + if (fcode == AARCH64_FAMINMAX_BUILTIN_FAMAX4H) + icode = CODE_FOR_aarch64_famaxv4hf; + else if (fcode == AARCH64_FAMINMAX_BUILTIN_FAMAX8H) + icode = CODE_FOR_aarch64_famaxv8hf; + else if (fcode == AARCH64_FAMINMAX_BUILTIN_FAMAX2S) + icode = CODE_FOR_aarch64_famaxv2sf; + else if (fcode == AARCH64_FAMINMAX_BUILTIN_FAMAX4S) + icode = CODE_FOR_aarch64_famaxv4sf; + else if (fcode == AARCH64_FAMINMAX_BUILTIN_FAMAX2D) + icode = CODE_FOR_aarch64_famaxv2df; + else if (fcode == AARCH64_FAMINMAX_BUILTIN_FAMIN4H) + icode = CODE_FOR_aarch64_faminv4hf; + else if (fcode == AARCH64_FAMINMAX_BUILTIN_FAMIN8H) + icode = CODE_FOR_aarch64_faminv8hf; + else if (fcode == AARCH64_FAMINMAX_BUILTIN_FAMIN2S) + icode = CODE_FOR_aarch64_faminv2sf; + else if (fcode == AARCH64_FAMINMAX_BUILTIN_FAMIN4S) + icode = CODE_FOR_aarch64_faminv4sf; + else if (fcode == AARCH64_FAMINMAX_BUILTIN_FAMIN2D) + icode = CODE_FOR_aarch64_faminv2df; + else + gcc_unreachable (); + + rtx pat = GEN_FCN (icode) (target, op0, op1); + + emit_insn (pat); + + return target; +} + /* Expand an expression EXP as fpsr or fpcr setter (depending on UNSPEC) using MODE. */ static void @@ -3250,6 +3380,9 @@ aarch64_general_expand_builtin (unsigned int fcode, tree exp, rtx target, if (fcode >= AARCH64_REV16 && fcode <= AARCH64_RBITLL) return aarch64_expand_builtin_data_intrinsic (fcode, exp, target); + if (fcode >= AARCH64_FAMINMAX_BUILTIN_FAMAX4H + && fcode <= AARCH64_FAMINMAX_BUILTIN_FAMIN2D) + return aarch64_expand_builtin_faminmax (fcode, exp, target); gcc_unreachable (); } @@ -3794,6 +3927,28 @@ aarch64_atomic_assign_expand_fenv (tree *hold, tree *clear, tree *update) reload_fenv, restore_fnenv), update_call); } +/* True if we've already complained about attempts to use functions + when the required extension is disabled. */ +static bool reported_missing_extension_p; + +/* Report an error against LOCATION that the user has tried to use + function FNDECL when extension EXTENSION is disabled. */ +void +report_missing_extension (location_t location, tree fndecl, + const char *extension) +{ + /* Avoid reporting a slew of messages for a single oversight. */ + if (reported_missing_extension_p) + return; + + error_at (location, "ACLE function %qD requires ISA extension %qs", + fndecl, extension); + inform (location, "you can enable %qs using the command-line" + " option %<-march%>, or by using the %" + " attribute or pragma", extension); + reported_missing_extension_p = true; +} + /* Resolve overloaded MEMTAG build-in functions. */ #define AARCH64_BUILTIN_SUBCODE(F) \ (DECL_MD_FUNCTION_CODE (F) >> AARCH64_BUILTIN_SHIFT) diff --git a/gcc/config/aarch64/aarch64-builtins.h b/gcc/config/aarch64/aarch64-builtins.h index e326fe66676..93e31a30ec6 100644 --- a/gcc/config/aarch64/aarch64-builtins.h +++ b/gcc/config/aarch64/aarch64-builtins.h @@ -96,4 +96,7 @@ struct GTY(()) aarch64_simd_type_info extern aarch64_simd_type_info aarch64_simd_types[]; -#endif \ No newline at end of file +void report_missing_extension (location_t location, tree fndecl, + const char *extension); + +#endif diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def index 6998627f377..8279f5a76ea 100644 --- a/gcc/config/aarch64/aarch64-option-extensions.def +++ b/gcc/config/aarch64/aarch64-option-extensions.def @@ -234,6 +234,8 @@ AARCH64_OPT_EXTENSION("gcs", GCS, (), (), (), "gcs") AARCH64_OPT_EXTENSION("fp8", FP8, (SIMD), (), (), "fp8") +AARCH64_OPT_EXTENSION("faminmax", FAMINMAX, (SIMD), (), (), "faminmax") + #undef AARCH64_OPT_FMV_EXTENSION #undef AARCH64_OPT_EXTENSION #undef AARCH64_FMV_FEATURE diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 816f499e963..0e1dd48dddb 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -9890,3 +9890,14 @@ "shl\\t%d0, %d1, #16" [(set_attr "type" "neon_shift_imm")] ) + +;; faminmax +(define_insn "aarch64_" + [(set (match_operand:VHSDF 0 "register_operand" "=w") + (unspec:VHSDF [(match_operand:VHSDF 1 "register_operand" "w") + (match_operand:VHSDF 2 "register_operand" "w")] + FAMINMAX_UNS))] + "TARGET_FAMINMAX" + "\t%0., %1., %2." + [(set_attr "type" "neon_fp_aminmax")] +) diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc b/gcc/config/aarch64/aarch64-sve-builtins.cc index 0a560eaedca..f9120575671 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins.cc @@ -947,10 +947,6 @@ static hash_table *function_table; are IDENTIFIER_NODEs. */ static GTY(()) hash_map *overload_names[2]; -/* True if we've already complained about attempts to use functions - when the required extension is disabled. */ -static bool reported_missing_extension_p; - /* True if we've already complained about attempts to use functions which require registers that are missing. */ static bool reported_missing_registers_p; @@ -1076,24 +1072,6 @@ lookup_fndecl (tree fndecl) return &(*registered_functions)[subcode]->instance; } -/* Report an error against LOCATION that the user has tried to use - function FNDECL when extension EXTENSION is disabled. */ -static void -report_missing_extension (location_t location, tree fndecl, - const char *extension) -{ - /* Avoid reporting a slew of messages for a single oversight. */ - if (reported_missing_extension_p) - return; - - error_at (location, "ACLE function %qD requires ISA extension %qs", - fndecl, extension); - inform (location, "you can enable %qs using the command-line" - " option %<-march%>, or by using the %" - " attribute or pragma", extension); - reported_missing_extension_p = true; -} - /* Check whether the registers required by SVE function fndecl are available. Report an error against LOCATION and return false if not. */ static bool diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index 2dfb999bea5..de14f57071a 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -457,6 +457,10 @@ constexpr auto AARCH64_FL_DEFAULT_ISA_MODE ATTRIBUTE_UNUSED enabled through +gcs. */ #define TARGET_GCS AARCH64_HAVE_ISA (GCS) +/* Floating Point Absolute Maximum/Minimum extension instructions are + enabled through +faminmax. */ +#define TARGET_FAMINMAX AARCH64_HAVE_ISA (FAMINMAX) + /* Prefer different predicate registers for the output of a predicated operation over re-using an existing input predicate. */ #define TARGET_SVE_PRED_CLOBBER (TARGET_SVE \ diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md index aaa4afefe2c..ce1c63e63cc 100644 --- a/gcc/config/aarch64/iterators.md +++ b/gcc/config/aarch64/iterators.md @@ -1056,6 +1056,8 @@ UNSPEC_BFCVTN2 ; Used in aarch64-simd.md. UNSPEC_BFCVT ; Used in aarch64-simd.md. UNSPEC_FCVTXN ; Used in aarch64-simd.md. + UNSPEC_FAMAX ; Used in aarch64-simd.md. + UNSPEC_FAMIN ; Used in aarch64-simd.md. ;; All used in aarch64-sve2.md UNSPEC_FCVTN @@ -4462,3 +4464,10 @@ (UNSPECV_SET_FPCR "fpcr")]) (define_int_attr bits_etype [(8 "b") (16 "h") (32 "s") (64 "d")]) + +;; Iterators and attributes for faminmax + +(define_int_iterator FAMINMAX_UNS [UNSPEC_FAMAX UNSPEC_FAMIN]) + +(define_int_attr faminmax_uns_op + [(UNSPEC_FAMAX "famax") (UNSPEC_FAMIN "famin")]) diff --git a/gcc/config/arm/types.md b/gcc/config/arm/types.md index 9527bdb9e87..d8de9dbc9d1 100644 --- a/gcc/config/arm/types.md +++ b/gcc/config/arm/types.md @@ -492,6 +492,8 @@ ; neon_fp_reduc_minmax_s_q ; neon_fp_reduc_minmax_d ; neon_fp_reduc_minmax_d_q +; neon_fp_aminmax +; neon_fp_aminmax_q ; neon_fp_cvt_narrow_s_q ; neon_fp_cvt_narrow_d_q ; neon_fp_cvt_widen_h @@ -1044,6 +1046,8 @@ neon_fp_reduc_minmax_d,\ neon_fp_reduc_minmax_d_q,\ \ + neon_fp_aminmax,\ + neon_fp_aminmax_q,\ neon_fp_cvt_narrow_s_q,\ neon_fp_cvt_narrow_d_q,\ neon_fp_cvt_widen_h,\ @@ -1264,6 +1268,8 @@ neon_fp_reduc_add_d_q, neon_fp_reduc_minmax_s, neon_fp_reduc_minmax_s_q, neon_fp_reduc_minmax_d,\ neon_fp_reduc_minmax_d_q,\ + neon_fp_aminmax, neon_fp_aminmax_q,\ + neon_fp_aminmax, neon_fp_aminmax_q,\ neon_fp_cvt_narrow_s_q, neon_fp_cvt_narrow_d_q,\ neon_fp_cvt_widen_h, neon_fp_cvt_widen_s, neon_fp_to_int_s,\ neon_fp_to_int_s_q, neon_int_to_fp_s, neon_int_to_fp_s_q,\ diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 27539a01785..bfb0559e24f 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -21864,6 +21864,8 @@ Enable support for Armv8.9-a/9.4-a translation hardening extension. Enable the RCpc3 (Release Consistency) extension. @item fp8 Enable the fp8 (8-bit floating point) extension. +@item faminmax +Enable the Floating Point Absolute Maximum/Minimum extension. @end table diff --git a/gcc/testsuite/gcc.target/aarch64/simd/faminmax-builtins-no-flag.c b/gcc/testsuite/gcc.target/aarch64/simd/faminmax-builtins-no-flag.c new file mode 100644 index 00000000000..63ed1508c23 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/simd/faminmax-builtins-no-flag.c @@ -0,0 +1,10 @@ +/* { dg-do assemble} */ +/* { dg-additional-options "-march=armv9-a" } */ + +#include "arm_neon.h" + +void +test (float32x4_t a, float32x4_t b) +{ + vamaxq_f32 (a, b); /* { dg-error {ACLE function 'vamaxq_f32' requires ISA extension 'faminmax'} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/simd/faminmax-builtins.c b/gcc/testsuite/gcc.target/aarch64/simd/faminmax-builtins.c new file mode 100644 index 00000000000..7e4f3eba81a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/simd/faminmax-builtins.c @@ -0,0 +1,115 @@ +/* { dg-do assemble} */ +/* { dg-additional-options "-O3 -march=armv9-a+faminmax" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include "arm_neon.h" + +/* +** test_vamax_f16: +** famax v0.4h, v0.4h, v1.4h +** ret +*/ +float16x4_t +test_vamax_f16 (float16x4_t a, float16x4_t b) +{ + return vamax_f16 (a, b); +} + +/* +** test_vamaxq_f16: +** famax v0.8h, v0.8h, v1.8h +** ret +*/ +float16x8_t +test_vamaxq_f16 (float16x8_t a, float16x8_t b) +{ + return vamaxq_f16 (a, b); +} + +/* +** test_vamax_f32: +** famax v0.2s, v0.2s, v1.2s +** ret +*/ +float32x2_t +test_vamax_f32 (float32x2_t a, float32x2_t b) +{ + return vamax_f32 (a, b); +} + +/* +** test_vamaxq_f32: +** famax v0.4s, v0.4s, v1.4s +** ret +*/ +float32x4_t +test_vamaxq_f32 (float32x4_t a, float32x4_t b) +{ + return vamaxq_f32 (a, b); +} + +/* +** test_vamaxq_f64: +** famax v0.2d, v0.2d, v1.2d +** ret +*/ +float64x2_t +test_vamaxq_f64 (float64x2_t a, float64x2_t b) +{ + return vamaxq_f64 (a, b); +} + +/* +** test_vamin_f16: +** famin v0.4h, v0.4h, v1.4h +** ret +*/ +float16x4_t +test_vamin_f16 (float16x4_t a, float16x4_t b) +{ + return vamin_f16 (a, b); +} + +/* +** test_vaminq_f16: +** famin v0.8h, v0.8h, v1.8h +** ret +*/ +float16x8_t +test_vaminq_f16 (float16x8_t a, float16x8_t b) +{ + return vaminq_f16 (a, b); +} + +/* +** test_vamin_f32: +** famin v0.2s, v0.2s, v1.2s +** ret +*/ +float32x2_t +test_vamin_f32 (float32x2_t a, float32x2_t b) +{ + return vamin_f32 (a, b); +} + +/* +** test_vaminq_f32: +** famin v0.4s, v0.4s, v1.4s +** ret +*/ +float32x4_t +test_vaminq_f32 (float32x4_t a, float32x4_t b) +{ + return vaminq_f32 (a, b); +} + +/* +** test_vaminq_f64: +** famin v0.2d, v0.2d, v1.2d +** ret +*/ +float64x2_t +test_vaminq_f64 (float64x2_t a, float64x2_t b) +{ + return vaminq_f64 (a, b); +}