From nobody Sat May 18 20:37:05 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=imgtec.com); dmarc=fail(p=none dis=none) header.from=imgtec.com ARC-Seal: i=2; a=rsa-sha256; t=1712063871; cv=pass; d=zohomail.com; s=zohoarc; b=ac19AEs/3BoN2Ehau5Yk1uz4gnyBrqP/8IoZvLtyRQzOuijx9s47aYYHBmDwNxcnaRDUBuU6QXedjwYiw7nWwMhQKT22OtkCedDs8LDd3WnqTAqUvyFT3d6FRYU5FgPtocOhCPhXpeERFraYbKjTwi24WkR2ggdGSQwMwc9C+uw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1712063871; h=Content-Type:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=8a+U9a++3V5olVXn5lPIRnLLnF7ytqLQQKWqy2P4EYU=; b=LybzkL4EggMguLzXuzPYd44OYfopgc4p5++aLVOjhExz5RVpOaMj4nm7FgShAf9zpx+lCU5ekzniHVBQexnOiFH8g/txRhAmwPvc2q8Sp6ELSqOyW9TpJfkyVa+zbt4WqLCNulcmmXjVJxGYiYOCiJ4wktNKFiu1P6hPDKJEC80= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=imgtec.com); dmarc=fail header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1712063871721680.0179098295804; Tue, 2 Apr 2024 06:17:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rrdz8-0004v1-HH; Tue, 02 Apr 2024 09:15:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rrdYq-00028J-Rb; Tue, 02 Apr 2024 08:48:22 -0400 Received: from mx07-00376f01.pphosted.com ([185.132.180.163]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rrdYe-0000CM-4H; Tue, 02 Apr 2024 08:48:19 -0400 Received: from pps.filterd (m0168889.ppops.net [127.0.0.1]) by mx07-00376f01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 4327UEjY019305; Tue, 2 Apr 2024 13:48:03 +0100 Received: from hhmail05.hh.imgtec.org ([217.156.249.195]) by mx07-00376f01.pphosted.com (PPS) with ESMTPS id 3x6bpwuxpn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Tue, 02 Apr 2024 13:48:02 +0100 (BST) Received: from HHMAIL04.hh.imgtec.org (10.100.10.119) by HHMAIL05.hh.imgtec.org (10.100.10.120) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.37; Tue, 2 Apr 2024 13:48:01 +0100 Received: from LO3P265CU004.outbound.protection.outlook.com (40.93.67.5) by email.imgtec.com (10.100.10.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.37 via Frontend Transport; Tue, 2 Apr 2024 13:48:01 +0100 Received: from LO4P265MB6666.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2f0::11) by CWXP265MB1975.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:7d::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.45; Tue, 2 Apr 2024 12:48:00 +0000 Received: from LO4P265MB6666.GBRP265.PROD.OUTLOOK.COM ([fe80::c9e8:ad7a:f36e:a282]) by LO4P265MB6666.GBRP265.PROD.OUTLOOK.COM ([fe80::c9e8:ad7a:f36e:a282%3]) with mapi id 15.20.7409.042; Tue, 2 Apr 2024 12:47:59 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=imgtec.com; h= from:to:cc:subject:date:message-id:content-type:mime-version; s= dk201812; bh=8a+U9a++3V5olVXn5lPIRnLLnF7ytqLQQKWqy2P4EYU=; b=mZK fGAaJNUWEcH61pEMJsraEZe2oy6PCEm5tUGoXYopxJrWuK757mWKPsBF/4QluvPO SyZxcfQQXBJeLdQM4zQZMp/bHStbfWO/fEpKGeLL7hGGTlJSIDeUZLnT1DeTF14D hixO/aeDxpWS/kYICfKyt+W8nmSJDHhFePrLgkqLyadS9Cc/gE1+QOiQEYobLyws IKxxT/Rqp7mopaPPgvppZ0zQUM7Z9UHOn0oDyTXIgy+9Ksuik5qjDpj4X+BVSk6b t/V+U3XCYgtJhCSOwAy9NwDJfWrKEClgnMc/LdeSa4dfciFZZPWHpv616H3t9TV8 YBJHZVcIf7bGpMpZC8w== ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=l8U0pTN44UdjguTmXT7BrF0n2eMLkkLIPP2Jp6RHQ3p2fw4F5Npl7ypUUOWHBJFsaLZYqZhEoxqGieaRqOBb16mPdkDPbGN9G5aEp2XnfmK8QNy4HcZ/cBHXf3j+msx0+kcMnd8A7BfIVFLo4S5zPVHgf+0CL5b/0SVANvGBUGUtwt8Ldcom3suJGZdaf/mQK4XDe1HK70Vfelgf6zKoTcJGQQHEBYz6gXBk6u9e0iRpeVLYAOWbrrO/TE+yHEc6Fi8b8kco8aZ2BUYg596dgPlrfJX0ML5Pnf81wu1pB5n3oYOyckSHeJutRvL0GNvjNL0tCWfjgoVDPQk5igl4zw== 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=8a+U9a++3V5olVXn5lPIRnLLnF7ytqLQQKWqy2P4EYU=; b=Vm+0q+mIWC8ZEZ/wwan+4xGdAmNOdpXovjBFyeza+V6HFe5y5ybHVYSowvDt9dZk9HIc/5C7rKwtn7hHJG7C++ra/NjjLmXKAPmM7eM8f2GMepAnSapdBMJEOZs/s3R3iQtedYeti84BVyZL37zWP+uHGAgJy+haw9K6wiJRGbVSWAcD0XBIv22c2xOyWojeQpjtnF/WYIKMf/4uJ09mwrfuGzbXEqOFVVJ9W8Nefce1PSpAett7DOcruh+OottaDkD9AornHoYID4XM0+BfwmALBybMUz3Nbs3xLtoxWw7JzK1nGmHiS2wVT9My8WwpJvTV/Fibu+4+Yc5u4Azclg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=imgtec.com; dmarc=pass action=none header.from=imgtec.com; dkim=pass header.d=imgtec.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=IMGTecCRM.onmicrosoft.com; s=selector2-IMGTecCRM-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8a+U9a++3V5olVXn5lPIRnLLnF7ytqLQQKWqy2P4EYU=; b=CQlxC5gxD+EWh66pMKIWikebVDdV0folWplQ6IsAGk1s0OjADbr3mRXXQZRKMJg0FfVVtUDRhXXn8ru/AdV96cMFH37TJ8do94cIiB0YzoXZDTu+9LzNAIE4VBKDcHGwJCOrcL/EKZUUSyAKHalqWVf2uc0dKECn4vSSDrPurtM= From: Simeon Krastnikov To: "qemu-devel@nongnu.org" CC: "qemu-riscv@nongnu.org" , "qemu-trivial@nongnu.org" , Shiva Chen Subject: [PATCH] Fix incorrect disassembly format for certain RISC-V instructions Thread-Topic: [PATCH] Fix incorrect disassembly format for certain RISC-V instructions Thread-Index: AdqE+4RJgAV1qFBhT8677tuQrfnSpw== Date: Tue, 2 Apr 2024 12:47:59 +0000 Message-ID: Accept-Language: en-GB, en-US Content-Language: en-GB X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: LO4P265MB6666:EE_|CWXP265MB1975:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: D9SEcro6HEYjmtn4XROFtN6OdLLItESB9i5DVVbid2e3YpkBhnb7WYKJ8bTI+aOme+6gCN22SZPA8SSHaTnbyw8ImS+K0F/h6NsH+njhea4RaMTEmUMSYbFG7j1FZ7bXnpwlBs/xlPg9v22Mr5sMS/8kMUv1y7c1ljk7rvi5iSPIacdjPmXDib2eoyxS1AuOL5d9aCUM/EshZvZf+2rgZO2qCJEOFC/dp7uUSG6J9zs+8cmca+KCJx6EsJOADGVzJtBfPvj+AWFxhjIsY+ofbSKlLvE9G4dMQwKCIpclh7KP0tabthJ+/Qgl9UVX3tueIO3OdZo3s/ofQosiULNj4Lq1+4pHFp26aLvfR+yw4uWukzHzfF+QmUF77SR/VrAZBKoSuyIkbomrVl9LaKfSr+ibF8zmy+na6Qrx1sVvlyQXDGUDer9BbFKCaQsYxJktR7sbrqDncieJ/kM66Lhztk9V+HiZzslYGbP9CcKT1Qd73bv3OxFdXWT4kWTRcHDHxqPl6+cPoNu3Mn6jlIyMAcP+WER9Dd+SlMDyIuAXZTa8v0/S98NyRyApp2Nix3gchGKROhpaNCV7TMIALXQOVHStt5ic+sndlKExh8Ja/wc= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:LO4P265MB6666.GBRP265.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230031)(366007)(376005)(1800799015); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?PQZG941hvsaSpTm2ZHLms0Wk6g4e6WXoM8DgQBAkewTOUInaWZStro7mZGj8?= =?us-ascii?Q?EGdrOJXqdRfzGkjNNB2aFcYMfwx+hpPuxr2/JvYDeuy2RzveD22ddou+Y38k?= =?us-ascii?Q?+LbHhv8etsnOcuxaa6szdIPV+4p7tIXs36Nl9Dy3sKWsGMHcYuo/YuqXDIGF?= =?us-ascii?Q?bcDrnT37MIp3u4Qff3VlYp3QArNtcq/8CGmRQv6CydYg7srSXrmvPyKkGaGj?= =?us-ascii?Q?ZF7T2EoIJFCDAZ1DPkCSTclwKiP804WONiE48kugNPBYtMJb80kkT8jJj8fv?= =?us-ascii?Q?algDfhdUycwhVLE11nIQKxBHcv5z8Uur2Nm4Hr7mvEI1mPgXb7JruAl3g4X0?= =?us-ascii?Q?V1O1sdBYFleaq8gFei/wyUoEmrt5aPbDPJTOoA114vNgbt88OST2JdXd/74d?= =?us-ascii?Q?Ihq4u9kqG+pQiQxpfsmIe0Xgs2Xp5HbeD7dG1/P9QeemeGYWZja6AlpSNwrN?= =?us-ascii?Q?gIN6gG+ftVUkMVRsN2ZK+7s+lIjbKY7Dxmp688G7u11L11QUwcGHW15GxwVt?= =?us-ascii?Q?TtgCY5ENpPJDdqMYF0fSfLWIOeWLmUuwzuV/iz3DD66CpYM6e/YZUNfFHUAb?= =?us-ascii?Q?uaraoj0X4gAI4uV0ZG/mK9LXS+vZzauB6qSoRVw1QcKLWOvN5r+yYhDZ1dgu?= =?us-ascii?Q?Jt8H7WLTnK704QwyXv8cIobpKBif6c5So0uBql7E6vjQ7HnRfFTrLP/4AeAu?= =?us-ascii?Q?m0mhmSGpPzYrPC5PVE2YuaSAKddyY0kScSoZVNrix5mGuS0hWghJeVRSy+g4?= =?us-ascii?Q?S/GUxS43D5a9yvsWnrptjYycJwXrP5tN+DdwkLP8bG6iU+QVvKckpt00LbzB?= =?us-ascii?Q?HHQ6FgzNdTNQAElxh+HuSEJrD3+YO/q0RnxOIdJwmLn0dZTeg95RruXl8k0X?= =?us-ascii?Q?OeArkS7XcENh6AxTo18evCiVkT50jPprfUgTFAk92kuzklbFAoLeUGlQ+84F?= =?us-ascii?Q?pwLmJ1EwSMKex6qHWNUzHl9NubBtEDrOGtE4MGUceJar4A2Y4JHRek2iTzAe?= =?us-ascii?Q?2mY3qaSn8VR+ZZHngssSOoFBfLaKUc5LZgxUBxp+kpT6YyNniIftHlwxInm7?= =?us-ascii?Q?TC9V144AV26YeCHWCugZ2UYarb8p9JWV7sRtp+fkJj2tb2PZhhFiRC5KIf4y?= =?us-ascii?Q?7jnMDCSLto1UKy/d++L+eKyn8QWfuWAf48kaF5QL+Uwb8PF6HfpziO+jOb3J?= =?us-ascii?Q?8Xm7p3ZgR3mv2D3KF9N4Ap3fIvznFdzsk/Zps6Eo+8JJKparptfnHNz/ib0Z?= =?us-ascii?Q?msZcX+yddoiw4OK1OyQT4N9+aAbUJ0l5+d0nuHMcFS/c7+/PcGiz7XUQwP8j?= =?us-ascii?Q?yaCOcdqJsF434cwAGSTiM7MO+CGTdtGLuO07ZbHl2SioeukMpPzCubaDXLYC?= =?us-ascii?Q?0aSiTFMSWK9pWenpD2qW6h58/2c0VPkMdYc17AmyGvXLgVGD9xdYbFPn2GNO?= =?us-ascii?Q?tMPzapo/Uoe5KSp6zAtuaiWxR4Nour5fMXoODa00T5+PTqQcE/6vP70uruMc?= =?us-ascii?Q?/syNVRA6q32Vz3G5FdJeD86XV4REMTnvZ8UZh4Dvm8AQ/civb1yXgvBvquax?= =?us-ascii?Q?a44+YZfk2BPnFder4dcGzJE0O4yjtuuSmY6fVrdwjQZXW6aKwuMB1rnRgn0w?= =?us-ascii?Q?Fw=3D=3D?= Content-Type: multipart/alternative; boundary="_000_LO4P265MB66669BD6FF7CAB642AE30316933E2LO4P265MB6666GBRP_" MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: LO4P265MB6666.GBRP265.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 5d9d9874-c5c6-46ac-94eb-08dc531320ba X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Apr 2024 12:47:59.8102 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 0d5fd8bb-e8c2-4e0a-8dd5-2c264f7140fe X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: RZWc9hWuiW7BOgZvPhTS465d/IBGl96SfQHutlMkbsXedhSqra8fEoczMC3v4t8KsYMzLONwelMCGukm2yD8FB69nrk9l4u/10Ms85Qz2HE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWXP265MB1975 X-OriginatorOrg: imgtec.com X-EXCLAIMER-MD-CONFIG: 15a78312-3e47-46eb-9010-2e54d84a9631 X-Proofpoint-GUID: 55i2xm43SNWT6ZWZR1xwynuOiZtXqC-X X-Proofpoint-ORIG-GUID: 55i2xm43SNWT6ZWZR1xwynuOiZtXqC-X Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=185.132.180.163; envelope-from=Simeon.Krastnikov@imgtec.com; helo=mx07-00376f01.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 02 Apr 2024 09:15:21 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @IMGTecCRM.onmicrosoft.com) X-ZM-MESSAGEID: 1712063872772100016 --_000_LO4P265MB66669BD6FF7CAB642AE30316933E2LO4P265MB6666GBRP_ Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" * The immediate argument to lui/auipc should be an integer in the interval [0x0, 0xfffff]; e.g., 'auipc 0xfffff' and not 'auipc -1' * The floating-point rounding mode is the last operand to the function, not the first; e.g., 'fcvt.w.s a0, fa0, rtz' and not 'fcvt.w.s rtz, a0, fa0'. Note that fcvt.d.w[u] and fcvt.w[u].d are unaffected by the rounding mode and hence it is omitted from their disassembly. * When aq and rl are both present, they are not separated by a '.'; e.g., 'lr.d.aqrl' and not 'lr.d.aq.rl'. Based on the following assembly reference: https://github.com/riscv-non-isa/riscv-asm-manual/blob/master/riscv-asm.md Signed-off-by: Simeon Krastnikov --- disas/riscv.c | 144 ++++++++++++++++++++++++++------------------------ disas/riscv.h | 10 ++-- 2 files changed, 79 insertions(+), 75 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index e236c8b5b7..71a3ab878f 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1311,98 +1311,98 @@ const rv_opcode_data rvi_opcode_data[] =3D { { "csrrci", rv_codec_i_csr, rv_fmt_rd_csr_zimm, NULL, 0, 0, 0 }, { "flw", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 }, { "fsw", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 }, - { "fmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, = 0 }, - { "fmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, = 0 }, - { "fnmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0,= 0 }, - { "fnmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0,= 0 }, - { "fadd.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, - { "fsub.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, - { "fmul.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, - { "fdiv.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, + { "fmadd.s", rv_codec_r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0, = 0 }, + { "fmsub.s", rv_codec_r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0, = 0 }, + { "fnmsub.s", rv_codec_r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0,= 0 }, + { "fnmadd.s", rv_codec_r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0,= 0 }, + { "fadd.s", rv_codec_r_m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 }, + { "fsub.s", rv_codec_r_m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 }, + { "fmul.s", rv_codec_r_m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 }, + { "fdiv.s", rv_codec_r_m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 }, { "fsgnj.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_s, 0, 0, 0 }, { "fsgnjn.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_s, 0, 0, 0= }, { "fsgnjx.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_s, 0, 0, 0= }, { "fmin.s", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, { "fmax.s", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, - { "fsqrt.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, + { "fsqrt.s", rv_codec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 }, { "fle.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, { "flt.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, { "feq.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, - { "fcvt.w.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, - { "fcvt.wu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, - { "fcvt.s.w", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, - { "fcvt.s.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, + { "fcvt.w.s", rv_codec_r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 }, + { "fcvt.wu.s", rv_codec_r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 }, + { "fcvt.s.w", rv_codec_r_m, rv_fmt_frd_rs1_rm, NULL, 0, 0, 0 }, + { "fcvt.s.wu", rv_codec_r_m, rv_fmt_frd_rs1_rm, NULL, 0, 0, 0 }, { "fmv.x.s", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, { "fclass.s", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, { "fmv.s.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 }, - { "fcvt.l.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, - { "fcvt.lu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, - { "fcvt.s.l", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, - { "fcvt.s.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, + { "fcvt.l.s", rv_codec_r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 }, + { "fcvt.lu.s", rv_codec_r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 }, + { "fcvt.s.l", rv_codec_r_m, rv_fmt_frd_rs1_rm, NULL, 0, 0, 0 }, + { "fcvt.s.lu", rv_codec_r_m, rv_fmt_frd_rs1_rm, NULL, 0, 0, 0 }, { "fld", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 }, { "fsd", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 }, - { "fmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, = 0 }, - { "fmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, = 0 }, - { "fnmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0,= 0 }, - { "fnmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0,= 0 }, - { "fadd.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, - { "fsub.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, - { "fmul.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, - { "fdiv.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, + { "fmadd.d", rv_codec_r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0, = 0 }, + { "fmsub.d", rv_codec_r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0, = 0 }, + { "fnmsub.d", rv_codec_r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0,= 0 }, + { "fnmadd.d", rv_codec_r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0,= 0 }, + { "fadd.d", rv_codec_r_m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 }, + { "fsub.d", rv_codec_r_m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 }, + { "fmul.d", rv_codec_r_m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 }, + { "fdiv.d", rv_codec_r_m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 }, { "fsgnj.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_d, 0, 0, 0 }, { "fsgnjn.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_d, 0, 0, 0= }, { "fsgnjx.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_d, 0, 0, 0= }, { "fmin.d", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, { "fmax.d", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, - { "fcvt.s.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, - { "fcvt.d.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, - { "fsqrt.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, + { "fcvt.s.d", rv_codec_r_m, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, + { "fcvt.d.s", rv_codec_r_m, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, + { "fsqrt.d", rv_codec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 }, { "fle.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, { "flt.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, { "feq.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, - { "fcvt.w.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, - { "fcvt.wu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, - { "fcvt.d.w", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, - { "fcvt.d.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, + { "fcvt.w.d", rv_codec_r_m, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, + { "fcvt.wu.d", rv_codec_r_m, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, + { "fcvt.d.w", rv_codec_r_m, rv_fmt_frd_rs1, NULL, 0, 0, 0 }, + { "fcvt.d.wu", rv_codec_r_m, rv_fmt_frd_rs1, NULL, 0, 0, 0 }, { "fclass.d", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, - { "fcvt.l.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, - { "fcvt.lu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, + { "fcvt.l.d", rv_codec_r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 }, + { "fcvt.lu.d", rv_codec_r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 }, { "fmv.x.d", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, - { "fcvt.d.l", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, - { "fcvt.d.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, + { "fcvt.d.l", rv_codec_r_m, rv_fmt_frd_rs1_rm, NULL, 0, 0, 0 }, + { "fcvt.d.lu", rv_codec_r_m, rv_fmt_frd_rs1_rm, NULL, 0, 0, 0 }, { "fmv.d.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 }, { "flq", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 }, { "fsq", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 }, - { "fmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, = 0 }, - { "fmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, = 0 }, - { "fnmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0,= 0 }, - { "fnmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0,= 0 }, - { "fadd.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, - { "fsub.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, - { "fmul.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, - { "fdiv.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, + { "fmadd.q", rv_codec_r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0, = 0 }, + { "fmsub.q", rv_codec_r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0, = 0 }, + { "fnmsub.q", rv_codec_r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0,= 0 }, + { "fnmadd.q", rv_codec_r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0,= 0 }, + { "fadd.q", rv_codec_r_m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 }, + { "fsub.q", rv_codec_r_m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 }, + { "fmul.q", rv_codec_r_m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 }, + { "fdiv.q", rv_codec_r_m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 }, { "fsgnj.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_q, 0, 0, 0 }, { "fsgnjn.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_q, 0, 0, 0= }, { "fsgnjx.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_q, 0, 0, 0= }, { "fmin.q", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, { "fmax.q", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, - { "fcvt.s.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, - { "fcvt.q.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, - { "fcvt.d.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, - { "fcvt.q.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, - { "fsqrt.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, + { "fcvt.s.q", rv_codec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 }, + { "fcvt.q.s", rv_codec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 }, + { "fcvt.d.q", rv_codec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 }, + { "fcvt.q.d", rv_codec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 }, + { "fsqrt.q", rv_codec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 }, { "fle.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, { "flt.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, { "feq.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, - { "fcvt.w.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, - { "fcvt.wu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, - { "fcvt.q.w", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, - { "fcvt.q.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, + { "fcvt.w.q", rv_codec_r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 }, + { "fcvt.wu.q", rv_codec_r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 }, + { "fcvt.q.w", rv_codec_r_m, rv_fmt_frd_rs1_rm, NULL, 0, 0, 0 }, + { "fcvt.q.wu", rv_codec_r_m, rv_fmt_frd_rs1_rm, NULL, 0, 0, 0 }, { "fclass.q", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, - { "fcvt.l.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, - { "fcvt.lu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, - { "fcvt.q.l", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, - { "fcvt.q.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, + { "fcvt.l.q", rv_codec_r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 }, + { "fcvt.lu.q", rv_codec_r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 }, + { "fcvt.q.l", rv_codec_r_m, rv_fmt_frd_rs1_rm, NULL, 0, 0, 0 }, + { "fcvt.q.lu", rv_codec_r_m, rv_fmt_frd_rs1_rm, NULL, 0, 0, 0 }, { "fmv.x.q", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, { "fmv.q.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 }, { "c.addi4spn", rv_codec_ciw_4spn, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, @@ -2009,8 +2009,8 @@ const rv_opcode_data rvi_opcode_data[] =3D { { "cm.jalt", rv_codec_zcmt_jt, rv_fmt_zcmt_index, NULL, 0 }, { "czero.eqz", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, { "czero.nez", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "fcvt.bf16.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, - { "fcvt.s.bf16", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, + { "fcvt.bf16.s", rv_codec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 }, + { "fcvt.s.bf16", rv_codec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 }, { "vfncvtbf16.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, { "vfwcvtbf16.f.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, { "vfwmaccbf16.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 = }, @@ -2031,15 +2031,15 @@ const rv_opcode_data rvi_opcode_data[] =3D { { "fmaxm.q", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, { "fminm.h", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, { "fmaxm.h", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, - { "fround.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, - { "froundnx.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, - { "fround.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, - { "froundnx.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, - { "fround.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, - { "froundnx.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, - { "fround.h", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, - { "froundnx.h", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, - { "fcvtmod.w.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, + { "fround.s", rv_codec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 }, + { "froundnx.s", rv_codec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 }, + { "fround.d", rv_codec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 }, + { "froundnx.d", rv_codec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 }, + { "fround.q", rv_codec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 }, + { "froundnx.q", rv_codec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 }, + { "fround.h", rv_codec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 }, + { "froundnx.h", rv_codec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 }, + { "fcvtmod.w.d", rv_codec_r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 }, { "fmvh.x.d", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, { "fmvp.d.x", rv_codec_r, rv_fmt_frd_rs1_rs2, NULL, 0, 0, 0 }, { "fmvh.x.q", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, @@ -4854,7 +4854,8 @@ static void format_inst(char *buf, size_t buflen, siz= e_t tab, rv_decode *dec) break; case 'U': fmt++; - snprintf(tmp, sizeof(tmp), "%d", dec->imm >> 12); + uint32_t uimm =3D dec->imm >=3D 0 ? dec->imm : ((1 << 20) + de= c->imm); + snprintf(tmp, sizeof(tmp), "0x%" PRIx32, uimm >> 12); append(buf, tmp, buflen); if (*fmt =3D=3D 'o') { while (strlen(buf) < tab * 2) { @@ -4939,7 +4940,10 @@ static void format_inst(char *buf, size_t buflen, si= ze_t tab, rv_decode *dec) } break; case 'R': - if (dec->rl) { + if (dec->aq && dec->rl) { + append(buf, "rl", buflen); + } + else if (dec->rl) { append(buf, ".rl", buflen); } break; diff --git a/disas/riscv.h b/disas/riscv.h index 16a08e4895..a7a2a49971 100644 --- a/disas/riscv.h +++ b/disas/riscv.h @@ -237,11 +237,11 @@ enum { #define rv_fmt_rd_frs1 "O\t0,4" #define rv_fmt_rd_frs1_frs2 "O\t0,4,5" #define rv_fmt_frd_frs1_frs2 "O\t3,4,5" -#define rv_fmt_rm_frd_frs1 "O\tr,3,4" -#define rv_fmt_rm_frd_rs1 "O\tr,3,1" -#define rv_fmt_rm_rd_frs1 "O\tr,0,4" -#define rv_fmt_rm_frd_frs1_frs2 "O\tr,3,4,5" -#define rv_fmt_rm_frd_frs1_frs2_frs3 "O\tr,3,4,5,6" +#define rv_fmt_frd_frs1_rm "O\t3,4,r" +#define rv_fmt_frd_rs1_rm "O\t3,1,r" +#define rv_fmt_rd_frs1_rm "O\t0,4,r" +#define rv_fmt_frd_frs1_frs2_rm "O\t3,4,5,r" +#define rv_fmt_frd_frs1_frs2_frs3_rm "O\t3,4,5,6,r" #define rv_fmt_rd_rs1_imm "O\t0,1,i" #define rv_fmt_rd_rs1_offset "O\t0,1,i" #define rv_fmt_rd_offset_rs1 "O\t0,i(1)" -- 2.25.1 --_000_LO4P265MB66669BD6FF7CAB642AE30316933E2LO4P265MB6666GBRP_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

* The immediate argument to lui/auipc should be an i= nteger in the interval

[0x0, 0xfffff]; e.g., 'auipc 0xfffff' and not 'auipc= -1'

* The floating-point rounding mode is the last opera= nd to the function,

  not the first; e.g., 'fcvt.w.s a0, fa0, rtz' = and not 'fcvt.w.s rtz,

a0, fa0'. Note that fcvt.d.w[u] and fcvt.w[u].d are = unaffected by the

rounding mode and hence it is omitted from their dis= assembly.

* When aq and rl are both present, they are not sepa= rated by a '.';

  e.g., 'lr.d.aqrl' and not 'lr.d.aq.rl'.<= /o:p>

 

Based on the following assembly reference:

https://github.com/riscv-non-isa/riscv-asm-manual/bl= ob/master/riscv-asm.md

 

Signed-off-by: Simeon Krastnikov <simeon.krastnik= ov@imgtec.com>

---

disas/riscv.c | 144 ++++++++++++++++++++++++++------= ------------------

disas/riscv.h |  10 ++--

2 files changed, 79 insertions(+), 75 deletions(-)

 

diff --git a/disas/riscv.c b/disas/riscv.c

index e236c8b5b7..71a3ab878f 100644

--- a/disas/riscv.c

+++ b/disas/riscv.c

@@ -1311,98 +1311,98 @@ const rv_opcode_data rvi_opc= ode_data[] =3D {

     { "csrrci", rv_co= dec_i_csr, rv_fmt_rd_csr_zimm, NULL, 0, 0, 0 },

     { "flw", rv_codec= _i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 },

     { "fsw", rv_codec= _s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 },

-    { "fmadd.s", rv_codec_= r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },

-    { "fmsub.s", rv_codec_= r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },

-    { "fnmsub.s", rv_codec= _r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },

-    { "fnmadd.s", rv_codec= _r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },

-    { "fadd.s", rv_codec_r= _m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },

-    { "fsub.s", rv_codec_r= _m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },

-    { "fmul.s", rv_codec_r= _m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },

-    { "fdiv.s", rv_codec_r= _m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },

+    { "fmadd.s", rv_codec_= r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0, 0 },

+    { "fmsub.s", rv_codec_= r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0, 0 },

+    { "fnmsub.s", rv_codec= _r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0, 0 },

+    { "fnmadd.s", rv_codec= _r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0, 0 },

+    { "fadd.s", rv_codec_r= _m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 },

+    { "fsub.s", rv_codec_r= _m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 },

+    { "fmul.s", rv_codec_r= _m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 },

+    { "fdiv.s", rv_codec_r= _m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 },

     { "fsgnj.s", rv_c= odec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_s, 0, 0, 0 },

     { "fsgnjn.s", rv_= codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_s, 0, 0, 0 },

     { "fsgnjx.s", rv_= codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_s, 0, 0, 0 },

     { "fmin.s", rv_co= dec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },

     { "fmax.s", rv_co= dec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },

-    { "fsqrt.s", rv_codec_= r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },

+    { "fsqrt.s", rv_codec_= r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 },

     { "fle.s", rv_cod= ec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },

     { "flt.s", rv_cod= ec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },

     { "feq.s", rv_cod= ec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },

-    { "fcvt.w.s", rv_codec= _r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },

-    { "fcvt.wu.s", rv_code= c_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },

-    { "fcvt.s.w", rv_codec= _r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },

-    { "fcvt.s.wu", rv_code= c_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },

+    { "fcvt.w.s", rv_codec= _r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 },

+    { "fcvt.wu.s", rv_code= c_r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 },

+    { "fcvt.s.w", rv_codec= _r_m, rv_fmt_frd_rs1_rm, NULL, 0, 0, 0 },

+    { "fcvt.s.wu", rv_code= c_r_m, rv_fmt_frd_rs1_rm, NULL, 0, 0, 0 },

     { "fmv.x.s", rv_c= odec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },

     { "fclass.s", rv_= codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },

     { "fmv.s.x", rv_c= odec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 },

-    { "fcvt.l.s", rv_codec= _r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },

-    { "fcvt.lu.s", rv_code= c_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },

-    { "fcvt.s.l", rv_codec= _r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },

-    { "fcvt.s.lu", rv_code= c_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },

+    { "fcvt.l.s", rv_codec= _r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 },

+    { "fcvt.lu.s", rv_code= c_r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 },

+    { "fcvt.s.l", rv_codec= _r_m, rv_fmt_frd_rs1_rm, NULL, 0, 0, 0 },

+    { "fcvt.s.lu", rv_code= c_r_m, rv_fmt_frd_rs1_rm, NULL, 0, 0, 0 },

     { "fld", rv_codec= _i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 },

     { "fsd", rv_codec= _s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 },

-    { "fmadd.d", rv_codec_= r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },

-    { "fmsub.d", rv_codec_= r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },

-    { "fnmsub.d", rv_codec= _r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },

-    { "fnmadd.d", rv_codec= _r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },

-    { "fadd.d", rv_codec_r= _m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },

-    { "fsub.d", rv_codec_r= _m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },

-    { "fmul.d", rv_codec_r= _m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },

-    { "fdiv.d", rv_codec_r= _m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },

+    { "fmadd.d", rv_codec_= r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0, 0 },

+    { "fmsub.d", rv_codec_= r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0, 0 },

+    { "fnmsub.d", rv_codec= _r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0, 0 },

+    { "fnmadd.d", rv_codec= _r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0, 0 },

+    { "fadd.d", rv_codec_r= _m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 },

+    { "fsub.d", rv_codec_r= _m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 },

+    { "fmul.d", rv_codec_r= _m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 },

+    { "fdiv.d", rv_codec_r= _m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 },

     { "fsgnj.d", rv_c= odec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_d, 0, 0, 0 },

     { "fsgnjn.d", rv_= codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_d, 0, 0, 0 },

     { "fsgnjx.d", rv_= codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_d, 0, 0, 0 },

     { "fmin.d", rv_co= dec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },

     { "fmax.d", rv_co= dec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },

-    { "fcvt.s.d", rv_codec= _r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },

-    { "fcvt.d.s", rv_codec= _r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },

-    { "fsqrt.d", rv_codec_= r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },

+    { "fcvt.s.d", rv_codec= _r_m, rv_fmt_frd_frs1, NULL, 0, 0, 0 },

+    { "fcvt.d.s", rv_codec= _r_m, rv_fmt_frd_frs1, NULL, 0, 0, 0 },

+    { "fsqrt.d", rv_codec_= r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 },

     { "fle.d", rv_cod= ec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },

     { "flt.d", rv_cod= ec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },

     { "feq.d", rv_cod= ec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },

-    { "fcvt.w.d", rv_codec= _r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },

-    { "fcvt.wu.d", rv_code= c_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },

-    { "fcvt.d.w", rv_codec= _r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },

-    { "fcvt.d.wu", rv_code= c_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },

+    { "fcvt.w.d", rv_codec= _r_m, rv_fmt_rd_frs1, NULL, 0, 0, 0 },

+    { "fcvt.wu.d", rv_code= c_r_m, rv_fmt_rd_frs1, NULL, 0, 0, 0 },

+    { "fcvt.d.w", rv_codec= _r_m, rv_fmt_frd_rs1, NULL, 0, 0, 0 },

+    { "fcvt.d.wu", rv_code= c_r_m, rv_fmt_frd_rs1, NULL, 0, 0, 0 },

     { "fclass.d", rv_= codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },

-    { "fcvt.l.d", rv_codec= _r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },

-    { "fcvt.lu.d", rv_code= c_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },

+    { "fcvt.l.d", rv_codec= _r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 },

+    { "fcvt.lu.d", rv_code= c_r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 },

     { "fmv.x.d", rv_c= odec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },

-    { "fcvt.d.l", rv_codec= _r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },

-    { "fcvt.d.lu", rv_code= c_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },

+    { "fcvt.d.l", rv_codec= _r_m, rv_fmt_frd_rs1_rm, NULL, 0, 0, 0 },

+    { "fcvt.d.lu", rv_code= c_r_m, rv_fmt_frd_rs1_rm, NULL, 0, 0, 0 },

     { "fmv.d.x", rv_c= odec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 },

     { "flq", rv_codec= _i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 },

     { "fsq", rv_codec= _s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 },

-    { "fmadd.q", rv_codec_= r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },

-    { "fmsub.q", rv_codec_= r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },

-    { "fnmsub.q", rv_codec= _r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },

-    { "fnmadd.q", rv_codec= _r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },

-    { "fadd.q", rv_codec_r= _m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },

-    { "fsub.q", rv_codec_r= _m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },

-    { "fmul.q", rv_codec_r= _m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },

-    { "fdiv.q", rv_codec_r= _m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },

+    { "fmadd.q", rv_codec_= r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0, 0 },

+    { "fmsub.q", rv_codec_= r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0, 0 },

+    { "fnmsub.q", rv_codec= _r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0, 0 },

+    { "fnmadd.q", rv_codec= _r4_m, rv_fmt_frd_frs1_frs2_frs3_rm, NULL, 0, 0, 0 },

+    { "fadd.q", rv_codec_r= _m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 },

+    { "fsub.q", rv_codec_r= _m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 },

+    { "fmul.q", rv_codec_r= _m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 },

+    { "fdiv.q", rv_codec_r= _m, rv_fmt_frd_frs1_frs2_rm, NULL, 0, 0, 0 },

     { "fsgnj.q", rv_c= odec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_q, 0, 0, 0 },

     { "fsgnjn.q", rv_= codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_q, 0, 0, 0 },

     { "fsgnjx.q", rv_= codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_q, 0, 0, 0 },

     { "fmin.q", rv_co= dec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },

     { "fmax.q", rv_co= dec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },

-    { "fcvt.s.q", rv_codec= _r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },

-    { "fcvt.q.s", rv_codec= _r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },

-    { "fcvt.d.q", rv_codec= _r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },

-    { "fcvt.q.d", rv_codec= _r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },

-    { "fsqrt.q", rv_codec_= r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },

+    { "fcvt.s.q", rv_codec= _r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 },

+    { "fcvt.q.s", rv_codec= _r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 },

+    { "fcvt.d.q", rv_codec= _r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 },

+    { "fcvt.q.d", rv_codec= _r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 },

+    { "fsqrt.q", rv_codec_= r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 },

     { "fle.q", rv_cod= ec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },

     { "flt.q", rv_cod= ec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },

     { "feq.q", rv_cod= ec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },

-    { "fcvt.w.q", rv_codec= _r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },

-    { "fcvt.wu.q", rv_code= c_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },

-    { "fcvt.q.w", rv_codec= _r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },

-    { "fcvt.q.wu", rv_code= c_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },

+    { "fcvt.w.q", rv_codec= _r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 },

+    { "fcvt.wu.q", rv_code= c_r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 },

+    { "fcvt.q.w", rv_codec= _r_m, rv_fmt_frd_rs1_rm, NULL, 0, 0, 0 },

+    { "fcvt.q.wu", rv_code= c_r_m, rv_fmt_frd_rs1_rm, NULL, 0, 0, 0 },

     { "fclass.q", rv_= codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },

-    { "fcvt.l.q", rv_codec= _r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },

-    { "fcvt.lu.q", rv_code= c_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },

-    { "fcvt.q.l", rv_codec= _r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },

-    { "fcvt.q.lu", rv_code= c_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },

+    { "fcvt.l.q", rv_codec= _r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 },

+    { "fcvt.lu.q", rv_code= c_r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 },

+    { "fcvt.q.l", rv_codec= _r_m, rv_fmt_frd_rs1_rm, NULL, 0, 0, 0 },

+    { "fcvt.q.lu", rv_code= c_r_m, rv_fmt_frd_rs1_rm, NULL, 0, 0, 0 },

     { "fmv.x.q", rv_c= odec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },

     { "fmv.q.x", rv_c= odec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 },

     { "c.addi4spn", r= v_codec_ciw_4spn, rv_fmt_rd_rs1_imm, NULL, rv_op_addi,

@@ -2009,8 +2009,8 @@ const rv_opcode_data rvi_opcod= e_data[] =3D {

     { "cm.jalt", rv_c= odec_zcmt_jt, rv_fmt_zcmt_index, NULL, 0 },

     { "czero.eqz", rv= _codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },

     { "czero.nez", rv= _codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },

-    { "fcvt.bf16.s", rv_co= dec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },

-    { "fcvt.s.bf16", rv_co= dec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },

+    { "fcvt.bf16.s", rv_co= dec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 },

+    { "fcvt.s.bf16", rv_co= dec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 },

     { "vfncvtbf16.f.f.w&qu= ot;, rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },

     { "vfwcvtbf16.f.f.v&qu= ot;, rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },

     { "vfwmaccbf16.vv"= ;, rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },

@@ -2031,15 +2031,15 @@ const rv_opcode_data rvi_opc= ode_data[] =3D {

     { "fmaxm.q", rv_c= odec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },

     { "fminm.h", rv_c= odec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },

     { "fmaxm.h", rv_c= odec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },

-    { "fround.s", rv_codec= _r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },

-    { "froundnx.s", rv_cod= ec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },

-    { "fround.d", rv_codec= _r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },

-    { "froundnx.d", rv_cod= ec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },

-    { "fround.q", rv_codec= _r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },

-    { "froundnx.q", rv_cod= ec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },

-    { "fround.h", rv_codec= _r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },

-    { "froundnx.h", rv_cod= ec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },

-    { "fcvtmod.w.d", rv_co= dec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },

+    { "fround.s", rv_codec= _r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 },

+    { "froundnx.s", rv_cod= ec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 },

+    { "fround.d", rv_codec= _r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 },

+    { "froundnx.d", rv_cod= ec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 },

+    { "fround.q", rv_codec= _r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 },

+    { "froundnx.q", rv_cod= ec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 },

+    { "fround.h", rv_codec= _r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 },

+    { "froundnx.h", rv_cod= ec_r_m, rv_fmt_frd_frs1_rm, NULL, 0, 0, 0 },

+    { "fcvtmod.w.d", rv_co= dec_r_m, rv_fmt_rd_frs1_rm, NULL, 0, 0, 0 },

     { "fmvh.x.d", rv_= codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },

     { "fmvp.d.x", rv_= codec_r, rv_fmt_frd_rs1_rs2, NULL, 0, 0, 0 },

     { "fmvh.x.q", rv_= codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },

@@ -4854,7 +4854,8 @@ static void format_inst(char *= buf, size_t buflen, size_t tab, rv_decode *dec)

        &nbs= p;    break;

         cas= e 'U':

        &nbs= p;    fmt++;

-        &nb= sp;   snprintf(tmp, sizeof(tmp), "%d", dec->imm >= > 12);

+        &nb= sp;   uint32_t uimm =3D dec->imm >=3D 0 ? dec->imm : ((1= << 20) + dec->imm);

+        &nb= sp;   snprintf(tmp, sizeof(tmp), "0x%" PRIx32, uimm >= ;> 12);

        &nbs= p;    append(buf, tmp, buflen);

        &nbs= p;    if (*fmt =3D=3D 'o') {

        &nbs= p;        while (strlen(buf) < tab * = 2) {

@@ -4939,7 +4940,10 @@ static void format_inst(char = *buf, size_t buflen, size_t tab, rv_decode *dec)

        &nbs= p;    }

        &nbs= p;    break;

         cas= e 'R':

-        &nb= sp;   if (dec->rl) {

+        &nb= sp;   if (dec->aq && dec->rl) {

+        &nb= sp;       append(buf, "rl", buflen)= ;

+        &nb= sp;   }

+        &nb= sp;   else if (dec->rl) {

        &nbs= p;        append(buf, ".rl", b= uflen);

        &nbs= p;    }

        &nbs= p;    break;

diff --git a/disas/riscv.h b/disas/riscv.h

index 16a08e4895..a7a2a49971 100644

--- a/disas/riscv.h

+++ b/disas/riscv.h

@@ -237,11 +237,11 @@ enum {

#define rv_fmt_rd_frs1     =            "O\t0,4&q= uot;

#define rv_fmt_rd_frs1_frs2    &= nbsp;      "O\t0,4,5"

#define rv_fmt_frd_frs1_frs2    =       "O\t3,4,5"

-#define rv_fmt_rm_frd_frs1    &= nbsp;       "O\tr,3,4"

-#define rv_fmt_rm_frd_rs1    &n= bsp;        "O\tr,3,1"

-#define rv_fmt_rm_rd_frs1    &n= bsp;        "O\tr,0,4"

-#define rv_fmt_rm_frd_frs1_frs2   &n= bsp;   "O\tr,3,4,5"

-#define rv_fmt_rm_frd_frs1_frs2_frs3  "O\= tr,3,4,5,6"

+#define rv_fmt_frd_frs1_rm    &= nbsp;       "O\t3,4,r"

+#define rv_fmt_frd_rs1_rm    &n= bsp;        "O\t3,1,r"

+#define rv_fmt_rd_frs1_rm    &n= bsp;        "O\t0,4,r"

+#define rv_fmt_frd_frs1_frs2_rm   &n= bsp;   "O\t3,4,5,r"

+#define rv_fmt_frd_frs1_frs2_frs3_rm  "O\= t3,4,5,6,r"

#define rv_fmt_rd_rs1_imm    &nb= sp;        "O\t0,1,i"

#define rv_fmt_rd_rs1_offset    =       "O\t0,1,i"

#define rv_fmt_rd_offset_rs1    =       "O\t0,i(1)"

--

2.25.1

--_000_LO4P265MB66669BD6FF7CAB642AE30316933E2LO4P265MB6666GBRP_--