From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02on2081.outbound.protection.outlook.com [40.107.247.81]) by sourceware.org (Postfix) with ESMTPS id 9C8103858D20 for ; Fri, 11 Nov 2022 14:22:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 9C8103858D20 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-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=ZJsEvdG57wmvxhxL1BvQTgluqU2PQo7VKutUr9DtyX7j/EdEwC6Mu/L9IEnnyAepAzNdS8Qbw5tXNTIHmvnrAqyVKzb21hDEGzWV6Q2sfA/2t/oyQxrIy67x0a1VMARsrl1vbQZiVpEz6QE0ZJXvfp4lLFgDJ1gwZitWO3mHoRX62UsSSuXq0DXEFYnnJkcJUIP3RzHQbaDxILFjFGWkOc1G9kt2ehzP/sLPHHJXQ0LNPx1OBXC8TV+MxHLt19U6i5XuBPfhj5aanQbQXFBOeXxncFHez0Yhs2NtVeEY/BBh8zNR+1aXDGyLLxofsGOKER9LfBzKITiTHEtm+NuETw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=sIVk4CTK1iJXlslFoEanPhNdTlF9EtzgLpJ0tIX08Hc=; b=QkwHyBtwzm5JYMSMKYuyvAqnqFjqYomrQrDNWJzxlNLHLKnDqVyWrDEbDOmUuikCM5PfHGHKcsByUW8Mmkcj8IT1f++7eP+fIS4YZElgb4QUOa+VaQUlc0H27jlc1HkwgynnRhr1ehFNVE9pM+RFPFIVekMki9LFNvrz7Xvq6dQaaQyUGjSdNH4xyPyCnSgdTUvhUgKsdngFclaOe+b8hF/gu+br7dZCJaI9nhxAf8XVJ5g2iYC44qMBLQU8s2YIcnh2gPWiOIzBpVEXg0bH1wwP0gS3dH+Bjuzmb8RQNV+3Zy0/fLZNYbYGDf80UgWfcbf+9WJSYA1ucPk03LP+dQ== 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=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sIVk4CTK1iJXlslFoEanPhNdTlF9EtzgLpJ0tIX08Hc=; b=CyG2fiHUH1NQFlHWv1HKLM25FK+pKU3tptRZB/JMgF2xIcGyt8cTTae9GPOk6eDYEwc6xDiTv72mYJmtsTWNgmpKXy86Eu2v7jwHFXgXH7VvBQ6prYgngIefh2FLvTE/JhR2pgzHM3QRsKVl6qam1iD9ltGR7LL+YZujlh+HGuQ= Received: from FR3P281CA0133.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:94::20) by DBBPR08MB6089.eurprd08.prod.outlook.com (2603:10a6:10:206::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.13; Fri, 11 Nov 2022 14:22:32 +0000 Received: from VI1EUR03FT033.eop-EUR03.prod.protection.outlook.com (2603:10a6:d10:94:cafe::1d) by FR3P281CA0133.outlook.office365.com (2603:10a6:d10:94::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.14 via Frontend Transport; Fri, 11 Nov 2022 14:22:32 +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=armh.onmicrosoft.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 VI1EUR03FT033.mail.protection.outlook.com (100.127.144.234) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.12 via Frontend Transport; Fri, 11 Nov 2022 14:22:31 +0000 Received: ("Tessian outbound 73ab5f36653e:v130"); Fri, 11 Nov 2022 14:22:31 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 4c5638220cc3154b X-CR-MTA-TID: 64aa7808 Received: from 5eb7aee474a3.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id C7F773A6-8A27-4E07-A41F-2A74C8FFF3C6.1; Fri, 11 Nov 2022 14:22:18 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 5eb7aee474a3.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 11 Nov 2022 14:22:18 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OajOJrVMb1thljS0fTIf4oScV3sv8xhkIxvqk2stOESAjsTYpu7dLMvTdB4ZxJMl65zm8s8QYx0j6MJjlN0kP0M8xrALBmkPLNGX9hoUFVAeJ6xvjCO1vno3+CpTA/NT+JEGYDQKKLdRVnu8woX0r+xGmvwrs3RBBcGQZAbvmJWRF0H8YUSgcvYhqOQZp30BZUsiOBz1eDrYRrobVziTVxMyp2DFZkgyCvTTGWQw+6ooO0rZoVeLw9lppq3wfEcw1tCjL4Q+n9XZ+d6RAyzyzuJPC/hhsObQnJg4OGaILcwUodasHbCSjvESYkUouSKGPW+iWJaJhokEFg4M8l2xng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=sIVk4CTK1iJXlslFoEanPhNdTlF9EtzgLpJ0tIX08Hc=; b=mNMczshSQZFE4A5cskduoIv6Gev/XXJp2LRkg2v3+LyeXNbEi2LXxb8GgxWkPIaS0v7KKloBqwLU/H1NMib3Dc7pZ5rjXQPbUHDlU+ELX/TryDN8XIlnMtcRxiuuskoPe5JtRuWmyy2SuNbBjAS6SqVtnzQIDIkgNvMqH4pmyW1Hf5RYFCSx9gT8eSU9AoW7wyMCY8+F5zyx5AlyGlmIbdg1Zp48HbZKVU1hkrj565aUvtqQnz4pP2Li53wwKusn94g9oRAQBowsKn1LwR3I2Opi+MjFlOTZdzgeCw4C3LF1FZAPH60Zpp+E4HCVcMKiTPni1NL8UGRyU4wnNEjXRg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sIVk4CTK1iJXlslFoEanPhNdTlF9EtzgLpJ0tIX08Hc=; b=CyG2fiHUH1NQFlHWv1HKLM25FK+pKU3tptRZB/JMgF2xIcGyt8cTTae9GPOk6eDYEwc6xDiTv72mYJmtsTWNgmpKXy86Eu2v7jwHFXgXH7VvBQ6prYgngIefh2FLvTE/JhR2pgzHM3QRsKVl6qam1iD9ltGR7LL+YZujlh+HGuQ= Received: from PAWPR08MB8982.eurprd08.prod.outlook.com (2603:10a6:102:33f::20) by DU0PR08MB8279.eurprd08.prod.outlook.com (2603:10a6:10:40d::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.11; Fri, 11 Nov 2022 14:22:17 +0000 Received: from PAWPR08MB8982.eurprd08.prod.outlook.com ([fe80::4c73:7d14:fc39:a3cb]) by PAWPR08MB8982.eurprd08.prod.outlook.com ([fe80::4c73:7d14:fc39:a3cb%3]) with mapi id 15.20.5813.013; Fri, 11 Nov 2022 14:22:16 +0000 From: Wilco Dijkstra To: GCC Patches CC: Richard Sandiford , Kyrylo Tkachov Subject: [PATCH] libatomic: Add support for LSE and LSE2 Thread-Topic: [PATCH] libatomic: Add support for LSE and LSE2 Thread-Index: AQHY9daotEyJo5c7lUmJKpeQyhTuFA== Date: Fri, 11 Nov 2022 14:22:16 +0000 Message-ID: Accept-Language: en-GB, en-US Content-Language: en-GB X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: PAWPR08MB8982:EE_|DU0PR08MB8279:EE_|VI1EUR03FT033:EE_|DBBPR08MB6089:EE_ X-MS-Office365-Filtering-Correlation-Id: 9b02173d-1917-40bc-098a-08dac3f02b94 x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: WYiO+Bvs31i3YtupT9ExVyHtw2t69AUz2bMjiDfADYcQKGRc7nhTzbOEXRK+QAzsqgRXF2sUeX2TkFulppPbxs9TJaYWjPx+U94lUpYKXS9ne5yPEmB6BZrQpcCLbPYlcTZSNP5SUAGDRdQZ7JDJVJbUEriCrlMKc8kb8Fil9jG+oKL2pt1kVz9DrLK1SpgMPEbSklYNL6ZbhOlduc2sFh2t9SaawHQDcU8DK80l585cp2kdBI/8AQbEDGW+VnOir2dLTWoqa+WlJ8FtG1TXI4QvVfDtCPyz9x7Be2FsH9BDVbAKLhxnDPUf7tnm3/ejEPcu3AzRzUCeR/rq48oQ9hzBk9bFQXFYY/BjJaAPuWNT6NXQVGqWS+jJsz8yHXgCfhnRfRCUchFWgeNF1qcjy800tjKHroKZd6IImWXneu4h/1oq+cbCLZ8h/2uH2KxUQkx/bmiY67SU4rLnCLSE4CO7bbMMN0k9d3zzEWtjqUfosDvUlC7Pps+ajkI7e9OJZiOVI6fg5sMP1CpgCybHNvSe11oeP0cYTvnMOiFkOCoYruL7np++HEYHV2XZ+csIOrcm+qVZpXXdl3dJyJrLj7qK2UuBxxAzlaOlrrNczcsf5WgfpVtANLCHSpbtpB1K1FhCIsnF5JEBvhGzGKp7clJusQJpkxK47Plu4eXTY7dUs5MFy4IU2FO5oL7W90IUKc0esAIRQhS6VBX5lfiIKoiAxntks6pDKpLkYqOMe5YVD/JSsFDvktN8QKn03F1aUc5UVa8AS7oPPKjn8+8iC2cgGBdYnIoF2LcYTCiB3fUOuMZ+RBoxSgt5JyAL4z3H X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAWPR08MB8982.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(376002)(346002)(39860400002)(396003)(366004)(451199015)(38070700005)(33656002)(86362001)(55016003)(186003)(30864003)(26005)(83380400001)(2906002)(9686003)(122000001)(316002)(6506007)(7696005)(64756008)(4326008)(91956017)(66476007)(66946007)(66556008)(8676002)(71200400001)(52536014)(5660300002)(38100700002)(478600001)(41300700001)(76116006)(6916009)(8936002)(54906003)(66446008)(2004002)(579004);DIR:OUT;SFP:1101; Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB8279 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VI1EUR03FT033.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 4caef429-e358-4c09-ba75-08dac3f0229e X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: N09+FAmmoclSBH9w1QVktwEgIssZWk4apUR8bAJK0vLJme+UDGaBBaL+40iy/h5qgrACQWJ/UhoJR89Gk91Y0XsTDN3UVedXcIwYDn803uESTCVb0KZ9Mj8H9fcTR0MjZN94Uv3q6FKVNY/VgYdWtDrutrHy2l0fgqDhH1dahp8T9na0zlHIj4e8B0AgHy9z/tiiypyetahkrFSilKjNopE8ZE1DVRyrb4o8VI3Aj0pTxyYEyUfVJJ0kuaQO0J+/NtMXlMpfWthIcLuyecBHCUGCn4lgyVdTEFPbFqEqIJz1dEYQOq/HZpYGFA3COalvT8S7sdv4DxjYz2Vi4ChrhQbpZ2rAQJBshCy/NJyZtFwclpiinn9JowmHUolOza/K+L92z28FUgwWyWeCJo01kIhUwiOuCQSmIl3VcsOuCC411f78+fj4nIqrgSTBhYYy1YIBO912u6sG6iYff1Ne3aR5tAVoSRPK4TkKOOSj+7mqlt9hcOEosXriBCTcwmhDdheguAeClNUXCatyCtmxD3CJ0ApDGs2jKJO4OweSwWXJtfpZNXYmoSpE4ikHtPIvDDWF8KRHbnBlzbY3bCPAMpdibAcEVSa9pUHxxshIQFAEDAz4Ih/5FKIyiewjcmiu0m926CO0wKE+lUEXM9CvsjaFv4G1UUf/lpc3oa0+syqE4mb+O9HUZ0NEne4PF/0DUU/EvE+Gze7+C7fU+1tshM7nGD+4LcO57H/SItXR6aAttLJe6HpACbUfQTnGn8E2vQdB6n70lz7WidaRm6p8F0KUZuYLgiB5Og6gjSbtbfgH0PI1dvkIEvysXucvPBIE 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:(13230022)(4636009)(136003)(376002)(396003)(346002)(39860400002)(451199015)(36840700001)(46966006)(40470700004)(30864003)(82310400005)(86362001)(2906002)(40460700003)(33656002)(356005)(82740400003)(4326008)(7696005)(6506007)(81166007)(316002)(26005)(70206006)(6916009)(54906003)(9686003)(70586007)(478600001)(8676002)(8936002)(40480700001)(5660300002)(36860700001)(52536014)(47076005)(336012)(83380400001)(41300700001)(55016003)(186003)(2004002);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Nov 2022 14:22:31.5161 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9b02173d-1917-40bc-098a-08dac3f02b94 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: VI1EUR03FT033.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB6089 X-Spam-Status: No, score=-9.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_LOTSOFHASH,KAM_NUMSUBJECT,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SCC_10_SHORT_WORD_LINES,SCC_20_SHORT_WORD_LINES,SCC_5_SHORT_WORD_LINES,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 List-Id: Add support for AArch64 LSE and LSE2 to libatomic. Disable outline atomics= ,=0A= and use LSE ifuncs for 1-8 byte atomics and LSE2 ifuncs for 16-byte atomics= .=0A= On Neoverse V1, 16-byte atomics are ~4x faster due to avoiding locks.=0A= =0A= Note this is safe since we swap all 16-byte atomics using the same ifunc,= =0A= so they either use locks or LSE2 atomics, but never a mix. This also improv= es=0A= ABI compatibility with LLVM: its inlined 16-byte atomics are compatible wit= h=0A= the new libatomic if LSE2 is supported.=0A= =0A= Passes regress, OK for commit?=0A= =0A= libatomic/=0A= Makefile.in: Regenerated with automake 1.15.1.=0A= Makefile.am: Add atomic_16.S for AArch64.=0A= configure.tgt: Disable outline atomics in AArch64 build.=0A= config/linux/aarch64/atomic_16.S: New file - implementation of=0A= ifuncs for 128-bit atomics.=0A= config/linux/aarch64/host-config.h: Enable ifuncs, use LSE (HWCAP_A= TOMICS)=0A= for 1-8-byte atomics and LSE2 (HWCAP_USCAT) for 16-byte atomics.=0A= =0A= ---=0A= diff --git a/libatomic/Makefile.am b/libatomic/Makefile.am=0A= index d88515e4a03bd812334ae0b7bf4c0bba119455dc..41e5da28512150780a2018386e2= 2b4e70afcfa3f 100644=0A= --- a/libatomic/Makefile.am=0A= +++ b/libatomic/Makefile.am=0A= @@ -127,6 +127,8 @@ if HAVE_IFUNC=0A= if ARCH_AARCH64_LINUX=0A= IFUNC_OPTIONS =3D -march=3Darmv8-a+lse=0A= libatomic_la_LIBADD +=3D $(foreach s,$(SIZES),$(addsuffix _$(s)_1_.lo,$(SI= ZEOBJS)))=0A= +libatomic_la_SOURCES +=3D atomic_16.S=0A= +=0A= endif=0A= if ARCH_ARM_LINUX=0A= IFUNC_OPTIONS =3D -march=3Darmv7-a+fp -DHAVE_KERNEL64=0A= diff --git a/libatomic/Makefile.in b/libatomic/Makefile.in=0A= index 80d25653dc75cca995c8b0b2107a55f1234a6d52..89e29fc60a7fb74341b2f0f805e= 461847073082c 100644=0A= --- a/libatomic/Makefile.in=0A= +++ b/libatomic/Makefile.in=0A= @@ -90,13 +90,14 @@ build_triplet =3D @build@=0A= host_triplet =3D @host@=0A= target_triplet =3D @target@=0A= @ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@am__append_1 =3D $(foreach s,$(S= IZES),$(addsuffix _$(s)_1_.lo,$(SIZEOBJS)))=0A= -@ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@am__append_2 =3D $(foreach \=0A= +@ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@am__append_2 =3D atomic_16.S=0A= +@ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@am__append_3 =3D $(foreach \=0A= @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@ s,$(SIZES),$(addsuffix \=0A= @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@ _$(s)_1_.lo,$(SIZEOBJS))) \=0A= @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@ $(addsuffix \=0A= @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@ _8_2_.lo,$(SIZEOBJS))=0A= -@ARCH_I386_TRUE@@HAVE_IFUNC_TRUE@am__append_3 =3D $(addsuffix _8_1_.lo,$(S= IZEOBJS))=0A= -@ARCH_X86_64_TRUE@@HAVE_IFUNC_TRUE@am__append_4 =3D $(addsuffix _16_1_.lo,= $(SIZEOBJS)) \=0A= +@ARCH_I386_TRUE@@HAVE_IFUNC_TRUE@am__append_4 =3D $(addsuffix _8_1_.lo,$(S= IZEOBJS))=0A= +@ARCH_X86_64_TRUE@@HAVE_IFUNC_TRUE@am__append_5 =3D $(addsuffix _16_1_.lo,= $(SIZEOBJS)) \=0A= @ARCH_X86_64_TRUE@@HAVE_IFUNC_TRUE@ $(addsuffix _16_2_.lo,$(SIZEOB= JS))=0A= =0A= subdir =3D .=0A= @@ -154,8 +155,11 @@ am__uninstall_files_from_dir =3D { \=0A= }=0A= am__installdirs =3D "$(DESTDIR)$(toolexeclibdir)"=0A= LTLIBRARIES =3D $(noinst_LTLIBRARIES) $(toolexeclib_LTLIBRARIES)=0A= +@ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@am__objects_1 =3D \=0A= +@ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@ atomic_16.lo=0A= am_libatomic_la_OBJECTS =3D gload.lo gstore.lo gcas.lo gexch.lo \=0A= - glfree.lo lock.lo init.lo fenv.lo fence.lo flag.lo=0A= + glfree.lo lock.lo init.lo fenv.lo fence.lo flag.lo \=0A= + $(am__objects_1)=0A= libatomic_la_OBJECTS =3D $(am_libatomic_la_OBJECTS)=0A= AM_V_lt =3D $(am__v_lt_@AM_V@)=0A= am__v_lt_ =3D $(am__v_lt_@AM_DEFAULT_V@)=0A= @@ -165,9 +169,9 @@ libatomic_la_LINK =3D $(LIBTOOL) $(AM_V_lt) --tag=3DCC = $(AM_LIBTOOLFLAGS) \=0A= $(LIBTOOLFLAGS) --mode=3Dlink $(CCLD) $(AM_CFLAGS) $(CFLAGS) \=0A= $(libatomic_la_LDFLAGS) $(LDFLAGS) -o $@=0A= libatomic_convenience_la_DEPENDENCIES =3D $(libatomic_la_LIBADD)=0A= -am__objects_1 =3D gload.lo gstore.lo gcas.lo gexch.lo glfree.lo lock.lo \= =0A= - init.lo fenv.lo fence.lo flag.lo=0A= -am_libatomic_convenience_la_OBJECTS =3D $(am__objects_1)=0A= +am__objects_2 =3D gload.lo gstore.lo gcas.lo gexch.lo glfree.lo lock.lo \= =0A= + init.lo fenv.lo fence.lo flag.lo $(am__objects_1)=0A= +am_libatomic_convenience_la_OBJECTS =3D $(am__objects_2)=0A= libatomic_convenience_la_OBJECTS =3D \=0A= $(am_libatomic_convenience_la_OBJECTS)=0A= AM_V_P =3D $(am__v_P_@AM_V@)=0A= @@ -185,6 +189,16 @@ am__v_at_1 =3D=0A= depcomp =3D $(SHELL) $(top_srcdir)/../depcomp=0A= am__depfiles_maybe =3D depfiles=0A= am__mv =3D mv -f=0A= +CPPASCOMPILE =3D $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \=0A= + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS)=0A= +LTCPPASCOMPILE =3D $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \=0A= + $(LIBTOOLFLAGS) --mode=3Dcompile $(CCAS) $(DEFS) \=0A= + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \=0A= + $(AM_CCASFLAGS) $(CCASFLAGS)=0A= +AM_V_CPPAS =3D $(am__v_CPPAS_@AM_V@)=0A= +am__v_CPPAS_ =3D $(am__v_CPPAS_@AM_DEFAULT_V@)=0A= +am__v_CPPAS_0 =3D @echo " CPPAS " $@;=0A= +am__v_CPPAS_1 =3D =0A= COMPILE =3D $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \= =0A= $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)=0A= LTCOMPILE =3D $(LIBTOOL) $(AM_V_lt) --tag=3DCC $(AM_LIBTOOLFLAGS) \=0A= @@ -369,6 +383,7 @@ pdfdir =3D @pdfdir@=0A= prefix =3D @prefix@=0A= program_transform_name =3D @program_transform_name@=0A= psdir =3D @psdir@=0A= +runstatedir =3D @runstatedir@=0A= sbindir =3D @sbindir@=0A= sharedstatedir =3D @sharedstatedir@=0A= srcdir =3D @srcdir@=0A= @@ -404,9 +419,8 @@ noinst_LTLIBRARIES =3D libatomic_convenience.la=0A= @LIBAT_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBAT_BUILD_VERSIONED_SHLIB_TRUE@li= batomic_version_dep =3D libatomic.map-sun=0A= libatomic_version_info =3D -version-info $(libtool_VERSION)=0A= libatomic_la_LDFLAGS =3D $(libatomic_version_info) $(libatomic_version_scr= ipt) $(lt_host_flags)=0A= -libatomic_la_SOURCES =3D gload.c gstore.c gcas.c gexch.c glfree.c lock.c i= nit.c \=0A= - fenv.c fence.c flag.c=0A= -=0A= +libatomic_la_SOURCES =3D gload.c gstore.c gcas.c gexch.c glfree.c lock.c \= =0A= + init.c fenv.c fence.c flag.c $(am__append_2)=0A= SIZEOBJS =3D load store cas exch fadd fsub fand fior fxor fnand tas=0A= EXTRA_libatomic_la_SOURCES =3D $(addsuffix _n.c,$(SIZEOBJS))=0A= libatomic_la_DEPENDENCIES =3D $(libatomic_la_LIBADD) $(libatomic_version_d= ep)=0A= @@ -432,8 +446,8 @@ all_c_files :=3D $(foreach dir,$(search_path),$(wildcar= d $(dir)/*.c))=0A= # Then sort through them to find the one we want, and select the first.=0A= M_SRC =3D $(firstword $(filter %/$(M_FILE), $(all_c_files)))=0A= libatomic_la_LIBADD =3D $(foreach s,$(SIZES),$(addsuffix \=0A= - _$(s)_.lo,$(SIZEOBJS))) $(am__append_1) $(am__append_2) \=0A= - $(am__append_3) $(am__append_4)=0A= + _$(s)_.lo,$(SIZEOBJS))) $(am__append_1) $(am__append_3) \=0A= + $(am__append_4) $(am__append_5)=0A= @ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS =3D -march=3Darmv8= -a+lse=0A= @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS =3D -march=3Darmv7-a+f= p -DHAVE_KERNEL64=0A= @ARCH_I386_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS =3D -march=3Di586=0A= @@ -450,7 +464,7 @@ all: auto-config.h=0A= $(MAKE) $(AM_MAKEFLAGS) all-recursive=0A= =0A= .SUFFIXES:=0A= -.SUFFIXES: .c .lo .o .obj=0A= +.SUFFIXES: .S .c .lo .o .obj=0A= am--refresh: Makefile=0A= @:=0A= $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_= srcdir)/../multilib.am $(am__configure_deps)=0A= @@ -559,6 +573,7 @@ mostlyclean-compile:=0A= distclean-compile:=0A= -rm -f *.tab.c=0A= =0A= +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atomic_16.Plo@am__quote@= =0A= @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fence.Plo@am__quote@=0A= @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fenv.Plo@am__quote@=0A= @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flag.Plo@am__quote@=0A= @@ -570,6 +585,27 @@ distclean-compile:=0A= @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Plo@am__quote@=0A= @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lock.Plo@am__quote@=0A= =0A= +.S.o:=0A= +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) -MT $@ -MD -MP -MF $(D= EPDIR)/$*.Tpo -c -o $@ $<=0A= +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.P= o=0A= +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source=3D'$<' object=3D'$= @' libtool=3Dno @AMDEPBACKSLASH@=0A= +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=3D$(DEPDIR) $(CCASDEPMODE) $(de= pcomp) @AMDEPBACKSLASH@=0A= +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ $= <=0A= +=0A= +.S.obj:=0A= +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) -MT $@ -MD -MP -MF $(D= EPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`=0A= +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.P= o=0A= +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source=3D'$<' object=3D'$= @' libtool=3Dno @AMDEPBACKSLASH@=0A= +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=3D$(DEPDIR) $(CCASDEPMODE) $(de= pcomp) @AMDEPBACKSLASH@=0A= +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ `= $(CYGPATH_W) '$<'`=0A= +=0A= +.S.lo:=0A= +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $= (DEPDIR)/$*.Tpo -c -o $@ $<=0A= +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.P= lo=0A= +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source=3D'$<' object=3D'$= @' libtool=3Dyes @AMDEPBACKSLASH@=0A= +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=3D$(DEPDIR) $(CCASDEPMODE) $(de= pcomp) @AMDEPBACKSLASH@=0A= +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(LTCPPASCOMPILE) -c -o $@= $<=0A= +=0A= .c.o:=0A= @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.= Tpo -c -o $@ $<=0A= @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po= =0A= diff --git a/libatomic/config/linux/aarch64/atomic_16.S b/libatomic/config/= linux/aarch64/atomic_16.S=0A= new file mode 100644=0A= index 0000000000000000000000000000000000000000..5f23dba4529528c394252214023= 23d07a14cc518=0A= --- /dev/null=0A= +++ b/libatomic/config/linux/aarch64/atomic_16.S=0A= @@ -0,0 +1,422 @@=0A= +/* Copyright (C) 2022 Free Software Foundation, Inc.=0A= +=0A= + This file is part of the GNU Atomic Library (libatomic).=0A= +=0A= + Libatomic is free software; you can redistribute it and/or modify it=0A= + under the terms of the GNU General Public License as published by=0A= + the Free Software Foundation; either version 3 of the License, or=0A= + (at your option) any later version.=0A= +=0A= + Libatomic is distributed in the hope that it will be useful, but WITHOU= T ANY=0A= + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNE= SS=0A= + FOR A PARTICULAR PURPOSE. See the GNU General Public License for=0A= + more details.=0A= +=0A= + Under Section 7 of GPL version 3, you are granted additional=0A= + permissions described in the GCC Runtime Library Exception, version=0A= + 3.1, as published by the Free Software Foundation.=0A= +=0A= + You should have received a copy of the GNU General Public License and= =0A= + a copy of the GCC Runtime Library Exception along with this program;=0A= + see the files COPYING3 and COPYING.RUNTIME respectively. If not, see= =0A= + . */=0A= +=0A= +=0A= + .arch armv8-a+lse=0A= +=0A= +#define ENTRY(name) \=0A= + .global name; \=0A= + .hidden name; \=0A= + .type name,%function; \=0A= + .p2align 4; \=0A= +name: \=0A= + .cfi_startproc; \=0A= + hint 34 // bti c=0A= +=0A= +#define END(name) \=0A= + .cfi_endproc; \=0A= + .size name, .-name;=0A= +=0A= +#define res0 x0=0A= +#define res1 x1=0A= +#define in0 x2=0A= +#define in1 x3=0A= +#define tmp0 x6=0A= +#define tmp1 x7=0A= +#define exp0 x8=0A= +#define exp1 x9=0A= +=0A= +#ifdef __AARCH64EB__=0A= +# define reslo x1=0A= +# define reshi x0=0A= +# define inlo x3=0A= +# define inhi x2=0A= +# define tmplo x7=0A= +# define tmphi x6=0A= +#else=0A= +# define reslo x0=0A= +# define reshi x1=0A= +# define inlo x2=0A= +# define inhi x3=0A= +# define tmplo x6=0A= +# define tmphi x7=0A= +#endif=0A= +=0A= +#define RELAXED 0=0A= +#define CONSUME 1=0A= +#define ACQUIRE 2=0A= +#define RELEASE 3=0A= +#define ACQ_REL 4=0A= +#define SEQ_CST 5=0A= +=0A= +=0A= +ENTRY (libat_load_16_i1)=0A= + cbnz w1, 1f=0A= + ldp res0, res1, [x0]=0A= + ret=0A= +1:=0A= + cmp w1, ACQUIRE=0A= + b.hi 2f=0A= + ldp res0, res1, [x0]=0A= + dmb ishld=0A= + ret=0A= +2:=0A= + ldp res0, res1, [x0]=0A= + dmb ish=0A= + ret=0A= +END (libat_load_16_i1)=0A= +=0A= +=0A= +ENTRY (libat_store_16_i1)=0A= + cbnz w4, 1f=0A= + stp in0, in1, [x0]=0A= + ret=0A= +1:=0A= + dmb ish=0A= + stp in0, in1, [x0]=0A= + cmp w4, SEQ_CST=0A= + beq 2f=0A= + ret=0A= +2:=0A= + dmb ish=0A= + ret=0A= +END (libat_store_16_i1)=0A= +=0A= +=0A= +ENTRY (libat_exchange_16_i1)=0A= + mov x5, x0=0A= + cbnz w4, 2f=0A= +1:=0A= + ldxp res0, res1, [x5]=0A= + stxp w4, in0, in1, [x5]=0A= + cbnz w4, 1b=0A= + ret=0A= +2:=0A= + cmp w4, ACQUIRE=0A= + b.hi 4f=0A= +3:=0A= + ldaxp res0, res1, [x5]=0A= + stxp w4, in0, in1, [x5]=0A= + cbnz w4, 3b=0A= + ret=0A= +4:=0A= + cmp w4, RELEASE=0A= + b.ne 6f=0A= +5:=0A= + ldxp res0, res1, [x5]=0A= + stlxp w4, in0, in1, [x5]=0A= + cbnz w4, 5b=0A= + ret=0A= +6:=0A= + ldaxp res0, res1, [x5]=0A= + stlxp w4, in0, in1, [x5]=0A= + cbnz w4, 6b=0A= + ret=0A= +END (libat_exchange_16_i1)=0A= +=0A= +=0A= +ENTRY (libat_compare_exchange_16_i1)=0A= + ldp exp0, exp1, [x1]=0A= + mov tmp0, exp0=0A= + mov tmp1, exp1=0A= + cbz w5, 2f=0A= + cmp w5, RELEASE=0A= + b.hs 3f=0A= + caspa exp0, exp1, in0, in1, [x0]=0A= +0:=0A= + cmp exp0, tmp0=0A= + ccmp exp1, tmp1, 0, eq=0A= + bne 1f=0A= + mov x0, 1=0A= + ret=0A= +1:=0A= + stp exp0, exp1, [x1]=0A= + mov x0, 0=0A= + ret=0A= +2:=0A= + casp exp0, exp1, in0, in1, [x0]=0A= + b 0b=0A= +3:=0A= + b.hi 4f=0A= + caspl exp0, exp1, in0, in1, [x0]=0A= + b 0b=0A= +4:=0A= + caspal exp0, exp1, in0, in1, [x0]=0A= + b 0b=0A= +END (libat_compare_exchange_16_i1)=0A= +=0A= +=0A= +ENTRY (libat_fetch_add_16_i1)=0A= + mov x5, x0=0A= + cbnz w4, 2f=0A= +1:=0A= + ldxp res0, res1, [x5]=0A= + adds tmplo, reslo, inlo=0A= + adc tmphi, reshi, inhi=0A= + stxp w4, tmp0, tmp1, [x5]=0A= + cbnz w4, 1b=0A= + ret=0A= +2:=0A= + ldaxp res0, res1, [x5]=0A= + adds tmplo, reslo, inlo=0A= + adc tmphi, reshi, inhi=0A= + stlxp w4, tmp0, tmp1, [x5]=0A= + cbnz w4, 2b=0A= + ret=0A= +END (libat_fetch_add_16_i1)=0A= +=0A= +=0A= +ENTRY (libat_add_fetch_16_i1)=0A= + mov x5, x0=0A= + cbnz w4, 2f=0A= +1:=0A= + ldxp res0, res1, [x5]=0A= + adds reslo, reslo, inlo=0A= + adc reshi, reshi, inhi=0A= + stxp w4, res0, res1, [x5]=0A= + cbnz w4, 1b=0A= + ret=0A= +2:=0A= + ldaxp res0, res1, [x5]=0A= + adds reslo, reslo, inlo=0A= + adc reshi, reshi, inhi=0A= + stlxp w4, res0, res1, [x5]=0A= + cbnz w4, 2b=0A= + ret=0A= +END (libat_add_fetch_16_i1)=0A= +=0A= +=0A= +ENTRY (libat_fetch_sub_16_i1)=0A= + mov x5, x0=0A= + cbnz w4, 2f=0A= +1:=0A= + ldxp res0, res1, [x5]=0A= + subs tmplo, reslo, inlo=0A= + sbc tmphi, reshi, inhi=0A= + stxp w4, tmp0, tmp1, [x5]=0A= + cbnz w4, 1b=0A= + ret=0A= +2:=0A= + ldaxp res0, res1, [x5]=0A= + subs tmplo, reslo, inlo=0A= + sbc tmphi, reshi, inhi=0A= + stlxp w4, tmp0, tmp1, [x5]=0A= + cbnz w4, 2b=0A= + ret=0A= +END (libat_fetch_sub_16_i1)=0A= +=0A= +=0A= +ENTRY (libat_sub_fetch_16_i1)=0A= + mov x5, x0=0A= + cbnz w4, 2f=0A= +1:=0A= + ldxp res0, res1, [x5]=0A= + subs reslo, reslo, inlo=0A= + sbc reshi, reshi, inhi=0A= + stxp w4, res0, res1, [x5]=0A= + cbnz w4, 1b=0A= + ret=0A= +2:=0A= + ldaxp res0, res1, [x5]=0A= + subs reslo, reslo, inlo=0A= + sbc reshi, reshi, inhi=0A= + stlxp w4, res0, res1, [x5]=0A= + cbnz w4, 2b=0A= + ret=0A= +END (libat_sub_fetch_16_i1)=0A= +=0A= +=0A= +ENTRY (libat_fetch_or_16_i1)=0A= + mov x5, x0=0A= + cbnz w4, 2f=0A= +1:=0A= + ldxp res0, res1, [x5]=0A= + orr tmp0, res0, in0=0A= + orr tmp1, res1, in1=0A= + stxp w4, tmp0, tmp1, [x5]=0A= + cbnz w4, 1b=0A= + ret=0A= +2:=0A= + ldaxp res0, res1, [x5]=0A= + orr tmp0, res0, in0=0A= + orr tmp1, res1, in1=0A= + stlxp w4, tmp0, tmp1, [x5]=0A= + cbnz w4, 2b=0A= + ret=0A= +END (libat_fetch_or_16_i1)=0A= +=0A= +=0A= +ENTRY (libat_or_fetch_16_i1)=0A= + mov x5, x0=0A= + cbnz w4, 2f=0A= +1:=0A= + ldxp res0, res1, [x5]=0A= + orr res0, res0, in0=0A= + orr res1, res1, in1=0A= + stxp w4, res0, res1, [x5]=0A= + cbnz w4, 1b=0A= + ret=0A= +2:=0A= + ldaxp res0, res1, [x5]=0A= + orr res0, res0, in0=0A= + orr res1, res1, in1=0A= + stlxp w4, res0, res1, [x5]=0A= + cbnz w4, 2b=0A= + ret=0A= +END (libat_or_fetch_16_i1)=0A= +=0A= +=0A= +ENTRY (libat_fetch_and_16_i1)=0A= + mov x5, x0=0A= + cbnz w4, 2f=0A= +1:=0A= + ldxp res0, res1, [x5]=0A= + and tmp0, res0, in0=0A= + and tmp1, res1, in1=0A= + stxp w4, tmp0, tmp1, [x5]=0A= + cbnz w4, 1b=0A= + ret=0A= +2:=0A= + ldaxp res0, res1, [x5]=0A= + and tmp0, res0, in0=0A= + and tmp1, res1, in1=0A= + stlxp w4, tmp0, tmp1, [x5]=0A= + cbnz w4, 2b=0A= + ret=0A= +END (libat_fetch_and_16_i1)=0A= +=0A= +=0A= +ENTRY (libat_and_fetch_16_i1)=0A= + mov x5, x0=0A= + cbnz w4, 2f=0A= +1:=0A= + ldxp res0, res1, [x5]=0A= + and res0, res0, in0=0A= + and res1, res1, in1=0A= + stxp w4, res0, res1, [x5]=0A= + cbnz w4, 1b=0A= + ret=0A= +2:=0A= + ldaxp res0, res1, [x5]=0A= + and res0, res0, in0=0A= + and res1, res1, in1=0A= + stlxp w4, res0, res1, [x5]=0A= + cbnz w4, 2b=0A= + ret=0A= +END (libat_and_fetch_16_i1)=0A= +=0A= +=0A= +ENTRY (libat_fetch_xor_16_i1)=0A= + mov x5, x0=0A= + cbnz w4, 2f=0A= +1:=0A= + ldxp res0, res1, [x5]=0A= + eor tmp0, res0, in0=0A= + eor tmp1, res1, in1=0A= + stxp w4, tmp0, tmp1, [x5]=0A= + cbnz w4, 1b=0A= + ret=0A= +2:=0A= + ldaxp res0, res1, [x5]=0A= + eor tmp0, res0, in0=0A= + eor tmp1, res1, in1=0A= + stlxp w4, tmp0, tmp1, [x5]=0A= + cbnz w4, 2b=0A= + ret=0A= +END (libat_fetch_xor_16_i1)=0A= +=0A= +=0A= +ENTRY (libat_xor_fetch_16_i1)=0A= + mov x5, x0=0A= + cbnz w4, 2f=0A= +1:=0A= + ldxp res0, res1, [x5]=0A= + eor res0, res0, in0=0A= + eor res1, res1, in1=0A= + stxp w4, res0, res1, [x5]=0A= + cbnz w4, 1b=0A= + ret=0A= +2:=0A= + ldaxp res0, res1, [x5]=0A= + eor res0, res0, in0=0A= + eor res1, res1, in1=0A= + stlxp w4, res0, res1, [x5]=0A= + cbnz w4, 2b=0A= + ret=0A= +END (libat_xor_fetch_16_i1)=0A= +=0A= +=0A= +ENTRY (libat_fetch_nand_16_i1)=0A= + mov x5, x0=0A= + mvn in0, in0=0A= + mvn in1, in1=0A= + cbnz w4, 2f=0A= +1:=0A= + ldxp res0, res1, [x5]=0A= + orn tmp0, in0, res0=0A= + orn tmp1, in1, res1=0A= + stxp w4, tmp0, tmp1, [x5]=0A= + cbnz w4, 1b=0A= + ret=0A= +2:=0A= + ldaxp res0, res1, [x5]=0A= + orn tmp0, in0, res0=0A= + orn tmp1, in1, res1=0A= + stlxp w4, tmp0, tmp1, [x5]=0A= + cbnz w4, 2b=0A= + ret=0A= +END (libat_fetch_nand_16_i1)=0A= +=0A= +=0A= +ENTRY (libat_nand_fetch_16_i1)=0A= + mov x5, x0=0A= + mvn in0, in0=0A= + mvn in1, in1=0A= + cbnz w4, 2f=0A= +1:=0A= + ldxp res0, res1, [x5]=0A= + orn res0, in0, res0=0A= + orn res1, in1, res1=0A= + stxp w4, res0, res1, [x5]=0A= + cbnz w4, 1b=0A= + ret=0A= +2:=0A= + ldaxp res0, res1, [x5]=0A= + orn res0, in0, res0=0A= + orn res1, in1, res1=0A= + stlxp w4, res0, res1, [x5]=0A= + cbnz w4, 2b=0A= + ret=0A= +END (libat_nand_fetch_16_i1)=0A= +=0A= +=0A= +ENTRY (libat_test_and_set_16_i1)=0A= + mov w2, 1=0A= + cbnz w1, 2f=0A= + swpb w0, w2, [x0]=0A= + ret=0A= +=0A= +2: swpalb w0, w2, [x0]=0A= + ret=0A= +END (libat_test_and_set_16_i1)=0A= +=0A= diff --git a/libatomic/config/linux/aarch64/host-config.h b/libatomic/confi= g/linux/aarch64/host-config.h=0A= index 769ba6edc600099122b03af754cbbb079134596a..d9b5ab31bc85cfe1d5f3773c424= 42e408b174cbc 100644=0A= --- a/libatomic/config/linux/aarch64/host-config.h=0A= +++ b/libatomic/config/linux/aarch64/host-config.h=0A= @@ -22,14 +22,22 @@=0A= . */=0A= =0A= #if HAVE_IFUNC=0A= -#include =0A= +#include =0A= =0A= -# ifdef HWCAP_ATOMICS=0A= -# define IFUNC_COND_1 (hwcap & HWCAP_ATOMICS)=0A= +#ifdef HWCAP_USCAT=0A= +# if N =3D=3D 16=0A= +# define IFUNC_COND_1 (hwcap & HWCAP_USCAT)=0A= # else=0A= -# define IFUNC_COND_1 (false)=0A= +# define IFUNC_COND_1 (hwcap & HWCAP_ATOMICS)=0A= # endif=0A= -# define IFUNC_NCOND(N) (1)=0A= +#else=0A= +# define IFUNC_COND_1 (false)=0A= +#endif=0A= +#define IFUNC_NCOND(N) (1)=0A= +=0A= +#if N =3D=3D 16 && IFUNC_ALT !=3D 0=0A= +# define DONE 1=0A= +#endif=0A= =0A= #endif /* HAVE_IFUNC */=0A= =0A= diff --git a/libatomic/configure.tgt b/libatomic/configure.tgt=0A= index 33f8c91ce7718336b05e1077d3e91feb5b706730..113420f7beca143b5040fc9eb87= 1461c2163ae44 100644=0A= --- a/libatomic/configure.tgt=0A= +++ b/libatomic/configure.tgt=0A= @@ -49,6 +49,7 @@ case "${target_cpu}" in=0A= fi=0A= ;;=0A= esac=0A= + XCFLAGS=3D"${XCFLAGS} -mno-outline-atomics"=0A= ;;=0A= arm*)=0A= ARCH=3Darm=0A= =0A= =0A= =0A= =0A= =0A=