From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 22BBE3858025 for ; Tue, 25 Jul 2023 20:41:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 22BBE3858025 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 36PJIvPc029527 for ; Tue, 25 Jul 2023 20:41:55 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : content-transfer-encoding : content-type : mime-version; s=corp-2023-03-30; bh=Nvd2muoL9NavxvpvXfCljIoOZw95V0yBvkTxVXBamns=; b=yhKO8Q6FsqGPJgnMUBpSDbxBopdjDWm8WXf7G4WafxpJvQkuDwEWFcSfW7o5n/7Q8V6L mLDpzNXxEOyzJ7QEPaDcWHfBy50do47twgjTdUNzDseNvQ4ht2KXHQcdKKjLOFQ/6XiP au8ufxBfAhDkWbUHczVktxG9M7PQpyPnr8p1WvKeOnqyMGV8arBfuFQ8PByyZeME6OES bmFjh0iAF5z4c/b0RmSzHLF/qQ379u4EZ9VLS9GmDyPqf+Bb7VSf/Ye4pKzavNDXWLnY 3lgf0zJmc6JZCsW9qkA4fFCwciCTKX02MBEgGkzJGiVa30574GX8qXjuCPTFkFaVsMfP 1w== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3s05q1x2sw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 25 Jul 2023 20:41:54 +0000 Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 36PJhAKw033475 for ; Tue, 25 Jul 2023 20:41:53 GMT Received: from nam04-mw2-obe.outbound.protection.outlook.com (mail-mw2nam04lp2176.outbound.protection.outlook.com [104.47.73.176]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3s05jbk1f5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 25 Jul 2023 20:41:53 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kId8L1C3mC/f/h3x/WcAmeB48x1sOBGoszlais0rEBqR1MVOrsFJ+2DgIg8Ep1jmjk+B11qnTWUjdxyD6FqjAEamZuqv4sGZzAxSZdHiem1owbg0PODGzeN94bFaFFtx41rdn8aUJp01VWotJ6cF+L2kvcTw1QTkwTXBmGM40GzYql092ao4PcAyyhf9h+fPEMmdk5+qGG52vZGg49MYkZdwDuiANcgDbrwN7+Xb7QDKUXT+lwttlrCHoQfmtRTlNfac4HZW4m53BUxwIdC7VH/rgbtraKlqu6mbfIho52nyrKicga4ke0ptycbaDBCJsmv6gufQww5EBdNy5TQ/Rg== 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=Nvd2muoL9NavxvpvXfCljIoOZw95V0yBvkTxVXBamns=; b=OwU1P75jWaWKEozKg+Dgdn4UeC16aVleWrU/lXt0yia4K+vlpqXffZwITXoGfVNQRcwZYQUB1KXBeiipQf2zf8k+giIwL6ijvLXlQKFfkV39TWBlRHdtzpCZGK8/KsjgCRMFtQ3rG8YXPPwTU4M75RzwpkJgofUdaweA/uBY2yb010ZYVI+CCl8xnpxvTjZ9E3eXV6ZAuNWwdSdav2XdJHR6Wv0Q029MDd51v4glcJEptZxp7A3/K4w8IdoYnw6vsBG1GlFEhr8g4crUhURhkbhCW8wFv/7Dy3LK8LzMsOX2rztnsGUAiSWMKUik9iKYWb1KEfb284ygvCyrAwC/XA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Nvd2muoL9NavxvpvXfCljIoOZw95V0yBvkTxVXBamns=; b=Mr3fTNi/M2MtsdR2UM5LW9qZuoSuOMUsIYTgXcyWWF1z8Trwmb2rhQOyLn1pdgfv86MhiPzIv4PLhfse7dDGP2nyBJi/maeYNzY+ImWvucAUq1TyjTVxhXQLXSbqcpUQ3HBF8Cjnk2BS5ytrdtYwXnUgxkNXKWyM5HYbku+a4SM= Received: from MN2PR10MB3213.namprd10.prod.outlook.com (2603:10b6:208:131::33) by BLAPR10MB5282.namprd10.prod.outlook.com (2603:10b6:208:30e::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.33; Tue, 25 Jul 2023 20:41:50 +0000 Received: from MN2PR10MB3213.namprd10.prod.outlook.com ([fe80::827f:8665:2052:16c5]) by MN2PR10MB3213.namprd10.prod.outlook.com ([fe80::827f:8665:2052:16c5%4]) with mapi id 15.20.6609.032; Tue, 25 Jul 2023 20:41:50 +0000 From: David Faust To: binutils@sourceware.org Cc: jose.marchesi@oracle.com Subject: [PATCH] bpf: Add atomic compare-and-exchange instructions Date: Tue, 25 Jul 2023 13:41:42 -0700 Message-Id: <20230725204142.9462-1-david.faust@oracle.com> X-Mailer: git-send-email 2.39.1 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: SA0PR11CA0206.namprd11.prod.outlook.com (2603:10b6:806:1bc::31) To MN2PR10MB3213.namprd10.prod.outlook.com (2603:10b6:208:131::33) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MN2PR10MB3213:EE_|BLAPR10MB5282:EE_ X-MS-Office365-Filtering-Correlation-Id: cb628585-8fea-4a11-fa8c-08db8d4f927a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ODNPK58nuPJyVJWLR7iJFrlUYcjf+h8F5I4o1Pv/yp7qGjnQ24ZLmjdK7zjfCSpvfuHZDN1nM77Ib1gyN7Y8dp5WTunQm6YcneFMCq5qTwsnD3eAZDnb6KaS0GmNmeQqCko3jduulTjwbcF0ko6dgrNuRuvJAZRXf/OKbaUfOVZZxByu26JvWLIvkCjDGO8HSrpLPLrMFJkyt6rZKkSTQh2//zaKsj3S0ZXaoh8HujNilo27eadmbkVH9+hAKNWeaqN2garpEmpzgIp6nT4VEQfuGSz8wEKuIKGSPgbei6jXXO7ZAERv5fmu6rhQzreYTFlhgrET9RKRl1u/DvNkQAdQdY/hKQLGhsQu3rbywvpvrqLdvYB5AkbeSXWoMyEZJqfLNuKhLyNJiWUAC5Xen5R+gFasXAtGzYPh98EfNqoXaacZN4jKR8sUNCz5SpRUVz3lFdrKWhp3vnwAgPKFlXQ8WgdSrm2XsoEFzNqTjOCvB6YTKHFPBUFs0SoA6y1s6nT2zmopjfRxfXm8aN1z+7yVugiiKNfsLyg324e3avY6uN/yOFVri8OSQmJivkzo X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR10MB3213.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(136003)(376002)(366004)(396003)(39860400002)(346002)(451199021)(6486002)(38100700002)(6666004)(478600001)(6512007)(41300700001)(5660300002)(2616005)(316002)(66476007)(66556008)(6916009)(4326008)(8936002)(66946007)(8676002)(186003)(83380400001)(1076003)(107886003)(6506007)(26005)(86362001)(44832011)(2906002)(36756003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?E+mABcOwKyDUrG8ybTgIbiKqBGf27YLjxJD8MO8Wg3NAdKyxTmP3Kql9D+ye?= =?us-ascii?Q?yrUShcJbjK+srj2zgUkwIB8kRDkwCBYbqD2kMSIco/aYwFFyb58snv4QzkNq?= =?us-ascii?Q?ex36pTOKg7tPUzTlvSuwHLqJ4X6x+aaU3Pt27lDz7FBPOGIHDIFJvefY/GGN?= =?us-ascii?Q?QQEO5rBvXlJcGsK+M9e0s7kZ2Axa4O0r3Y9VAB9DP+YKrroCAwjVP50OIQXg?= =?us-ascii?Q?a7e5KzBp+MEr9/Lg3MYHxBExhD5err3I81MBrL/SN7ncMYPfkcA8dXwFI2vF?= =?us-ascii?Q?sfFZLfJRMTiuxpMkrt2lpwdQ8gKthb5AM8WYKuoZUWNYnRjyOeExPqvIl2PK?= =?us-ascii?Q?GTRfmo2htqMqCv/Fdtp9ii2DyllZWAgQDYIoNnXhCt9pN6wCFUDj0jkVaax5?= =?us-ascii?Q?PVu/2Rfq86mFsJN/n1wHLkJf6X1sDqQTPx6JTVHJ8iNNp0DTADaoVztMfHfJ?= =?us-ascii?Q?t5eKbri7zB9LdQuIoWmDKtTx13FBa6FPMLZ9m5M9ELEW97JNj3rsd6Tx1/p3?= =?us-ascii?Q?7Szd4g7nflPDGxmS6ZydsSRQyi4HIokaMIfamKWuR2pz8bW0Az7Ixfs+ZECj?= =?us-ascii?Q?OCMK+PX2FG3pcpO/TcWjzGAgiaq0+p7PpIcVOyCtUtJIk7Rs1i8BnNIT7MPl?= =?us-ascii?Q?9sHMnWpZOfWy/LK8+GnfVckVdg0/So4UfE4fY8deyzaeRWdXmz8ux2i1n1vs?= =?us-ascii?Q?dgbk/oeNPcUYN5Sw4Xr6b8Vn8jwL5S0YuFGjrvxhl07OuYiJ+hBjvyjUIkm+?= =?us-ascii?Q?kvgvjMMYvs7yssccpWn+ZDaA5EjBjfdnsxAfwxlfKvZLKkxpaQbRZPhR0Yu9?= =?us-ascii?Q?4J+UCKeW5V2xylxNKNpCuL254ZCPBOfqxaMhIGGTXdZz7IUOg+T1t2Dn0hNB?= =?us-ascii?Q?chGKZ+RQO6at2fnkiAOqYr0U6oQZ5Kh+xTBoxK2nnLDMEv2fQmV5PMYZft33?= =?us-ascii?Q?o7Mf+raswkXSbHqYvmj/W7RUZi2aqATiziX9HZob8YxGFG1/V+Ctj5QHhWnr?= =?us-ascii?Q?ACPOC2IBWr5hA5fk4FDcAN0X51weuNzHazyFE7wg6kiuLXtf2WYgNXAgkt9p?= =?us-ascii?Q?p8OVMGKgaR+5HSP6rVrEhNwriMZ6HojqQcF96PI/d7mzQ3nmgGdY9vXXSrD2?= =?us-ascii?Q?szkeqJ2GKdgjQamxswvEeewgIsBwhZcUFjFn17DINANrErJ+kRUhC8l++Jjp?= =?us-ascii?Q?SS/MOQbh5yJ+rKnk9r0OOmm2brLFzMnbDWy2FsjL+DUwbGSuUYhVfYzVwKVq?= =?us-ascii?Q?g3Nr10nJ8BAMvfy9h89yNs2puqqEuNLFSBCTSze9pJ8RAvYEa8ZnuU8m4UOq?= =?us-ascii?Q?Bdeg4yneCjR4rFc3NlejFbIOoXl9LMpkURie8SvDf4adP6v43l2rVK2/Yf7i?= =?us-ascii?Q?O/xcW+t7MDg2fuX/6zkaX+hjxd+H+LEjd5RY1VzRIkaAWLXo0lZAorCqYkSn?= =?us-ascii?Q?ExsScag29ocq5QPywlKs++YE9au72/i6CFn4uXwzy12CrVAmnQjx8GNIEGk+?= =?us-ascii?Q?XUx7RKRmudVrHBt7xfZJHUnCNvgVGtoKSorvKZvdMVjhagcgTxXoNG0yKHb7?= =?us-ascii?Q?t/kzpq5JpQqHAHOSPqBonIN55WZgSPtoP0Yq0FI/?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 0J2jgpq8dc7L56fi1BWPJyM02zVfRF0LjALuh+CMcFdiCATX6T5bmDsptcm9hG9gQduXaRTCct4GjRjWhwy0/57WO0V+WkzPjDy37jPu/nGRLedpo9eC3ZcUIWXrwPoHh7EKJZ8QXXqMRevKoAqDtD7ge222YLYcQK7PUJ0q95qkNouz8cApWUuaJgt/p2SnhVnLuoCRYSxf35EDYDNKgIz9NroMhzGvulIIAWf0uxwEXM4rt4lHChmj0q1xFEnZlGCBOrHZzkP3g1+FRyVDWNkFFOVnIcII/hOsVGhwvQh7r7ELdwudkENtBI2DMmT9XN3f6Nh3CEl+n7KEcPHjswccDziX/dlmaWLOTxrN1Qsa3fenEJ6Bwke2HuoeWVG0axNlqRdX/b86R619trPGtt824Ba8HRXeQZSG4ktRAG4/i8zGy3cPUuq5xK12voqMWM/3tni3vsWe0GvwpeZgRtnV29hls6FtjNnjd6H03kOr8Hzh/MbgwvoHdcs38RYl0s958SBFP0OKUZfjUfyz+9Iab62Ps9cx+iwdqeBDXVcNV3CybK2J40k0cKGDdsOEWI2V1sDkgvcBzgYQbK/bgWp/SuXmC7A45EUi0nBBtnSrypO3VPI7rXa89tZvN0pJaF+e8CMm4iWPMx7ch8c/O6zjpMaf4tgXBxV4rlGgIXAvoZ15oAtozqWl7F40Ujzvv9NH/1xtd56xOTD9n9xzaXie7TraUkkP8bwkZjiicBQPCrv+C9545vp9rWRw7+hv X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: cb628585-8fea-4a11-fa8c-08db8d4f927a X-MS-Exchange-CrossTenant-AuthSource: MN2PR10MB3213.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jul 2023 20:41:50.5012 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: AuFHr5hpx9EQ8YKKDfGrmNkp0PE2K6c9EDcDJgCWyi1ka3hOFsAzLT497elD47jNGtgnlizwk6daTjQLzIS+sQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR10MB5282 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.591,FMLib:17.11.176.26 definitions=2023-07-25_12,2023-07-25_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 bulkscore=0 mlxlogscore=782 suspectscore=0 phishscore=0 malwarescore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2306200000 definitions=main-2307250176 X-Proofpoint-GUID: exP5U04nql5yliPmsEmgjq6iDEVeU2s0 X-Proofpoint-ORIG-GUID: exP5U04nql5yliPmsEmgjq6iDEVeU2s0 X-Spam-Status: No, score=-13.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE 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: This patch adds the two remaining BPF v3 atomic instructions: - BPF_INSN_ACMP{,32}: atomic compare-and-swap - BPF_INSN_AXCHG{,32}: atomic (non-conditional) exchange Tests and documentation are also updated. OK? Thanks. gas/ * doc/c-bpf.texi (BPF Instructions): Document atomic exchange and atomic compare-and-swap instructions. * testsuite/gas/bpf/atomic.s: Test ACMP, ACMP32, AXCHG, AXCGH32 instructions. * testsuite/gas/bpf/atomic.d: Likewise. * testsuite/gas/bpf/atomic-be.d: Likewise. * testsuite/gas/bpf/atomic-pseudoc.s: Likewise. * testsuite/gas/bpf/atomic-pseudoc.d: Likewise. * testsuite/gas/bpf/atomic-be-pseudoc.d: Likewise. include/ * opcode/bpf.h (BPF_IMM32_ACMP): Fix typo. (enum bpf_insn_id): New entries for BPF_INSN_ACMP{,32} and BPF_INSN_AXCHG{,32}. opcodes/ * bpf-opc.c (bpf_opcodes): Add entries for ACMP{,32} and AXCHG{,32} instructions. --- gas/doc/c-bpf.texi | 44 ++++++++++++++++++++--- gas/testsuite/gas/bpf/atomic-be-pseudoc.d | 4 +++ gas/testsuite/gas/bpf/atomic-be.d | 4 +++ gas/testsuite/gas/bpf/atomic-pseudoc.d | 4 +++ gas/testsuite/gas/bpf/atomic-pseudoc.s | 4 +++ gas/testsuite/gas/bpf/atomic.d | 4 +++ gas/testsuite/gas/bpf/atomic.s | 5 +++ include/opcode/bpf.h | 6 +++- opcodes/bpf-opc.c | 12 +++++++ 9 files changed, 82 insertions(+), 5 deletions(-) diff --git a/gas/doc/c-bpf.texi b/gas/doc/c-bpf.texi index 689786e81d5..8f39ab314a7 100644 --- a/gas/doc/c-bpf.texi +++ b/gas/doc/c-bpf.texi @@ -745,8 +745,26 @@ Jump if signed lesser or equal. @subsection Atomic instructions -Atomic exchange-and-add instructions are provided in two flavors: one -for swapping 64-bit quantities and another for 32-bit quantities. +Atomic exchange instructions are provided in two flavors: one for +compare-and-swap, one for unconditional exchange. + +@table @code +@item acmp [rd + offset16], rs +@itemx r0 = cmpxchg_64 (rd + offset16, r0, rs) +Atomic compare-and-swap. Compares value in @code{r0} to value +addressed by @code{rd + offset16}. On match, the value addressed by +@code{rd + offset16} is replaced with the value in @code{rs}. +Regardless, the value that was at @code{rd + offset16} is +zero-extended and loaded into @code{r0}. + +@item axchg [rd + offset16], rs +@itemx rs = xchg_64 (rd + offset16, rs) +Atomic exchange. Atomically exchanges the value in @code{rs} with +the value addressed by @code{rd + offset16}. +@end table + +@noindent +The following instructions provide atomic arithmetic operations. @table @code @item aadd [rd + offset16], rs @@ -798,8 +816,26 @@ Alias to @code{aadd}. @subsection 32-bit atomic instructions -Atomic exchange-and-add instructions are provided in two flavors: one -for swapping 32-bit quantities and another for 32-bit quantities. +32-bit atomic exchange instructions are provided in two flavors: one +for compare-and-swap, one for unconditional exchange. + +@table @code +@item acmp32 [rd + offset16], rs +@itemx w0 = cmpxchg32_32 (rd + offset16, w0, ws) +Atomic compare-and-swap. Compares value in @code{w0} to value +addressed by @code{rd + offset16}. On match, the value addressed by +@code{rd + offset16} is replaced with the value in @code{ws}. +Regardless, the value that was at @code{rd + offset16} is +zero-extended and loaded into @code{w0}. + +@item axchg [rd + offset16], rs +@itemx ws = xchg32_32 (rd + offset16, ws) +Atomic exchange. Atomically exchanges the value in @code{ws} with +the value addressed by @code{rd + offset16}. +@end table + +@noindent +The following instructions provide 32-bit atomic arithmetic operations. @table @code @item aadd32 [rd + offset16], rs diff --git a/gas/testsuite/gas/bpf/atomic-be-pseudoc.d b/gas/testsuite/gas/bpf/atomic-be-pseudoc.d index e0da408ca5a..30c40fa2d12 100644 --- a/gas/testsuite/gas/bpf/atomic-be-pseudoc.d +++ b/gas/testsuite/gas/bpf/atomic-be-pseudoc.d @@ -26,3 +26,7 @@ Disassembly of section .text: 78: c3 12 1e ef 00 00 00 41 w2=atomic_fetch_or\(\(u32\*\)\(r1\+0x1eef\),w2\) 80: db 12 1e ef 00 00 00 a1 r2=atomic_fetch_xor\(\(u64\*\)\(r1\+0x1eef\),r2\) 88: c3 12 1e ef 00 00 00 a1 w2=atomic_fetch_xor\(\(u32\*\)\(r1\+0x1eef\),w2\) + 90: db 12 00 04 00 00 00 f1 r0=cmpxchg_64\(r1\+0x4,r0,r2\) + 98: c3 23 00 04 00 00 00 f1 w0=cmpxchg32_32\(r2\+0x4,w0,w3\) + a0: db 12 00 08 00 00 00 e1 r2=xchg_64\(r1\+0x8,r2\) + a8: c3 13 00 08 00 00 00 e1 w3=xchg32_32\(r1\+0x8,w3\) diff --git a/gas/testsuite/gas/bpf/atomic-be.d b/gas/testsuite/gas/bpf/atomic-be.d index 42a0037035e..7a04753da63 100644 --- a/gas/testsuite/gas/bpf/atomic-be.d +++ b/gas/testsuite/gas/bpf/atomic-be.d @@ -24,3 +24,7 @@ Disassembly of section .text: 68: c3 12 1e ef 00 00 00 41 afor32 \[%r1\+0x1eef\],%r2 70: db 12 1e ef 00 00 00 a1 afxor \[%r1\+0x1eef\],%r2 78: c3 12 1e ef 00 00 00 a1 afxor32 \[%r1\+0x1eef\],%r2 + 80: db 12 00 04 00 00 00 f1 acmp \[%r1\+0x4\],%r2 + 88: c3 23 00 04 00 00 00 f1 acmp32 \[%r2\+0x4\],%r3 + 90: db 12 00 08 00 00 00 e1 axchg \[%r1\+0x8\],%r2 + 98: c3 13 00 08 00 00 00 e1 axchg32 \[%r1\+0x8\],%r3 diff --git a/gas/testsuite/gas/bpf/atomic-pseudoc.d b/gas/testsuite/gas/bpf/atomic-pseudoc.d index 30bfba64380..2b3739ee47e 100644 --- a/gas/testsuite/gas/bpf/atomic-pseudoc.d +++ b/gas/testsuite/gas/bpf/atomic-pseudoc.d @@ -26,3 +26,7 @@ Disassembly of section .text: 78: c3 21 ef 1e 41 00 00 00 w2=atomic_fetch_or\(\(u32\*\)\(r1\+0x1eef\),w2\) 80: db 21 ef 1e a1 00 00 00 r2=atomic_fetch_xor\(\(u64\*\)\(r1\+0x1eef\),r2\) 88: c3 21 ef 1e a1 00 00 00 w2=atomic_fetch_xor\(\(u32\*\)\(r1\+0x1eef\),w2\) + 90: db 21 04 00 f1 00 00 00 r0=cmpxchg_64\(r1\+0x4,r0,r2\) + 98: c3 32 04 00 f1 00 00 00 w0=cmpxchg32_32\(r2\+0x4,w0,w3\) + a0: db 21 08 00 e1 00 00 00 r2=xchg_64\(r1\+0x8,r2\) + a8: c3 31 08 00 e1 00 00 00 w3=xchg32_32\(r1\+0x8,w3\) diff --git a/gas/testsuite/gas/bpf/atomic-pseudoc.s b/gas/testsuite/gas/bpf/atomic-pseudoc.s index 514cfa91fb7..6994fd10367 100644 --- a/gas/testsuite/gas/bpf/atomic-pseudoc.s +++ b/gas/testsuite/gas/bpf/atomic-pseudoc.s @@ -18,3 +18,7 @@ w2 = atomic_fetch_or((u32*)(r1+0x1eef),w2) r2 = atomic_fetch_xor((u64*)(r1+0x1eef),r2) w2 = atomic_fetch_xor((u32*)(r1+0x1eef),w2) + r0 = cmpxchg_64(r1+0x4,r0,r2) + w0 = cmpxchg32_32(r2+0x4,w0,w3) + r2 = xchg_64(r1+0x8,r2) + w3 = xchg32_32(r1+0x8,w3) diff --git a/gas/testsuite/gas/bpf/atomic.d b/gas/testsuite/gas/bpf/atomic.d index f7925b330ac..121ab35a92b 100644 --- a/gas/testsuite/gas/bpf/atomic.d +++ b/gas/testsuite/gas/bpf/atomic.d @@ -24,3 +24,7 @@ Disassembly of section .text: 68: c3 21 ef 1e 41 00 00 00 afor32 \[%r1\+0x1eef\],%r2 70: db 21 ef 1e a1 00 00 00 afxor \[%r1\+0x1eef\],%r2 78: c3 21 ef 1e a1 00 00 00 afxor32 \[%r1\+0x1eef\],%r2 + 80: db 21 04 00 f1 00 00 00 acmp \[%r1\+0x4\],%r2 + 88: c3 32 04 00 f1 00 00 00 acmp32 \[%r2\+0x4\],%r3 + 90: db 21 08 00 e1 00 00 00 axchg \[%r1\+0x8\],%r2 + 98: c3 31 08 00 e1 00 00 00 axchg32 \[%r1\+0x8\],%r3 diff --git a/gas/testsuite/gas/bpf/atomic.s b/gas/testsuite/gas/bpf/atomic.s index 781a2e965ac..39ad5ce42f0 100644 --- a/gas/testsuite/gas/bpf/atomic.s +++ b/gas/testsuite/gas/bpf/atomic.s @@ -17,3 +17,8 @@ afor32 [%r1+0x1eef], %r2 afxor [%r1+0x1eef], %r2 afxor32 [%r1+0x1eef], %r2 + + acmp [%r1+4], %r2 + acmp32 [%r2+4], %r3 + axchg [%r1+8], %r2 + axchg32 [%r1+8], %r3 diff --git a/include/opcode/bpf.h b/include/opcode/bpf.h index ed344427f1b..20e323a065b 100644 --- a/include/opcode/bpf.h +++ b/include/opcode/bpf.h @@ -153,7 +153,7 @@ typedef uint64_t bpf_insn_word; #define BPF_IMM32_AFAND ((uint64_t)0x00000051) #define BPF_IMM32_AFXOR ((uint64_t)0x000000a1) #define BPF_IMM32_AXCHG ((uint64_t)0x000000e1) -#define BPF_IMM32_ACMP ((uint64_t)b0x000000f1) +#define BPF_IMM32_ACMP ((uint64_t)0x000000f1) /* Unique identifiers for BPF instructions. */ @@ -225,6 +225,10 @@ enum bpf_insn_id BPF_INSN_AADD32, BPF_INSN_AOR32, BPF_INSN_AAND32, BPF_INSN_AXOR32, /* Atomic instructions with fetching (32-bit.) */ BPF_INSN_AFADD32, BPF_INSN_AFOR32, BPF_INSN_AFAND32, BPF_INSN_AFXOR32, + /* Atomic compare-and-swap, atomic exchange. */ + BPF_INSN_ACMP, BPF_INSN_AXCHG, + /* Atomic compare-and-swap, atomic exchange (32-bit). */ + BPF_INSN_ACMP32, BPF_INSN_AXCHG32, /* GNU simulator specific instruction. */ BPF_INSN_BRKPT, }; diff --git a/opcodes/bpf-opc.c b/opcodes/bpf-opc.c index ee6719bdc06..26db795903c 100644 --- a/opcodes/bpf-opc.c +++ b/opcodes/bpf-opc.c @@ -403,6 +403,18 @@ const struct bpf_opcode bpf_opcodes[] = {BPF_INSN_AFXOR32, "afxor32%W[ %dr %o16 ] , %sr", "%sw = atomic_fetch_xor ( ( u32 * ) ( %dr %o16 ) , %sw )", BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_AFXOR}, + /* Atomic compare-and-swap, atomic exchange. */ + {BPF_INSN_ACMP, "acmp%W[ %dr %o16 ] , %sr", "r0 = cmpxchg_64 ( %dr %o16 , r0 , %sr )", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_ACMP}, + {BPF_INSN_AXCHG, "axchg%W[ %dr %o16 ] , %sr", "%sr = xchg_64 ( %dr %o16 , %sr )", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_AXCHG}, + + /* Atomic compare-and-swap, atomic exchange (32-bit). */ + {BPF_INSN_ACMP32, "acmp32%W[ %dr %o16 ], %sr", "w0 = cmpxchg32_32 ( %dr %o16 , w0 , %sw )", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_ACMP}, + {BPF_INSN_AXCHG32, "axchg32%W[ %dr %o16 ], %sr", "%sw = xchg32_32 ( %dr %o16 , %sw )", + BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_AXCHG}, + /* Old versions of aadd and aadd32. */ {BPF_INSN_AADD, "xadddw%W[ %dr %o16 ] , %sr", "* ( u64 * ) ( %dr %o16 ) += %sr", BPF_V1, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_AADD}, -- 2.40.1