From patchwork Thu May 11 14:13:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Jose E. Marchesi" X-Patchwork-Id: 92630 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:6358:3046:b0:115:7a1d:dabb with SMTP id p6csp4468734rwl; Thu, 11 May 2023 07:14:38 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ72H+f0yYLqmdJ61yfg5CmCgPkuOFJodGU6i8Io1uCRjT6HPllGIbv9NXnK4DR2+wmLOaOE X-Received: by 2002:a17:906:fe42:b0:957:28b2:560a with SMTP id wz2-20020a170906fe4200b0095728b2560amr17662143ejb.46.1683814477810; Thu, 11 May 2023 07:14:37 -0700 (PDT) Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id ha14-20020a170906a88e00b00965b8a996cdsi4939239ejb.1013.2023.05.11.07.14.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 May 2023 07:14:37 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=ODWpCZ9C; arc=fail (signature failed); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c 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 1451E3855590 for ; Thu, 11 May 2023 14:14:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1451E3855590 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1683814462; bh=zuXJ+UM0hZ8kHgp9Hr3PCTI6yOS9FhbErcGuSEexKm8=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=ODWpCZ9C6K2JJdfHoPDltZOjex2NPNtcQ/xYK7SnkyftjzBmkZDRrx2MbXigtLtUw RpezYKcH4wqLWUu16D7W6J6q9+CMHEdxnTCOPjCWi950CTNmk7nTxnGxoAiLJoGJIr l0hlXof3XUwz/+Sb4NlR1zr0lEqUepWqFYO5BPBs= 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 4E53338582AB for ; Thu, 11 May 2023 14:14:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4E53338582AB 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 34BDxHKi018089 for ; Thu, 11 May 2023 14:14:09 GMT Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3qf778y9hn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 11 May 2023 14:14:08 +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 34BD2LuP004558 for ; Thu, 11 May 2023 14:14:06 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2170.outbound.protection.outlook.com [104.47.55.170]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3qf7pm2mj0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 11 May 2023 14:14:06 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=R0ES+cgibu8JiB3Kqd+Egs9M+J0wABLNVVgHotjtQ+AHlBWa6Qzzud5t91Wtw1oHmL9fM3cF2nXCfdquGTiwJzhSPgDHJntEehBtYZEIiOtEeeaEAT2Cr8EFGSfDjMsWDBPEZmADfTn/xK4u6oACWVotejdO6C7UZdrzR46qTqrdWCSZuTnL+ZdE5jSnd+M058CbPVZYDKAaHqynRfzVQRwncd+tvEh6EBmqQ0dyCzCWUzUsryRxrs8jPKl+hZbooe0AgXot6AFJt18Nw/bhjEmjMb56mwaNUihzJDGCXd79qdvTQmQuzsn/s7YHnz+LGzf0bj78Rm0rTFmOTobDgg== 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=zuXJ+UM0hZ8kHgp9Hr3PCTI6yOS9FhbErcGuSEexKm8=; b=h4+X4khy1oAfTwAQQ2LWygLrSGIRvY27UGzJ5R6I6lUH0nWMVoYiMJQ0fJWsRgyKoFcUPmxFr79qWOFz9RGo8ziI79vOaxdb90Jd2EEAbRUjoG9d3WTal3zHzi76afIv8R9BNIJEutm7QYbw64DA3K3Zlzt7vkidbwZM/kwZqtYVOxT6tIkPslwyOavkCfpCjUkmQID774nrbEB9lESVTnKayoPln52wfVlDyaaJy880k+ZhgChyt3tNgBgVOGBoUDWR1R9Q4ttsqDRZMpE+bDd/d55EHUj4sDmzSaiXe6pja+qWsC5JqPCJwIMNHwtvbxmbiiDL1gjqmpVnAvdV5Q== 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 BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) by SA1PR10MB6341.namprd10.prod.outlook.com (2603:10b6:806:254::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.32; Thu, 11 May 2023 14:14:03 +0000 Received: from BYAPR10MB2888.namprd10.prod.outlook.com ([fe80::d8ec:1377:664:f516]) by BYAPR10MB2888.namprd10.prod.outlook.com ([fe80::d8ec:1377:664:f516%7]) with mapi id 15.20.6363.033; Thu, 11 May 2023 14:14:03 +0000 To: binutils@sourceware.org Subject: [PATCH 2/4] cpu: add V3 BPF atomic instructions Date: Thu, 11 May 2023 16:13:49 +0200 Message-Id: <20230511141351.18886-3-jose.marchesi@oracle.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230511141351.18886-1-jose.marchesi@oracle.com> References: <20230511141351.18886-1-jose.marchesi@oracle.com> X-ClientProxiedBy: SN4PR0501CA0055.namprd05.prod.outlook.com (2603:10b6:803:41::32) To BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BYAPR10MB2888:EE_|SA1PR10MB6341:EE_ X-MS-Office365-Filtering-Correlation-Id: 277d5be3-ad7b-4f5f-eafb-08db5229f91b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: N+ppN/fK4Y9wg377qMj8HEtQfES+eHu3RRLSOb7rLEZhfw4tYaKMeoW9Dg74jTinrQgdVd/3ikxgKAC2KV1ka4W0Uth9ScIXHxeeX9pH4xI3UW9TqUq1J0j60x7suOAfTptA7C0jtTTPYFC+EqIt/doU2hwx0n9ryAG3HD3e1eK4hph34zClipms7sxyEQDYFXsUaGCyALNvTqBlPtCcxeYFMtdNCjbWBG+5P5L49M03GC/M7F/QY8wqJmyh+fJ6MJXHdKYAmQovXAsNyr1lP4P7+gwkn4QPU5On/e303DhFLBwosgMYA+um+iPvZ6ep4BYpTUBTIX63BBGU9jXaRy7obk2io48PdM5MoJoQyOHJl1txpkVwkIwv88YaEjiwI0825G8ViTPKMYUWICHnfnyO88brdoY9ZyyYryyW/GzSr3NLCos865ycdL+hnP4sfBSq/JAakfkqlDAi9JgvX8KGqnh5BbLg57O3qo7U9vPvyp59ERWrE0kLqMX9shvpZlH2y5ulRdsX9DpDOGKmDgUo2DT+vTFJ/I9xjzbuxOxMpMQVtA/fzTuLwYHlcF4HgBnSszyFBdBjbw9JGZyxKuiTHJzMWuGxws4A8noQHhU= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB2888.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(39860400002)(136003)(346002)(376002)(396003)(366004)(451199021)(8936002)(30864003)(316002)(8676002)(478600001)(41300700001)(2906002)(6666004)(6916009)(66946007)(66476007)(66556008)(5660300002)(6486002)(1076003)(26005)(6506007)(6512007)(2616005)(36756003)(186003)(83380400001)(38100700002)(86362001)(21314003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: rWv50XgGQG+3YbW3RBmONp6/eG1T8zC7yyjMZDXWvfq9sWhBKYEYkBRq8Qk9Nk5H7yBQe4LURIuZ8TF4TM5gG0INYN7PBlmtsEM386AnHqnmIAe9iRxpZ0G2K5/nbzuKVB+VNVkFc3EjlB6KcBeaCEXtnmNGHRdytS+xNiDfhhl5qtf6y2cyTWByQZAbqU5mwEdQuvpF+vTxGL3pzcGdcRzJZDYMBM7B4XXDflLXxl9h1P6MHgx3Vdd98hQvG8ehddpffY2xL5cHMXyhzW4msfgb8EZv3QTbJMv0dRF5OpGGGdUKolI3k5ipjskkcyuyRRd4BOC3yWXdWTR8LoBpOQvx4Mk6ToSgqnGPy40Pup3JKcL/wvdIMsuKFVNx68e32qcSan3YH9sqcmTnvYwLnIkOrfKP6aVVgazFFIzfeIcVIiSE2u0ziutMjZ2QdBGjG/PWQJd9q5O94YjX0FYQs4CbdzfBw3ULNCH5rs0nQrcaxLsIb/78Eve9wv5wMOs7EjasOFLZ4pKd4aj7/ZscL7bOeZqNoBiwdq9fr8BBvUwV37InFry7GJwr4L3entz9tJXTQquB62khZQJVobEmhaqrDAIQF91CqTlUSgjOZosawFOJ/Zc4C2wqk44b2itoBSkQXg3wNAkCNNupkO29UjigX+WP5p6UbGs4e42JUYqQcPIkjjcoOMTE7EwxAdM7w3j6xM4H1HGsC+2RZKfhlDsD3uvdBYSrUZUL9kqCYxWKCyeM79128zVwKIhMtZfufWXIkD1Yj4+J0GEM9/npg1nIfEclMUqZ8gBpFzMQBOGXX1mtE+7CyZi9QMLN1ZuUWMA+7U9uQ3J4ohGM3BAe5yYoAPEtDSw2TN2/TkC4u3BLPFdmpuPecI/EBhJqnECfiplRUY90kgihfUwMsKHIedNz4uE8eP0Yl3SVJpTgn/XZJ0DWhx6lKDQEny+IkFdLx5D/M/SrNTNpISrOaSfrr0DG9MFmT7NdScPgS4Md5IkOigIpEe6cnP4S3d982amU4KjWm+fMbdw9N5YxHWVHke9COOjrM4YKTy7Bzi2WhxWY+V4D9CSyThOgxFgNqppHjhVVXPUH7KRDlQBanyDArxAaw3nuNGPouFMvppHhgH6H7YpwzrVO0r5+9MbTRijcN5l1SQp4n1f4iNRuqYjON6XTp71WN4Ki9NbbcEPQx3gC1K6a9fjeOJyzu0ab5n/y5RVCImcSdl5FvHKfdyKuy5XmFXsPY+UjPjqxaZj4fXAPV7OKhNOUEq+KbYuJLoqKrRm3PoV+ntPaquQQ0cX0V3n/rjicjgKqDv/F74FQWa3cKYS3nmB3pkN1nC0Fm4TR8C2iAdQf1gW1kX3USLkQ7Jo0CJYTaQSmlNT6bTr3h7Ua83qsKkTy3Gw4ax9uW8tO/r4LwdamEIkEzHxmktNtPHiIzDnzLfFPLLGd3FCF7yarox6rzpFp8YEpPlujo88IOtcq5P5nPPIlSPEEy54oJp6yIT1wUz5qy7U7sE2+ySHArXi6zxnzltNnHwtB7qlCPDXHZCFzWLUlRfIfSZBcysQPviWn02ug76BuGQxqlrA0bvIYJoczsH9Yyov9lQiYwQaxuSZm2NPhye+j7nJd0A== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: /nmvCTgbw3X2VNLK1ONgA8bDoijMp/7J8teJWNh0aZj9dA2JgZyXuYOPcytVLLAvztKz06zH3HIV3ILl6IIJanPfDxgE1XrjWR9wsjX383MG/W1XpdK0SghMcCATsS5IHrLHrSLDB8v8f9yQgYIPT1lFw0gFZHRF9NaHnlle24vNlxV4xuSGQKSYfjIRq8zB3IgW/Ko49TkRWbBA2RjWU8gA1YG6AvVZRUlQ0bHQJgH0dOzsGeTYB21whlMxrQdLwIm4RGQMmUtsdpWey7xgPHcfUDh589z2C91SBeTpdYZYv7CusVZyutqo4hWwHVQCKF2oxi83N6JwbZlzbqFcUlkCqWrOazLkcpAMYWF5N/a8jeXd+9b4QdgNuiVmmmgtZ+bH6gv55T/9Ma3/FIl0zpU60Y11Y4DeJhWOIQ+G5SLTKVwgtJTogpeh2gZ9rVZsJnWxmATRj18ZLqax/rx93UCtvElsnVSeVi1yb3PjgDOdenX6/+0JhNs/Ci42VEaOYcSR1VQwvKyo7RjW0pSdRRNxBMi21Qz1tWlb05dN757rOLWcNEsbgJzzESCVXgEoAB/pQi7VzZjaEARKCPIcV8IotOrb6tiZgVtMmFSo8Ot3MiNCoKrhBiRN+4OvYbDMDfhPOc1TgdZ35j74BL1WeJKWlVI01284lGGCS+eeJOavAmqJzjfK16DA626yg05bq1f2bhks1gkMjEbiAlpr8mgn8xMryQoeEu00LKz+ysdLjX6Jt8Js+LpbDaKIlRV5 X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 277d5be3-ad7b-4f5f-eafb-08db5229f91b X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB2888.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2023 14:14:03.2450 (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: tQmsu7xQoZ+cFwykJFwnHhIL5iDDUKGTsaJKmMa2LVEG6XLsuP82aevgB9u4E9aEHi2d/y4YcrP1F79RHP7e0QxwqhvuOQAZgCtk6qSJdtU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR10MB6341 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-05-11_11,2023-05-05_01,2023-02-09_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 adultscore=0 suspectscore=0 malwarescore=0 phishscore=0 bulkscore=0 mlxscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2304280000 definitions=main-2305110123 X-Proofpoint-GUID: HGRBSCT-HWaBS9aIfc-N4pN4YcrDNDpr X-Proofpoint-ORIG-GUID: HGRBSCT-HWaBS9aIfc-N4pN4YcrDNDpr X-Spam-Status: No, score=-12.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_H2, 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: "Jose E. Marchesi via Binutils" From: "Jose E. Marchesi" Reply-To: "Jose E. Marchesi" Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org Sender: "Binutils" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1765607449791794652?= X-GMAIL-MSGID: =?utf-8?q?1765607449791794652?= This patch adds a set of new atomic instructions that were introduced in the version 3 BPF ISA: Atomic operations: xor{w,dw} xand{w,dw} xxor{w,dw} Atomic fetch-and-operate: xfadd{w,dw} xfor{w,dw} xfand{w,dw} xfxor{w,dw} Other: xchg{w,dw} xcmp{w,dw} cpu/ChangeLog: 2023-05-10 Jose E. Marchesi * bpf.cpu: Add BPF V3 atomic instructions, along with semantics. opcodes/ChangeLog: 2023-05-10 Jose E. Marchesi * bpf-desc.c: Regenerate. * bpf-desc.h: Likewise. * bpf-opc.h: Likewise. * bpf-opc.c: Likewise. --- cpu/ChangeLog | 4 + cpu/bpf.cpu | 164 +++++++++++++++++++++++++++----- opcodes/ChangeLog | 7 ++ opcodes/bpf-desc.c | 182 +++++++++++++++++++++++++++++++++++ opcodes/bpf-desc.h | 30 ++++-- opcodes/bpf-opc.c | 232 ++++++++++++++++++++++++++++++++++++++++++++- opcodes/bpf-opc.h | 14 ++- 7 files changed, 593 insertions(+), 40 deletions(-) diff --git a/cpu/ChangeLog b/cpu/ChangeLog index 23c89c99eab..78ed5bdb9c5 100644 --- a/cpu/ChangeLog +++ b/cpu/ChangeLog @@ -1,3 +1,7 @@ +2023-05-10 Jose E. Marchesi + + * bpf.cpu: Add BPF V3 atomic instructions, along with semantics. + 2023-03-15 Nick Clifton PR 30231 diff --git a/cpu/bpf.cpu b/cpu/bpf.cpu index 2ae74fc4c18..c252155eded 100644 --- a/cpu/bpf.cpu +++ b/cpu/bpf.cpu @@ -51,7 +51,7 @@ ;; Whereas the 128-bit instructions (at the moment there is only one ;; of such instructions, lddw) have the form: ;; -;; code:8 regs:8 offset:16 imm:32 unused:32 imm:32 +;; code:8 regs:8 offset:16 imm:32 unused:32 imm:32 ;; ;; In both formats `regs' is itself composed by two fields: ;; @@ -83,7 +83,7 @@ ;; ;; and another for big-endian with instructions like: ;; -;; code:8 dst:4 src:4 offset:16 imm:32 [unused:32 imm:32] +;; code:8 dst:4 src:4x offset:16 imm:32 [unused:32 imm:32] ;; ;; where `offset' and the immediate fields are encoded in ;; little-endian and big-endian byte-order, respectively. @@ -206,7 +206,19 @@ (type pc UDI) (get () (raw-reg h-pc)) (set (newval) (set (raw-reg h-pc) newval))) - + +;; r0 register is used by compare and exchange atomic operation +;; used in addressing by offset mode, so they compare/xchange +;; values in memory with r0. + +(define-hardware + (name h-r0) + (comment "r0 register") + (attrs all-isas) + (type register DI) + (get () (raw-reg h-r0)) + (set (newval) (set (raw-reg h-r0) newval))) + ;; A 64-bit h-sint to be used by the imm64 operand below. XXX this ;; shouldn't be needed, as h-sint is supposed to be able to hold ;; 64-bit values. However, in practice CGEN limits h-sint to 32 bits @@ -234,6 +246,7 @@ (length x-length) (mode x-mode))) + ;; For arithmetic and jump instructions the 8-bit code field is ;; subdivided in: ;; @@ -274,11 +287,54 @@ (dwf f-op-mode "eBPF opcode mode" (all-isas) 0 8 7 3 UINT) (dwf f-op-size "eBPF opcode size" (all-isas) 0 8 4 2 UINT) +;; Atomic instructions abuse f-imm32 to hold extra opcodes. +;; These opcodes are structured like: +;; +;; +;; 31 imm32 0 +;; +-----------+-----+-----+ +;; | | op |flags| +;; +-----------+-----+-----+ +;; --4-- --4-- +;; +;; Where: +;; +;; OP is one of ADD, AND, OR, XOR, CHG, CMP. +;; FLAGS is either 0 or FETCH. + +(dwf f-op-atomic "eBPF atomic insn opcode" (all-isas) 32 64 31 32 UINT) + +(define-normal-insn-enum insn-atomic-op-le "eBPF atomic insn opcode" + ((ISA ebpfle xbpfle)) OP_ATOMIC_LE_ f-op-atomic + ((ADD #x00) + (OR #x40) + (AND #x50) + (XOR #xa0) + (FADD #x01) + (FOR #x41) + (FAND #x51) + (FXOR #xa1) + (CHG #xe1) + (CMP #xf1))) + +(define-normal-insn-enum insn-atomic-op-be "eBPF atomic insn opcode" + ((ISA ebpfbe xbpfbe)) OP_ATOMIC_BE_ f-op-atomic + ((ADD #x00000000) + (OR #x40000000) + (AND #x50000000) + (XOR #xa0000000) + (FADD #x01000000) + (FOR #x41000000) + (FAND #x51000000) + (FXOR #xa1000000) + (CHG #xe1000000) + (CMP #xf1000000))) + (define-normal-insn-enum insn-op-mode "eBPF load/store instruction modes" (all-isas) OP_MODE_ f-op-mode ((IMM #b000) (ABS #b001) (IND #b010) (MEM #b011) ;; #b100 and #b101 are used in classic BPF only, reserved in eBPF. - (XADD #b110))) + (ATOMIC #b110))) (define-normal-insn-enum insn-op-size "eBPF load/store instruction sizes" (all-isas) OP_SIZE_ f-op-size @@ -541,7 +597,7 @@ ;; variant for each ISA: ;; ;; LDDWle for the little-endian ISA -;; LDDWbe for the big-endian ISA +;; LDDWbe for the big-endian ISA (define-pmacro (define-lddw x-endian) (dni (.sym lddw x-endian) @@ -614,7 +670,7 @@ ())) (define-pmacro (define-ldind x-endian) - (begin + (begin (dlind "w" W x-endian SI) (dlind "h" H x-endian HI) (dlind "b" B x-endian QI) @@ -810,35 +866,91 @@ ;;; Atomic instructions -;; The atomic exchange-and-add instructions come in two flavors: one +;; The atomic exchange-and-op instructions come in two flavors: one ;; for swapping 64-bit quantities and another for 32-bit quantities. -(define-pmacro (sem-exchange-and-add x-endian x-mode) +;; Semantic routines for regular atomic operations. +(define-pmacro (sem-atomic-op x-semop x-endian x-mode) + (sequence VOID ((x-mode tmp)) + (set x-mode tmp (mem x-mode (add DI (.sym dst x-endian) offset16))) + (set x-mode + (mem x-mode (add DI (.sym dst x-endian) offset16)) + (x-semop x-mode tmp (.sym src x-endian))))) + +;; Semantic routines for atomic operations that involve exchange. +(define-pmacro (sem-atomic-op-fetch x-semop x-endian x-mode) (sequence VOID ((x-mode tmp)) - ;; XXX acquire lock in simulator... as a hardware element? (set x-mode tmp (mem x-mode (add DI (.sym dst x-endian) offset16))) (set x-mode (mem x-mode (add DI (.sym dst x-endian) offset16)) - (add x-mode tmp (.sym src x-endian))))) + (x-semop x-mode tmp (.sym src x-endian))) + (set x-mode (.sym src x-endian) tmp))) + +;; Semantic routine for the atomic exchange. +(define-pmacro (sem-exchange x-semop x-endian x-mode) + (sequence VOID ((x-mode tmp)) + (set x-mode tmp (mem x-mode (add DI (.sym dst x-endian) offset16))) + (set x-mode (mem x-mode (add DI (.sym dst x-endian) offset16)) (.sym src x-endian)) + (set x-mode (.sym src x-endian) tmp))) + +;; Semantic routine for compare-and-exchange. +(define-pmacro (sem-cmp-exchange x-semop x-endian x-mode) + (sequence VOID ((x-mode tmp)) + (set x-mode tmp (mem x-mode (add DI (.sym dst x-endian) offset16))) + (if (eq x-mode (reg h-r0) tmp) + (set x-mode (mem x-mode (add DI (.sym dst x-endian) offset16)) (.sym src x-endian))) + (set x-mode (reg h-r0) (zext tmp)))) + +;; Atomic operation without fetching. +(define-pmacro (dai x-basename x-suffix x-size x-op-code x-endian x-mode semproc semop) + (begin + (dni (.str "x" x-basename x-suffix x-endian) + (.str "x" x-basename x-suffix x-endian) + (endian-isas x-endian) + (.str "x" x-basename x-suffix " [$dst" x-endian "+$offset16],$src" x-endian) + (+ (.sym src x-endian) (.sym dst x-endian) + offset16 OP_MODE_ATOMIC x-size OP_CLASS_STX x-op-code) + (semproc semop x-endian x-mode) + ()))) + +(define-pmacro (dais x-basename x-op-code x-endian semproc semop) + (begin + (dai x-basename "dw" OP_SIZE_DW x-op-code x-endian DI semproc semop) + (dai x-basename "w" OP_SIZE_W x-op-code x-endian SI semproc semop))) (define-pmacro (define-atomic-insns x-endian) (begin - (dni (.str "xadddw" x-endian) - "xadddw" - (endian-isas x-endian) - (.str "xadddw [$dst" x-endian "+$offset16],$src" x-endian) - (+ (f-imm32 0) (.sym src x-endian) (.sym dst x-endian) - offset16 OP_MODE_XADD OP_SIZE_DW OP_CLASS_STX) - (sem-exchange-and-add x-endian DI) - ()) - (dni (.str "xaddw" x-endian) - "xaddw" - (endian-isas x-endian) - (.str "xaddw [$dst" x-endian "+$offset16],$src" x-endian) - (+ (f-imm32 0) (.sym src x-endian) (.sym dst x-endian) - offset16 OP_MODE_XADD OP_SIZE_W OP_CLASS_STX) - (sem-exchange-and-add x-endian SI) - ()))) + (dais add + (.if (.eq x-endian le) OP_ATOMIC_LE_ADD OP_ATOMIC_BE_ADD) + x-endian sem-atomic-op add) + (dais fadd + (.if (.eq x-endian le) OP_ATOMIC_LE_FADD OP_ATOMIC_BE_FADD) + x-endian sem-atomic-op-fetch add) + (dais or + (.if (.eq x-endian le) OP_ATOMIC_LE_OR OP_ATOMIC_BE_OR) + x-endian sem-atomic-op or) + (dais for + (.if (.eq x-endian le) OP_ATOMIC_LE_FOR OP_ATOMIC_BE_FOR) + x-endian sem-atomic-op-fetch or) + (dais and + (.if (.eq x-endian le) OP_ATOMIC_LE_AND OP_ATOMIC_BE_AND) + x-endian sem-atomic-op and) + (dais fand + (.if (.eq x-endian le) OP_ATOMIC_LE_FAND OP_ATOMIC_BE_FAND) + x-endian sem-atomic-op-fetch and) + (dais xor + (.if (.eq x-endian le) OP_ATOMIC_LE_XOR OP_ATOMIC_BE_XOR) + x-endian sem-atomic-op xor) + (dais fxor + (.if (.eq x-endian le) OP_ATOMIC_LE_FXOR OP_ATOMIC_BE_FXOR) + x-endian sem-atomic-op-fetch xor) + ;; CHG and CMP have only "fetch" variants. + (dais chg + (.if (.eq x-endian le) OP_ATOMIC_LE_CHG OP_ATOMIC_BE_CHG) + x-endian sem-exchange ()) + (dais cmp + (.if (.eq x-endian le) OP_ATOMIC_LE_CMP OP_ATOMIC_BE_CMP) + x-endian sem-cmp-exchange ()))) (define-atomic-insns le) (define-atomic-insns be) diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index d954bb938aa..6debcbc653a 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,10 @@ +2023-05-10 Jose E. Marchesi + + * bpf-desc.c: Regenerate. + * bpf-desc.h: Likewise. + * bpf-opc.h: Likewise. + * bpf-opc.c: Likewise. + 2023-05-10 Jose E. Marchesi * cgen-dis.in (print_insn): Use CGEN_INSN_LGUINT for instruction diff --git a/opcodes/bpf-desc.c b/opcodes/bpf-desc.c index 7bef587da8b..5e18b0c7b40 100644 --- a/opcodes/bpf-desc.c +++ b/opcodes/bpf-desc.c @@ -177,6 +177,7 @@ const CGEN_HW_ENTRY bpf_cgen_hw_table[] = { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<