get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.2/patches/2234308/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2234308,
    "url": "http://patchwork.ozlabs.org/api/1.2/patches/2234308/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/20260507155010.23784-2-richard.ball@arm.com/",
    "project": {
        "id": 17,
        "url": "http://patchwork.ozlabs.org/api/1.2/projects/17/?format=api",
        "name": "GNU Compiler Collection",
        "link_name": "gcc",
        "list_id": "gcc-patches.gcc.gnu.org",
        "list_email": "gcc-patches@gcc.gnu.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260507155010.23784-2-richard.ball@arm.com>",
    "list_archive_url": null,
    "date": "2026-05-07T15:50:09",
    "name": "[1/2] aarch64: Add support for FEAT_CMH atomic store intrinsics",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "4390bba21639bb8ff7cbc5e11affb6703fe866ea",
    "submitter": {
        "id": 84470,
        "url": "http://patchwork.ozlabs.org/api/1.2/people/84470/?format=api",
        "name": "Richard Ball",
        "email": "richard.ball@arm.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/20260507155010.23784-2-richard.ball@arm.com/mbox/",
    "series": [
        {
            "id": 503209,
            "url": "http://patchwork.ozlabs.org/api/1.2/series/503209/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=503209",
            "date": "2026-05-07T15:50:08",
            "name": "aarch64: Add support for FEAT_CMH",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/503209/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2234308/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2234308/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "gcc-patches@gcc.gnu.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@legolas.ozlabs.org",
            "gcc-patches@gcc.gnu.org"
        ],
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256\n header.s=selector1 header.b=kh2yOgXQ;\n\tdkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com\n header.a=rsa-sha256 header.s=selector1 header.b=kh2yOgXQ;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)",
            "sourceware.org;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256\n header.s=selector1 header.b=kh2yOgXQ;\n\tdkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com\n header.a=rsa-sha256 header.s=selector1 header.b=kh2yOgXQ",
            "sourceware.org;\n dmarc=pass (p=none dis=none) header.from=arm.com",
            "sourceware.org; spf=pass smtp.mailfrom=arm.com",
            "sourceware.org;\n arc=pass smtp.remote-ip=2a01:111:f403:c200::3"
        ],
        "Received": [
            "from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4gBGxF6KQ1z1yKd\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 08 May 2026 01:53:05 +1000 (AEST)",
            "from vm01.sourceware.org (localhost [IPv6:::1])\n\tby sourceware.org (Postfix) with ESMTP id BC21A4BA2E29\n\tfor <incoming@patchwork.ozlabs.org>; Thu,  7 May 2026 15:53:03 +0000 (GMT)",
            "from DU2PR03CU002.outbound.protection.outlook.com\n (mail-northeuropeazlp170110003.outbound.protection.outlook.com\n [IPv6:2a01:111:f403:c200::3])\n by sourceware.org (Postfix) with ESMTPS id AC5B74BA2E1B\n for <gcc-patches@gcc.gnu.org>; Thu,  7 May 2026 15:51:47 +0000 (GMT)",
            "from DU2PR04CA0252.eurprd04.prod.outlook.com (2603:10a6:10:28e::17)\n by AS8PR08MB6502.eurprd08.prod.outlook.com (2603:10a6:20b:335::24)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9891.17; Thu, 7 May\n 2026 15:51:40 +0000",
            "from DB1PEPF000509F5.eurprd02.prod.outlook.com\n (2603:10a6:10:28e:cafe::69) by DU2PR04CA0252.outlook.office365.com\n (2603:10a6:10:28e::17) with Microsoft SMTP Server (version=TLS1_3,\n cipher=TLS_AES_256_GCM_SHA384) id 15.20.9891.17 via Frontend Transport; Thu,\n 7 May 2026 15:51:40 +0000",
            "from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by\n DB1PEPF000509F5.mail.protection.outlook.com (10.167.242.151) with Microsoft\n SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9891.9\n via Frontend Transport; Thu, 7 May 2026 15:51:40 +0000",
            "from AS9PR01CA0027.eurprd01.prod.exchangelabs.com\n (2603:10a6:20b:542::11) by DB9PR08MB11402.eurprd08.prod.outlook.com\n (2603:10a6:10:60e::10) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9891.15; Thu, 7 May\n 2026 15:50:35 +0000",
            "from AMS1EPF0000008E.eurprd05.prod.outlook.com\n (2603:10a6:20b:542:cafe::d7) by AS9PR01CA0027.outlook.office365.com\n (2603:10a6:20b:542::11) with Microsoft SMTP Server (version=TLS1_3,\n cipher=TLS_AES_256_GCM_SHA384) id 15.20.9891.17 via Frontend Transport; Thu,\n 7 May 2026 15:50:35 +0000",
            "from nebula.arm.com (172.205.89.229) by\n AMS1EPF0000008E.mail.protection.outlook.com (10.167.242.85) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.9891.9 via Frontend Transport; Thu, 7 May 2026 15:50:35 +0000",
            "from AZ-NEU-EX04.Arm.com (10.240.25.138) by AZ-NEU-EX03.Arm.com\n (10.240.25.137) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Thu, 7 May\n 2026 15:50:34 +0000",
            "from e137840.cambridge.arm.com (10.2.78.31) by mail.arm.com\n (10.240.25.138) with Microsoft SMTP Server id 15.2.2562.29 via Frontend\n Transport; Thu, 7 May 2026 15:50:34 +0000"
        ],
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 sourceware.org BC21A4BA2E29",
            "OpenDKIM Filter v2.11.0 sourceware.org AC5B74BA2E1B"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org AC5B74BA2E1B",
        "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org AC5B74BA2E1B",
        "ARC-Seal": [
            "i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1778169107; cv=pass;\n b=DsvbOy32h9cbxtsZZ6EQ9JWfZ6H8QbypWLNemCa59Iug26BSd5WmZSGumn1ZG9gCiMasVMbuTuDtFnCxTMDawBhfLvmaCKjxwb9FciFQg8HQPdngJG9BB51Xbv670QNBJVOk/ripwY7FRbKnil1PyjQTSxMO0kcB+ps1QXiWYMA=",
            "i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass;\n b=OfmHCFVxb0n+qVFvtxwK0oVjOwwD2PeXWxr4a6/M2jxFhFeCnCtPj1EXddEHTd6fpHLNqboVAL7iZPY8NSY9n2fREStxVLWyzdUOT2TwHePC+oot/G1wFAgsHMxdOus4Xp25vE9kO9/4E4UVN/mrXrnVCheqv1RSDxWUbm+bgIt3tSQHOCQ8V26vvaDkCZRVT02gAcFiM2kULeIlYzttUnlpi7EsmK9R7GCZGKDQlv3+LjplOLqt0gh+6SgJZHM+XB8lPSJKFiHuLudNUOqyJCaeNRQP1XJDEwD7dDi1oQYs7TJhXdf8WA27YY9PUD84zUUt+3yTTus9uoqk5vJfpw==",
            "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=eiojrqLg/WCClferoZ4I9Vl0edNj8vquFOAhygxGetwkAo2Hyg+d2ZwxQQdMFrxmQAY+ua7SeTU1WYOsGlGfoyMQ23TE4iEoZuwAZdzWxtu3P21qVpcjbl2PZmxB8esQiZ34jvNZHEXJ75/G8RvpW2B57f1kgnsSMSGRX4yCLkdhI//xGECMT+FxDX879+qcaht9sZ4lOtKOHNRr7+gc55v3l4331KEDMdyi05TCOLneLA48H9IgiaZB6zidAZWK1Qh3+jl4F7jK67cwOPh16TisBfL3SBU/kJz9YBUY8x9bQVmrzLPV7QD+FcLAh9ZvQrlbjjyxebTodGnjXCC4AA=="
        ],
        "ARC-Message-Signature": [
            "i=3; a=rsa-sha256; d=sourceware.org; s=key;\n t=1778169107; c=relaxed/simple;\n bh=19lj2kKl9/lZ5QlSkcyicRPHtVvCZzRJZ6/Z0grGrdU=;\n h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID:\n MIME-Version;\n b=VxCf+4qvjmMLFBmk+HaVI/Xb4XlTYF6mJy++JIa5pGHni5CbFYtBjRvnn06JnthQZKRokMm+UuagVVdS6QNIOm31iBt+8IseA65zZa86P0vXRyIXAfx6IaoMkOaNyw6T1I1pad/X3G/x5FItZJQwh7Gtv6lUVj4VXWmQO9CI2vo=",
            "i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n 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;\n bh=Rsgwc1hcuRCUFjqMhHUhMOISVnt7nnZjnCUCckMCldY=;\n b=CM0M6pbgMXmB4nlB0MTDHBkNlGcjkAv99yPrBfRhPzcu5/8aaUR+421t7AnXJoIRuHPrDCQUaEXze+ddUK+fncyrlMy8/Sv2fr1PB2SA3PD8n6rVzNuZBUb2AEmFMS208E8OiiNvpyAGsTIDZxjWcV3znqJ8NWGkdu97STks99wzyApUXcEFPPSmaUrH4xC6CpE8FiBb4cpSEzeotc6eep72/EUncKnwBXmtMC7ywOBPUzxywdi3l1UbAKD/Qv87ty0Z4DHZw3ekbnTpGsoOyqaJy9dalyY0QekiTeaMibwb9oqXpiGTZzRx9U01XUJgKypC6O4Ce4lf1Uzb+1iZ9Q==",
            "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n 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;\n bh=Rsgwc1hcuRCUFjqMhHUhMOISVnt7nnZjnCUCckMCldY=;\n b=EvzGiwpy7WSIBLaO8jv6w6uRvtiejKLXkHwJsqdWGQt+UfzMlMuAe5Ksw3En8VdjXXQFg5w6qsVo4JWddjLwvWECgZ/BHXdBgf8F0YlGZ5Zoo8M0hXiZt/Ivhkvw5e9i6i+UaFPknUL8MuRHAwiVzkjYCOXhwooYY4HU7Kx8F5W/PmwcQ65zpdzSr2H/7WCDWjUGG7YN+PH8wJHfKyF2tGo6E785I+0ofmmaOMK3IpsSSFQvnBLrp1HgeDLFPoni/Ol5RwfY4o+rCTOiQRUzHYHs0nlTao6xzHUcYuAhVCGdup/Q8P+xozMFpKbRYCVVfHCVAIysSM0JxoU4Ek6XXA=="
        ],
        "ARC-Authentication-Results": [
            "i=3; sourceware.org;\n dkim=pass (1024-bit key, unprotected)\n header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1\n header.b=kh2yOgXQ;\n dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com\n header.a=rsa-sha256 header.s=selector1 header.b=kh2yOgXQ",
            "i=2; mx.microsoft.com 1; spf=pass (sender ip is\n 4.158.2.129) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass\n (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass\n (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1\n spf=[1,1,smtp.mailfrom=arm.com] dmarc=[1,1,header.from=arm.com])",
            "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 172.205.89.229) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com;\n dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;\n dkim=none (message not signed); arc=none (0)"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=Rsgwc1hcuRCUFjqMhHUhMOISVnt7nnZjnCUCckMCldY=;\n b=kh2yOgXQAfAWzqfD+qAAy0zigk87e3qajCNbPZK564PaNKU5KSPT7m3coDyqqzZtNk78lLgLlvyBvqWPH9AiTUI2OLhUJGJkL2sdS8e4I02Fnn9O+wgfCltuyJMfP1Oi2Mypboar/++I/VLKl60gu5EZTitpBGh1xr0mihEAofU=",
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=Rsgwc1hcuRCUFjqMhHUhMOISVnt7nnZjnCUCckMCldY=;\n b=kh2yOgXQAfAWzqfD+qAAy0zigk87e3qajCNbPZK564PaNKU5KSPT7m3coDyqqzZtNk78lLgLlvyBvqWPH9AiTUI2OLhUJGJkL2sdS8e4I02Fnn9O+wgfCltuyJMfP1Oi2Mypboar/++I/VLKl60gu5EZTitpBGh1xr0mihEAofU="
        ],
        "X-MS-Exchange-Authentication-Results": [
            "spf=pass (sender IP is 4.158.2.129)\n smtp.mailfrom=arm.com; dkim=pass (signature was verified)\n header.d=arm.com;dmarc=pass action=none header.from=arm.com;",
            "spf=pass (sender IP is 172.205.89.229)\n smtp.mailfrom=arm.com; dkim=none (message not signed)\n header.d=none;dmarc=pass action=none header.from=arm.com;"
        ],
        "Received-SPF": [
            "Pass (protection.outlook.com: domain of arm.com designates\n 4.158.2.129 as permitted sender) receiver=protection.outlook.com;\n client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C",
            "Pass (protection.outlook.com: domain of arm.com designates\n 172.205.89.229 as permitted sender) receiver=protection.outlook.com;\n client-ip=172.205.89.229; helo=nebula.arm.com; pr=C"
        ],
        "From": "<richard.ball@arm.com>",
        "To": "<gcc-patches@gcc.gnu.org>",
        "CC": "<richard.earnshaw@arm.com>, <tamar.christina@arm.com>,\n <ktkachov@nvidia.com>, <Wilco.Dijkstra@arm.com>, <Alex.Coplan@arm.com>,\n <Alice.Carlotti@arm.com>, Richard Ball <Richard.Ball@arm.com>",
        "Subject": "[PATCH 1/2] aarch64: Add support for FEAT_CMH atomic store intrinsics",
        "Date": "Thu, 7 May 2026 16:50:09 +0100",
        "Message-ID": "<20260507155010.23784-2-richard.ball@arm.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20260507155010.23784-1-richard.ball@arm.com>",
        "References": "<20260507155010.23784-1-richard.ball@arm.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-EOPAttributedMessage": "1",
        "X-MS-TrafficTypeDiagnostic": "\n AMS1EPF0000008E:EE_|DB9PR08MB11402:EE_|DB1PEPF000509F5:EE_|AS8PR08MB6502:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "e0401294-4b61-4c0e-dca3-08deac508791",
        "x-checkrecipientrouted": "true",
        "NoDisclaimer": "true",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam-Untrusted": "BCL:0;\n ARA:13230040|36860700016|1800799024|82310400026|376014|3023799003|13003099007|22082099003|56012099003|18002099003;",
        "X-Microsoft-Antispam-Message-Info-Original": "\n jC4t/MR/Jy2xmCuop/2X0zkZElJdU2PGlgu37+Qt08sCI5KNhum0+biP1+lo6Lho8SwDgCwr39ylwW2BOueF3S8YRaL3lUmbL3TOBA2sYxRCF3BMeQG6Erop05YEGuMgJTYlzyOYj/Kx70Vnv0zhoZKI93McjzYnn3sgMByKnIIglWQ3VvBQOF9MFl15w/Sv/3br38qXs3KZCIgMErf365QE0NF8b/1vTAZQbc7+W5wdy339tikcB+1etElHIZWizOQk7bNtSiEBBvdqmwS63KrzhkyN8iczsLOEDwhdXIVQ1Jd7msscr8Lg6oAxx+LvHHaLmRSCvN+7vO1zhzRCgXWWK3rp1Wmap5EWJNLQGP8KIzTBzdIc/tBoGmYULlYZvSqd+IkwvoFdxh4JJCpSKZ8YKb9tNdmGIyOqtuv9WIsjjlh66DAYuWUWz7tkdXpMj/tfNhMpajLPjSbEQLepT2KRb9RPnVspeaOVnl/vIf1cBLt95QFRu78jjjcJKhMWT3htTMyI57dYEgctAu1hNi2gvSX7G6X3ZhYpT0Azp483gvMMIfJV2H1ZTb7vSrNPX7hy+W+Su34XwxJiFVDCD3MjiM16fl6BNpj64RHa+H2z2CZHzfCCSDpMy1f6EjSYRHULwfhnpvSCN1x/SFaYBjXtCtZNOfcFfrbTw6xcT9eA/VD09LL1xD1wdfI/LggI",
        "X-Forefront-Antispam-Report-Untrusted": "CIP:172.205.89.229; CTRY:IE; LANG:en;\n SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:nebula.arm.com; PTR:InfoDomainNonexistent;\n CAT:NONE;\n SFS:(13230040)(36860700016)(1800799024)(82310400026)(376014)(3023799003)(13003099007)(22082099003)(56012099003)(18002099003);\n DIR:OUT; SFP:1101;",
        "X-Exchange-RoutingPolicyChecked": "\n ActlVGZMkUCUYM1n0OEvybIdM0ISZPYq4NrE+Djtw7bwGnZj1SsdA/XRutN1bDLM1WnucgYMdJSi0pVog9m51f8VyZVqPr3Xi7MAo9lZGkxiQg2YmX2tKdsPdb5T6scKsVUEfj6b6zFrx2h9+AkQPEbnd4TImNknBtrExzZtWY7TCNlzh1tdVWs8UPwTq9exVatT2jiLVbtsA5tU3L4m09V6d+ICELDRRtQB/A88DOyXYwlo7FB0ft0mHFr52h2AdATyvJ3d6RyJDCJ0Yz8elFjXR+bwAaGdpEiVvaQU9OUu8apgU8tSsoNEfdNEyNEwtHap4ONA8u228/bzElTKIg==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": [
            "DB9PR08MB11402",
            "AS8PR08MB6502"
        ],
        "X-MS-Exchange-Transport-CrossTenantHeadersStripped": "\n DB1PEPF000509F5.eurprd02.prod.outlook.com",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id-Prvs": "\n c05147e5-78e3-4ecf-2c7e-08deac5060e3",
        "X-Microsoft-Antispam": "BCL:0;\n ARA:13230040|1800799024|36860700016|82310400026|35042699022|376014|14060799003|13003099007|56012099003|3023799003|18002099003|22082099003;",
        "X-Microsoft-Antispam-Message-Info": "\n DmE911S5//H1aBiGSCx0xGJ4jdM4UdLikhJdldMDzunac8+rl3TO1Eo+jX15oubrfF7YV46RMW56wyE8J1ZC2kn/i0VlzQRANspVQeTKrW9c4UdtNCtF90Xvmu6c6tD7pXmV72n3Zu//QJW0uQRDq20TlueQdZGrySDsaxSRg6E4ZJo/cvO1g0P/Yz04fqUgfQ1a6w+K6G4wXA5rJuw18Hi125PG2jwSe4kOvZjcg5hGfJcYiKSh5TdyWFvn5KIGNGsNW6Czt8sTOoN+PSttNkOQGSJeZ4fvBcS10QdeaVByZTp5xajEfPO0xIBtkw3UzW7e+ws0QLB+PuKTcIyB+mVmIfeUdZ7Ug6ZbcSylMG2LfZEGX5Bq2Y8UOWQGEz804GQW2jTvHlZbPD97Gth9baQ+4iD5r/DgDuprtcpctuXtpTHzxIj94GxjEPMEVmxHxcFGeKxKqhpXq+1b+v64pWjF5zX3xVMuqxZ6phgfAFV/8SyzRW4ikVFjTwXjwc4w/xoeD5ftpsLNfeN8k8+BSWM7+5XUgHlkHabLXWjadU6vwXfroyXGaBLAafDOJlOwdFyuvz91PjcQ2gMZ19RLpG/3vEUL+E3lDi9VXKq08IzcFb/5d8MvKJa1w2ODyo7QJiyCYxIK9Yg/XoeEJhcKZ0okneiDpRu3NZgcF8ZRV1asRksZA1Jhsf/R3fSQFvFD",
        "X-Forefront-Antispam-Report": "CIP:4.158.2.129; CTRY:GB; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:outbound-uk1.az.dlp.m.darktrace.com;\n PTR:InfoDomainNonexistent; CAT:NONE;\n SFS:(13230040)(1800799024)(36860700016)(82310400026)(35042699022)(376014)(14060799003)(13003099007)(56012099003)(3023799003)(18002099003)(22082099003);\n DIR:OUT; SFP:1101;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "\n qNmvHk2t+SBah51jea+IPD9rLgqcb2+gq5ehisAF10dR/ZacpcvIMC/z8aSEvTDLCxhDSgxrY1lEGhwgxNpneNiEh+S0dYGwAgGequPm7AqNflo16A1a2E2988d2avwZB+FEyM7jUMJQGP9FQjZ2glkPbTK1ehNSqTS0izGp1b0+LwAD9TUJ1X51wvuK34mL6zEyrTnGCtvH1I2YbT+0AcIczK79jbFY4idvTsr6THSqaMMxu2IjHtSOcbmvJHhmFKza4MeIAsSoxvWhfyaHp4YvMKmSTfOmqo1BMFsj4VEWt/lRhO/FTULcTfncbF+qw6thHENe5s0yPve8wPGKRKM18elaElL/leT5uU06kIsgM6n9yHTN6l+jSvsyMqrDSN8u/0vFf3aOgOGLAx2pyuxZkWwvAsrHyPIUXM2ai4JvbuL0feT2adSjW8HTCT9G",
        "X-OriginatorOrg": "arm.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "07 May 2026 15:51:40.4485 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n e0401294-4b61-4c0e-dca3-08deac508791",
        "X-MS-Exchange-CrossTenant-Id": "f34e5979-57d9-4aaa-ad4d-b122a662184d",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[4.158.2.129];\n Helo=[outbound-uk1.az.dlp.m.darktrace.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n DB1PEPF000509F5.eurprd02.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-BeenThere": "gcc-patches@gcc.gnu.org",
        "X-Mailman-Version": "2.1.30",
        "Precedence": "list",
        "List-Id": "Gcc-patches mailing list <gcc-patches.gcc.gnu.org>",
        "List-Unsubscribe": "<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>",
        "List-Archive": "<https://gcc.gnu.org/pipermail/gcc-patches/>",
        "List-Post": "<mailto:gcc-patches@gcc.gnu.org>",
        "List-Help": "<mailto:gcc-patches-request@gcc.gnu.org?subject=help>",
        "List-Subscribe": "<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>",
        "Errors-To": "gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"
    },
    "content": "From: Richard Ball <Richard.Ball@arm.com>\n\ngcc/ChangeLog:\n\n\t* config/aarch64/aarch64-builtins.cc\n\t(enum aarch64_builtins): Change Function/Builtin names.\n\t(aarch64_init_pcdphint_builtins): Likewise.\n\t(aarch64_init_atomic_hints_builtins): Likewise.\n\t(aarch64_general_init_builtins): Likewise.\n\t(aarch64_expand_stshh_builtin): Likewise.\n\t(aarch64_expand_atomic_hints_builtins): Likewise.\n\t(aarch64_general_expand_builtin): Likewise.\n\t(aarch64_resolve_overloaded_builtin_stshh): Likewise.\n\t(aarch64_resolve_overloaded_builtin_atomic_hint_store): Likewise\n\t(aarch64_resolve_overloaded_builtin_general): Likewise.\n\t* config/aarch64/arm_acle.h\n\t(__atomic_store_with_stshh): Likewise.\n\t(__arm_atomic_store_with_hint): Likewise.\n\t* config/aarch64/atomics.md\n\t(@aarch64_atomic_store_stshh<mode>): Add new hints to pattern\n\t(@aarch64_atomic_hints_store<mode>): Likewise.\n\t* config/aarch64/iterators.md: Add Unspec for new hints.\n\ngcc/testsuite/ChangeLog:\n\n\t* g++.target/aarch64/atomic_store_with_stshh.C: Change Function name.\n\t* gcc.target/aarch64/atomic_store_with_stshh.c: Likewise.\n\t* gcc.target/aarch64/atomic_store_with_shuh.c: New test.\n\t* gcc.target/aarch64/atomic_store_with_stcph.c: New test.\n---\n gcc/config/aarch64/aarch64-builtins.cc        | 133 +++++++------\n gcc/config/aarch64/arm_acle.h                 |   6 +-\n gcc/config/aarch64/atomics.md                 |  28 ++-\n gcc/config/aarch64/iterators.md               |   2 +-\n .../aarch64/atomic_store_with_stshh.C         |  22 +--\n .../aarch64/atomic_store_with_shuh.c          | 186 ++++++++++++++++++\n .../aarch64/atomic_store_with_stcph.c         | 186 ++++++++++++++++++\n .../aarch64/atomic_store_with_stshh.c         |  22 +--\n 8 files changed, 490 insertions(+), 95 deletions(-)\n create mode 100644 gcc/testsuite/gcc.target/aarch64/atomic_store_with_shuh.c\n create mode 100644 gcc/testsuite/gcc.target/aarch64/atomic_store_with_stcph.c",
    "diff": "diff --git a/gcc/config/aarch64/aarch64-builtins.cc b/gcc/config/aarch64/aarch64-builtins.cc\nindex 611f6dc45e0..2a6ecddd91b 100644\n--- a/gcc/config/aarch64/aarch64-builtins.cc\n+++ b/gcc/config/aarch64/aarch64-builtins.cc\n@@ -903,14 +903,14 @@ enum aarch64_builtins\n   AARCH64_BUILTIN_GCSPOPM,\n   AARCH64_BUILTIN_GCSSS,\n   /* Armv9.6-A builtins.  */\n-  AARCH64_BUILTIN_STSHH,\n-  AARCH64_BUILTIN_STSHH_QI,\n-  AARCH64_BUILTIN_STSHH_HI,\n-  AARCH64_BUILTIN_STSHH_SI,\n-  AARCH64_BUILTIN_STSHH_DI,\n-  AARCH64_BUILTIN_STSHH_SF,\n-  AARCH64_BUILTIN_STSHH_DF,\n-  AARCH64_BUILTIN_STSHH_PTR,\n+  AARCH64_BUILTIN_ATOMIC_HINTS_STORE,\n+  AARCH64_BUILTIN_ATOMIC_HINTS_STORE_QI,\n+  AARCH64_BUILTIN_ATOMIC_HINTS_STORE_HI,\n+  AARCH64_BUILTIN_ATOMIC_HINTS_STORE_SI,\n+  AARCH64_BUILTIN_ATOMIC_HINTS_STORE_DI,\n+  AARCH64_BUILTIN_ATOMIC_HINTS_STORE_SF,\n+  AARCH64_BUILTIN_ATOMIC_HINTS_STORE_DF,\n+  AARCH64_BUILTIN_ATOMIC_HINTS_STORE_PTR,\n   AARCH64_BUILTIN_MAX\n };\n \n@@ -2483,10 +2483,10 @@ aarch64_init_gcs_builtins (void)\n \t\t\t\t   AARCH64_BUILTIN_GCSSS);\n }\n \n-/* Add builtins for FEAT_PCDPHINT.  */\n+/* Add builtins for atomic hints.  */\n \n static void\n-aarch64_init_pcdphint_builtins (void)\n+aarch64_init_atomic_hints_builtins (void)\n {\n   tree ftype;\n \n@@ -2494,65 +2494,72 @@ aarch64_init_pcdphint_builtins (void)\n \t\t\t\t    void_type_node,\n \t\t\t\t    unsigned_type_node,\n \t\t\t\t    unsigned_type_node, NULL_TREE);\n-  aarch64_builtin_decls[AARCH64_BUILTIN_STSHH]\n-    = aarch64_general_add_builtin (\"__builtin_aarch64_stshh\", ftype,\n-\t\t\t\t   AARCH64_BUILTIN_STSHH);\n+  aarch64_builtin_decls[AARCH64_BUILTIN_ATOMIC_HINTS_STORE]\n+    = aarch64_general_add_builtin (\"__builtin_aarch64_atomic_hints_store\",\n+\t\t\t\t   ftype, AARCH64_BUILTIN_ATOMIC_HINTS_STORE);\n \n   ftype = build_function_type_list (void_type_node, ptr_type_node,\n \t\t\t\t    unsigned_char_type_node,\n \t\t\t\t    unsigned_type_node,\n \t\t\t\t    unsigned_type_node, NULL_TREE);\n-  aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_QI]\n-    = aarch64_general_add_builtin (\"__builtin_aarch64_stshh_qi\", ftype,\n-\t\t\t\t   AARCH64_BUILTIN_STSHH_QI);\n+  aarch64_builtin_decls[AARCH64_BUILTIN_ATOMIC_HINTS_STORE_QI]\n+    = aarch64_general_add_builtin (\"__builtin_aarch64_atomic_hints_store_qi\",\n+\t\t\t\t   ftype,\n+\t\t\t\t   AARCH64_BUILTIN_ATOMIC_HINTS_STORE_QI);\n \n   ftype = build_function_type_list (void_type_node, ptr_type_node,\n \t\t\t\t    short_unsigned_type_node,\n \t\t\t\t    unsigned_type_node,\n \t\t\t\t    unsigned_type_node, NULL_TREE);\n-  aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_HI]\n-    = aarch64_general_add_builtin (\"__builtin_aarch64_stshh_hi\", ftype,\n-\t\t\t\t   AARCH64_BUILTIN_STSHH_HI);\n+  aarch64_builtin_decls[AARCH64_BUILTIN_ATOMIC_HINTS_STORE_HI]\n+    = aarch64_general_add_builtin (\"__builtin_aarch64_atomic_hints_store_hi\",\n+\t\t\t\t   ftype,\n+\t\t\t\t   AARCH64_BUILTIN_ATOMIC_HINTS_STORE_HI);\n \n   ftype = build_function_type_list (void_type_node, ptr_type_node,\n \t\t\t\t    unsigned_type_node,\n \t\t\t\t    unsigned_type_node,\n \t\t\t\t    unsigned_type_node, NULL_TREE);\n-  aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_SI]\n-    = aarch64_general_add_builtin (\"__builtin_aarch64_stshh_si\", ftype,\n-\t\t\t\t   AARCH64_BUILTIN_STSHH_SI);\n+  aarch64_builtin_decls[AARCH64_BUILTIN_ATOMIC_HINTS_STORE_SI]\n+    = aarch64_general_add_builtin (\"__builtin_aarch64_atomic_hints_store_si\",\n+\t\t\t\t   ftype,\n+\t\t\t\t   AARCH64_BUILTIN_ATOMIC_HINTS_STORE_SI);\n \n   ftype = build_function_type_list (void_type_node, ptr_type_node,\n \t\t\t\t    long_long_unsigned_type_node,\n \t\t\t\t    unsigned_type_node,\n \t\t\t\t    unsigned_type_node, NULL_TREE);\n-  aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_DI]\n-    = aarch64_general_add_builtin (\"__builtin_aarch64_stshh_di\", ftype,\n-\t\t\t\t   AARCH64_BUILTIN_STSHH_DI);\n+  aarch64_builtin_decls[AARCH64_BUILTIN_ATOMIC_HINTS_STORE_DI]\n+    = aarch64_general_add_builtin (\"__builtin_aarch64_atomic_hints_store_di\",\n+\t\t\t\t   ftype,\n+\t\t\t\t   AARCH64_BUILTIN_ATOMIC_HINTS_STORE_DI);\n \n   ftype = build_function_type_list (void_type_node, ptr_type_node,\n \t\t\t\t    float_type_node,\n \t\t\t\t    unsigned_type_node,\n \t\t\t\t    unsigned_type_node, NULL_TREE);\n-  aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_SF]\n-    = aarch64_general_add_builtin (\"__builtin_aarch64_stshh_sf\", ftype,\n-\t\t\t\t   AARCH64_BUILTIN_STSHH_SF);\n+  aarch64_builtin_decls[AARCH64_BUILTIN_ATOMIC_HINTS_STORE_SF]\n+    = aarch64_general_add_builtin (\"__builtin_aarch64_atomic_hints_store_sf\",\n+\t\t\t\t   ftype,\n+\t\t\t\t   AARCH64_BUILTIN_ATOMIC_HINTS_STORE_SF);\n \n   ftype = build_function_type_list (void_type_node, ptr_type_node,\n \t\t\t\t    double_type_node,\n \t\t\t\t    unsigned_type_node,\n \t\t\t\t    unsigned_type_node, NULL_TREE);\n-  aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_DF]\n-    = aarch64_general_add_builtin (\"__builtin_aarch64_stshh_df\", ftype,\n-\t\t\t\t   AARCH64_BUILTIN_STSHH_DF);\n+  aarch64_builtin_decls[AARCH64_BUILTIN_ATOMIC_HINTS_STORE_DF]\n+    = aarch64_general_add_builtin (\"__builtin_aarch64_atomic_hints_store_df\",\n+\t\t\t\t   ftype,\n+\t\t\t\t   AARCH64_BUILTIN_ATOMIC_HINTS_STORE_DF);\n \n   ftype = build_function_type_list (void_type_node, ptr_type_node,\n \t\t\t\t    ptr_type_node,\n \t\t\t\t    unsigned_type_node,\n \t\t\t\t    unsigned_type_node, NULL_TREE);\n-  aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_PTR]\n-    = aarch64_general_add_builtin (\"__builtin_aarch64_stshh_ptr\", ftype,\n-\t\t\t\t   AARCH64_BUILTIN_STSHH_PTR);\n+  aarch64_builtin_decls[AARCH64_BUILTIN_ATOMIC_HINTS_STORE_PTR]\n+    = aarch64_general_add_builtin (\"__builtin_aarch64_atomic_hints_store_ptr\",\n+\t\t\t\t   ftype,\n+\t\t\t\t   AARCH64_BUILTIN_ATOMIC_HINTS_STORE_PTR);\n \n }\n \n@@ -2603,7 +2610,7 @@ aarch64_general_init_builtins (void)\n \t\t\t\t   AARCH64_BUILTIN_CHKFEAT);\n \n   aarch64_init_gcs_builtins ();\n-  aarch64_init_pcdphint_builtins ();\n+  aarch64_init_atomic_hints_builtins ();\n \n   if (in_lto_p)\n     handle_arm_acle_h ();\n@@ -4059,27 +4066,27 @@ aarch64_expand_tbl_tbx (vec<expand_operand> &ops, int unspec)\n }\n \n void\n-aarch64_expand_stshh_builtin (tree exp, int fcode)\n+aarch64_expand_atomic_hints_builtins (tree exp, int fcode)\n {\n   machine_mode mode = TYPE_MODE (TREE_TYPE (CALL_EXPR_ARG (exp, 1)));\n   rtx val = expand_normal (CALL_EXPR_ARG (exp, 1));\n   rtx mem_order = expand_normal (CALL_EXPR_ARG (exp, 2));\n-  rtx ret = expand_normal (CALL_EXPR_ARG (exp, 3));\n+  rtx hint = expand_normal (CALL_EXPR_ARG (exp, 3));\n \n-  require_const_argument (exp, 3, 0, 2);\n+  require_const_argument (exp, 3, 0, 5);\n   require_const_argument (exp, 2, 0, 6);\n   if (seen_error ())\n     return;\n \n   switch (fcode)\n     {\n-      case AARCH64_BUILTIN_STSHH_SF:\n+      case AARCH64_BUILTIN_ATOMIC_HINTS_STORE_SF:\n \t{\n \t  val = force_lowpart_subreg (SImode, val, SFmode);\n \t  mode = SImode;\n \t  break;\n \t}\n-      case AARCH64_BUILTIN_STSHH_DF:\n+      case AARCH64_BUILTIN_ATOMIC_HINTS_STORE_DF:\n \t{\n \t  val = force_lowpart_subreg (DImode, val, DFmode);\n \t  mode = DImode;\n@@ -4099,12 +4106,12 @@ aarch64_expand_stshh_builtin (tree exp, int fcode)\n   set_mem_align (mem, GET_MODE_ALIGNMENT (mode));\n \n   expand_operand ops[4];\n-  enum insn_code icode = code_for_aarch64_atomic_store_stshh (mode);\n+  enum insn_code icode;\n   create_output_operand (&ops[0], mem, mode);\n   create_input_operand (&ops[1], val, mode);\n   create_input_operand (&ops[2], mem_order, SImode);\n-  create_input_operand (&ops[3], ret, SImode);\n-\n+  create_input_operand (&ops[3], hint, SImode);\n+  icode = code_for_aarch64_atomic_hints_store (mode);\n   expand_insn (icode, 4, ops);\n }\n \n@@ -4611,14 +4618,14 @@ aarch64_general_expand_builtin (unsigned int fcode, tree exp, rtx target,\n     case AARCH64_BUILTIN_GCSSS:\n       return aarch64_expand_gcs_builtin (exp, target, fcode, ignore);\n \n-    case AARCH64_BUILTIN_STSHH_QI:\n-    case AARCH64_BUILTIN_STSHH_HI:\n-    case AARCH64_BUILTIN_STSHH_SI:\n-    case AARCH64_BUILTIN_STSHH_DI:\n-    case AARCH64_BUILTIN_STSHH_SF:\n-    case AARCH64_BUILTIN_STSHH_DF:\n-    case AARCH64_BUILTIN_STSHH_PTR:\n-      aarch64_expand_stshh_builtin (exp, fcode);\n+    case AARCH64_BUILTIN_ATOMIC_HINTS_STORE_QI:\n+    case AARCH64_BUILTIN_ATOMIC_HINTS_STORE_HI:\n+    case AARCH64_BUILTIN_ATOMIC_HINTS_STORE_SI:\n+    case AARCH64_BUILTIN_ATOMIC_HINTS_STORE_DI:\n+    case AARCH64_BUILTIN_ATOMIC_HINTS_STORE_SF:\n+    case AARCH64_BUILTIN_ATOMIC_HINTS_STORE_DF:\n+    case AARCH64_BUILTIN_ATOMIC_HINTS_STORE_PTR:\n+      aarch64_expand_atomic_hints_builtins (exp, fcode);\n       return target;\n   }\n \n@@ -5781,11 +5788,9 @@ aarch64_resolve_overloaded_memtag (location_t loc,\n }\n \n static tree\n-aarch64_resolve_overloaded_builtin_stshh (void *pass_params)\n+aarch64_resolve_overloaded_builtin_atomic_hints (void *pass_params)\n {\n   vec<tree, va_gc> *params = static_cast<vec<tree, va_gc> *> (pass_params);\n-  if (vec_safe_length (params) != 4)\n-    return NULL_TREE;\n \n   tree addr = (*params)[0];\n   tree val = (*params)[1];\n@@ -5798,23 +5803,25 @@ aarch64_resolve_overloaded_builtin_stshh (void *pass_params)\n \n   tree ptr_type = TYPE_MAIN_VARIANT (TREE_TYPE (addr_type));\n \n+  if (vec_safe_length (params) != 4)\n+    return NULL_TREE;\n   if (POINTER_TYPE_P (ptr_type))\n-    return aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_PTR];\n+    return aarch64_builtin_decls[AARCH64_BUILTIN_ATOMIC_HINTS_STORE_PTR];\n \n   switch (TYPE_MODE (ptr_type))\n     {\n     case QImode:\n-      return aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_QI];\n+      return aarch64_builtin_decls[AARCH64_BUILTIN_ATOMIC_HINTS_STORE_QI];\n     case HImode:\n-      return aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_HI];\n+      return aarch64_builtin_decls[AARCH64_BUILTIN_ATOMIC_HINTS_STORE_HI];\n     case SImode:\n-      return aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_SI];\n+      return aarch64_builtin_decls[AARCH64_BUILTIN_ATOMIC_HINTS_STORE_SI];\n     case DImode:\n-      return aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_DI];\n+      return aarch64_builtin_decls[AARCH64_BUILTIN_ATOMIC_HINTS_STORE_DI];\n     case SFmode:\n-      return aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_SF];\n+      return aarch64_builtin_decls[AARCH64_BUILTIN_ATOMIC_HINTS_STORE_SF];\n     case DFmode:\n-      return aarch64_builtin_decls[AARCH64_BUILTIN_STSHH_DF];\n+      return aarch64_builtin_decls[AARCH64_BUILTIN_ATOMIC_HINTS_STORE_DF];\n     default:\n       return NULL_TREE;\n     }\n@@ -5831,8 +5838,8 @@ aarch64_resolve_overloaded_builtin_general (location_t loc, tree function,\n       && fcode <= AARCH64_MEMTAG_BUILTIN_END)\n     return aarch64_resolve_overloaded_memtag(loc, function, pass_params);\n \n-  if (fcode == AARCH64_BUILTIN_STSHH)\n-    return aarch64_resolve_overloaded_builtin_stshh (pass_params);\n+  if (fcode == AARCH64_BUILTIN_ATOMIC_HINTS_STORE)\n+    return aarch64_resolve_overloaded_builtin_atomic_hints (pass_params);\n \n   return NULL_TREE;\n }\ndiff --git a/gcc/config/aarch64/arm_acle.h b/gcc/config/aarch64/arm_acle.h\nindex b31e23e6cba..9317f1d2371 100644\n--- a/gcc/config/aarch64/arm_acle.h\n+++ b/gcc/config/aarch64/arm_acle.h\n@@ -102,9 +102,9 @@ __sqrtf (float __x)\n   return __builtin_aarch64_sqrtsf (__x);\n }\n \n-#define __atomic_store_with_stshh(__addr, __value, __memory_order, __ret) \\\n-  __builtin_aarch64_stshh ((__addr), (__value), \\\n-\t\t\t\t\t     (__memory_order), (__ret))\n+#define __arm_atomic_store_with_hint(__addr, __value, __memory_order, __hint) \\\n+  __builtin_aarch64_atomic_hints_store ((__addr), (__value), \\\n+\t\t\t\t\t     (__memory_order), (__hint))\n \n #pragma GCC push_options\n #pragma GCC target (\"+nothing+jscvt\")\ndiff --git a/gcc/config/aarch64/atomics.md b/gcc/config/aarch64/atomics.md\nindex c9534d43c0f..b86dae31dc1 100644\n--- a/gcc/config/aarch64/atomics.md\n+++ b/gcc/config/aarch64/atomics.md\n@@ -751,19 +751,35 @@\n   [(set_attr \"arch\" \"*,rcpc8_4\")]\n )\n \n-(define_insn \"@aarch64_atomic_store_stshh<mode>\"\n+(define_insn \"@aarch64_atomic_hints_store<mode>\"\n   [(set (match_operand:ALLI 0 \"aarch64_rcpc_memory_operand\" \"=Q,Ust\")\n     (unspec_volatile:ALLI\n        [(match_operand:ALLI 1 \"aarch64_reg_or_zero\" \"rZ,rZ\")\n        (match_operand:SI 2 \"const_int_operand\")\t\t\t;; model\n        (match_operand:SI 3 \"const_int_operand\")]\t\t;; ret_policy\n-      UNSPECV_STSHH))]\n+      UNSPECV_ATOMIC_HINTS_STORE))]\n   \"\"\n   {\n-    if (INTVAL (operands[3]) == 0)\n-      output_asm_insn (\"stshh\\tkeep\", operands);\n-    else\n-      output_asm_insn (\"stshh\\tstrm\", operands);\n+    switch (INTVAL (operands[3]))\n+    {\n+      case 0:\n+\toutput_asm_insn (\"stshh\\tkeep\", operands);\n+\tbreak;\n+      case 1:\n+\toutput_asm_insn (\"stshh\\tstrm\", operands);\n+\tbreak;\n+      case 2:\n+\toutput_asm_insn (\"stcph\", operands);\n+\tbreak;\n+      case 3:\n+\toutput_asm_insn (\"shuh\", operands);\n+\tbreak;\n+      case 4:\n+\toutput_asm_insn (\"shuh\\tph\", operands);\n+\tbreak;\n+      default:\n+\tgcc_unreachable ();\n+    }\n     enum memmodel model = memmodel_from_int (INTVAL (operands[2]));\n     if (is_mm_relaxed (model) || is_mm_consume (model) || is_mm_acquire (model))\n       return \"str<atomic_sfx>\\t%<w>1, %0\";\ndiff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md\nindex 39b1e84edcc..df61f9b4f53 100644\n--- a/gcc/config/aarch64/iterators.md\n+++ b/gcc/config/aarch64/iterators.md\n@@ -1356,7 +1356,7 @@\n     UNSPECV_LDA\t\t\t; Represent an atomic load or load-acquire.\n     UNSPECV_LDAP\t\t; Represent an atomic acquire load with RCpc semantics.\n     UNSPECV_STL\t\t\t; Represent an atomic store or store-release.\n-    UNSPECV_STSHH\t\t; Represent an atomic store with an stshh hint.\n+    UNSPECV_ATOMIC_HINTS_STORE\t; Represent an atomic store with a hint.\n     UNSPECV_ATOMIC_CMPSW\t; Represent an atomic compare swap.\n     UNSPECV_ATOMIC_EXCHG\t; Represent an atomic exchange.\n     UNSPECV_ATOMIC_CAS\t\t; Represent an atomic CAS.\ndiff --git a/gcc/testsuite/g++.target/aarch64/atomic_store_with_stshh.C b/gcc/testsuite/g++.target/aarch64/atomic_store_with_stshh.C\nindex d22412369ef..5553c5d67df 100644\n--- a/gcc/testsuite/g++.target/aarch64/atomic_store_with_stshh.C\n+++ b/gcc/testsuite/g++.target/aarch64/atomic_store_with_stshh.C\n@@ -18,7 +18,7 @@ testFun1 ()\n   char* ptr1 = &item1;\n   char test1 = 1;\n \n-  __atomic_store_with_stshh (ptr1, test1, __ATOMIC_RELAXED, 0);\n+  __arm_atomic_store_with_hint (ptr1, test1, __ATOMIC_RELAXED, 0);\n }\n \n /*\n@@ -34,7 +34,7 @@ testFun2 ()\n   short item2 = 10;\n   short* ptr2 = &item2;\n   short test2 = 11;\n-  __atomic_store_with_stshh (ptr2, test2, __ATOMIC_RELEASE, 0);\n+  __arm_atomic_store_with_hint (ptr2, test2, __ATOMIC_RELEASE, 0);\n }\n \n /*\n@@ -50,7 +50,7 @@ testFun3 ()\n   unsigned int item3 = 10;\n   unsigned int* ptr3 = &item3;\n   unsigned int test3 = 11;\n-  __atomic_store_with_stshh (ptr3, test3, __ATOMIC_SEQ_CST, 1);\n+  __arm_atomic_store_with_hint (ptr3, test3, __ATOMIC_SEQ_CST, 1);\n }\n \n /*\n@@ -66,7 +66,7 @@ testFun4 ()\n   long item4 = 10;\n   long* ptr4 = &item4;\n   long test4 = 11;\n-  __atomic_store_with_stshh (ptr4, test4, __ATOMIC_RELAXED, 1);\n+  __arm_atomic_store_with_hint (ptr4, test4, __ATOMIC_RELAXED, 1);\n }\n \n /*\n@@ -84,7 +84,7 @@ testFun5 ()\n   long **ptr5 = &ptritem;\n   long test5item = 11;\n   long *test5 = &test5item;\n-  __atomic_store_with_stshh (ptr5, test5, __ATOMIC_SEQ_CST, 0);\n+  __arm_atomic_store_with_hint (ptr5, test5, __ATOMIC_SEQ_CST, 0);\n }\n \n /*\n@@ -100,7 +100,7 @@ testFun6 ()\n   float item6 = 10;\n   float* ptr6 = &item6;\n   float test6 = 11;\n-  __atomic_store_with_stshh (ptr6, test6, __ATOMIC_SEQ_CST, 0);\n+  __arm_atomic_store_with_hint (ptr6, test6, __ATOMIC_SEQ_CST, 0);\n }\n \n /*\n@@ -116,7 +116,7 @@ testFun7 ()\n   double item7 = 10;\n   double* ptr7 = &item7;\n   double test7 = 11;\n-  __atomic_store_with_stshh (ptr7, test7, __ATOMIC_RELAXED, 1);\n+  __arm_atomic_store_with_hint (ptr7, test7, __ATOMIC_RELAXED, 1);\n }\n \n /*\n@@ -133,7 +133,7 @@ testFun8 ()\n   char* ptr8 = &item8;\n   long test8 = 1;\n \n-  __atomic_store_with_stshh (ptr8, test8, __ATOMIC_RELAXED, 0);\n+  __arm_atomic_store_with_hint (ptr8, test8, __ATOMIC_RELAXED, 0);\n }\n \n /*\n@@ -150,7 +150,7 @@ testFun9 ()\n   int* ptr9 = &item9;\n   float test9 = 1;\n \n-  __atomic_store_with_stshh (ptr9, test9, __ATOMIC_RELAXED, 1);\n+  __arm_atomic_store_with_hint (ptr9, test9, __ATOMIC_RELAXED, 1);\n }\n \n /*\n@@ -166,7 +166,7 @@ static char buf[8];\n void\n testFun10 (void)\n {\n-  __atomic_store_with_stshh((buf + 1), (char)7, __ATOMIC_RELAXED, 1);\n+  __arm_atomic_store_with_hint((buf + 1), (char)7, __ATOMIC_RELAXED, 1);\n }\n \n /*\n@@ -182,5 +182,5 @@ testFun11 ()\n   int item11 = 10;\n   int* ptr11 = &item11;\n \n-  __atomic_store_with_stshh (ptr11, 0, __ATOMIC_RELAXED, 1);\n+  __arm_atomic_store_with_hint (ptr11, 0, __ATOMIC_RELAXED, 1);\n }\ndiff --git a/gcc/testsuite/gcc.target/aarch64/atomic_store_with_shuh.c b/gcc/testsuite/gcc.target/aarch64/atomic_store_with_shuh.c\nnew file mode 100644\nindex 00000000000..ce457a85568\n--- /dev/null\n+++ b/gcc/testsuite/gcc.target/aarch64/atomic_store_with_shuh.c\n@@ -0,0 +1,186 @@\n+/* { dg-do compile } */\n+/* { dg-options \"-O2 -march=armv8-a -save-temps\" } */\n+/* { dg-final { check-function-bodies \"**\" \"\" } } */\n+\n+#include <arm_acle.h>\n+\n+/*\n+** testFun1:\n+** ...\n+**\tshuh\n+**\tstrb\tw[0-9]+, \\[x[0-9]+\\]\n+** ...\n+*/\n+void\n+testFun1 ()\n+{\n+  char item1 = 0;\n+  char* ptr1 = &item1;\n+  char test1 = 1;\n+\n+  __arm_atomic_store_with_hint (ptr1, test1, __ATOMIC_RELAXED, 3);\n+}\n+\n+/*\n+** testFun2:\n+** ...\n+**\tshuh\tph\n+**\tstlrh\tw[0-9]+, \\[x[0-9]+\\]\n+** ...\n+*/\n+void\n+testFun2 ()\n+{\n+  short item2 = 10;\n+  short* ptr2 = &item2;\n+  short test2 = 11;\n+  __arm_atomic_store_with_hint (ptr2, test2, __ATOMIC_RELEASE, 4);\n+}\n+\n+/*\n+** testFun3:\n+** ...\n+**\tshuh\n+**\tstlr\tw[0-9]+, \\[x[0-9]+\\]\n+** ...\n+*/\n+void\n+testFun3 ()\n+{\n+  unsigned int item3 = 10;\n+  unsigned int* ptr3 = &item3;\n+  unsigned int test3 = 11;\n+  __arm_atomic_store_with_hint (ptr3, test3, __ATOMIC_SEQ_CST, 3);\n+}\n+\n+/*\n+** testFun4:\n+** ...\n+**\tshuh\n+**\tstr\tx[0-9]+, \\[x[0-9]+\\]\n+** ...\n+*/\n+void\n+testFun4 ()\n+{\n+  long item4 = 10;\n+  long* ptr4 = &item4;\n+  long test4 = 11;\n+  __arm_atomic_store_with_hint (ptr4, test4, __ATOMIC_RELAXED, 3);\n+}\n+\n+/*\n+** testFun5:\n+** ...\n+**\tshuh\tph\n+**\tstlr\tx[0-9]+, \\[x[0-9]+\\]\n+** ...\n+*/\n+void\n+testFun5 ()\n+{\n+  long item5 = 10;\n+  long *ptritem = &item5;\n+  long **ptr5 = &ptritem;\n+  long test5item = 11;\n+  long *test5 = &test5item;\n+  __arm_atomic_store_with_hint (ptr5, test5, __ATOMIC_SEQ_CST, 4);\n+}\n+\n+/*\n+** testFun6:\n+** ...\n+**\tshuh\n+**\tstlr\tw[0-9]+, \\[x[0-9]+\\]\n+** ...\n+*/\n+void\n+testFun6 ()\n+{\n+  float item6 = 10;\n+  float* ptr6 = &item6;\n+  float test6 = 11;\n+  __arm_atomic_store_with_hint (ptr6, test6, __ATOMIC_SEQ_CST, 3);\n+}\n+\n+/*\n+** testFun7:\n+** ...\n+**\tshuh\tph\n+**\tstr\tx[0-9]+, \\[x[0-9]+\\]\n+** ...\n+*/\n+void\n+testFun7 ()\n+{\n+  double item7 = 10;\n+  double* ptr7 = &item7;\n+  double test7 = 11;\n+  __arm_atomic_store_with_hint (ptr7, test7, __ATOMIC_RELAXED, 4);\n+}\n+\n+/*\n+** testFun8:\n+** ...\n+**\tshuh\tph\n+**\tstrb\tw[0-9]+, \\[x[0-9]+\\]\n+** ...\n+*/\n+void\n+testFun8 ()\n+{\n+  char item8 = 0;\n+  char* ptr8 = &item8;\n+  long test8 = 1;\n+\n+  __arm_atomic_store_with_hint (ptr8, test8, __ATOMIC_RELAXED, 4);\n+}\n+\n+/*\n+** testFun9:\n+** ...\n+**\tshuh\n+**\tstr\tw[0-9]+, \\[x[0-9]+\\]\n+** ...\n+*/\n+void\n+testFun9 ()\n+{\n+  int item9 = 0;\n+  int* ptr9 = &item9;\n+  float test9 = 1;\n+\n+  __arm_atomic_store_with_hint (ptr9, test9, __ATOMIC_RELAXED, 3);\n+}\n+\n+/*\n+** testFun10:\n+** ...\n+**\tadd\t(x[0-9]+), \\1, 1\n+**\tmov\t(w[0-9]+), 7\n+**\tshuh\n+**\tstrb\t\\2, \\[\\1\\]\n+** ...\n+*/\n+static char buf[8];\n+void\n+testFun10 (void)\n+{\n+  __arm_atomic_store_with_hint((buf + 1), (char)7, __ATOMIC_RELAXED, 3);\n+}\n+\n+/*\n+** testFun11:\n+** ...\n+**\tshuh\n+**\tstr\twzr, \\[x[0-9]+\\]\n+** ...\n+*/\n+void\n+testFun11 ()\n+{\n+  int item11 = 10;\n+  int* ptr11 = &item11;\n+\n+  __arm_atomic_store_with_hint (ptr11, 0, __ATOMIC_RELAXED, 3);\n+}\ndiff --git a/gcc/testsuite/gcc.target/aarch64/atomic_store_with_stcph.c b/gcc/testsuite/gcc.target/aarch64/atomic_store_with_stcph.c\nnew file mode 100644\nindex 00000000000..a762da3e1f6\n--- /dev/null\n+++ b/gcc/testsuite/gcc.target/aarch64/atomic_store_with_stcph.c\n@@ -0,0 +1,186 @@\n+/* { dg-do compile } */\n+/* { dg-options \"-O2 -march=armv8-a -save-temps\" } */\n+/* { dg-final { check-function-bodies \"**\" \"\" } } */\n+\n+#include <arm_acle.h>\n+\n+/*\n+** testFun1:\n+** ...\n+**\tstcph\n+**\tstrb\tw[0-9]+, \\[x[0-9]+\\]\n+** ...\n+*/\n+void\n+testFun1 ()\n+{\n+  char item1 = 0;\n+  char* ptr1 = &item1;\n+  char test1 = 1;\n+\n+  __arm_atomic_store_with_hint (ptr1, test1, __ATOMIC_RELAXED, 2);\n+}\n+\n+/*\n+** testFun2:\n+** ...\n+**\tstcph\n+**\tstlrh\tw[0-9]+, \\[x[0-9]+\\]\n+** ...\n+*/\n+void\n+testFun2 ()\n+{\n+  short item2 = 10;\n+  short* ptr2 = &item2;\n+  short test2 = 11;\n+  __arm_atomic_store_with_hint (ptr2, test2, __ATOMIC_RELEASE, 2);\n+}\n+\n+/*\n+** testFun3:\n+** ...\n+**\tstcph\n+**\tstlr\tw[0-9]+, \\[x[0-9]+\\]\n+** ...\n+*/\n+void\n+testFun3 ()\n+{\n+  unsigned int item3 = 10;\n+  unsigned int* ptr3 = &item3;\n+  unsigned int test3 = 11;\n+  __arm_atomic_store_with_hint (ptr3, test3, __ATOMIC_SEQ_CST, 2);\n+}\n+\n+/*\n+** testFun4:\n+** ...\n+**\tstcph\n+**\tstr\tx[0-9]+, \\[x[0-9]+\\]\n+** ...\n+*/\n+void\n+testFun4 ()\n+{\n+  long item4 = 10;\n+  long* ptr4 = &item4;\n+  long test4 = 11;\n+  __arm_atomic_store_with_hint (ptr4, test4, __ATOMIC_RELAXED, 2);\n+}\n+\n+/*\n+** testFun5:\n+** ...\n+**\tstcph\n+**\tstlr\tx[0-9]+, \\[x[0-9]+\\]\n+** ...\n+*/\n+void\n+testFun5 ()\n+{\n+  long item5 = 10;\n+  long *ptritem = &item5;\n+  long **ptr5 = &ptritem;\n+  long test5item = 11;\n+  long *test5 = &test5item;\n+  __arm_atomic_store_with_hint (ptr5, test5, __ATOMIC_SEQ_CST, 2);\n+}\n+\n+/*\n+** testFun6:\n+** ...\n+**\tstcph\n+**\tstlr\tw[0-9]+, \\[x[0-9]+\\]\n+** ...\n+*/\n+void\n+testFun6 ()\n+{\n+  float item6 = 10;\n+  float* ptr6 = &item6;\n+  float test6 = 11;\n+  __arm_atomic_store_with_hint (ptr6, test6, __ATOMIC_SEQ_CST, 2);\n+}\n+\n+/*\n+** testFun7:\n+** ...\n+**\tstcph\n+**\tstr\tx[0-9]+, \\[x[0-9]+\\]\n+** ...\n+*/\n+void\n+testFun7 ()\n+{\n+  double item7 = 10;\n+  double* ptr7 = &item7;\n+  double test7 = 11;\n+  __arm_atomic_store_with_hint (ptr7, test7, __ATOMIC_RELAXED, 2);\n+}\n+\n+/*\n+** testFun8:\n+** ...\n+**\tstcph\n+**\tstrb\tw[0-9]+, \\[x[0-9]+\\]\n+** ...\n+*/\n+void\n+testFun8 ()\n+{\n+  char item8 = 0;\n+  char* ptr8 = &item8;\n+  long test8 = 1;\n+\n+  __arm_atomic_store_with_hint (ptr8, test8, __ATOMIC_RELAXED, 2);\n+}\n+\n+/*\n+** testFun9:\n+** ...\n+**\tstcph\n+**\tstr\tw[0-9]+, \\[x[0-9]+\\]\n+** ...\n+*/\n+void\n+testFun9 ()\n+{\n+  int item9 = 0;\n+  int* ptr9 = &item9;\n+  float test9 = 1;\n+\n+  __arm_atomic_store_with_hint (ptr9, test9, __ATOMIC_RELAXED, 2);\n+}\n+\n+/*\n+** testFun10:\n+** ...\n+**\tadd\t(x[0-9]+), \\1, 1\n+**\tmov\t(w[0-9]+), 7\n+**\tstcph\n+**\tstrb\t\\2, \\[\\1\\]\n+** ...\n+*/\n+static char buf[8];\n+void\n+testFun10 (void)\n+{\n+  __arm_atomic_store_with_hint((buf + 1), (char)7, __ATOMIC_RELAXED, 2);\n+}\n+\n+/*\n+** testFun11:\n+** ...\n+**\tstcph\n+**\tstr\twzr, \\[x[0-9]+\\]\n+** ...\n+*/\n+void\n+testFun11 ()\n+{\n+  int item11 = 10;\n+  int* ptr11 = &item11;\n+\n+  __arm_atomic_store_with_hint (ptr11, 0, __ATOMIC_RELAXED, 2);\n+}\ndiff --git a/gcc/testsuite/gcc.target/aarch64/atomic_store_with_stshh.c b/gcc/testsuite/gcc.target/aarch64/atomic_store_with_stshh.c\nindex 516a45aa781..3948ffcef28 100644\n--- a/gcc/testsuite/gcc.target/aarch64/atomic_store_with_stshh.c\n+++ b/gcc/testsuite/gcc.target/aarch64/atomic_store_with_stshh.c\n@@ -18,7 +18,7 @@ testFun1 ()\n   char* ptr1 = &item1;\n   char test1 = 1;\n \n-  __atomic_store_with_stshh (ptr1, test1, __ATOMIC_RELAXED, 0);\n+  __arm_atomic_store_with_hint (ptr1, test1, __ATOMIC_RELAXED, 0);\n }\n \n /*\n@@ -34,7 +34,7 @@ testFun2 ()\n   short item2 = 10;\n   short* ptr2 = &item2;\n   short test2 = 11;\n-  __atomic_store_with_stshh (ptr2, test2, __ATOMIC_RELEASE, 0);\n+  __arm_atomic_store_with_hint (ptr2, test2, __ATOMIC_RELEASE, 0);\n }\n \n /*\n@@ -50,7 +50,7 @@ testFun3 ()\n   unsigned int item3 = 10;\n   unsigned int* ptr3 = &item3;\n   unsigned int test3 = 11;\n-  __atomic_store_with_stshh (ptr3, test3, __ATOMIC_SEQ_CST, 1);\n+  __arm_atomic_store_with_hint (ptr3, test3, __ATOMIC_SEQ_CST, 1);\n }\n \n /*\n@@ -66,7 +66,7 @@ testFun4 ()\n   long item4 = 10;\n   long* ptr4 = &item4;\n   long test4 = 11;\n-  __atomic_store_with_stshh (ptr4, test4, __ATOMIC_RELAXED, 1);\n+  __arm_atomic_store_with_hint (ptr4, test4, __ATOMIC_RELAXED, 1);\n }\n \n /*\n@@ -84,7 +84,7 @@ testFun5 ()\n   long **ptr5 = &ptritem;\n   long test5item = 11;\n   long *test5 = &test5item;\n-  __atomic_store_with_stshh (ptr5, test5, __ATOMIC_SEQ_CST, 0);\n+  __arm_atomic_store_with_hint (ptr5, test5, __ATOMIC_SEQ_CST, 0);\n }\n \n /*\n@@ -100,7 +100,7 @@ testFun6 ()\n   float item6 = 10;\n   float* ptr6 = &item6;\n   float test6 = 11;\n-  __atomic_store_with_stshh (ptr6, test6, __ATOMIC_SEQ_CST, 0);\n+  __arm_atomic_store_with_hint (ptr6, test6, __ATOMIC_SEQ_CST, 0);\n }\n \n /*\n@@ -116,7 +116,7 @@ testFun7 ()\n   double item7 = 10;\n   double* ptr7 = &item7;\n   double test7 = 11;\n-  __atomic_store_with_stshh (ptr7, test7, __ATOMIC_RELAXED, 1);\n+  __arm_atomic_store_with_hint (ptr7, test7, __ATOMIC_RELAXED, 1);\n }\n \n /*\n@@ -133,7 +133,7 @@ testFun8 ()\n   char* ptr8 = &item8;\n   long test8 = 1;\n \n-  __atomic_store_with_stshh (ptr8, test8, __ATOMIC_RELAXED, 0);\n+  __arm_atomic_store_with_hint (ptr8, test8, __ATOMIC_RELAXED, 0);\n }\n \n /*\n@@ -150,7 +150,7 @@ testFun9 ()\n   int* ptr9 = &item9;\n   float test9 = 1;\n \n-  __atomic_store_with_stshh (ptr9, test9, __ATOMIC_RELAXED, 1);\n+  __arm_atomic_store_with_hint (ptr9, test9, __ATOMIC_RELAXED, 1);\n }\n \n /*\n@@ -166,7 +166,7 @@ static char buf[8];\n void\n testFun10 (void)\n {\n-  __atomic_store_with_stshh((buf + 1), (char)7, __ATOMIC_RELAXED, 1);\n+  __arm_atomic_store_with_hint((buf + 1), (char)7, __ATOMIC_RELAXED, 1);\n }\n \n /*\n@@ -182,5 +182,5 @@ testFun11 ()\n   int item11 = 10;\n   int* ptr11 = &item11;\n \n-  __atomic_store_with_stshh (ptr11, 0, __ATOMIC_RELAXED, 1);\n+  __arm_atomic_store_with_hint (ptr11, 0, __ATOMIC_RELAXED, 1);\n }\n",
    "prefixes": [
        "1/2"
    ]
}