From patchwork Tue Jul 25 20:38:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Faust X-Patchwork-Id: 125798 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a985:0:b0:3e4:2afc:c1 with SMTP id t5csp238vqo; Tue, 25 Jul 2023 13:39:14 -0700 (PDT) X-Google-Smtp-Source: APBJJlEPV4Z65t1fFat0XZWBLV9w9WqiWNxar6MyIYuGJffBE4yei8l1Mb9TW4Vq0wfbZDxjkRgh X-Received: by 2002:a17:907:a078:b0:992:c8d7:b66f with SMTP id ia24-20020a170907a07800b00992c8d7b66fmr13355231ejc.75.1690317553982; Tue, 25 Jul 2023 13:39:13 -0700 (PDT) Received: from server2.sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id d18-20020a17090648d200b0099bc0eee3a8si41650ejt.154.2023.07.25.13.39.06 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 25 Jul 2023 13:39:13 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=Q1ve29Jq; arc=fail (signature failed); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E1186385EC55 for ; Tue, 25 Jul 2023 20:38:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E1186385EC55 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1690317533; bh=u45skZyu4eSWK++ZutP9QnBBKPI5OExG+MIA+NFf40Q=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=Q1ve29JqMOFk7tQkl0ay5c1+xyRoonwvJqFDSTbj+yS4arcPO4Ee5ov0Hggb7+5VW 948BHDFQFTDyKiZzO+FPhreEAcgnlByMQ2IzgCxjQexb7TXsy8L8PjkZENU7dWBZ1v +1Tpv+oUxnu+twaILQd3U4oiyz/jixKMt38kXNdY= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id CE2523857719 for ; Tue, 25 Jul 2023 20:38:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CE2523857719 Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 36PJIpwI017660 for ; Tue, 25 Jul 2023 20:38:38 GMT Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3s061c633u-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 25 Jul 2023 20:38:38 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 36PJZb4p025365 for ; Tue, 25 Jul 2023 20:38:37 GMT Received: from nam10-bn7-obe.outbound.protection.outlook.com (mail-bn7nam10lp2105.outbound.protection.outlook.com [104.47.70.105]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3s05j5t2by-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 25 Jul 2023 20:38:37 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ldukt/1v+dvPcQ2eIwhwLUb8onoQxhi+9W8gPOlZR0dsNi3db0Q1gnE3IvZ4zzeyvHOWnKp+9TMigXgy4q3fkRBzUmj1jf55NjjNTNmBnijya71Ij61WNeBS/7EqxxZJZCRqsPe8hUTM2GXD/ytRxeDQRVsQFq8JweDxdoR0PzIzi4gggg0C00OcTgFGwisnMQQPq/LDZd+l1QP4x3r3T3aYuf+64PzBJIVWL/I831zTDqV0UzgBi/ZYVS2YtppEgtIujOqegTrffPDxpo9Da9/lginFq0r8OuQOw27OMF1gatE+lx89eIrLZ6dDZlPTxtLL4UVxNabECI6EQ1ZAaw== 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=u45skZyu4eSWK++ZutP9QnBBKPI5OExG+MIA+NFf40Q=; b=JUT/Oahmc+AMbRJcL43wNSMVXN3YarQv4WPKvmzN5Pz5spKGb96XHx6ZT8pibkSnbTN7dYdSeftpJtBxURXqaOek1FC5/z+plEtmZ36U1kpiWaoZrN0NOYS1MWsofKoCnN8Ams49TskyJ8KZXpIgGUupaReE5TOxgIys1B9q6iYqLHKOj4oLPgWKYDE/7ad8bMIqrfswiaTeih3/vGbnGMmwnEFzaIWX4Odece2VyBF34iXmZ+37n3RkcLScf2+F+dqMWp92uargRzkW3pM+nC9xmWi6xNQPRNoxPvDeve9q0osTvp8zNGCnn+7RK69+v7ISL7OnjYx1DQ6LuCgWRg== 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 Received: from MN2PR10MB3213.namprd10.prod.outlook.com (2603:10b6:208:131::33) by SJ0PR10MB6373.namprd10.prod.outlook.com (2603:10b6:a03:47d::18) 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:38:33 +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:38:33 +0000 To: binutils@sourceware.org, jose.marchesi@oracle.com Subject: [PATCH] bpf: Update atomic instruction pseudo-C syntax Date: Tue, 25 Jul 2023 13:38:05 -0700 Message-Id: <20230725203805.9376-1-david.faust@oracle.com> X-Mailer: git-send-email 2.39.1 X-ClientProxiedBy: LO4P265CA0125.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2c6::11) To MN2PR10MB3213.namprd10.prod.outlook.com (2603:10b6:208:131::33) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MN2PR10MB3213:EE_|SJ0PR10MB6373:EE_ X-MS-Office365-Filtering-Correlation-Id: 96ed5012-989b-401a-05f9-08db8d4f1ce4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: URCSyG2rP9P+tsDjgd7fIa7KUgX7CgrS1B/Yue3lwFOly4BJTT+9/Wi0iu1T+Eo9Ql/wWwJjJNY24pp6s/1CNaWOr+XZd7JqlyQ/FMbeJnDyelFgmXTxmIOF1jFzMk/OJM1CzDuNDZUnLWog9zcI1kZVSV485KZVMs7+1ziB0SV2RMQB4EAdfJuzogpHjPNCPrOE1MnLdyusgoNMqvEUjGh8HkYLdE6+WtBJEa5zvWvdTUOND3qQ1N4f7k9KXhuC10oio7tsLVOTt8Fqp5+9BG4TL+T8vw6uSr9/4tdOOAc9VxEPNJgKTCP3t/RUPHo6LfJbEWYX/fqkvzmIDz7YRlTOGOEhYUxUGDboX/O4KasaGJ3eICb99vBVWQp8T4+NL64yemDumEXXlUVBZ93rtPDhbGH0Oqz1nyeq47ajtAsLT5FaUiq6Wf7/MKDu4aOax+APCtGK6rlx8EF4EBL3DWGYj3jgMcHDWJbFGjehxjtxpMc2UK1ZTc3RF8sPOPc8sz4j+WpvG+TLwyPH0qP4dgsmclqyoG8wXVSWQ7Fw8w268XTE8vGzOkLgQyR8HPzn 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)(346002)(396003)(366004)(39860400002)(451199021)(2616005)(6506007)(1076003)(186003)(26005)(83380400001)(478600001)(86362001)(6666004)(36756003)(66476007)(66556008)(6486002)(41300700001)(316002)(66946007)(30864003)(15650500001)(2906002)(8676002)(8936002)(38100700002)(5660300002)(6636002)(44832011)(6512007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: PIki4MG51WhXwgaDItd8t7EdgiSN8+c7ivRWrM+UQxTzOa3Q4G/AHURy7H1fcKyfU0V9AhqU20gNrtKgIghPzrSRWcBtmFivbxwvWu5klSaHu+O8wJkCoDdgZI+NbCXaBOPQRLoah5OCZNh8bUAHTv9Sc4odj99NmqBqbIdLAN/CkSl16/vDLKiEwvJZQLeI7Z3rLZAWM3/RpSm8mILPI6ZoPP9iV+o/++lxQccsJ8dCBoBpP6ZxRSznRbUWtpUxLQI7tDj6cpDF7ujC0lPmdBuOwuowKYBoR6KiYb8bA6T3yFP8Ez0m+5SEJpMaIoOyFovDRqZ4tM+AOPbeVA+lzwWwlXRAd2zJupifoCIO3ChiGooHBikASo+D4EccPAN90JFKcryBJrGgaw6pGIWX9p0u1YozfrsqHrwMCESzf4bXYw0IUK/VPo7ugmYYkWom0vs3Pff1/d4YWuuwvnj7Fe8NmEVQpcbFN5vIhKI9ReHRxyuSI+T0pFTjHayLWnkiHkZD51MWlTVq2otwKgErFB4ZRmK/tKxLrAerAi3oafmCF6hMvVt9GxIFdI2n3OtxnVTTBeQDWtmYRlLOfmLwzjPVlTtIzDXJfpU7pN+PeKDReEK1lkZ0EFRy2HwKjzwOunu1faq886GDck+rCoBM8aCbpPNAeWlMnoRyCZ2gDN+C+sUdNMqBr4pJwcvX5FN1Ib1MHtI6xTShf7z2PW1bWYhVWzbSbFL7hWhqFHQm/CeVXSYI5ANQ5J3yMdACiJM8D4l2Yq71W1bT9HNz9PABhPI80ACELUtK7WOYc4vWhiph36bVBfrh93ki4+TpVjOnR+22dGeu6ifGJGvbES/o3Akaukm4UjlHKFfBThbImfQ0bzgCXRElGxSa9HU/CW+QHoog50I0nyU78OvNWNOZinDvG+x1OF8LqYeTbyX9SDq+wribAaiNPrX1ZAbpck/MiuPLiG4HY+ANw9EUIXKL7A8nQqDEbN6hxw8ElJLcRoEozhfKEVrAzyGUUFjgsIwdMDltXvCvYs40Jes58bqD+n4h+kqo+RDGjKbXU4Yk3Uz47dpVfOi8X0M2d1BMbb+vFkbHy7eA77QO9nVuG9fwzgZEAMVrdfuEiTh9uU2ZypWtUMDbSeKwRMmVjPPzsUyH6rIBWN5fkougXLh8ve7PM805x6nWmKQYIG9S4nUmhq9kIZOo1DrkJFEV/xIBsm2n70sp6txIGpBsi0yQBoR3F30BXRfNvw2M3TCCMYlloP3+6r8wvRwLYQDqPzpxFVJwKUV4pW6qUn6c9NXrPLOTl1T/XPao+GiSH4E6Qs9fQav1Uc974LdsB1WiloNiusFwB/aqDDeDekoY9EjNan4a6LBgKjwwMpc5NZBA7d4jhCvcgXkuVyMoSoaQu8X5EoLEoyDmQ1tGDSUY/WVfHfedbKJuYOcGe24yUefwYHV2/SVDBEdy1wc913IY9P5q/C90DfZTmT6SLxzj6mswUUUvnkf9hK9sMXO+VDBxCememhXGw+1CEfgGZ+myBuGyibHau9WjJKOBaDpICulDfcKB/DgJbnrZjGy4FhjGebbAMr9UUhxTJOJhpHYzJ1qfJSoL X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: hvpT70kh9KDWtv1n6SqGMV+pWJbhbpRY0KbiaG6ITgNOz4LQ11T0Jyuysq+1s3OLlYqGoEOlD2b0B8ex6K5UycETAYJODCtEQuCAWHpp7nDZqoLwLBC6jpym+cyIC+Kk3u7sETC+3kHXySC/Ck5RyUGuSvoQ77nkrm5/Geylj31lmWmkceN4WdgW9dRB+lXdnC/ijPSHhZY2lwM2Iq6iZ/XK/17py0bQjHabnsCrDLSsZI0UN7z7dqZVkPShI3fXwAD/lFMCtG2k/YjMCN93utvs/FGpf2MofFN+26vtL1M4zXIpOpN5b2Dmo1QSwzvtIykHVcuHkP0eDzPqGGblCkgNpYKvXk3aluNyi50S14NuQHsxy6DSRnaAjhU8vkqz8ak+Fjxi4H8leL4bcebYR6sRpyPjfUIqinSMaaQjlax4URBeVMNjgpBiqUB049RXFPB2qVAfg7nLCoBesFFkjAcDDh38TjXKnU4asH0ip2Hbyi9UHyHTnJFcIFo6fCyEs9cmHgFrZ1KDEdriM0EMN++4j5sJJRatmga4d+sTjTFOLeROXcw9UBqHB+UZ/mA5pUiLH4vsULF4l2P+WB1VRE/3fMcdrLyisXzfrSzsvnZDtiBy/jo6idtKwFNJ3kPN2HOI4WAaHOKhO1zT031kTpnxKp48dl+jj1niabYHSgJo7xwBoF4Wcw0+UOck0jP+mwYXoqGKoCo5yVCzZdaGh5IDru82Pjy4SImVxPMT+I1JkIOWdEyGcUL2B8s+cafD X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 96ed5012-989b-401a-05f9-08db8d4f1ce4 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:38:33.3475 (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: r98ZxupkC8nbxmxIrsv5kUOOItzzYoaqi/+XyHnqtgoFNv4hLY5FpTnXFivDXO+MLJ+RK4upbXZtQpE4jskXPQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR10MB6373 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 malwarescore=0 mlxlogscore=999 adultscore=0 mlxscore=0 phishscore=0 suspectscore=0 bulkscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2306200000 definitions=main-2307250176 X-Proofpoint-ORIG-GUID: SJ7HTAQ8n8Hq5mrnZVJ4bC91I1xTxA6R X-Proofpoint-GUID: SJ7HTAQ8n8Hq5mrnZVJ4bC91I1xTxA6R 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 X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: David Faust via Binutils From: David Faust Reply-To: David Faust Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org Sender: "Binutils" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772426419242039598 X-GMAIL-MSGID: 1772426419242039598 This patch updates the pseudo-C dialect templates for the BPF v3 atomic instructions. The templates match the strings emitted by clang -S for these instructions. The tests and documentation are updated accordingly. gas/ * doc/c-bpf.texi (BPF Instructions): Update entries for atomic and 32-bit atomic instructions. * testsuite/gas/bpf/atomic.s: Test AAND, AAND32, AOR, AOR32, AXOR, AXOR32, AFADD, AFADD32, AFAND, AFAND32, AFOR, AFOR32, AFXOR and AFXOR32 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. * testsuite/gas/bpf/atomic-v1.s: New test. * testsuite/gas/bpf/atomic-v1.d: Likewise. * testuiste/gas/bpf/atomic-v1-be.d: Likewise. * testuiste/gas/bpf/bpf.exp: Run new tests. opcodes/ * bpf-opc.c (bpf_opcodes): Update pseudo-C dialect templates for: BPF_INSN_AADD, BPF_INSN_AOR, BPF_INSN_AAND, BPF_INSN_AXOR, BPF_INSN_AFADD, BPF_INSN_AFOR, BPF_INSN_AFAND, BPF_INSN_AFXOR, BPF_INSN_AADD32, BPF_INSN_AOR32, BPF_INSN_AAND32, BPF_INSN_AXOR32, BPF_INSN_AFADD32, BPF_INSN_AFOR32, BPF_INSN_AFAND32, and BPF_INSN_AFXOR32 instructions. --- gas/doc/c-bpf.texi | 46 +++++++++++------------ gas/testsuite/gas/bpf/atomic-be-pseudoc.d | 20 +++++++++- gas/testsuite/gas/bpf/atomic-be.d | 20 ++++++++-- gas/testsuite/gas/bpf/atomic-pseudoc.d | 20 +++++++++- gas/testsuite/gas/bpf/atomic-pseudoc.s | 22 +++++++++-- gas/testsuite/gas/bpf/atomic-v1-be.d | 12 ++++++ gas/testsuite/gas/bpf/atomic-v1.d | 12 ++++++ gas/testsuite/gas/bpf/atomic-v1.s | 5 +++ gas/testsuite/gas/bpf/atomic.d | 14 +++++++ gas/testsuite/gas/bpf/atomic.s | 18 ++++++++- gas/testsuite/gas/bpf/bpf.exp | 2 + opcodes/bpf-opc.c | 32 ++++++++-------- 12 files changed, 171 insertions(+), 52 deletions(-) create mode 100644 gas/testsuite/gas/bpf/atomic-v1-be.d create mode 100644 gas/testsuite/gas/bpf/atomic-v1.d create mode 100644 gas/testsuite/gas/bpf/atomic-v1.s diff --git a/gas/doc/c-bpf.texi b/gas/doc/c-bpf.texi index 4cb15616515..689786e81d5 100644 --- a/gas/doc/c-bpf.texi +++ b/gas/doc/c-bpf.texi @@ -750,43 +750,41 @@ for swapping 64-bit quantities and another for 32-bit quantities. @table @code @item aadd [rd + offset16], rs -@itemx *(u64 *)(rd + offset16) = rs +@itemx lock *(u64 *)(rd + offset16) = rs Atomic add instruction. @item aor [rd + offset16], rs -@itemx *(u64 *) (rd + offset16) |= rs +@itemx lock *(u64 *) (rd + offset16) |= rs Atomic or instruction. @item aand [rd + offset16], rs -@itemx *(u64 *) (rd + offset16) &= rs +@itemx lock *(u64 *) (rd + offset16) &= rs Atomic and instruction. @item axor [rd + offset16], rs -@itemx *(u64 *) (rd + offset16) ^= rs -Atomic xor instruction -@item xaddw [%d+offset16],%s -Exchange-and-add a 32-bit value at the specified location. +@itemx lock *(u64 *) (rd + offset16) ^= rs +Atomic xor instruction. @end table @noindent The following variants perform fetching before the atomic operation. @table @code -@item afadd [dr + offset16], rs -@itemx ??? +@item afadd [rd + offset16], rs +@itemx rs = atomic_fetch_add ((u64 *)(rd + offset16), rs) Atomic fetch-and-add instruction. -@item afor [dr + offset16], rs -@itemx ??? +@item afor [rd + offset16], rs +@itemx rs = atomic_fetch_or ((u64 *)(rd + offset16), rs) Atomic fetch-and-or instruction. -@item afand [dr + offset16], rs -@itemx ??? +@item afand [rd + offset16], rs +@itemx rs = atomic_fetch_and ((u64 *)(rd + offset16), rs) Atomic fetch-and-and instruction. -@item afxor [dr + offset16], rs -@itemx ??? -Atomic fetch-and-or instruction +@item afxor [rd + offset16], rs +@itemx rs = atomic_fetch_xor ((u64 *)(rd + offset16), rs) +Atomic fetch-and-or instruction. @end table The above instructions were introduced in the V3 of the BPF @@ -805,19 +803,19 @@ for swapping 32-bit quantities and another for 32-bit quantities. @table @code @item aadd32 [rd + offset16], rs -@itemx *(u32 *)(rd + offset16) = rs +@itemx lock *(u32 *)(rd + offset16) = rs Atomic add instruction. @item aor32 [rd + offset16], rs -@itemx *(u32 *) (rd + offset16) |= rs +@itemx lock *(u32 *) (rd + offset16) |= rs Atomic or instruction. @item aand32 [rd + offset16], rs -@itemx *(u32 *) (rd + offset16) &= rs +@itemx lock *(u32 *) (rd + offset16) &= rs Atomic and instruction. @item axor32 [rd + offset16], rs -@itemx *(u32 *) (rd + offset16) ^= rs +@itemx lock *(u32 *) (rd + offset16) ^= rs Atomic xor instruction @end table @@ -826,19 +824,19 @@ The following variants perform fetching before the atomic operation. @table @code @item afadd32 [dr + offset16], rs -@itemx ??? +@itemx ws = atomic_fetch_add ((u32 *)(rd + offset16), ws) Atomic fetch-and-add instruction. @item afor32 [dr + offset16], rs -@itemx ??? +@itemx ws = atomic_fetch_or ((u32 *)(rd + offset16), ws) Atomic fetch-and-or instruction. @item afand32 [dr + offset16], rs -@itemx ??? +@itemx ws = atomic_fetch_and ((u32 *)(rd + offset16), ws) Atomic fetch-and-and instruction. @item afxor32 [dr + offset16], rs -@itemx ??? +@itemx ws = atomic_fetch_xor ((u32 *)(rd + offset16), ws) Atomic fetch-and-or instruction @end table diff --git a/gas/testsuite/gas/bpf/atomic-be-pseudoc.d b/gas/testsuite/gas/bpf/atomic-be-pseudoc.d index a57322e49d9..e0da408ca5a 100644 --- a/gas/testsuite/gas/bpf/atomic-be-pseudoc.d +++ b/gas/testsuite/gas/bpf/atomic-be-pseudoc.d @@ -8,5 +8,21 @@ Disassembly of section .text: 0+ <.text>: - 0: db 12 1e ef 00 00 00 00 \*\(u64\*\)\(r1\+0x1eef\)\+=r2 - 8: c3 12 1e ef 00 00 00 00 \*\(u32\*\)\(r1\+0x1eef\)\+=r2 + 0: db 12 1e ef 00 00 00 00 lock \*\(u64\*\)\(r1\+0x1eef\)\+=r2 + 8: c3 12 1e ef 00 00 00 00 lock \*\(u32\*\)\(r1\+0x1eef\)\+=r2 + 10: db 12 1e ef 00 00 00 00 lock \*\(u64\*\)\(r1\+0x1eef\)\+=r2 + 18: c3 12 1e ef 00 00 00 00 lock \*\(u32\*\)\(r1\+0x1eef\)\+=r2 + 20: db 12 1e ef 00 00 00 50 lock \*\(u64\*\)\(r1\+0x1eef\)\&=r2 + 28: c3 12 1e ef 00 00 00 50 lock \*\(u32\*\)\(r1\+0x1eef\)\&=r2 + 30: db 12 1e ef 00 00 00 40 lock \*\(u64\*\)\(r1\+0x1eef\)\|=r2 + 38: c3 12 1e ef 00 00 00 40 lock \*\(u32\*\)\(r1\+0x1eef\)\|=r2 + 40: db 12 1e ef 00 00 00 a0 lock \*\(u64\*\)\(r1\+0x1eef\)\^=r2 + 48: c3 12 1e ef 00 00 00 a0 lock \*\(u32\*\)\(r1\+0x1eef\)\^=r2 + 50: db 12 1e ef 00 00 00 01 r2=atomic_fetch_add\(\(u64\*\)\(r1\+0x1eef\),r2\) + 58: c3 12 1e ef 00 00 00 01 w2=atomic_fetch_add\(\(u32\*\)\(r1\+0x1eef\),w2\) + 60: db 12 1e ef 00 00 00 51 r2=atomic_fetch_and\(\(u64\*\)\(r1\+0x1eef\),r2\) + 68: c3 12 1e ef 00 00 00 51 w2=atomic_fetch_and\(\(u32\*\)\(r1\+0x1eef\),w2\) + 70: db 12 1e ef 00 00 00 41 r2=atomic_fetch_or\(\(u64\*\)\(r1\+0x1eef\),r2\) + 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\) diff --git a/gas/testsuite/gas/bpf/atomic-be.d b/gas/testsuite/gas/bpf/atomic-be.d index fa81d8f6ffb..42a0037035e 100644 --- a/gas/testsuite/gas/bpf/atomic-be.d +++ b/gas/testsuite/gas/bpf/atomic-be.d @@ -1,6 +1,6 @@ #as: -EB -mdialect=normal #source: atomic.s -#objdump: -dr -M hex,v1 +#objdump: -dr -M hex #name: eBPF atomic instructions, big endian .*: +file format .*bpf.* @@ -8,5 +8,19 @@ Disassembly of section .text: 0+ <.text>: - 0: db 12 1e ef 00 00 00 00 xadddw \[%r1\+0x1eef\],%r2 - 8: c3 12 1e ef 00 00 00 00 xaddw \[%r1\+0x1eef\],%r2 + 0: db 12 1e ef 00 00 00 00 aadd \[%r1\+0x1eef\],%r2 + 8: c3 12 1e ef 00 00 00 00 aadd32 \[%r1\+0x1eef\],%r2 + 10: db 12 1e ef 00 00 00 50 aand \[%r1\+0x1eef\],%r2 + 18: c3 12 1e ef 00 00 00 50 aand32 \[%r1\+0x1eef\],%r2 + 20: db 12 1e ef 00 00 00 40 aor \[%r1\+0x1eef\],%r2 + 28: c3 12 1e ef 00 00 00 40 aor32 \[%r1\+0x1eef\],%r2 + 30: db 12 1e ef 00 00 00 a0 axor \[%r1\+0x1eef\],%r2 + 38: c3 12 1e ef 00 00 00 a0 axor32 \[%r1\+0x1eef\],%r2 + 40: db 12 1e ef 00 00 00 01 afadd \[%r1\+0x1eef\],%r2 + 48: c3 12 1e ef 00 00 00 01 afadd32 \[%r1\+0x1eef\],%r2 + 50: db 12 1e ef 00 00 00 51 afand \[%r1\+0x1eef\],%r2 + 58: c3 12 1e ef 00 00 00 51 afand32 \[%r1\+0x1eef\],%r2 + 60: db 12 1e ef 00 00 00 41 afor \[%r1\+0x1eef\],%r2 + 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 diff --git a/gas/testsuite/gas/bpf/atomic-pseudoc.d b/gas/testsuite/gas/bpf/atomic-pseudoc.d index 3aafd47e0d8..30bfba64380 100644 --- a/gas/testsuite/gas/bpf/atomic-pseudoc.d +++ b/gas/testsuite/gas/bpf/atomic-pseudoc.d @@ -8,5 +8,21 @@ Disassembly of section .text: 0+ <.text>: - 0: db 21 ef 1e 00 00 00 00 \*\(u64\*\)\(r1\+0x1eef\)\+=r2 - 8: c3 21 ef 1e 00 00 00 00 \*\(u32\*\)\(r1\+0x1eef\)\+=r2 + 0: db 21 ef 1e 00 00 00 00 lock \*\(u64\*\)\(r1\+0x1eef\)\+=r2 + 8: c3 21 ef 1e 00 00 00 00 lock \*\(u32\*\)\(r1\+0x1eef\)\+=r2 + 10: db 21 ef 1e 00 00 00 00 lock \*\(u64\*\)\(r1\+0x1eef\)\+=r2 + 18: c3 21 ef 1e 00 00 00 00 lock \*\(u32\*\)\(r1\+0x1eef\)\+=r2 + 20: db 21 ef 1e 50 00 00 00 lock \*\(u64\*\)\(r1\+0x1eef\)\&=r2 + 28: c3 21 ef 1e 50 00 00 00 lock \*\(u32\*\)\(r1\+0x1eef\)\&=r2 + 30: db 21 ef 1e 40 00 00 00 lock \*\(u64\*\)\(r1\+0x1eef\)\|=r2 + 38: c3 21 ef 1e 40 00 00 00 lock \*\(u32\*\)\(r1\+0x1eef\)\|=r2 + 40: db 21 ef 1e a0 00 00 00 lock \*\(u64\*\)\(r1\+0x1eef\)\^=r2 + 48: c3 21 ef 1e a0 00 00 00 lock \*\(u32\*\)\(r1\+0x1eef\)\^=r2 + 50: db 21 ef 1e 01 00 00 00 r2=atomic_fetch_add\(\(u64\*\)\(r1\+0x1eef\),r2\) + 58: c3 21 ef 1e 01 00 00 00 w2=atomic_fetch_add\(\(u32\*\)\(r1\+0x1eef\),w2\) + 60: db 21 ef 1e 51 00 00 00 r2=atomic_fetch_and\(\(u64\*\)\(r1\+0x1eef\),r2\) + 68: c3 21 ef 1e 51 00 00 00 w2=atomic_fetch_and\(\(u32\*\)\(r1\+0x1eef\),w2\) + 70: db 21 ef 1e 41 00 00 00 r2=atomic_fetch_or\(\(u64\*\)\(r1\+0x1eef\),r2\) + 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\) diff --git a/gas/testsuite/gas/bpf/atomic-pseudoc.s b/gas/testsuite/gas/bpf/atomic-pseudoc.s index ac73cadf999..514cfa91fb7 100644 --- a/gas/testsuite/gas/bpf/atomic-pseudoc.s +++ b/gas/testsuite/gas/bpf/atomic-pseudoc.s @@ -1,4 +1,20 @@ - # Test for eBPF ADDW and ADDDW pseudo-C instructions + # Test for eBPF atomic pseudo-C instructions. .text - *(u64 *)(r1 + 7919) += r2 - *(u32 *)(r1 + 7919) += r2 + lock *(u64 *)(r1 + 0x1eef) += r2 + lock *(u32 *)(r1 + 0x1eef) += r2 + lock *(u64*)(r1+0x1eef)+=r2 + lock *(u32*)(r1+0x1eef)+=r2 + lock *(u64*)(r1+0x1eef)&=r2 + lock *(u32*)(r1+0x1eef)&=r2 + lock *(u64*)(r1+0x1eef)|=r2 + lock *(u32*)(r1+0x1eef)|=r2 + lock *(u64*)(r1+0x1eef)^=r2 + lock *(u32*)(r1+0x1eef)^=r2 + r2 = atomic_fetch_add((u64*)(r1+0x1eef),r2) + w2 = atomic_fetch_add((u32*)(r1+0x1eef),w2) + r2 = atomic_fetch_and((u64*)(r1+0x1eef),r2) + w2 = atomic_fetch_and((u32*)(r1+0x1eef),w2) + r2 = atomic_fetch_or((u64*)(r1+0x1eef),r2) + w2 = atomic_fetch_or((u32*)(r1+0x1eef),w2) + r2 = atomic_fetch_xor((u64*)(r1+0x1eef),r2) + w2 = atomic_fetch_xor((u32*)(r1+0x1eef),w2) diff --git a/gas/testsuite/gas/bpf/atomic-v1-be.d b/gas/testsuite/gas/bpf/atomic-v1-be.d new file mode 100644 index 00000000000..54536e457c2 --- /dev/null +++ b/gas/testsuite/gas/bpf/atomic-v1-be.d @@ -0,0 +1,12 @@ +#as: -EB -mdialect=normal +#source: atomic-v1.s +#objdump: -dr -M hex,v1 +#name: eBPF atomic instructions, big endian + +.*: +file format .*bpf.* + +Disassembly of section .text: + +0+ <.text>: + 0: db 12 1e ef 00 00 00 00 xadddw \[%r1\+0x1eef\],%r2 + 8: c3 12 1e ef 00 00 00 00 xaddw \[%r1\+0x1eef\],%r2 diff --git a/gas/testsuite/gas/bpf/atomic-v1.d b/gas/testsuite/gas/bpf/atomic-v1.d new file mode 100644 index 00000000000..c0de79a6404 --- /dev/null +++ b/gas/testsuite/gas/bpf/atomic-v1.d @@ -0,0 +1,12 @@ +#as: -EL -mdialect=normal +#source: atomic-v1.s +#objdump: -dr -M hex,v1 +#name: eBPF atomic instructions, little endian + +.*: +file format .*bpf.* + +Disassembly of section .text: + +0+ <.text>: + 0: db 21 ef 1e 00 00 00 00 xadddw \[%r1\+0x1eef\],%r2 + 8: c3 21 ef 1e 00 00 00 00 xaddw \[%r1\+0x1eef\],%r2 diff --git a/gas/testsuite/gas/bpf/atomic-v1.s b/gas/testsuite/gas/bpf/atomic-v1.s new file mode 100644 index 00000000000..564d7d8da4f --- /dev/null +++ b/gas/testsuite/gas/bpf/atomic-v1.s @@ -0,0 +1,5 @@ + + # Test for eBPF XADDW and XADDDW instructions. + .text + xadddw [%r1+0x1eef], %r2 + xaddw [%r1+0x1eef], %r2 diff --git a/gas/testsuite/gas/bpf/atomic.d b/gas/testsuite/gas/bpf/atomic.d index 0a27cae0019..f7925b330ac 100644 --- a/gas/testsuite/gas/bpf/atomic.d +++ b/gas/testsuite/gas/bpf/atomic.d @@ -10,3 +10,17 @@ Disassembly of section .text: 0+ <.text>: 0: db 21 ef 1e 00 00 00 00 aadd \[%r1\+0x1eef\],%r2 8: c3 21 ef 1e 00 00 00 00 aadd32 \[%r1\+0x1eef\],%r2 + 10: db 21 ef 1e 50 00 00 00 aand \[%r1\+0x1eef\],%r2 + 18: c3 21 ef 1e 50 00 00 00 aand32 \[%r1\+0x1eef\],%r2 + 20: db 21 ef 1e 40 00 00 00 aor \[%r1\+0x1eef\],%r2 + 28: c3 21 ef 1e 40 00 00 00 aor32 \[%r1\+0x1eef\],%r2 + 30: db 21 ef 1e a0 00 00 00 axor \[%r1\+0x1eef\],%r2 + 38: c3 21 ef 1e a0 00 00 00 axor32 \[%r1\+0x1eef\],%r2 + 40: db 21 ef 1e 01 00 00 00 afadd \[%r1\+0x1eef\],%r2 + 48: c3 21 ef 1e 01 00 00 00 afadd32 \[%r1\+0x1eef\],%r2 + 50: db 21 ef 1e 51 00 00 00 afand \[%r1\+0x1eef\],%r2 + 58: c3 21 ef 1e 51 00 00 00 afand32 \[%r1\+0x1eef\],%r2 + 60: db 21 ef 1e 41 00 00 00 afor \[%r1\+0x1eef\],%r2 + 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 diff --git a/gas/testsuite/gas/bpf/atomic.s b/gas/testsuite/gas/bpf/atomic.s index 4669f4adf04..781a2e965ac 100644 --- a/gas/testsuite/gas/bpf/atomic.s +++ b/gas/testsuite/gas/bpf/atomic.s @@ -1,5 +1,19 @@ - # Test for eBPF ADDW and ADDDW instructions + # Test for eBPF atomic instructions .text aadd [%r1+0x1eef], %r2 aadd32 [%r1+0x1eef], %r2 - + aand [%r1+0x1eef], %r2 + aand32 [%r1+0x1eef], %r2 + aor [%r1+0x1eef], %r2 + aor32 [%r1+0x1eef], %r2 + axor [%r1+0x1eef], %r2 + axor32 [%r1+0x1eef], %r2 + + afadd [%r1+0x1eef], %r2 + afadd32 [%r1+0x1eef], %r2 + afand [%r1+0x1eef], %r2 + afand32 [%r1+0x1eef], %r2 + afor [%r1+0x1eef], %r2 + afor32 [%r1+0x1eef], %r2 + afxor [%r1+0x1eef], %r2 + afxor32 [%r1+0x1eef], %r2 diff --git a/gas/testsuite/gas/bpf/bpf.exp b/gas/testsuite/gas/bpf/bpf.exp index adf413f834c..1d683d55215 100644 --- a/gas/testsuite/gas/bpf/bpf.exp +++ b/gas/testsuite/gas/bpf/bpf.exp @@ -34,6 +34,7 @@ if {[istarget bpf*-*-*]} { run_dump_test jump-pseudoc run_dump_test jump32 run_dump_test jump32-pseudoc + run_dump_test atomic-v1 run_dump_test atomic run_dump_test atomic-pseudoc run_dump_test indcall-1 @@ -55,6 +56,7 @@ if {[istarget bpf*-*-*]} { run_dump_test jump-be-pseudoc run_dump_test jump32-be run_dump_test jump32-be-pseudoc + run_dump_test atomic-v1-be run_dump_test atomic-be run_dump_test atomic-be-pseudoc } diff --git a/opcodes/bpf-opc.c b/opcodes/bpf-opc.c index 00a21c6039c..ee6719bdc06 100644 --- a/opcodes/bpf-opc.c +++ b/opcodes/bpf-opc.c @@ -364,43 +364,43 @@ const struct bpf_opcode bpf_opcodes[] = BPF_V3, BPF_CODE, BPF_CLASS_JMP32|BPF_CODE_JNE|BPF_SRC_K}, /* Atomic instructions. */ - {BPF_INSN_AADD, "aadd%W[ %dr %o16 ] , %sr", "* ( u64 * ) ( %dr %o16 ) += %sr", + {BPF_INSN_AADD, "aadd%W[ %dr %o16 ] , %sr", "lock%w* ( u64 * ) ( %dr %o16 ) += %sr", BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_AADD}, - {BPF_INSN_AOR, "aor%W[ %dr %o16 ] , %sr", "* ( u64 * ) ( %dr %o16 ) |= %sr", + {BPF_INSN_AOR, "aor%W[ %dr %o16 ] , %sr", "lock%w* ( u64 * ) ( %dr %o16 ) |= %sr", BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_AOR}, - {BPF_INSN_AAND, "aand%W[ %dr %o16 ] , %sr", "* ( u64 * ) ( %dr %o16 ) &= %sr", + {BPF_INSN_AAND, "aand%W[ %dr %o16 ] , %sr", "lock%w* ( u64 * ) ( %dr %o16 ) &= %sr", BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_AAND}, - {BPF_INSN_AXOR, "axor%W[ %dr %o16 ] , %sr", "* ( u64 * ) ( %dr %o16 ) ^= %sr", + {BPF_INSN_AXOR, "axor%W[ %dr %o16 ] , %sr", "lock%w* ( u64 * ) ( %dr %o16 ) ^= %sr", BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_AXOR}, /* Atomic instructions with fetching. */ - {BPF_INSN_AFADD, "afadd%W[ %dr %o16 ] , %sr", "???", + {BPF_INSN_AFADD, "afadd%W[ %dr %o16 ] , %sr", "%sr = atomic_fetch_add ( ( u64 * ) ( %dr %o16 ) , %sr )", BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_AFADD}, - {BPF_INSN_AFOR, "afor%W[ %dr %o16 ] , %sr", "???", + {BPF_INSN_AFOR, "afor%W[ %dr %o16 ] , %sr", "%sr = atomic_fetch_or ( ( u64 * ) ( %dr %o16 ) , %sr )", BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_AFOR}, - {BPF_INSN_AFAND, "afand%W[ %dr %o16 ] , %sr", "???", + {BPF_INSN_AFAND, "afand%W[ %dr %o16 ] , %sr", "%sr = atomic_fetch_and ( ( u64 * ) ( %dr %o16 ) , %sr )", BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_AFAND}, - {BPF_INSN_AFXOR, "afxor%W[ %dr %o16 ] , %sr", "???", + {BPF_INSN_AFXOR, "afxor%W[ %dr %o16 ] , %sr", "%sr = atomic_fetch_xor ( ( u64 * ) ( %dr %o16 ) , %sr )", BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_DW|BPF_MODE_ATOMIC|BPF_IMM32_AFXOR}, /* Atomic instructions (32-bit.) */ - {BPF_INSN_AADD32, "aadd32%W[ %dr %o16 ] , %sr", "* ( u32 * ) ( %dr %o16 ) += %sr", + {BPF_INSN_AADD32, "aadd32%W[ %dr %o16 ] , %sr", "lock%w* ( u32 * ) ( %dr %o16 ) += %sr", BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_AADD}, - {BPF_INSN_AOR32, "aor32%W[ %dr %o16 ] , %sr", "* ( u32 * ) ( %dr %o16 ) |= %sr", + {BPF_INSN_AOR32, "aor32%W[ %dr %o16 ] , %sr", "lock%w* ( u32 * ) ( %dr %o16 ) |= %sr", BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_AOR}, - {BPF_INSN_AAND32, "aand32%W[ %dr %o16 ] , %sr", "* ( u32 * ) ( %dr %o16 ) &= %sr", + {BPF_INSN_AAND32, "aand32%W[ %dr %o16 ] , %sr", "lock%w* ( u32 * ) ( %dr %o16 ) &= %sr", BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_AAND}, - {BPF_INSN_AXOR32, "axor32%W[ %dr %o16 ] , %sr", "* ( u32 * ) ( %dr %o16 ) ^= %sr", + {BPF_INSN_AXOR32, "axor32%W[ %dr %o16 ] , %sr", "lock%w* ( u32 * ) ( %dr %o16 ) ^= %sr", BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_AXOR}, /* Atomic instructions with fetching (32-bit.) */ - {BPF_INSN_AFADD32, "afadd32 %W[ %dr %o16 ] , %sr", "???", + {BPF_INSN_AFADD32, "afadd32%W[ %dr %o16 ] , %sr", "%sw = atomic_fetch_add ( ( u32 * ) ( %dr %o16 ) , %sw )", BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_AFADD}, - {BPF_INSN_AFOR32, "afor32%W[ %dr %o16 ] , %sr", "???", + {BPF_INSN_AFOR32, "afor32%W[ %dr %o16 ] , %sr", "%sw = atomic_fetch_or ( ( u32 * ) ( %dr %o16 ) , %sw )", BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_AFOR}, - {BPF_INSN_AFAND32, "afand32%W[ %dr %o16 ] , %sr", "???", + {BPF_INSN_AFAND32, "afand32%W[ %dr %o16 ] , %sr", "%sw = atomic_fetch_and ( ( u32 * ) ( %dr %o16 ) , %sw )", BPF_V3, BPF_CODE|BPF_IMM32, BPF_CLASS_STX|BPF_SIZE_W|BPF_MODE_ATOMIC|BPF_IMM32_AFAND}, - {BPF_INSN_AFXOR32, "afxor32%W[ %dr %o16 ] , %sr", "???", + {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}, /* Old versions of aadd and aadd32. */