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 A095F385C6F5 for ; Tue, 25 Jul 2023 21:11:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A095F385C6F5 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 (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 36PJIqXL019154 for ; Tue, 25 Jul 2023 21:11:38 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=message-id : date : subject : to : cc : references : from : in-reply-to : content-type : content-transfer-encoding : mime-version; s=corp-2023-03-30; bh=J9zGwEvtBo6HVSKIcVfY7GuBVQ8MklgwqU/dDzSySKo=; b=cgKmGId/0+7TGU9YQpfZtZA9HsZmJhOBKlfkR3Hrq/azrQ9/JHGsetHj0t7udwjlA1wH Wov2dMMI3VYfLWEIMI4RE8vMWsoSkdxFap7hnWoAeGecBnZ5XEEgusd3EagWiNMw6XTD wYHalK8VR7tI73vJ4fgtgog5B8i+HMh+ADl57d+8siZANg8iFHO5K12dg1oDYM7fZBEE VFp/Smf+9p80MuZdH39IHUthMlk/Xs9oQpa4fPBg8Asu1+LU+cOyrdmcbjDnjgGkk3PV xBlEoSYyHV60OEo3QHNh4ZWJmS/h13QqBGpvFgocerPC6RMEszYxrHE11uNEZ+tg5+ny uw== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3s070ax317-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 25 Jul 2023 21:11:38 +0000 Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 36PJoIcq023117 for ; Tue, 25 Jul 2023 21:11:37 GMT Received: from nam11-dm6-obe.outbound.protection.outlook.com (mail-dm6nam11lp2168.outbound.protection.outlook.com [104.47.57.168]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3s05j5ax98-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 25 Jul 2023 21:11:37 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nlpiGHr01zT5CeRMVulgDmUvSDaHMcJSIbnpWqLjES0bWwsf56xRtwFms1KoQ+ccKs3LWLoKs/fQb8+qaTyljA9w8M0sV8MDzuaXItaq7pKwmt5ZMQjXVVj2U930MOK3ol/Gxm9s5AG3wptZtMDV9PeqJMKpoShE0ooXD8U/i+kF3Xm0mH7wkgxYhWMaSVoL7e82F9x9adG1tsPxLW9uL++uKMdH8DatL++mj7mfGrG+ScEcbc5f0ECDFYz43h/mdhfwlxhVQs9FJVkClzahToytx81+OYrIHruJPTVWPRnZhTy8Umyk7q4bcbKXa4zw54P3JkuhWChK+KoI1cFsxg== 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=J9zGwEvtBo6HVSKIcVfY7GuBVQ8MklgwqU/dDzSySKo=; b=DFEf2qcLlyOCgTgluLHNxwPbg7ZtqzBgDWfzvghwSmHPK/fXJcAVPsvNt+Dc7J81OnYRqrk2HIOSduXDuecO4ObrXnj5NCNELMsaBM6LMHwifpYoOS/5IupgNYfkHzltg4dt1+GEmiFYNyiaThWjuvWy1OsBUQTQ2wTGmhgFWIkqT3GQCQccozKR3KuJdAnYtZlFjde4/jxhD42HvbvQ3v0brbVU7e9oVSwNyqRkyo3RaldZaasJOZzQwQeCdzyvsnOm8eIZ6DN6qMKW9udxCwd6y7uwZ4yFFlbygc3n6+4iU/1A2eRcU+00sL1Q9bCb/1cY6gcj8R0lSu5ihjUELA== 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=J9zGwEvtBo6HVSKIcVfY7GuBVQ8MklgwqU/dDzSySKo=; b=e13ecMXb2eIkeIYFpZL/s/8w6smB+v1CvAMMcvARho26XEVDWXRXPWDwRrldtyaJTYb8TW5FPq83sye20ls0j6jO3At+fvlz29TRux5/GtEl0QFbrDZ9SSaRyQEu5H8Kir5vlQCHO9WosYS4sGNLltDWb3/bfHnjnEqLyaL6rEo= Received: from MN2PR10MB3213.namprd10.prod.outlook.com (2603:10b6:208:131::33) by MW6PR10MB7637.namprd10.prod.outlook.com (2603:10b6:303:246::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6609.31; Tue, 25 Jul 2023 21:11:32 +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 21:11:32 +0000 Message-ID: <27ae0120-52b1-ff16-e707-714b0b05aade@oracle.com> Date: Tue, 25 Jul 2023 14:11:28 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.6.0 Subject: Re: [PATCH] bpf: Add atomic compare-and-exchange instructions Content-Language: en-US To: "Jose E. Marchesi" Cc: binutils@sourceware.org References: <20230725204142.9462-1-david.faust@oracle.com> <87h6praezd.fsf@oracle.com> From: David Faust In-Reply-To: <87h6praezd.fsf@oracle.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: SA0PR11CA0176.namprd11.prod.outlook.com (2603:10b6:806:1bb::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_|MW6PR10MB7637:EE_ X-MS-Office365-Filtering-Correlation-Id: 9f5d4069-9f05-4fd4-2b97-08db8d53b8cd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: MKKyuFUX8j/6Z+xzzspmJiUay3czUpSP/iYFc7W1YQpy2T/e16HWKQ1BVPMGCNLaD6hOxc7PUovnVhrc+iENtDkig6xsg0DkUJ4A4Riz1H4nVpb5iPA9fx0S6Xs/FcPxmGFYjIQhIOpho0O8dIdqmKji7XzgGK9NkR5yBoiN1H1UMOwFSFRM4j2U6E1Zy0FeKpf760ZTyKltERj5W5/54q6WGd+U6YVhvCg78cnBRgFqCchCV0o3manevgJhHFfZte3D4zw65VbiGK2OAa00M32DQPhI4y7GJhl477a7VJcw5z7EgZHvORgoLhIhsTg7gWqZK8xyZ7/orNq8dHsjT8KgIUGzqSxtTnhS3e5eTozP7HQxYcURDbZoM/QsROxFZFPWVUTLxfKJS7usZNOjtE3mGerUjd+6FKQmIMM/yEpWzmMfrhXQnISK5fGGc2wdD2qEvIQpbxvoLp64kqtYAaUfVgVs860fgM+/NOqu4ceKZTfnZxgVKsS3KQCrCtTcR+rajM1oaBmmlDNOnuXNiP6tXIKk0ZzQxJr0W/nEyRYLauLjmcbG2lXxzi6ULTerhEhfO0wUbkv3d94cVPvAArkaWpgs5xoU8+nkp0QA1/jKkVWNJ/7fRy5cq4DzPlogWtIwtsesoEoOcoSekQJUBw== 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)(346002)(136003)(376002)(396003)(366004)(39860400002)(451199021)(31686004)(6486002)(478600001)(6512007)(37006003)(6666004)(83380400001)(31696002)(86362001)(36756003)(2906002)(44832011)(30864003)(26005)(53546011)(2616005)(186003)(316002)(6636002)(6506007)(38100700002)(41300700001)(6862004)(4326008)(8936002)(66556008)(66946007)(66476007)(8676002)(5660300002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RlVXVFM3OW9McTcza0V6Q1lsVFpoM1lIMjlacVpJMy92akQvbC9DbTkvOTZH?= =?utf-8?B?a1FCUkdVYi9CRjFqWmR5dUNITHFzdTl2d1BERmpuYU1xamNhNGEyRFpOVVlN?= =?utf-8?B?MjNFZWtnQVNlQVRTelo2U1J1ZU40bU5yT0d4bzJQVW9Qc0pmTmltejFGY0Fo?= =?utf-8?B?Z3lYeTdDNHo5dm9zemoxVmdjNlBhNWlMZmNWckQrTHdRbkZXcUtqejdhWVli?= =?utf-8?B?UTR1a1FaeWdLTHVzdGV2VmdRWmlzVmphSlQ3aTZMeUFmN2I2YTVaNWVpQjNI?= =?utf-8?B?QjRjQkk1bjBkV3grMkhLdmpxL1RiY0d1c3lpQXhyZFFYMThIL3RzYmVBY3pv?= =?utf-8?B?dk1tT2piYkxsRkpCaGRoR3kycDNtMEtBOGU3Z09DV3JVSmk0ME1JRm14azRC?= =?utf-8?B?Vms2TkNaSUQvNHFUZ2JkTnZoSk4vYmtRN1V5dTJBdDA0b1NLNStJSnplMmc3?= =?utf-8?B?c3p3QmN6Z0h4Y1htNm1oYWhtTUhBakExVWhsV3dmanJFby9mRGVsbTZoS25n?= =?utf-8?B?ZzJKQ3RPSngrSXpabStwdWdKVFVrWG84dXM4Mi9wQjZnWDB1dDRqMG9rZWZR?= =?utf-8?B?MXljS3VoYzFBWlNJYmpTQTljTFdMd2dnTTVSeGFwanQwZ3VuSlpCU00wYTNX?= =?utf-8?B?UzUyT2VOT05nMjlOUitCOURqMlBwbmxyeDNUeUM0UnpKdDJ1R05YNHpmc3Rx?= =?utf-8?B?OVZZMHBwMkkrNzVhRkRJbmNmcm94WGNmVXlJZ0JDRDYxbllTeisrSkE0MTd3?= =?utf-8?B?eEZCajhqZkYyZ1ZZQVBWTVU3OWVEcTlEb3hPYndTSVMzLzFFUXBIa0JBVFNs?= =?utf-8?B?dDBaZEQwdmJpdlN5dkh0WmtTUEh2V2NHYzNaWGJvaXlPNFYrN1FCa1VQaDBu?= =?utf-8?B?R1lWOTFxdk01WmV5RmhJd2xPakwvV2JjMXdueXBiM2Z3eFcraHRIV3J1VjRC?= =?utf-8?B?RkxLQUVwU0poMjZnWlMwQzJqZG9LWGVNYk9Uc1p4c3JWaGJXU05qVy9KNEU3?= =?utf-8?B?UzFBb1BsNFgwTVUyLzB4a1BJVFVvbGNYcjNzNGdrSGdLUDE1NkxQUjZUYmRk?= =?utf-8?B?NnlqYXpuNFRFVXROamJCNDhNZTNrNVFMd2FwRjFoYVU4R29mcHVXVjlPRmJw?= =?utf-8?B?ektZcjRmdjVqR1RDTnpoN01YYisrTkhPc0ZWL1g2amdOcWx0MFRpZzZxVDhj?= =?utf-8?B?NzRRUXpkemRhYTdYc0U1OGg4OEpLdnozRldjZllZaW1sL283eFJ2Q2l5VDRD?= =?utf-8?B?bG9FOGZBd1ZvNlpDZlE3ekZzNmtCbTJnYUhrSU5aMjBTZTN2cEJPSzYwaUg4?= =?utf-8?B?Y09Zc09yTXU0R2VmS2FSUlV6STQza01QT0o0NkhpUmVWZkRJUFo3TGVZbmQ1?= =?utf-8?B?VVZ2SmFvcldSMDE5cGVOOHJkZzZCam8xMTZPdjRkdnVkWHh1dkRoZ2lMMEdK?= =?utf-8?B?N0lkVzdROHhDL01yNzJZeUFhQWh4T1RpVTBKLzJVK1BlaHNhMzBPL1YxQUlF?= =?utf-8?B?SW1HQ1NnTkZBaEhCOVZXOXVoTXptWGowZVNyRC9EQ1FESUx4QTVHcUpNWTRS?= =?utf-8?B?aW80Y0dUS1U3bWlBRHViYTlRSDJkUkNCbGl4VlJqTmpkblNVVU5OdkNZQjZn?= =?utf-8?B?b3YrUGhIOTN0bUhLOXJVdGZiZHVqbDI1M2h0UmZwdzNhMHZGUFlLeUNJWW1U?= =?utf-8?B?QTNMZ09IRWt0c01zaWRUajBxK1pyallEUDFzcGV1TlkrbEF4R1VuZGpkMVFm?= =?utf-8?B?WFZacVlreTRBM0ZUcXF0c01rVVFsYXJtb2NGSm1PczJIc0FxcU5HaUMrZW1X?= =?utf-8?B?aGdMM2JxSG95TEYvZXRRV0t0RXkyaEw2QU1adkpnUTBVUHVHS1BiM0R0dklV?= =?utf-8?B?Z1JiWVB2K2RQM25rVDd1NWhSdGM3OVl5aWczRHZKMUtTY3plOXkxT1BEaVEz?= =?utf-8?B?aXpJT1diYXh2YlZFVm1LemhZMC92WGh3U0JsbUYvZ0k2VjNpRW1hTUdNaXNj?= =?utf-8?B?OW1GQ1RQRlZLNWRMSmIwQVdwZk5hb1pKSW5yYWZFcFdCSy9ZQXpIV0pSUkgx?= =?utf-8?B?OU81eHhUVExHQlZicno0d0M1QmFEZHhXRklGenFaTUVzZ0lXTFpoMDNsSDdI?= =?utf-8?Q?3tuI44cFDoV9+OLpa0mupxBdf?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: tDY07zb2rRdGvlCPBEp7OpO3YS09Uf+20MxHAsS5wg1b4LqalXKsT8+QU85Vsusn4Ww6aCTzU/X0FpBkvPoPCzM2+LFuAapLt4f1FimtT+TT4AWleJquINBO0927dc98hqt1CU5Q+Fjt9eRSsg1xWBMEE4SotoM3pdNOuTzbCiLwWPKuIBhPKM/Qrv+28/DjfOJIQ0MLWGiU3chTyBj837qHb3TR2Xq3JazcyvAGL0IH+TopJ1b/0EA7f6ny072edZtENg4FYJitBE8HvzCFQizInQSalFtxFB1dNRkt1BSxcaJZ5oowEo3dlk8LnvppXoSTsobPsonIwnDRiRpRHxk2UGmTrYt8IrMNZIFJp//7zKIS/E47FpcUkTqsvYfMgwdMs4/DZNqF1zCelZRiUrBCycM2HOqLwSAjybeOoirPSWCZYBl/y/jqFZ1qzD4izdB8E+gevWOIPgftHe6gFmx5vecjLJUEEDXuDSFXrGlmUKDpHpgjw0lKyixZcukxbmHA2w+PTg3iZ+6eEp+9sa8N+PkQxTyPlGeXrPT850qcixLIk8vw2TnvHRIHu0stTF09JTyi2LZnj8bsFr4ezn6MaMTcKiR331a1aQghopiRTKAESUcAd5w82IP3VuDJJ9/GFQvQyYe1Y4XasABERf7Y59/TCfXEN1v8mcfbG8NBqsTQHhUziTBxzBVA6BUC78HVfiCug3gx7R/ZL9NimTJEBayECJ0xAPLOaPKB2MVcxy9wI552LHSIFGcTBxNS X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9f5d4069-9f05-4fd4-2b97-08db8d53b8cd X-MS-Exchange-CrossTenant-AuthSource: MN2PR10MB3213.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jul 2023 21:11:32.6606 (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: QMYMo4tZET2eBXOwiUMDm/hbl5/+vc0YlPTG7epkyWPsmT18+HyUe1RdmVGWRW+KjQdFdJsPyP+vHHGIP4eP1Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW6PR10MB7637 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 suspectscore=0 spamscore=0 adultscore=0 phishscore=0 bulkscore=0 malwarescore=0 mlxscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2306200000 definitions=main-2307250180 X-Proofpoint-GUID: 2XpD-aX0DjHeSblzdE0cpaSA44JQdAXO X-Proofpoint-ORIG-GUID: 2XpD-aX0DjHeSblzdE0cpaSA44JQdAXO X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,NICE_REPLY_A,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: On 7/25/23 13:55, Jose E. Marchesi wrote: > > Hi David. > > Thanks for the patch. > OK. Thanks, pushed. > >> 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},