From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550539; cv=none; d=zohomail.com; s=zohoarc; b=UvKeNcbYmjK+MPJbgeb5osPIYIvAd1vi490QXgJyLlMgmkTq4EdKv41l5onysoBMvgFbInPCD5TG2bSxyrqGNmEsNR3yXab926yC7zvBiE4IrpVvlZ03TojkvajjkXghuyFyOuwlWIrOUJfsUFlLIRGe5TCSGS4JXUfg14NI9Ao= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550539; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=HNNxXaJ+Or2i1Q1aGVJVXL9TXSX4iTkeTCQgBWZpiug=; b=Y4Cbs6A0rnNpD6ETjM1oJ0+uHhqseYc98mhbghGjaCN5g3L4AnNOGaA5PEWMjNk+7OdRMZjeFTqRmQUjiAv7P0HYJuWa6SK3Fb75y+doxA40K5m8afb8Ryd3+qJ8WOfNP+KSI8Hpr5HFS4h/RC+aWm3MVYwt3S931zNWqMft3bQ= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550539674691.2128334606509; Sun, 23 Aug 2026 22:48:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNY8-0001Ea-OR; Mon, 24 Aug 2026 01:48:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNXm-0001Bc-AV for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:28 -0400 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNXg-0001eI-R1 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:26 -0400 Received: by mail-pl1-x630.google.com with SMTP id d9443c01a7336-2cc61541f8cso42927395ad.0 for ; Sun, 23 Aug 2026 22:48:20 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.48.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:48:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550499; x=1788155299; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=HNNxXaJ+Or2i1Q1aGVJVXL9TXSX4iTkeTCQgBWZpiug=; b=OlimQ48hWXjuKRGYnnzUUOsEg4jm4zO0NTu7AzqQUAL91QesSJeOBpWFZSiuRya0yW ZbuqvWE2RLIv9/hHQH2UY1QYAFMhSIIuZj3wOsJcTqfzAxJzxCmgQpTe0zeBAFekDI3I 8D3Kh6zBp8H2XJU/G7U8HQdkiWvQe1BPUmdQxMIL2vbX4opCC7dBL/Gg1Tgi8zb0i/Z/ jAU0M7/bQqkZJ/+aJFsd772IUabda1qetS3chJdQmMlTBqxruRD3y08i3BEvFAs/9I9I o3r4R5pmYjpfh/cSPAtbCX6HY43TH8clPBaWoQga0RYW3ABiqHxLW/9L+hx/EEZBwLjL va3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550499; x=1788155299; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=HNNxXaJ+Or2i1Q1aGVJVXL9TXSX4iTkeTCQgBWZpiug=; b=Lj7vs7V2pZneRiToyb7/1mJXqSbf19PucCiD4KOqifDo6rg5MMpRAUihI1Mn8MEZZw QHElj/e0ooz8UZ9NIzZMhJWgI2qOhDxcxPAVPt0J6aHvtSsfNuqIYbylLQYCGmd2r/jM gByVFHRioPwqNN4AMmB3cMBUoEPmx1IEwKKkba9hqvRO/pRleALAZQh9LzksiWa2PaBF 5pFzIOGaJJEWWS1kY8a2ylfwJrw0BSvuqs/Uu8OfZzBZ/MPvdF07qmOO1XBzQZcAeLRh BMfRqEylAXfHTaHmlk7nUKhkCHMF8XRxGmVcF1GyHlvZD01yUaK+GMv82d769zfN6oms 7aig== X-Gm-Message-State: AFuF++ky5UISaWnHypqi94M1RkuGSyjQEKYLcBzy7vQO41zfZXTs5T6Y AaXn/FT768inSMS1LdU7wNi3JkPxkbaZbx+arOmvMWWnJXL3Nm7hggyXaICCfw== X-Gm-Gg: AR+sD12vh+osK0B9Nta44G8HIuPRI/DwvSApufzBzyezN+T26QeIYaE6ULt0Z8h81QZ AxBFZSurjT+MQDfR0Qox0tZiRMdEp8n8aDdi7Bpe9tpUkB/CJYCsIg/yftJiGbh8/gV5+1ICexa +rhHvDzIljm7YmzdfX4HAqw4LQopeslbsooLfaWAaKIjT4Zg5YcukMvZXHwVUmK8hNhWJZKXRMF ismW75dP1ztWKdv/XNHYYcgp1VUBabj1wQubXINGAsUVDXyk081yTmwLKGZVaZ3Ell4wLPyN5hL hclE7IrBwr0F7m0lhg/WSMKa/crf+FPTSlYEjwhDvx75PhcYjxhF8hIMdGoMk7T6xN7uaVsGg+c oDIZc1uT6ujc32Me3HI3jqPyZC7KRAo7zcTOi5YphrNZKgMvkGEQwYC7SahMXM0QiygFU3pSMHv 4Ab5yz7YzVqWG4vYx2Wabgbujj3bg3XcgKMcxcrPjfPllmzAfk3Iv7iELQyvnhWv8j9QGAtdKqO WpKEw== X-Received: by 2002:a17:90b:5823:b0:38e:c232:9d2c with SMTP id 98e67ed59e1d1-395c4bde19amr22145368a91.2.1787550498915; Sun, 23 Aug 2026 22:48:18 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Junze Cao , Chao Liu , Daniel Henrique Barboza , Alistair Francis Subject: [PULL v2 01/96] hw/misc: Add K230 DDR controller and PHY models Date: Mon, 24 Aug 2026 15:46:31 +1000 Message-ID: <20260824054806.2790041-2-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::630; envelope-from=alistair23@gmail.com; helo=mail-pl1-x630.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550541006158501 Content-Type: text/plain; charset="utf-8" From: Junze Cao The K230 SDK U-Boot SPL programs K230 DDRC CFG and K230 DDR PHY registers before DRAM can be used. Add separate SysBus devices for both register ranges. Model controller reset values, DFI and software-update handshakes. For the PHY, model register ownership, the training mailbox, and DFI completion. Include migration state for both devices. Signed-off-by: Junze Cao Suggested-by: Chao Liu Reviewed-by: Daniel Henrique Barboza Message-ID: <20260807-k230-ddr-v2-v2-1-c531308ae819@gmail.com> Signed-off-by: Alistair Francis --- MAINTAINERS | 2 + include/hw/misc/k230_ddr.h | 59 ++++ hw/misc/k230_ddr.c | 556 +++++++++++++++++++++++++++++++++++++ hw/misc/meson.build | 1 + 4 files changed, 618 insertions(+) create mode 100644 include/hw/misc/k230_ddr.h create mode 100644 hw/misc/k230_ddr.c diff --git a/MAINTAINERS b/MAINTAINERS index 08017f4786..cc0879c868 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1844,8 +1844,10 @@ M: Chao Liu L: qemu-riscv@nongnu.org S: Maintained F: docs/system/riscv/k230.rst +F: hw/misc/k230_ddr.c F: hw/riscv/k230.c F: hw/watchdog/k230_wdt.c +F: include/hw/misc/k230_ddr.h F: include/hw/riscv/k230.h F: include/hw/watchdog/k230_wdt.h F: tests/functional/riscv64/test_k230.py diff --git a/include/hw/misc/k230_ddr.h b/include/hw/misc/k230_ddr.h new file mode 100644 index 0000000000..d912e8e1b0 --- /dev/null +++ b/include/hw/misc/k230_ddr.h @@ -0,0 +1,59 @@ +/* + * Kendryte K230 DDR controller and PHY models + * + * Device state and type declarations for the K230 DDRC CFG and K230 DDR P= HY + * registers. + * + * Copyright (c) 2026 Junze Cao + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef HW_MISC_K230_DDR_H +#define HW_MISC_K230_DDR_H + +#include "hw/core/sysbus.h" + +#define K230_DDRC_MMIO_SIZE 0x02000000 +#define K230_DDR_PHY_MMIO_SIZE 0x00400000 + +#define K230_DDRC_REG_SIZE 0x328 +#define K230_DDRC_REG_COUNT (K230_DDRC_REG_SIZE / sizeof(uint32_t)) + +#define K230_DDR_PHY_ANIB_COUNT 10 +#define K230_DDR_PHY_DBYTE_COUNT 4 +#define K230_DDR_PHY_NIBBLES_PER_DBYTE 2 + +#define TYPE_K230_DDR_CFG "riscv.k230.ddr-cfg" +OBJECT_DECLARE_SIMPLE_TYPE(K230DDRCfgState, K230_DDR_CFG) + +#define TYPE_K230_DDR_PHY "riscv.k230.ddr-phy" +OBJECT_DECLARE_SIMPLE_TYPE(K230DDRPhyState, K230_DDR_PHY) + +struct K230DDRCfgState { + SysBusDevice parent_obj; + + MemoryRegion mmio; + K230DDRPhyState *phy; + uint32_t regs[K230_DDRC_REG_COUNT]; + bool initialized; +}; + +struct K230DDRPhyState { + SysBusDevice parent_obj; + + MemoryRegion mmio; + uint16_t atx_impedance[K230_DDR_PHY_ANIB_COUNT]; + uint16_t tx_impedance_ctrl1[K230_DDR_PHY_DBYTE_COUNT] + [K230_DDR_PHY_NIBBLES_PER_DBYTE]; + uint16_t tx_odt_drv_stren[K230_DDR_PHY_DBYTE_COUNT] + [K230_DDR_PHY_NIBBLES_PER_DBYTE]; + uint16_t dfi_init_complete; + uint16_t vref_in_global; + uint16_t micro_cont_mux_sel; + bool training_trigger_seen; + bool training_complete; + bool mailbox_message_pending; +}; + +#endif diff --git a/hw/misc/k230_ddr.c b/hw/misc/k230_ddr.c new file mode 100644 index 0000000000..dac700b201 --- /dev/null +++ b/hw/misc/k230_ddr.c @@ -0,0 +1,556 @@ +/* + * Kendryte K230 DDR controller and PHY models + * + * Models the K230 DDRC CFG registers and K230 DDR PHY registers exercised + * by the K230 SDK U-Boot SPL. + * + * Copyright (c) 2026 Junze Cao + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "qemu/log.h" +#include "qemu/module.h" +#include "migration/vmstate.h" +#include "hw/core/registerfields.h" +#include "hw/core/resettable.h" +#include "hw/misc/k230_ddr.h" + +/* DDRC CFG registers */ + +enum K230DDRCOperatingMode { + K230_DDRC_MODE_INIT =3D 0, + K230_DDRC_MODE_NORMAL =3D 1, +}; + +REG32(K230_DDRC_MSTR, 0x000) + +REG32(K230_DDRC_STAT, 0x004) + FIELD(K230_DDRC_STAT, OPERATING_MODE, 0, 3) + +REG32(K230_DDRC_PWRCTL, 0x030) + +REG32(K230_DDRC_RFSHCTL0, 0x050) + +REG32(K230_DDRC_RFSHTMG, 0x064) + +REG32(K230_DDRC_RFSHTMG1, 0x068) + +REG32(K230_DDRC_INIT0, 0x0d0) + +REG32(K230_DDRC_INIT2, 0x0d8) + +REG32(K230_DDRC_INIT3, 0x0dc) + +REG32(K230_DDRC_INIT5, 0x0e4) + +REG32(K230_DDRC_DRAMTMG0, 0x100) +#define R_K230_DDRC_DRAMTMG(index) \ + (R_K230_DDRC_DRAMTMG0 + (index)) + +REG32(K230_DDRC_ZQCTL0, 0x180) + +REG32(K230_DDRC_ZQCTL1, 0x184) + +REG32(K230_DDRC_ZQCTL2, 0x188) + +REG32(K230_DDRC_ZQSTAT, 0x18c) + +REG32(K230_DDRC_DFITMG0, 0x190) + +REG32(K230_DDRC_DFITMG1, 0x194) + +REG32(K230_DDRC_DFIUPD0, 0x1a0) + +REG32(K230_DDRC_DFIUPD1, 0x1a4) + +REG32(K230_DDRC_DFIUPD2, 0x1a8) + +REG32(K230_DDRC_DFIMISC, 0x1b0) + FIELD(K230_DDRC_DFIMISC, DFI_INIT_COMPLETE_EN, 0, 1) + FIELD(K230_DDRC_DFIMISC, DFI_INIT_START, 5, 1) + +REG32(K230_DDRC_DFITMG2, 0x1b4) + +REG32(K230_DDRC_DFISTAT, 0x1bc) + FIELD(K230_DDRC_DFISTAT, DFI_INIT_COMPLETE, 0, 1) + +REG32(K230_DDRC_ODTCFG, 0x240) + +REG32(K230_DDRC_SWCTL, 0x320) + FIELD(K230_DDRC_SWCTL, SW_DONE, 0, 1) + +REG32(K230_DDRC_SWSTAT, 0x324) + FIELD(K230_DDRC_SWSTAT, SW_DONE_ACK, 0, 1) + +static const uint32_t k230_ddrc_reset_values[K230_DDRC_REG_COUNT] =3D { + [R_K230_DDRC_MSTR] =3D 0x01040000, + [R_K230_DDRC_RFSHCTL0] =3D 0x00210000, + [R_K230_DDRC_RFSHTMG] =3D 0x0062008c, + [R_K230_DDRC_RFSHTMG1] =3D 0x0000008c, + [R_K230_DDRC_INIT0] =3D 0x0002004e, + [R_K230_DDRC_INIT3] =3D 0x00000510, + [R_K230_DDRC_INIT5] =3D 0x00100000, + [R_K230_DDRC_DRAMTMG(0)] =3D 0x0f101b0f, + [R_K230_DDRC_DRAMTMG(1)] =3D 0x00080414, + [R_K230_DDRC_DRAMTMG(2)] =3D 0x0305060d, + [R_K230_DDRC_DRAMTMG(3)] =3D 0x00004000, + [R_K230_DDRC_DRAMTMG(4)] =3D 0x05040405, + [R_K230_DDRC_DRAMTMG(5)] =3D 0x05050403, + [R_K230_DDRC_DRAMTMG(6)] =3D 0x02020005, + [R_K230_DDRC_DRAMTMG(7)] =3D 0x00000202, + [R_K230_DDRC_DRAMTMG(8)] =3D 0x03034405, + [R_K230_DDRC_DRAMTMG(9)] =3D 0x0004040d, + [R_K230_DDRC_DRAMTMG(10)] =3D 0x001c180a, + [R_K230_DDRC_DRAMTMG(11)] =3D 0x440c021c, + [R_K230_DDRC_DRAMTMG(12)] =3D 0x00020610, + [R_K230_DDRC_DRAMTMG(13)] =3D 0x1c200004, + [R_K230_DDRC_DRAMTMG(14)] =3D 0x000000a0, + [R_K230_DDRC_DRAMTMG(16)] =3D 0x05100404, + [R_K230_DDRC_ZQCTL0] =3D 0x02000040, + [R_K230_DDRC_ZQCTL1] =3D 0x02000100, + [R_K230_DDRC_DFITMG0] =3D 0x07020002, + [R_K230_DDRC_DFITMG1] =3D 0x00000404, + [R_K230_DDRC_DFIUPD0] =3D 0x00400003, + [R_K230_DDRC_DFIUPD1] =3D 0x00010001, + [R_K230_DDRC_DFIUPD2] =3D 0x80000000, + [R_K230_DDRC_DFIMISC] =3D 0x00000001, + [R_K230_DDRC_DFITMG2] =3D 0x00000202, + [R_K230_DDRC_ODTCFG] =3D 0x04000400, + [R_K230_DDRC_SWCTL] =3D 0x00000001, + [R_K230_DDRC_SWSTAT] =3D 0x00000001, +}; + +/* K230 DDR PHY CSRs use byte offset =3D CSR index * 4. */ +#define K230_DDR_PHY_CSR_OFFSET(index) ((index) * 4) +#define K230_DDR_PHY_MASTER_CSR(reg) \ + K230_DDR_PHY_CSR_OFFSET(0x20000 + (reg)) +#define K230_DDR_PHY_APBONLY_CSR(reg) \ + K230_DDR_PHY_CSR_OFFSET(0xd0000 + (reg)) + +#define K230_DDR_PHY_ATX_IMPEDANCE_RESET UINT32_C(0x03ff) + +REG32(K230_DDR_PHY_MICRO_CONT_MUX_SEL, + K230_DDR_PHY_APBONLY_CSR(0x000)) + FIELD(K230_DDR_PHY_MICRO_CONT_MUX_SEL, MICRO_CONT_MUX_SEL, 0, 1) + +REG32(K230_DDR_PHY_TRAINING_STATUS, + K230_DDR_PHY_APBONLY_CSR(0x004)) + FIELD(K230_DDR_PHY_TRAINING_STATUS, MAILBOX_EMPTY, 0, 1) + +REG32(K230_DDR_PHY_TRAINING_ACK, + K230_DDR_PHY_APBONLY_CSR(0x031)) + +REG32(K230_DDR_PHY_TRAINING_MESSAGE, + K230_DDR_PHY_APBONLY_CSR(0x032)) + +REG32(K230_DDR_PHY_TRAINING_TRIGGER, + K230_DDR_PHY_APBONLY_CSR(0x099)) + +#define K230_DDR_PHY_TX_IMPEDANCE_CTRL1_RESET UINT32_C(0x0fff) + +REG32(K230_DDR_PHY_DFI_INIT_COMPLETE, + K230_DDR_PHY_MASTER_CSR(0x0f9)) + FIELD(K230_DDR_PHY_DFI_INIT_COMPLETE, DFI_INIT_COMPLETE, 0, 1) + +REG32(K230_DDR_PHY_VREF_IN_GLOBAL, + K230_DDR_PHY_MASTER_CSR(0x0b2)) +#define K230_DDR_PHY_VREF_IN_GLOBAL_RESET UINT32_C(0x0200) + +static void k230_ddr_cfg_update_state(K230DDRCfgState *s) +{ + bool dfi_complete =3D false; + unsigned int operating_mode =3D K230_DDRC_MODE_INIT; + + if (s->phy) { + dfi_complete =3D FIELD_EX32(s->phy->dfi_init_complete, + K230_DDR_PHY_DFI_INIT_COMPLETE, + DFI_INIT_COMPLETE); + } + + ARRAY_FIELD_DP32(s->regs, K230_DDRC_DFISTAT, + DFI_INIT_COMPLETE, dfi_complete); + ARRAY_FIELD_DP32(s->regs, K230_DDRC_SWSTAT, SW_DONE_ACK, + ARRAY_FIELD_EX32(s->regs, K230_DDRC_SWCTL, SW_DONE)); + + if (dfi_complete && + ARRAY_FIELD_EX32(s->regs, K230_DDRC_DFIMISC, + DFI_INIT_COMPLETE_EN)) { + s->initialized =3D true; + } + + if (s->initialized) { + operating_mode =3D K230_DDRC_MODE_NORMAL; + } + + ARRAY_FIELD_DP32(s->regs, K230_DDRC_STAT, + OPERATING_MODE, operating_mode); +} + +static uint64_t k230_ddr_cfg_read(void *opaque, hwaddr addr, unsigned int = size) +{ + K230DDRCfgState *s =3D opaque; + uint64_t value =3D 0; + + if (addr < K230_DDRC_REG_SIZE) { + k230_ddr_cfg_update_state(s); + value =3D s->regs[addr / sizeof(uint32_t)]; + } + + return value; +} + +static void k230_ddr_cfg_write(void *opaque, hwaddr addr, uint64_t value, + unsigned int size) +{ + K230DDRCfgState *s =3D opaque; + uint32_t val =3D value; + + if (addr >=3D K230_DDRC_REG_SIZE) { + return; + } + + switch (addr) { + case A_K230_DDRC_STAT: + case A_K230_DDRC_DFISTAT: + case A_K230_DDRC_ZQSTAT: + case A_K230_DDRC_SWSTAT: + return; + case A_K230_DDRC_PWRCTL: + s->regs[R_K230_DDRC_PWRCTL] =3D val & MAKE_64BIT_MASK(0, 9); + break; + case A_K230_DDRC_ZQCTL2: + /* ZQ reset completes immediately and the W1S bit self-clears. */ + s->regs[R_K230_DDRC_ZQCTL2] =3D 0; + s->regs[R_K230_DDRC_ZQSTAT] =3D 0; + break; + case A_K230_DDRC_DFIMISC: + s->regs[R_K230_DDRC_DFIMISC] =3D + val & (MAKE_64BIT_MASK(0, 6) | MAKE_64BIT_MASK(8, 5)); + if (s->phy && s->phy->training_complete && + FIELD_EX32(val, K230_DDRC_DFIMISC, DFI_INIT_START)) { + s->phy->dfi_init_complete =3D FIELD_DP32( + s->phy->dfi_init_complete, + K230_DDR_PHY_DFI_INIT_COMPLETE, DFI_INIT_COMPLETE, 1); + } + break; + case A_K230_DDRC_SWCTL: + s->regs[R_K230_DDRC_SWCTL] =3D + val & R_K230_DDRC_SWCTL_SW_DONE_MASK; + break; + default: + s->regs[addr / sizeof(uint32_t)] =3D val; + break; + } + + k230_ddr_cfg_update_state(s); +} + +static bool k230_ddr_phy_decode_anib(hwaddr addr, unsigned int *anib) +{ + uint32_t csr =3D addr / sizeof(uint32_t); + + if ((csr & 0xfff) !=3D 0x043) { + return false; + } + + *anib =3D csr >> 12; + return *anib < K230_DDR_PHY_ANIB_COUNT; +} + +static bool k230_ddr_phy_decode_dbyte(hwaddr addr, uint32_t reg, + unsigned int *dbyte, + unsigned int *nibble) +{ + uint32_t csr =3D addr / sizeof(uint32_t); + uint32_t block_offset; + + if (csr < 0x10000) { + return false; + } + + csr -=3D 0x10000; + *dbyte =3D csr >> 12; + if (*dbyte >=3D K230_DDR_PHY_DBYTE_COUNT) { + return false; + } + + block_offset =3D csr & 0xfff; + *nibble =3D block_offset >> 8; + return *nibble < K230_DDR_PHY_NIBBLES_PER_DBYTE && + (block_offset & 0xff) =3D=3D reg; +} + +static uint64_t k230_ddr_phy_read(void *opaque, hwaddr addr, + unsigned int size) +{ + K230DDRPhyState *s =3D opaque; + unsigned int dbyte; + unsigned int nibble; + unsigned int anib; + uint64_t value =3D 0; + + switch (addr) { + case A_K230_DDR_PHY_MICRO_CONT_MUX_SEL: + value =3D s->micro_cont_mux_sel; + break; + case A_K230_DDR_PHY_TRAINING_STATUS: + value =3D s->mailbox_message_pending ? 0 : + R_K230_DDR_PHY_TRAINING_STATUS_MAILBOX_EMPTY_MASK; + break; + case A_K230_DDR_PHY_TRAINING_MESSAGE: + value =3D s->training_complete ? 0x07 : 0; + break; + case A_K230_DDR_PHY_TRAINING_ACK: + case A_K230_DDR_PHY_TRAINING_TRIGGER: + break; + case A_K230_DDR_PHY_DFI_INIT_COMPLETE: + value =3D s->dfi_init_complete; + break; + case A_K230_DDR_PHY_VREF_IN_GLOBAL: + value =3D s->vref_in_global; + break; + default: + if (k230_ddr_phy_decode_anib(addr, &anib)) { + value =3D s->atx_impedance[anib]; + } else if (k230_ddr_phy_decode_dbyte(addr, 0x049, + &dbyte, &nibble)) { + value =3D s->tx_impedance_ctrl1[dbyte][nibble]; + } else if (k230_ddr_phy_decode_dbyte(addr, 0x04d, + &dbyte, &nibble)) { + value =3D s->tx_odt_drv_stren[dbyte][nibble]; + } else { + qemu_log_mask(LOG_UNIMP, + "%s: unimplemented DDR PHY read at offset 0x%" + HWADDR_PRIx ", returning 0\n", + __func__, addr); + } + break; + } + + return value; +} + +static void k230_ddr_phy_write(void *opaque, hwaddr addr, uint64_t value, + unsigned int size) +{ + K230DDRPhyState *s =3D opaque; + uint16_t val =3D value; + unsigned int dbyte; + unsigned int nibble; + unsigned int anib; + + switch (addr) { + case A_K230_DDR_PHY_MICRO_CONT_MUX_SEL: + s->micro_cont_mux_sel =3D + val & R_K230_DDR_PHY_MICRO_CONT_MUX_SEL_MICRO_CONT_MUX_SEL_MAS= K; + return; + case A_K230_DDR_PHY_TRAINING_STATUS: + case A_K230_DDR_PHY_TRAINING_MESSAGE: + return; + case A_K230_DDR_PHY_TRAINING_ACK: + if (val =3D=3D 0) { + s->mailbox_message_pending =3D false; + } + return; + case A_K230_DDR_PHY_TRAINING_TRIGGER: + if (val !=3D 0) { + s->training_trigger_seen =3D true; + } else if (s->training_trigger_seen) { + /* Abstract the loaded firmware run to its final mailbox messa= ge. */ + s->training_trigger_seen =3D false; + s->training_complete =3D true; + s->mailbox_message_pending =3D true; + } + return; + default: + break; + } + + if (FIELD_EX32(s->micro_cont_mux_sel, + K230_DDR_PHY_MICRO_CONT_MUX_SEL, + MICRO_CONT_MUX_SEL)) { + return; + } + + switch (addr) { + case A_K230_DDR_PHY_DFI_INIT_COMPLETE: + s->dfi_init_complete =3D + val & R_K230_DDR_PHY_DFI_INIT_COMPLETE_DFI_INIT_COMPLETE_MASK; + return; + case A_K230_DDR_PHY_VREF_IN_GLOBAL: + s->vref_in_global =3D val & UINT16_C(0x7fff); + return; + default: + break; + } + + if (k230_ddr_phy_decode_anib(addr, &anib)) { + s->atx_impedance[anib] =3D val & UINT16_C(0x03ff); + return; + } + + if (k230_ddr_phy_decode_dbyte(addr, 0x049, &dbyte, &nibble)) { + s->tx_impedance_ctrl1[dbyte][nibble] =3D val & UINT16_C(0x0fff); + return; + } + + if (k230_ddr_phy_decode_dbyte(addr, 0x04d, &dbyte, &nibble)) { + s->tx_odt_drv_stren[dbyte][nibble] =3D val & UINT16_C(0x0fff); + return; + } + + qemu_log_mask(LOG_UNIMP, + "%s: unimplemented DDR PHY write at offset 0x%" + HWADDR_PRIx ", value 0x%" PRIx64 "\n", + __func__, addr, value); +} + +static const MemoryRegionOps k230_ddr_cfg_ops =3D { + .read =3D k230_ddr_cfg_read, + .write =3D k230_ddr_cfg_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid =3D { + .min_access_size =3D 4, + .max_access_size =3D 4, + .unaligned =3D false, + }, +}; + +static const MemoryRegionOps k230_ddr_phy_ops =3D { + .read =3D k230_ddr_phy_read, + .write =3D k230_ddr_phy_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid =3D { + .min_access_size =3D 4, + .max_access_size =3D 4, + .unaligned =3D false, + }, +}; + +static void k230_ddr_cfg_init(Object *obj) +{ + K230DDRCfgState *s =3D K230_DDR_CFG(obj); + + memory_region_init_io(&s->mmio, obj, &k230_ddr_cfg_ops, s, + "k230-ddr-cfg", K230_DDRC_MMIO_SIZE); + sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->mmio); +} + +static void k230_ddr_phy_init(Object *obj) +{ + K230DDRPhyState *s =3D K230_DDR_PHY(obj); + + memory_region_init_io(&s->mmio, obj, &k230_ddr_phy_ops, s, + "k230-ddr-phy", K230_DDR_PHY_MMIO_SIZE); + sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->mmio); +} + +static void k230_ddr_cfg_reset_enter(Object *obj, ResetType type) +{ + K230DDRCfgState *s =3D K230_DDR_CFG(obj); + + s->initialized =3D false; + memcpy(s->regs, k230_ddrc_reset_values, sizeof(s->regs)); +} + +static void k230_ddr_phy_reset_enter(Object *obj, ResetType type) +{ + K230DDRPhyState *s =3D K230_DDR_PHY(obj); + unsigned int dbyte; + unsigned int nibble; + unsigned int anib; + + memset(s->tx_odt_drv_stren, 0, sizeof(s->tx_odt_drv_stren)); + + for (anib =3D 0; anib < ARRAY_SIZE(s->atx_impedance); anib++) { + s->atx_impedance[anib] =3D K230_DDR_PHY_ATX_IMPEDANCE_RESET; + } + + for (dbyte =3D 0; dbyte < ARRAY_SIZE(s->tx_impedance_ctrl1); dbyte++) { + for (nibble =3D 0; + nibble < ARRAY_SIZE(s->tx_impedance_ctrl1[dbyte]); nibble++) { + s->tx_impedance_ctrl1[dbyte][nibble] =3D + K230_DDR_PHY_TX_IMPEDANCE_CTRL1_RESET; + } + } + + s->dfi_init_complete =3D 0; + s->vref_in_global =3D K230_DDR_PHY_VREF_IN_GLOBAL_RESET; + s->micro_cont_mux_sel =3D 0; + s->training_trigger_seen =3D false; + s->training_complete =3D false; + s->mailbox_message_pending =3D false; +} + +static const VMStateDescription vmstate_k230_ddr_cfg =3D { + .name =3D "k230-ddr-cfg", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32_ARRAY(regs, K230DDRCfgState, K230_DDRC_REG_COUNT), + VMSTATE_BOOL(initialized, K230DDRCfgState), + VMSTATE_END_OF_LIST() + }, +}; + +static const VMStateDescription vmstate_k230_ddr_phy =3D { + .name =3D "k230-ddr-phy", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT16_ARRAY(atx_impedance, K230DDRPhyState, + K230_DDR_PHY_ANIB_COUNT), + VMSTATE_UINT16_2DARRAY(tx_impedance_ctrl1, K230DDRPhyState, + K230_DDR_PHY_DBYTE_COUNT, + K230_DDR_PHY_NIBBLES_PER_DBYTE), + VMSTATE_UINT16_2DARRAY(tx_odt_drv_stren, K230DDRPhyState, + K230_DDR_PHY_DBYTE_COUNT, + K230_DDR_PHY_NIBBLES_PER_DBYTE), + VMSTATE_UINT16(dfi_init_complete, K230DDRPhyState), + VMSTATE_UINT16(vref_in_global, K230DDRPhyState), + VMSTATE_UINT16(micro_cont_mux_sel, K230DDRPhyState), + VMSTATE_BOOL(training_trigger_seen, K230DDRPhyState), + VMSTATE_BOOL(training_complete, K230DDRPhyState), + VMSTATE_BOOL(mailbox_message_pending, K230DDRPhyState), + VMSTATE_END_OF_LIST() + }, +}; + +static void k230_ddr_cfg_class_init(ObjectClass *klass, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + ResettableClass *rc =3D RESETTABLE_CLASS(klass); + + rc->phases.enter =3D k230_ddr_cfg_reset_enter; + dc->vmsd =3D &vmstate_k230_ddr_cfg; +} + +static void k230_ddr_phy_class_init(ObjectClass *klass, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + ResettableClass *rc =3D RESETTABLE_CLASS(klass); + + rc->phases.enter =3D k230_ddr_phy_reset_enter; + dc->vmsd =3D &vmstate_k230_ddr_phy; +} + +static const TypeInfo k230_ddr_types[] =3D { + { + .name =3D TYPE_K230_DDR_CFG, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(K230DDRCfgState), + .instance_init =3D k230_ddr_cfg_init, + .class_init =3D k230_ddr_cfg_class_init, + }, + { + .name =3D TYPE_K230_DDR_PHY, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(K230DDRPhyState), + .instance_init =3D k230_ddr_phy_init, + .class_init =3D k230_ddr_phy_class_init, + }, +}; + +DEFINE_TYPES(k230_ddr_types) diff --git a/hw/misc/meson.build b/hw/misc/meson.build index 858ca845a2..cbeecbf1e0 100644 --- a/hw/misc/meson.build +++ b/hw/misc/meson.build @@ -29,6 +29,7 @@ system_ss.add(when: 'CONFIG_IOSB', if_true: files('iosb.c= ')) system_ss.add(when: 'CONFIG_VIRT_CTRL', if_true: files('virt_ctrl.c')) =20 # RISC-V devices +system_ss.add(when: 'CONFIG_K230', if_true: files('k230_ddr.c')) system_ss.add(when: 'CONFIG_MCHP_PFSOC_DMC', if_true: files('mchp_pfsoc_dm= c.c')) system_ss.add(when: 'CONFIG_MCHP_PFSOC_IOSCB', if_true: files('mchp_pfsoc_= ioscb.c')) system_ss.add(when: 'CONFIG_MCHP_PFSOC_SYSREG', if_true: files('mchp_pfsoc= _sysreg.c')) --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550539; cv=none; d=zohomail.com; s=zohoarc; b=M3SiekQQeWflf0KFbb5zae83qR6XWOxtHOGl/svl9jrAJPTbpgLHUN6BmRae5msthf0clKMu/HKgqlcsACKU6FtaKJsVdKFs4ZLmLHevV0n2Vppgq0eGDZlrFOjCecMPPKwqTe321zakBb/6/vy+KmJloc8Lqeljoq8L88uEBGs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550539; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=v+sECY3ATOpspmun2v/pmM0HIUARTgenM86VzLHZI6Q=; b=di5/OPdrXuKQg4tl8noK1CGE+ej016EMTF8AFmM+LUSKAzFF84PvQ+14mUBI9p46PVJKuZIZ6h1T87IiQJqDAI/WIP90eyHsTm6MtDostWcKx4QtRtMADA7aXlRfiNGHN0hQTdq+EMvocm4GaENjAJuG3CgAvU8xKPlj0PauXBE= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550539683798.5505056854427; Sun, 23 Aug 2026 22:48:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNXx-0001Cw-Rz; Mon, 24 Aug 2026 01:48:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNXm-0001Bd-JD for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:28 -0400 Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNXj-0001fV-VN for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:26 -0400 Received: by mail-pg1-x52c.google.com with SMTP id 41be03b00d2f7-cc147d86bebso2501925a12.0 for ; Sun, 23 Aug 2026 22:48:23 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.48.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:48:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550502; x=1788155302; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=v+sECY3ATOpspmun2v/pmM0HIUARTgenM86VzLHZI6Q=; b=IEAjHmNqyqspMg0aca79wxTFivgmRSB8IoCNSv8byMMesgCzryVWYL2GURTr5D25kS 22hXyfsAbltv0qwlU9jauxKqy74uMfVEsUR+aRijnbJJ3LM8LrA1vC6e27kWSHmVKsCi NmsF+n3NAW34zTGX3klEnveo7Ij682lBX7C6NIScWQJR8qz0cxOaWyPDLYr26dMj9Lvw mRV3yphF+KBL/sMJf/iM51LnsAhaTpFY7EzTWR42Ssbm/YdR9KL3i35NX2AJriIgaRYm 28g+iM1nXI+W+VHiKlJHFkCIpuzUrZpj2CQGgxY6mCy04LDoSJTdvfeOLjUSnIvzG4Se MbaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550502; x=1788155302; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=v+sECY3ATOpspmun2v/pmM0HIUARTgenM86VzLHZI6Q=; b=TlzKWOHin8Jb9mnn2OluvuJ5zbOsX8iVBKMEfhHK4BVMZYKHq4I9mgHDzcHIbXH0s3 V790TpFYKyjLjkF0sTER9g/0koyzz2hvP17+db4ct+/lf7LXi0pxY2zqNhaaLKExPen6 dGXNdQfdDyGnMgnqdojyIQ6QAOvqkqHEo/RoAgs1QsQJWge+vTXwJrtHLxsc0+oANzFl eH6I/QzgBGa6/U5gIo/PQblP4D7lNLKlr8Hb37+1mZ2AdKGyQ8/VDbxSAGp4CqFtUyvj L25s9w1EUI4XdWvoUgmNHSl63uRYiommtukrP+ZpkNakilvBl9dCKf36QXTJjfxNQGmX g4lg== X-Gm-Message-State: AFuF++nREgFF0U5RnuEJb2JrFnPLj/+PAT+RHvnkQ4bDjQ3i8JHhsUzD ygLB1xRKMYKND7r17ZaGlR8Trn+5p7xCYKjjsDihObtMgyVyAxPYirgwiS4Tjg== X-Gm-Gg: AR+sD10Ps0W6VJ1V0j9l1201YbZ5+fE4aXqrQEq0zfrB4bc38R+IcU5N4pC2zZkmM9n x0YO6e/2aCRVUPMC1kG/axHIxJJ5HyCnDaFHnhWJKZVdQ5kvx16JdjFnpfpCmc6wPnUJSNOML6X mBdMXJOCmNqPpX4fdHH54MqLeDqZmDm0iyIGygYwyy79LhGSGAOPdc/nMuA6+c7yd7VbrLeEAhE o3xsbFSmrONMw+EqOon/wkDeqa18cl0HfaheCUI6cIMfKTd0YA5xbuCZpvE73ZHl6tC4Fwr7nsT eznHuWmxOb+eWVxflq7eemhI/GnepKo3Rk7bmOHBCbsvrjz+f1dashUqTghxBdVTa8SC/iFAnR0 wsq6huJGsPnVb66CIAphcTIv2JGdil3NndsUfASEPPNAtKM7vGDZIadLZsKs11Kbg1IGfugeujZ CF0owPrFnytqzEkQ59YXaBmFW8L4t3VDeHP9q61s+AAtDwt1ev4KwHIefQY9W+5+llG+25XTU6K EBHL7Q9ZuI= X-Received: by 2002:a17:90b:1d51:b0:38f:cfe2:fd3a with SMTP id 98e67ed59e1d1-395a06b9c5emr37608644a91.15.1787550502260; Sun, 23 Aug 2026 22:48:22 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Junze Cao , Chao Liu , Daniel Henrique Barboza , Alistair Francis Subject: [PULL v2 02/96] hw/riscv: Connect K230 DDR controller and PHY models Date: Mon, 24 Aug 2026 15:46:32 +1000 Message-ID: <20260824054806.2790041-3-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52c; envelope-from=alistair23@gmail.com; helo=mail-pg1-x52c.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550541054158500 Content-Type: text/plain; charset="utf-8" From: Junze Cao Replace the unimplemented K230 DDR configuration region with the DDRC model and map the PHY model at 0x9a000000. Connect the controller to the PHY so DFI status reflects PHY training and initialization state. Suggested-by: Chao Liu Reviewed-by: Daniel Henrique Barboza Signed-off-by: Junze Cao Message-ID: <20260807-k230-ddr-v2-v2-2-c531308ae819@gmail.com> Signed-off-by: Alistair Francis --- docs/system/riscv/k230.rst | 4 ++++ include/hw/riscv/k230.h | 4 ++++ hw/riscv/k230.c | 19 ++++++++++++++++--- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/docs/system/riscv/k230.rst b/docs/system/riscv/k230.rst index cea8202e55..06a819fbdb 100644 --- a/docs/system/riscv/k230.rst +++ b/docs/system/riscv/k230.rst @@ -20,12 +20,16 @@ The ``k230`` machine supports the following devices: * Platform-Level Interrupt Controller (PLIC) * 2 K230 Watchdog Timer * 5 UART +* K230 DDRC CFG and DDR PHY =20 Boot options ------------ The ``k230`` machine supports K230 SDK boot through M-mode U-Boot, which t= hen starts OpenSBI/Linux with ``bootm``. It also supports direct Linux boot. =20 +The DDRC CFG and DDR PHY models allow the K230 SDK U-Boot SPL to complete = DDR +initialization before loading the next boot stage. + K230 SDK Linux kernels use T-HEAD C9xx private MAEE page table attributes.= QEMU does not implement MAEE in the generic RISC-V MMU, so such kernels need to= be built with standard RISC-V PTE bits before they can boot under QEMU. diff --git a/include/hw/riscv/k230.h b/include/hw/riscv/k230.h index 592e1c26bf..80ca16338c 100644 --- a/include/hw/riscv/k230.h +++ b/include/hw/riscv/k230.h @@ -16,6 +16,7 @@ #define HW_K230_H =20 #include "hw/core/boards.h" +#include "hw/misc/k230_ddr.h" #include "hw/riscv/riscv_hart.h" #include "hw/watchdog/k230_wdt.h" =20 @@ -32,6 +33,8 @@ typedef struct K230SoCState { /*< public >*/ RISCVHartArrayState c908_cpu; /* Small core */ =20 + K230DDRCfgState ddr_cfg; + K230DDRPhyState ddr_phy; K230WdtState wdt[2]; MemoryRegion sram; MemoryRegion bootrom; @@ -112,6 +115,7 @@ enum { K230_DEV_SPI, K230_DEV_HI_SYS_CFG, K230_DEV_DDRC_CFG, + K230_DEV_DDR_PHY, K230_DEV_FLASH, K230_DEV_PLIC, K230_DEV_CLINT, diff --git a/hw/riscv/k230.c b/hw/riscv/k230.c index 656f28190c..627150b463 100644 --- a/hw/riscv/k230.c +++ b/hw/riscv/k230.c @@ -97,6 +97,7 @@ static const MemMapEntry memmap[] =3D { [K230_DEV_SPI] =3D { 0x91584000, 0x00001000 }, [K230_DEV_HI_SYS_CFG] =3D { 0x91585000, 0x00000400 }, [K230_DEV_DDRC_CFG] =3D { 0x98000000, 0x02000000 }, + [K230_DEV_DDR_PHY] =3D { 0x9A000000, 0x00400000 }, [K230_DEV_FLASH] =3D { 0xC0000000, 0x08000000 }, [K230_DEV_PLIC] =3D { 0xF00000000, 0x00400000 }, [K230_DEV_CLINT] =3D { 0xF04000000, 0x00400000 }, @@ -108,6 +109,11 @@ static void k230_soc_init(Object *obj) RISCVHartArrayState *cpu0 =3D &s->c908_cpu; =20 object_initialize_child(obj, "c908-cpu", cpu0, TYPE_RISCV_HART_ARRAY); + object_initialize_child(obj, "ddr-cfg", &s->ddr_cfg, + TYPE_K230_DDR_CFG); + object_initialize_child(obj, "ddr-phy", &s->ddr_phy, + TYPE_K230_DDR_PHY); + s->ddr_cfg.phy =3D &s->ddr_phy; object_initialize_child(obj, "k230-wdt0", &s->wdt[0], TYPE_K230_WDT); object_initialize_child(obj, "k230-wdt1", &s->wdt[1], TYPE_K230_WDT); =20 @@ -158,6 +164,16 @@ static void k230_soc_realize(DeviceState *dev, Error *= *errp) int c908_cpus; =20 sysbus_realize(SYS_BUS_DEVICE(&s->c908_cpu), &error_fatal); + if (!sysbus_realize(SYS_BUS_DEVICE(&s->ddr_cfg), errp)) { + return; + } + if (!sysbus_realize(SYS_BUS_DEVICE(&s->ddr_phy), errp)) { + return; + } + sysbus_mmio_map(SYS_BUS_DEVICE(&s->ddr_cfg), 0, + memmap[K230_DEV_DDRC_CFG].base); + sysbus_mmio_map(SYS_BUS_DEVICE(&s->ddr_phy), 0, + memmap[K230_DEV_DDR_PHY].base); =20 c908_cpus =3D s->c908_cpu.num_harts; =20 @@ -361,9 +377,6 @@ static void k230_soc_realize(DeviceState *dev, Error **= errp) create_unimplemented_device("hi_sys_cfg", memmap[K230_DEV_HI_SYS_CFG].= base, memmap[K230_DEV_HI_SYS_CFG].size); =20 - create_unimplemented_device("ddrc_cfg", memmap[K230_DEV_DDRC_CFG].base, - memmap[K230_DEV_DDRC_CFG].size); - create_unimplemented_device("flash", memmap[K230_DEV_FLASH].base, memmap[K230_DEV_FLASH].size); } --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550576; cv=none; d=zohomail.com; s=zohoarc; b=hL+JGqozbywVwOjw/1ZdUN6NineVK49pE0VH9aXIEjxJ/C9JS6/VXL3g1YdBlvtCHK9lhtKNqXccV76tdUQTTOcvm/X/Jk63G7/i65DD8/Ot1wF6gHqWJ/XiARYgg5uYSvUBlws1/BDDRu8JzXSp1VaOb2DduuxH+7Ns3n3nJvs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550576; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=xc57UZiR6CZv6MB1llTkA2mMlYutp4bmWHzJ3XCAcac=; b=RWcJyAfX75k/4l/NIRP7ElbvQLXLsyyeKeCx8doxpgOklXtjDm91kTcvaqLvbBmkXAvm1XEOxrMTKkAPLQncjqMLGra+yDsfTwKD2gOWYWi8KMcqPV6nI5hgzrKujp1uowZW63sul+zan97uwkCacmmoNVlYaGODbV4Ej/aB4d0= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550576866713.8825905576026; Sun, 23 Aug 2026 22:49:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNYT-0001LL-7J; Mon, 24 Aug 2026 01:49:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNXp-0001C1-Is for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:31 -0400 Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNXn-0001gj-7T for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:29 -0400 Received: by mail-pg1-x535.google.com with SMTP id 41be03b00d2f7-cc11a30a259so3128708a12.3 for ; Sun, 23 Aug 2026 22:48:26 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.48.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:48:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550506; x=1788155306; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=xc57UZiR6CZv6MB1llTkA2mMlYutp4bmWHzJ3XCAcac=; b=XQGj745ebiCgz3U8ddMm6VNWVJx0Ag38kIcPrKOL7r141P5dyRlD3kYUL6X9aWacQC Wen/96jDUFQLJDlBtogSGL3saoOREvUNgAUmyFDlpUNri8XBha3ebwJobzLC+V0cNL2j cKP9j1TxsYgwwtj098PvEbd5kc2MKiL8fDLlE4Vnax9vwz2y2V/ZeTTqduZFqmu87q+C 6UFZVHzasOcEN9h5aZK3MMVi66ABUkUNFbVcAaFs5W19BHBsmntD6DdwFdFmXyDTTa8E 1pCUNTcLP9Er7xAUoonp7lxqRp/SmCK98BkrqnRR5s/Ck8OdgIZ/dkbrcYIVJeNze/pN Fgyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550506; x=1788155306; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=xc57UZiR6CZv6MB1llTkA2mMlYutp4bmWHzJ3XCAcac=; b=bNQrA7exHj3VLwKOyzUu1p5VAZsu2r8yyuSEPSr4keZw5IH3R/Pd9j7Hl70BVlAWhU p8GcVxxvoulVrSqwohK2jqw5Ro0FAzJ/OyIKyECZzvuSNewqRFkutl5JL7JoJjwuFgLH XuqAeCqjj5dkmgRiyOKRk5NEil2ijZpBglUmc5QnmAT6TC0VygwSw+TDemwGQf6P8LJM CCiDobJEs3fRozq0vTGC+ONhrD3ko7/ybd43uvEu8XK79IWChks4LENuFwcsj4PZmGXi j5nvv3dSRlMtl482TxMrC2DwhsrNoMkL2WiIzvriN2BDWyxCDMbXOdp9LLnxPGlVcMp5 v3vg== X-Gm-Message-State: AFuF++m2v5+O9fTPS3MOOjKAt3+Br9Ff25+w44PlOj9NemPP2Q+2cVbo JyhqI+Ztx/uvzLcTCPcY72xx4T7/RvH9XXEUYDwK9b6IndE5rP8rkBFBfO8EKA== X-Gm-Gg: AR+sD11ZFQjVHxfVqZyU1fUZGVl1FYWULdh51d4RYgrCjHmL0fbb/P3jyBPOv4uCH3M bJz6oCgLpBXJoRmQNZGEnMW33yQ3uQPQSZb/9qa02Jca8is7yyc5uwyQZXvb0zpawOehTEYkfhv 18Fxs0HtBrUHO1QgvzUzCzbyW40EdGOhu4H3jWvoJtu2QEnbVD+gOMsixE5QqjYI6+xBLB7gE7O 7dRq9fvD5IAx/1BT0dG/SSPj18CfKBwElv5eD39ssyPI6bq6Fajo61JdWkccxAOpkOwx6DaOvuP D7ylHJg43OGdHrDALem7p9U1mvwhoq8A5zV9Ghqm5OQ7juEv/OUXHaeWijH96s6wbdQL8F6uC5k pRRifCnbOzNX3iuAOpmQOVc+NIeRzy+8YICc6Gt/2Oy6SHIj3XmMfbBHwCmd4mH67mYq3pf8kCQ deH7b1be/U1jCOxQXXQrNo5xAxwUrIZz8hFq9yN9xPH4Afe2d39dXzwSFDo5hgw/ztV/d7zHmIw gfdyw== X-Received: by 2002:a17:90b:560d:b0:38e:9045:bac0 with SMTP id 98e67ed59e1d1-395deea6acbmr31153692a91.5.1787550505671; Sun, 23 Aug 2026 22:48:25 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Junze Cao , Daniel Henrique Barboza , Chao Liu , Alistair Francis Subject: [PULL v2 03/96] tests/qtest: Add K230 DDR controller tests Date: Mon, 24 Aug 2026 15:46:33 +1000 Message-ID: <20260824054806.2790041-4-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::535; envelope-from=alistair23@gmail.com; helo=mail-pg1-x535.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550578577158500 Content-Type: text/plain; charset="utf-8" From: Junze Cao Add qtests for DDRC and PHY reset values, register access policy, the software-update handshake, and PHY register ownership. Exercise PHY training and mailbox acknowledgement through the DFI initialization sequence. Include negative coverage to ensure DFI cannot complete before PHY training or enter Normal mode before completion is enabled. Reviewed-by: Daniel Henrique Barboza Suggested-by: Chao Liu Signed-off-by: Junze Cao Message-ID: <20260807-k230-ddr-v2-v2-3-c531308ae819@gmail.com> Signed-off-by: Alistair Francis --- MAINTAINERS | 1 + tests/qtest/k230-ddr-test.c | 226 ++++++++++++++++++++++++++++++++++++ tests/qtest/meson.build | 3 +- 3 files changed, 229 insertions(+), 1 deletion(-) create mode 100644 tests/qtest/k230-ddr-test.c diff --git a/MAINTAINERS b/MAINTAINERS index cc0879c868..2190bc706b 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1851,6 +1851,7 @@ F: include/hw/misc/k230_ddr.h F: include/hw/riscv/k230.h F: include/hw/watchdog/k230_wdt.h F: tests/functional/riscv64/test_k230.py +F: tests/qtest/k230-ddr-test.c F: tests/qtest/k230-wdt-test.c =20 RX Machines diff --git a/tests/qtest/k230-ddr-test.c b/tests/qtest/k230-ddr-test.c new file mode 100644 index 0000000000..72362929bc --- /dev/null +++ b/tests/qtest/k230-ddr-test.c @@ -0,0 +1,226 @@ +/* + * QTest testcase for the K230 DDR controller and PHY + * + * Exercises register access, reset, PHY ownership, training mailbox, and = DFI + * initialization. + * + * Copyright (c) 2026 Junze Cao + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "libqtest.h" + +#define K230_DDRC_BASE UINT64_C(0x98000000) +#define K230_DDR_PHY_BASE UINT64_C(0x9a000000) + +#define K230_DDRC_MSTR 0x000 +#define K230_DDRC_STAT 0x004 +#define K230_DDRC_DRAMTMG4 0x110 +#define K230_DDRC_DFIMISC 0x1b0 +#define K230_DDRC_DFISTAT 0x1bc +#define K230_DDRC_SWCTL 0x320 +#define K230_DDRC_SWSTAT 0x324 + +#define K230_DDRC_STAT_OPERATING_MODE_MASK 0x7 +#define K230_DDRC_DFISTAT_DFI_INIT_COMPLETE_MASK 0x1 + +#define K230_DDR_PHY_CSR(index) \ + (K230_DDR_PHY_BASE + (uint64_t)(index) * sizeof(uint32_t)) + +#define K230_DDR_PHY_ATX_IMPEDANCE 0x00043 +#define K230_DDR_PHY_TX_IMPEDANCE_CTRL1 0x10049 +#define K230_DDR_PHY_VREF_IN_GLOBAL 0x200b2 +#define K230_DDR_PHY_MICRO_CONT_MUX_SEL 0xd0000 +#define K230_DDR_PHY_TRAINING_STATUS 0xd0004 +#define K230_DDR_PHY_TRAINING_ACK 0xd0031 +#define K230_DDR_PHY_TRAINING_MESSAGE 0xd0032 +#define K230_DDR_PHY_TRAINING_TRIGGER 0xd0099 + +static void complete_phy_training(QTestState *qts) +{ + qtest_writel(qts, + K230_DDR_PHY_CSR(K230_DDR_PHY_MICRO_CONT_MUX_SEL), 1); + qtest_writel(qts, K230_DDR_PHY_CSR(K230_DDR_PHY_TRAINING_TRIGGER), 9); + qtest_writel(qts, K230_DDR_PHY_CSR(K230_DDR_PHY_TRAINING_TRIGGER), 1); + qtest_writel(qts, K230_DDR_PHY_CSR(K230_DDR_PHY_TRAINING_TRIGGER), 0); +} + +static void test_reset_and_register_access(void) +{ + QTestState *qts =3D qtest_init("-machine k230"); + + g_assert_cmphex(qtest_readl(qts, K230_DDRC_BASE + K230_DDRC_MSTR), + =3D=3D, 0x01040000); + g_assert_cmphex(qtest_readl(qts, K230_DDRC_BASE + K230_DDRC_STAT), + =3D=3D, 0x00000000); + g_assert_cmphex(qtest_readl(qts, K230_DDRC_BASE + K230_DDRC_DRAMTMG4), + =3D=3D, 0x05040405); + g_assert_cmphex(qtest_readl(qts, K230_DDRC_BASE + K230_DDRC_DFIMISC), + =3D=3D, 0x00000001); + g_assert_cmphex(qtest_readl(qts, K230_DDRC_BASE + K230_DDRC_SWCTL), + =3D=3D, 0x00000001); + g_assert_cmphex(qtest_readl(qts, K230_DDRC_BASE + K230_DDRC_SWSTAT), + =3D=3D, 0x00000001); + + g_assert_cmphex(qtest_readl(qts, + K230_DDR_PHY_CSR(K230_DDR_PHY_ATX_IMPEDANCE)), + =3D=3D, 0x03ff); + g_assert_cmphex(qtest_readl(qts, + K230_DDR_PHY_CSR(K230_DDR_PHY_TX_IMPEDANCE_CTRL1)), + =3D=3D, 0x0fff); + g_assert_cmphex(qtest_readl(qts, + K230_DDR_PHY_CSR(K230_DDR_PHY_VREF_IN_GLOBAL)), + =3D=3D, 0x0200); + + qtest_writel(qts, K230_DDRC_BASE + K230_DDRC_MSTR, 0x01040008); + g_assert_cmphex(qtest_readl(qts, K230_DDRC_BASE + K230_DDRC_MSTR), + =3D=3D, 0x01040008); + + qtest_writel(qts, K230_DDRC_BASE + K230_DDRC_STAT, 0xffffffff); + g_assert_cmphex(qtest_readl(qts, K230_DDRC_BASE + K230_DDRC_STAT), + =3D=3D, 0x00000000); + + qtest_writel(qts, K230_DDR_PHY_CSR(K230_DDR_PHY_VREF_IN_GLOBAL), + 0xffffffff); + g_assert_cmphex(qtest_readl(qts, + K230_DDR_PHY_CSR(K230_DDR_PHY_VREF_IN_GLOBAL)), + =3D=3D, 0x7fff); + + qtest_writel(qts, K230_DDRC_BASE + K230_DDRC_DRAMTMG4, 0); + + qtest_system_reset(qts); + g_assert_cmphex(qtest_readl(qts, K230_DDRC_BASE + K230_DDRC_MSTR), + =3D=3D, 0x01040000); + g_assert_cmphex(qtest_readl(qts, K230_DDRC_BASE + K230_DDRC_DRAMTMG4), + =3D=3D, 0x05040405); + g_assert_cmphex(qtest_readl(qts, + K230_DDR_PHY_CSR(K230_DDR_PHY_VREF_IN_GLOBAL)), + =3D=3D, 0x0200); + + qtest_quit(qts); +} + +static void test_software_update_handshake(void) +{ + QTestState *qts =3D qtest_init("-machine k230"); + + qtest_writel(qts, K230_DDRC_BASE + K230_DDRC_SWCTL, 0); + g_assert_cmphex(qtest_readl(qts, K230_DDRC_BASE + K230_DDRC_SWSTAT), + =3D=3D, 0); + + qtest_writel(qts, K230_DDRC_BASE + K230_DDRC_SWCTL, 1); + g_assert_cmphex(qtest_readl(qts, K230_DDRC_BASE + K230_DDRC_SWSTAT), + =3D=3D, 1); + + qtest_writel(qts, K230_DDRC_BASE + K230_DDRC_SWSTAT, 0); + g_assert_cmphex(qtest_readl(qts, K230_DDRC_BASE + K230_DDRC_SWSTAT), + =3D=3D, 1); + + qtest_quit(qts); +} + +static void test_phy_ownership(void) +{ + QTestState *qts =3D qtest_init("-machine k230"); + uint64_t atx =3D K230_DDR_PHY_CSR(K230_DDR_PHY_ATX_IMPEDANCE); + uint64_t mux =3D K230_DDR_PHY_CSR(K230_DDR_PHY_MICRO_CONT_MUX_SEL); + + qtest_writel(qts, atx, 0x155); + g_assert_cmphex(qtest_readl(qts, atx), =3D=3D, 0x155); + + qtest_writel(qts, mux, 1); + qtest_writel(qts, atx, 0x2aa); + g_assert_cmphex(qtest_readl(qts, atx), =3D=3D, 0x155); + + qtest_writel(qts, mux, 0); + qtest_writel(qts, atx, 0x2aa); + g_assert_cmphex(qtest_readl(qts, atx), =3D=3D, 0x2aa); + + qtest_quit(qts); +} + +static void test_dfi_prerequisites(void) +{ + QTestState *qts =3D qtest_init("-machine k230"); + + qtest_writel(qts, K230_DDRC_BASE + K230_DDRC_DFIMISC, 0x20); + + g_assert_cmphex(qtest_readl(qts, + K230_DDRC_BASE + K230_DDRC_DFISTAT) & + K230_DDRC_DFISTAT_DFI_INIT_COMPLETE_MASK, + =3D=3D, 0); + g_assert_cmphex(qtest_readl(qts, K230_DDRC_BASE + K230_DDRC_STAT) & + K230_DDRC_STAT_OPERATING_MODE_MASK, + =3D=3D, 0); + + qtest_quit(qts); +} + +static void test_dfi_complete_enable(void) +{ + QTestState *qts =3D qtest_init("-machine k230"); + + complete_phy_training(qts); + qtest_writel(qts, K230_DDRC_BASE + K230_DDRC_DFIMISC, 0x20); + + g_assert_cmphex(qtest_readl(qts, + K230_DDRC_BASE + K230_DDRC_DFISTAT) & + K230_DDRC_DFISTAT_DFI_INIT_COMPLETE_MASK, + =3D=3D, 1); + g_assert_cmphex(qtest_readl(qts, K230_DDRC_BASE + K230_DDRC_STAT) & + K230_DDRC_STAT_OPERATING_MODE_MASK, + =3D=3D, 0); + + qtest_quit(qts); +} + +static void test_training_and_dfi_handshake(void) +{ + QTestState *qts =3D qtest_init("-machine k230"); + + complete_phy_training(qts); + + g_assert_cmphex(qtest_readl(qts, + K230_DDR_PHY_CSR(K230_DDR_PHY_TRAINING_STATUS)), + =3D=3D, 0); + g_assert_cmphex(qtest_readl(qts, + K230_DDR_PHY_CSR(K230_DDR_PHY_TRAINING_MESSAGE)), + =3D=3D, 0x07); + + qtest_writel(qts, K230_DDR_PHY_CSR(K230_DDR_PHY_TRAINING_ACK), 0); + g_assert_cmphex(qtest_readl(qts, + K230_DDR_PHY_CSR(K230_DDR_PHY_TRAINING_STATUS)), + =3D=3D, 1); + qtest_writel(qts, K230_DDR_PHY_CSR(K230_DDR_PHY_TRAINING_ACK), 1); + + qtest_writel(qts, K230_DDRC_BASE + K230_DDRC_DFIMISC, 0x20); + g_assert_cmphex(qtest_readl(qts, K230_DDRC_BASE + K230_DDRC_DFISTAT), + =3D=3D, 1); + + qtest_writel(qts, K230_DDRC_BASE + K230_DDRC_DFIMISC, 0); + qtest_writel(qts, K230_DDRC_BASE + K230_DDRC_DFIMISC, 1); + g_assert_cmphex(qtest_readl(qts, K230_DDRC_BASE + K230_DDRC_STAT) & 0x= 7, + =3D=3D, 1); + + qtest_quit(qts); +} + +int main(int argc, char **argv) +{ + g_test_init(&argc, &argv, NULL); + + qtest_add_func("/k230-ddr/reset-and-register-access", + test_reset_and_register_access); + qtest_add_func("/k230-ddr/software-update-handshake", + test_software_update_handshake); + qtest_add_func("/k230-ddr/phy-ownership", test_phy_ownership); + qtest_add_func("/k230-ddr/dfi-prerequisites", test_dfi_prerequisites); + qtest_add_func("/k230-ddr/dfi-complete-enable", + test_dfi_complete_enable); + qtest_add_func("/k230-ddr/training-and-dfi-handshake", + test_training_and_dfi_handshake); + + return g_test_run(); +} diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build index 12ed368997..663a66bded 100644 --- a/tests/qtest/meson.build +++ b/tests/qtest/meson.build @@ -299,7 +299,8 @@ qtests_riscv64 =3D ['riscv-csr-test'] + \ (config_all_devices.has_key('CONFIG_IOMMU_TESTDEV') and config_all_devices.has_key('CONFIG_RISCV_IOMMU') ? ['iommu-riscv-test'] : []) + \ - (config_all_devices.has_key('CONFIG_K230') ? ['k230-wdt-test'] : []) + (config_all_devices.has_key('CONFIG_K230') ? + ['k230-ddr-test', 'k230-wdt-test'] : []) =20 qtests_hexagon =3D ['boot-serial-test', 'l2vic-test', 'qct-qtimer-test'] =20 --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550750; cv=none; d=zohomail.com; s=zohoarc; b=A8YUiCBwO2mqMjpg9f0oj9TYE4Qinm8hYGagn5A9e7R2SV0frMMkpyaUSQLoOfYMgdtZ+cuuQF2ttEOetoLxlFwK0FgRYpe0M9somNWPf7VFox4WtFHhu65QpPaVhEezhmpyZNm+fdO33Ei+MT2LzY9d2tLdI/97+s8F+00ky+0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550750; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=KUPc+7xlIMFvbQpIIY3o0TpfZjkwNXRng4YhTZLGtEc=; b=BABjq+OckxLdhzre4d6KeDpmRIQhiDvQ6JPZ7QH4LT65jJQjLC/bqG/hQ2C84A/02TI6jhb7iKrhmSvv0eAOqH8dNkNgJmVV+24T5JEOvwMXK2y/qgrp+e6ctqReRy7+MWkoAyInwOWzXiF2RmZKmKlK4g9Alv20owLQjnATeVQ= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550750565417.43953152505594; Sun, 23 Aug 2026 22:52:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNYM-0001Fg-Br; Mon, 24 Aug 2026 01:49:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNXs-0001CI-6b for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:35 -0400 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNXq-0001hb-4x for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:31 -0400 Received: by mail-pj1-x1029.google.com with SMTP id 98e67ed59e1d1-38ec1402b05so2251694a91.2 for ; Sun, 23 Aug 2026 22:48:29 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.48.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:48:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550509; x=1788155309; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=KUPc+7xlIMFvbQpIIY3o0TpfZjkwNXRng4YhTZLGtEc=; b=NTUr8fY5U74k/0FKTxxokKWwow5ohraVZiuvTtogCNBMs5eCFDbhabp9JWIFGXDQCk n5aAleNbhOwNN/JJanZXcM4TXoegldgnGj9PzmmuU4okvoqgjyA/p1KjFrTlFUQOPOGa MdPMmUmw3788Pyv0ipDXDblNSEUcMxpRPgchpKfGG/bsmR9rqOaoRgf6k+L77lE8vSDi Lq0etfqt4GisLfNpfEiX5U42tJZeCRzLFLYl7S/HbwTuuXSNZaFbwKek+/2Yb9EDNZ+W 6vCSPMxI1cnmr6M9o98NUSIVtZR1jFv3BPUq/YQlpZZsE8JWio+gmgJsmLlRmYmmeaY4 9jHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550509; x=1788155309; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=KUPc+7xlIMFvbQpIIY3o0TpfZjkwNXRng4YhTZLGtEc=; b=fJqC7vHeZkzry/WhYcGC2EO3g8dIcBoijJ/bJg2cXglJeM5lsfm4hdmBiSSWG/LPQl 8DMWeHCRUhQJuw7yyFb2Ey3ZPxov1Mt3/xT1jMwiKIZnWIFTClZ26mheCEEr9iuubcuJ 1MwdhYxGWduDshSXZdMkFr3ZwxA90PwEWxqQq4m0Grx/G7C22DAZGVZhtwkGnPCFBXK/ f6a4c77hHj8ZpxSy9iKiebGK5NA47xN7aaCe8iEUXDI0O9e4Lsy0FaTl95qvnMh0EcFg ufpjhPZaosnxxmoueQ+mQ5nm4x5CoI/55MPe0SDKHEu3YuxZesQAHeYk1O8v/VsmhjYG Kn1A== X-Gm-Message-State: AFuF++ko7TBe0V5mHYW/7muUR/aCL7hvb82PIBZAakTbd6LH+HyKjI3P J+ASkS6mg0Ba8KWIEsxNSn1QstpvzOdw2EaDllo0UPYJ+5K0mdKW+FwyzYLwdg== X-Gm-Gg: AR+sD11vSV2Ra0HenbrOMv6Cpjv5p789bQd2CJDBg7meAjpYzGFELOqDVmInMBiZnoP d1FeZ+0zeZEOnoPjzlMAyHhmLckRgR/1q9XSI63Gk8MEvGos/BT658b6TKEYLZ/qpq+CbsBJVU6 QIXS7a17Trd6iaIZor2qGhO9IKpY4wCeQxbp33fWbqXW8XY/Xuadm7nF0dnkZud5FxL/rQCqm4Y MDulX1NOXWnvlWkmC/oystNbz37v4RcY4khTiNtR0+88C03vq2j3/gRoIacTpXjCyHM0JDHJaZf SsfoKc4xUq2ZRc/yTbdTlnkHnqTybC8+LzYktMts+fVlEVOXU/GDiPu6oqvLGGzrbDujn+uTQ+L 07T8l2xG+LiXdGmIosOlqLCNtVv86fbSboCIl0wf/y/jpfg/M6wVpdYRSKJkkK9TH4NA0ZLjvk6 pOwMfcu+6GvR2emhT8SNuZySkLimzHxA0eUHXwAp1491HGJ0KvoZLWz68f3EE1QwZ6mcnpxN2Dy jYoqQ== X-Received: by 2002:a17:90b:2c87:b0:392:7f74:58c9 with SMTP id 98e67ed59e1d1-395c3a43766mr48543544a91.15.1787550508771; Sun, 23 Aug 2026 22:48:28 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Yanfeng Liu , Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL v2 04/96] riscv/virt: Add optional UART1 Date: Mon, 24 Aug 2026 15:46:34 +1000 Message-ID: <20260824054806.2790041-5-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1029; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1029.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550751279158500 From: Yanfeng Liu This adds optional UART1 to RiscV virt board if required at runtime to simplify multicore development. Note that UART0 remains default serial_hd(0) and it is: - the lowest address UART - first serial in DTB - behind /aliases/serial0 in DTB - the /chosen/stdout-path in DTB Note that UART1 is placed at different page from UART0 to support page level isolation. Signed-off-by: Yanfeng Liu Reviewed-by: Alistair Francis Reviewed-by: Philippe Mathieu-Daud=C3=A9 Message-ID: Signed-off-by: Alistair Francis --- docs/system/riscv/virt.rst | 5 ++++- include/hw/riscv/virt.h | 3 +++ hw/riscv/virt-acpi-build.c | 12 ++++++++---- hw/riscv/virt.c | 40 ++++++++++++++++++++++++++++---------- 4 files changed, 45 insertions(+), 15 deletions(-) diff --git a/docs/system/riscv/virt.rst b/docs/system/riscv/virt.rst index 60850970ce..3c87246891 100644 --- a/docs/system/riscv/virt.rst +++ b/docs/system/riscv/virt.rst @@ -16,7 +16,7 @@ The ``virt`` machine supports the following devices: * Core Local Interruptor (CLINT) * Platform-Level Interrupt Controller (PLIC) * CFI parallel NOR flash memory -* 1 NS16550 compatible UART +* Either 1 or 2 NS16550 compatible UARTs * 1 Google Goldfish RTC * 1 SiFive Test device * 8 virtio-mmio transport devices @@ -27,6 +27,9 @@ The hypervisor extension has been enabled for the default= CPU, so virtual machines with hypervisor extension can simply be used without explicitly declaring. =20 +The second UART only exists if a backend is configured explicitly (e.g. +with a second ``-serial`` command line option). + Hardware configuration information ---------------------------------- =20 diff --git a/include/hw/riscv/virt.h b/include/hw/riscv/virt.h index 36a2def410..7c862b0da2 100644 --- a/include/hw/riscv/virt.h +++ b/include/hw/riscv/virt.h @@ -59,6 +59,7 @@ struct RISCVVirtState { int aia_guests; char *oem_id; char *oem_table_id; + bool uart1_present; OnOffAuto acpi; const MemMapEntry *memmap; struct GPEXHost *gpex_host; @@ -79,6 +80,7 @@ enum { VIRT_APLIC_S, VIRT_UART0, VIRT_VIRTIO, + VIRT_UART1, VIRT_FW_CFG, VIRT_IMSIC_M, VIRT_IMSIC_S, @@ -94,6 +96,7 @@ enum { enum { UART0_IRQ =3D 10, RTC_IRQ =3D 11, + UART1_IRQ =3D 12, VIRTIO_IRQ =3D 1, /* 1 to 8 */ VIRTIO_COUNT =3D 8, PCIE_IRQ =3D 0x20, /* 32 to 35 */ diff --git a/hw/riscv/virt-acpi-build.c b/hw/riscv/virt-acpi-build.c index 59c454f4f9..8e516ec114 100644 --- a/hw/riscv/virt-acpi-build.c +++ b/hw/riscv/virt-acpi-build.c @@ -177,11 +177,11 @@ static void acpi_dsdt_add_plic_aplic(Aml *scope, uint= 8_t socket_count, =20 static void acpi_dsdt_add_uart(Aml *scope, const MemMapEntry *uart_memmap, - uint32_t uart_irq) + uint32_t uart_irq, int uartidx) { - Aml *dev =3D aml_device("COM0"); + Aml *dev =3D aml_device("COM%d", uartidx); aml_append(dev, aml_name_decl("_HID", aml_string("RSCV0003"))); - aml_append(dev, aml_name_decl("_UID", aml_int(0))); + aml_append(dev, aml_name_decl("_UID", aml_int(uartidx))); =20 Aml *crs =3D aml_resource_template(); aml_append(crs, aml_memory32_fixed(uart_memmap->base, @@ -490,7 +490,11 @@ static void build_dsdt(GArray *table_data, memmap[VIRT_APLIC_S].size, "RSCV0002"); } =20 - acpi_dsdt_add_uart(scope, &memmap[VIRT_UART0], UART0_IRQ); + acpi_dsdt_add_uart(scope, &memmap[VIRT_UART0], UART0_IRQ, 0); + if (s->uart1_present) { + acpi_dsdt_add_uart(scope, &memmap[VIRT_UART1], UART1_IRQ, 1); + } + if (virt_is_iommu_sys_enabled(s)) { acpi_dsdt_add_iommu_sys(scope, &memmap[VIRT_IOMMU_SYS], IOMMU_SYS_= IRQ); } diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 51bac47a91..d58656f70d 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -97,6 +97,8 @@ static const MemMapEntry virt_memmap[] =3D { [VIRT_APLIC_S] =3D { 0xd000000, APLIC_SIZE(VIRT_CPUS_MAX) }, [VIRT_UART0] =3D { 0x10000000, 0x100 }, [VIRT_VIRTIO] =3D { 0x10001000, 0x1000 }, + /* UART1 supports page isolation from UART0 */ + [VIRT_UART1] =3D { 0x1000a000, 0x100 }, [VIRT_FW_CFG] =3D { 0x10100000, 0x18 }, [VIRT_FLASH] =3D { 0x20000000, 0x4000000 }, [VIRT_IMSIC_M] =3D { 0x24000000, VIRT_IMSIC_MAX_SIZE }, @@ -187,7 +189,8 @@ static void create_pcie_irq_map(RISCVVirtState *s, void= *fdt, char *nodename, FDT_MAX_INT_MAP_WIDTH] =3D {}; uint32_t *irq_map =3D full_irq_map; =20 - /* This code creates a standard swizzle of interrupts such that + /* + * This code creates a standard swizzle of interrupts such that * each device's first interrupt is based on it's PCI_SLOT number. * (See pci_swizzle_map_irq_fn()) * @@ -805,28 +808,38 @@ static void create_fdt_reset(RISCVVirtState *s, uint3= 2_t *phandle) } =20 static void create_fdt_uart(RISCVVirtState *s, - uint32_t irq_mmio_phandle) + uint32_t irq_mmio_phandle, int memId, int irqN= o) { g_autofree char *name =3D NULL; MachineState *ms =3D MACHINE(s); =20 name =3D g_strdup_printf("/soc/serial@%"HWADDR_PRIx, - s->memmap[VIRT_UART0].base); + s->memmap[memId].base); qemu_fdt_add_subnode(ms->fdt, name); qemu_fdt_setprop_string(ms->fdt, name, "compatible", "ns16550a"); qemu_fdt_setprop_sized_cells(ms->fdt, name, "reg", - 2, s->memmap[VIRT_UART0].base, - 2, s->memmap[VIRT_UART0].size); + 2, s->memmap[memId].base, + 2, s->memmap[memId].size); qemu_fdt_setprop_cell(ms->fdt, name, "clock-frequency", 3686400); qemu_fdt_setprop_cell(ms->fdt, name, "interrupt-parent", irq_mmio_phan= dle); if (s->aia_type =3D=3D VIRT_AIA_TYPE_NONE) { - qemu_fdt_setprop_cell(ms->fdt, name, "interrupts", UART0_IRQ); + qemu_fdt_setprop_cell(ms->fdt, name, "interrupts", irqNo); } else { - qemu_fdt_setprop_cells(ms->fdt, name, "interrupts", UART0_IRQ, 0x4= ); + qemu_fdt_setprop_cells(ms->fdt, name, "interrupts", irqNo, 0x4); + } + + if (VIRT_UART0 =3D=3D memId) { + qemu_fdt_setprop_string(ms->fdt, "/chosen", "stdout-path", name); + qemu_fdt_setprop_string(ms->fdt, "/aliases", "serial0", name); } +} =20 - qemu_fdt_setprop_string(ms->fdt, "/chosen", "stdout-path", name); - qemu_fdt_setprop_string(ms->fdt, "/aliases", "serial0", name); +static void create_fdt_uarts(RISCVVirtState *s, uint32_t irq_mmio_phandle) +{ + if (s->uart1_present) { + create_fdt_uart(s, irq_mmio_phandle, VIRT_UART1, UART1_IRQ); + } + create_fdt_uart(s, irq_mmio_phandle, VIRT_UART0, UART0_IRQ); } =20 static void create_fdt_rtc(RISCVVirtState *s, @@ -996,7 +1009,7 @@ static void finalize_fdt(RISCVVirtState *s) =20 create_fdt_reset(s, &phandle); =20 - create_fdt_uart(s, irq_mmio_phandle); + create_fdt_uarts(s, irq_mmio_phandle); =20 create_fdt_rtc(s, irq_mmio_phandle); } @@ -1486,6 +1499,13 @@ static void virt_machine_init(MachineState *machine) 0, qdev_get_gpio_in(mmio_irqchip, UART0_IRQ), 399193, serial_hd(0), DEVICE_LITTLE_ENDIAN); =20 + if (serial_hd(1)) { + serial_mm_init(system_memory, s->memmap[VIRT_UART1].base, + 0, qdev_get_gpio_in(mmio_irqchip, UART1_IRQ), 399193, + serial_hd(1), DEVICE_LITTLE_ENDIAN); + s->uart1_present =3D true; + } + sysbus_create_simple("goldfish_rtc", s->memmap[VIRT_RTC].base, qdev_get_gpio_in(mmio_irqchip, RTC_IRQ)); =20 --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550560; cv=none; d=zohomail.com; s=zohoarc; b=JbOGO/JKphJgkQLOY+TK8DATbN8L0WearoHt0J9Cr7v9nYyWcmryrnOpOuMPUJwKdDzJyId02GoYfbzGrVw2P6n7TvAf0OGfVv/zksGtz+HngZ80Vcfzd4hJqvWYHJLouEFD+i1YoaFsTRUoSaQrNX4R5KOR1KJpaoXcwfTaScw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550560; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ISuiU1G30XaXvjDkARbexZgsRdi7lq3QZ/g+A2XMu8w=; b=JV+HurNawBzkCzC5/HEcgALDec0FiiwgyqdyRD/Qi2mYtZYY4PlRbz/eHXTBkqJySWH7+AP5xWWevRB9NxPQiGvTdaO5nfPygDSGFA6nfdhjQH5vvZmLxSjvZEKXsECjTWIqz8ib+zT7YWGXU9HKn7yUSlnqkEPk1c2xIRlru7o= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550560705906.0220441190122; Sun, 23 Aug 2026 22:49:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNYF-0001Eo-Lq; Mon, 24 Aug 2026 01:48:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNXx-0001DD-P5 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:38 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNXu-0001io-CR for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:37 -0400 Received: by mail-pj1-x1033.google.com with SMTP id 98e67ed59e1d1-38dc4553f62so4138244a91.0 for ; Sun, 23 Aug 2026 22:48:33 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.48.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:48:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550513; x=1788155313; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ISuiU1G30XaXvjDkARbexZgsRdi7lq3QZ/g+A2XMu8w=; b=DSLEfW/LnyAzM2BxlbL5RstH4i4dIKj0M83Tr6eW574dzIeaO6CnaPgRfI5ebKevMe M4iERxZJzJeFYZ+ESsN3xbnqOUxf88xeq/NslKiFCRjKabcp+NKZVbkYInWN7+rbskEv D+0i12O28nvG/vaSu31CfhLZlwbTY1gbK+IZ6gpt6MCtttDBhQrp2dWbuXoOu57wrqvP njYM7D0THA7yKo8WQc/GlRTCkocL1eK1c/M9k2iGlG/ndapTIFtfs5wxe/8GvdL7Csz1 CmgSOE8VQNVXDLEUlXNmMgzFNi2P1GgH8lJ19iCFksMyjsGk7bh9pOEa1IP0tLZvGQFO 8RxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550513; x=1788155313; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=ISuiU1G30XaXvjDkARbexZgsRdi7lq3QZ/g+A2XMu8w=; b=OpwaqhMbd+ooOv8myGOZa2oD9i682lw0FkszYQn//IdAbVeQC+OY1+3sO91t+BWywW nh5uAF8uuEPeDSwVEK5LZrhAFugkKmk260gVUUyc9VmDTK9yPXvgPhT8wKqvSk4P060V hJviPDaQDgaWaz2kxQsy538ivFnpeIVAeYm38jRpo3u1aSmZuJKWIYEUeoQ/9J7qrIm2 sb4vSu4MlAcdbMGqrBACi2fBgh02F8U62t20LhyW+DLX6lNXaPLirT1kRjtHsRfnadpn ZXGPoEJzmKLj7a+/kkwvxwHSMJ7dYpvSezp4O3Q7zoF8XuaLmle7OVN5Cz0y2W+liWdY 0QwA== X-Gm-Message-State: AFuF++kLBntLiDCFX2czyLhmOHrfJuKHv+kyBXGLBHFgxsVNYOHz8cxa RakKZE683XPEPreYbuK9rOISQrjUkY09ef0mXuYQbn5rNmYzAyL7nAjrvTLvqg== X-Gm-Gg: AR+sD12wyREQbi92ot1cciCWke5wVwWspW38bFIqkaBpYTtg7TiJxdxPyK+qk3r6Chw Rwh8+aULgRvZrQaPHdo2EiGzaEZ63R1uSr4SDU1TVEDtMCvES9TLjknDJ+EgF+Yq6IHvrnHb1qU o0ZIJ44wjZbaVIAddrzGkzsLfbtwJiJe8mTgU7yXKEHwVsp9NoMHnLo/6pIIaQ1GNc5yer3LPCO fdzMc1DACbACv5giE3GiZhpzQpE52UojMTZ3e8zbSvsGrvN0P4EdVHeUdSBwCw4m2fgtxPE8epX ZsfVI1D97buLtLAcU8y2ohZi8hERPX+G/C/MZpBWwmmR6rt2+3LGxZzDz99SEvO4HtJ5onHWqc0 iBqrfyTLRP3evvh+MN44P8tl0mrQffRMUkCuZZEo+FrSL5KbfS7CTSewft4ToAEf+mv3Ej6IBmq JLBX2VTiV7cl4HoZ1vBR5ekT6uVm9j2yiHuezpt4Lfx6HeytqOz5my083JA4PRP8X+e0/C77jh1 AVn/g== X-Received: by 2002:a17:90b:164e:b0:38e:57a3:f218 with SMTP id 98e67ed59e1d1-395c3733afdmr38302551a91.13.1787550512737; Sun, 23 Aug 2026 22:48:32 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Tao Ding , Chao Liu , Daniel Henrique Barboza , Junze Cao , Alistair Francis Subject: [PULL v2 05/96] hw/dma: add K230 gsdma Date: Mon, 24 Aug 2026 15:46:35 +1000 Message-ID: <20260824054806.2790041-6-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1033; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1033.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550562795158500 Content-Type: text/plain; charset="utf-8" From: Tao Ding K230 GSDMA includes SDMA (System Direct Memory Access) and GDMA (Graphic Di= rect Memory Access). In this patch, add SDMA for k230 board. The following features have not bee= n implemented: 1. axi protocol related 2. channel arbitration 3. lower power mode SDMA supports transfer data between memory, in which case SDMA is the contr= oller. It also supports transfer data to decomp_gzip and caching it through SRAM. In this case, decomp_gzip is the controller, which controls SDMA through ha= ndshake signals. According to "K230 Technical Reference Manual v0.3.1" section 2.5.2. https://download.kendryte.com/developer/k230/HDK/K230%E7%A1%AC%E4%BB%B6%E6%= 96%87%E6%A1%A3/K230_Technical_Reference_Manual_V0.3.1_20241118.pdf This commit includes: - K230 SDMA (System Direct Memory Access) model (k230_gsdma.c, k230_gsdma.h) - GSDMA trace log (trace-events) - Kconfig and meson.build - update MAINTAINERS Signed-off-by: Tao Ding Reviewed-by: Chao Liu Reviewed-by: Daniel Henrique Barboza Reviewed-by: Junze Cao Message-ID: <20260808062227.66961-2-dingtao0430@163.com> Signed-off-by: Alistair Francis --- MAINTAINERS | 2 + include/hw/dma/k230_gsdma.h | 130 +++++++++ hw/dma/k230_gsdma.c | 551 ++++++++++++++++++++++++++++++++++++ hw/dma/Kconfig | 3 + hw/dma/meson.build | 1 + hw/dma/trace-events | 6 + 6 files changed, 693 insertions(+) create mode 100644 include/hw/dma/k230_gsdma.h create mode 100644 hw/dma/k230_gsdma.c diff --git a/MAINTAINERS b/MAINTAINERS index 2190bc706b..027db78b39 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1847,9 +1847,11 @@ F: docs/system/riscv/k230.rst F: hw/misc/k230_ddr.c F: hw/riscv/k230.c F: hw/watchdog/k230_wdt.c +F: hw/dma/k230_gsdma.c F: include/hw/misc/k230_ddr.h F: include/hw/riscv/k230.h F: include/hw/watchdog/k230_wdt.h +F: include/hw/dma/k230_gsdma.h F: tests/functional/riscv64/test_k230.py F: tests/qtest/k230-ddr-test.c F: tests/qtest/k230-wdt-test.c diff --git a/include/hw/dma/k230_gsdma.h b/include/hw/dma/k230_gsdma.h new file mode 100644 index 0000000000..629cce29f8 --- /dev/null +++ b/include/hw/dma/k230_gsdma.h @@ -0,0 +1,130 @@ +/* + * K230 GSDMA + * + * Copyright (c) 2026 Tao Ding + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef HW_DMA_K230_GSDMA_H +#define HW_DMA_K230_GSDMA_H + +#include "hw/core/sysbus.h" + +#define TYPE_K230_GSDMA "riscv.k230.gsdma" +OBJECT_DECLARE_SIMPLE_TYPE(K230GSDMAState, K230_GSDMA) + +#define K230_GSDMA_MMIO_SIZE 0x4000 +#define K230_GSDMA_NUM_SDMA_CHANNELS 4 + +#define K230_GSDMA_CH_STRIDE 0x30 +#define K230_GSDMA_CH_BASE 0x50 + +/* K230 SDMA request input */ +enum { + K230_GSDMA_GPIO_DECOMP_CTRL_EN, + K230_GSDMA_GPIO_DMA_WRITE_REQ, + K230_GSDMA_GPIO_DMA_READ_REQ, + K230_GSDMA_NUM_GPIOS_IN, +}; + +/* K230 SDMA ACK output */ +enum { + K230_GSDMA_GPIO_DMA_WRITE_ACK, + K230_GSDMA_GPIO_DMA_READ_ACK, + K230_GSDMA_NUM_GPIOS_OUT, +}; + +/* K230 GSDMA Registers Map */ +#define K230_GSDMA_DMA_CH_EN 0x00 +#define K230_GSDMA_DMA_INT_MASK 0x04 +#define K230_GSDMA_DMA_INT_STAT 0x08 +#define K230_GSDMA_DMA_CFG 0x0c +#define K230_GSDMA_GDMA_CTRL 0x10 +#define K230_GSDMA_GDMA_LLI_BASE 0x14 +#define K230_GSDMA_GDMA_CH_CNT0 0x18 +#define K230_GSDMA_GDMA_CH_CNT_LAST 0x34 +#define K230_GSDMA_GDMA_CURRENT_LLT 0x38 +#define K230_GSDMA_DMA_WEIGHT 0x48 + +/* K230 GSDMA SDMA Channel Register Map */ +#define K230_GSDMA_CH_CTL 0x00 +#define K230_GSDMA_CH_STATUS 0x04 +#define K230_GSDMA_CH_CFG 0x08 +#define K230_GSDMA_CH_USR_DATA 0x0c +#define K230_GSDMA_CH_LLT_SADDR 0x10 +#define K230_GSDMA_CH_CURRENT_LLT 0x14 + +/* K230 SDMA Control bit */ +#define K230_GSDMA_CTL_START BIT(0) +#define K230_GSDMA_CTL_STOP BIT(1) +#define K230_GSDMA_CTL_RESUME BIT(2) + +/* K230 SDMA States bit */ +#define K230_GSDMA_SDMA_STATUS_BUSY BIT(0) +#define K230_GSDMA_SDMA_STATUS_PAUSE BIT(1) + +/* K230 SDMA Interrupt bit */ +#define K230_GSDMA_SDMA_DONE_INT(ch) BIT(ch) +#define K230_GSDMA_SDMA_ITEM_INT(ch) BIT((ch) + 4) +#define K230_GSDMA_SDMA_PAUSE_INT(ch) BIT((ch) + 8) + + +#define K230_GSDMA_DMA_CH_EN_MASK MAKE_64BIT_MASK(0, 5) +#define K230_GSDMA_DMA_CFG_RESET 0x000007ff + +/* K230 SDMA Linked List bit */ +#define K230_GSDMA_LLT_2D_MODE BIT(28) +#define K230_GSDMA_LLT_PAUSE BIT(29) +#define K230_GSDMA_LLT_NODE_INTR BIT(30) +#define K230_GSDMA_GDMA_LLT_GCH_SHIFT 16 +#define K230_GSDMA_GDMA_LLT_GCH_MASK 0x7 +#define K230_GSDMA_CH_CFG_DAT_MODE BIT(0) +#define K230_GSDMA_CH_CFG_USR_DATA_SIZE_SHIFT 1 +#define K230_GSDMA_CH_CFG_USR_DATA_SIZE_MASK 0x3 +#define K230_GSDMA_CH_CFG_DAT_ENDIAN_SHIFT 4 +#define K230_GSDMA_CH_CFG_DAT_ENDIAN_MASK 0x3 +#define K230_GSDMA_CH_CFG_SRC_FIXED BIT(8) +#define K230_GSDMA_CH_CFG_DST_FIXED BIT(9) +#define K230_GSDMA_CH0_CFG_DECOMP_CTRL_EN BIT(10) + +/* K230 SDMA channel state */ +typedef struct K230GSDMAChannel { + uint32_t ctl; + uint32_t status; + uint32_t cfg; + uint32_t usr_data; + uint32_t llt_saddr; + uint32_t current_llt; + uint32_t next_llt; + bool started; +} K230GSDMAChannel; + +/* K230 SDMA Linked List */ +typedef struct K230GSDMALLT { + uint32_t cfg; + uint32_t src_addr; + uint32_t line_size; + uint32_t line_cfg; + uint32_t dst_addr; + uint32_t next_llt_addr; +} K230GSDMALLT; + +/* K230 GSDMA state */ +struct K230GSDMAState { + SysBusDevice parent_obj; + + MemoryRegion iomem; + qemu_irq irq; + qemu_irq handshake_out[K230_GSDMA_NUM_GPIOS_OUT]; + + uint32_t dma_ch_en; + uint32_t dma_int_mask; + uint32_t dma_int_stat; + uint32_t dma_cfg; + uint32_t dma_weight; + + K230GSDMAChannel channels[K230_GSDMA_NUM_SDMA_CHANNELS]; +}; + +#endif diff --git a/hw/dma/k230_gsdma.c b/hw/dma/k230_gsdma.c new file mode 100644 index 0000000000..7635cd19e8 --- /dev/null +++ b/hw/dma/k230_gsdma.c @@ -0,0 +1,551 @@ +/* + * Kendryte K230 GSDMA + * + * Copyright (c) 2026 Tao Ding + * + * SPDX-License-Identifier: GPL-2.0-or-later + * + * GSDMA includes SDMA (System Direct Memory Access, K230 TRM section 10.2= ) and + * GDMA (Graphic Direct Memory Access, K230 TRM section 2.5.2). + */ + +#include "qemu/osdep.h" +#include "qemu/bitops.h" +#include "qemu/log.h" +#include "qemu/module.h" +#include "migration/vmstate.h" +#include "system/address-spaces.h" +#include "hw/dma/k230_gsdma.h" +#include "hw/core/irq.h" +#include "trace.h" + +static void k230_gsdma_update_irq(K230GSDMAState *s) +{ + qemu_set_irq(s->irq, !!(s->dma_int_stat & ~s->dma_int_mask)); +} + +static bool k230_gsdma_decomp_enabled(K230GSDMAState *s) +{ + /* Only sdma channel 0 has decomp enable flag */ + return !!(s->channels[0].cfg & K230_GSDMA_CH0_CFG_DECOMP_CTRL_EN); +} + +static bool k230_gsdma_read_sdma_llt(hwaddr addr, K230GSDMALLT *llt) +{ + bool ok =3D address_space_read(&address_space_memory, addr, + MEMTXATTRS_UNSPECIFIED, llt, + sizeof(*llt)) =3D=3D MEMTX_OK; + + if (ok) { + trace_k230_gsdma_read_sdma_llt(addr, le32_to_cpu(llt->cfg), + le32_to_cpu(llt->src_addr), + le32_to_cpu(llt->line_size), + le32_to_cpu(llt->line_cfg), + le32_to_cpu(llt->dst_addr), + le32_to_cpu(llt->next_llt_addr)); + } else { + trace_k230_gsdma_read_sdma_llt_failed(addr); + } + + return ok; +} + +static unsigned int k230_gsdma_usr_data_size(uint32_t cfg) +{ + /* decode usr_dat_size in CH_CFG register */ + switch (extract32(cfg, K230_GSDMA_CH_CFG_USR_DATA_SIZE_SHIFT, 2)) { + case 0: + return 1; + case 1: + return 2; + default: + return 4; + } +} + +static void k230_gsdma_convert_endian(uint8_t *buf, uint32_t len, uint32_t= cfg) +{ + unsigned int mode =3D extract32(cfg, + K230_GSDMA_CH_CFG_DAT_ENDIAN_SHIFT, 2); + unsigned int unit_size; + unsigned int offset; + + if (mode =3D=3D 0) { + return; + } + + unit_size =3D 1U << mode; + for (offset =3D 0; offset + unit_size <=3D len; offset +=3D unit_size)= { + unsigned int i; + + for (i =3D 0; i < unit_size / 2; i++) { + uint8_t tmp =3D buf[offset + i]; + + buf[offset + i] =3D buf[offset + unit_size - i - 1]; + buf[offset + unit_size - i - 1] =3D tmp; + } + } +} + +static bool k230_gsdma_transfer_llt(K230GSDMAChannel *c, const K230GSDMALL= T *llt) +{ + uint32_t llt_cfg =3D le32_to_cpu(llt->cfg); + hwaddr src =3D le32_to_cpu(llt->src_addr); + hwaddr dst =3D le32_to_cpu(llt->dst_addr); + uint32_t line_size =3D le32_to_cpu(llt->line_size); + uint32_t line_cfg =3D le32_to_cpu(llt->line_cfg); + /* Number of lines required for 2d mode */ + uint32_t line_num =3D + (llt_cfg & K230_GSDMA_LLT_2D_MODE) ? extract32(line_cfg, 0, 16= ) : 1; + /* Stride line size required for 2d mode */ + uint32_t line_space =3D extract32(line_cfg, 16, 16); + + bool dat_mode =3D c->cfg & K230_GSDMA_CH_CFG_DAT_MODE; + bool src_fixed =3D c->cfg & K230_GSDMA_CH_CFG_SRC_FIXED; + bool dst_fixed =3D c->cfg & K230_GSDMA_CH_CFG_DST_FIXED; + + uint8_t buf[8]; /* K230 sdma axi data width is 64-bit */ + uint8_t fill[4]; /* Usr data is 32-bit*/ + unsigned int fill_len =3D k230_gsdma_usr_data_size(c->cfg); + uint32_t i; + + memcpy(fill, &c->usr_data, sizeof(fill)); + + for (i =3D 0; i < line_num; i++) { + uint32_t remaining =3D line_size; + hwaddr line_src =3D src; + hwaddr line_dst =3D dst; + + while (remaining) { + uint32_t chunk =3D MIN(remaining, (uint32_t)sizeof(buf)); + + if (dat_mode) { + uint32_t j; + + for (j =3D 0; j < chunk; j++) { + buf[j] =3D fill[j % fill_len]; + } + } else if (address_space_read(&address_space_memory, line_src, + MEMTXATTRS_UNSPECIFIED, buf, + chunk) !=3D MEMTX_OK) { + return false; + } + + k230_gsdma_convert_endian(buf, chunk, c->cfg); + + if (address_space_write(&address_space_memory, line_dst, + MEMTXATTRS_UNSPECIFIED, buf, + chunk) !=3D MEMTX_OK) { + return false; + } + + if (!dat_mode && !src_fixed) { + line_src +=3D chunk; + } + if (!dst_fixed) { + line_dst +=3D chunk; + } + remaining -=3D chunk; + } + + if (!dat_mode && !src_fixed) { + if (llt_cfg & K230_GSDMA_LLT_2D_MODE) { /* 2d mode */ + src +=3D line_size + line_space; + } else { + src +=3D line_size; + } + } + + if (!dst_fixed) { + dst +=3D line_size; + } + } + + return true; +} + +static void k230_gsdma_sdma_set_idle(K230GSDMAChannel *c) +{ + c->status &=3D ~(K230_GSDMA_SDMA_STATUS_BUSY | K230_GSDMA_SDMA_STATUS_= PAUSE); + c->next_llt =3D 0; +} + +static void k230_gsdma_sdma_set_paused(K230GSDMAChannel *c, hwaddr next_ll= t) +{ + c->status &=3D ~K230_GSDMA_SDMA_STATUS_BUSY; + c->status |=3D K230_GSDMA_SDMA_STATUS_PAUSE; + c->next_llt =3D next_llt; +} + +static void k230_gsdma_run_sdma(K230GSDMAState *s, unsigned int ch, hwaddr= addr) +{ + K230GSDMAChannel *c =3D &s->channels[ch]; + + c->status &=3D ~K230_GSDMA_SDMA_STATUS_PAUSE; + c->status |=3D K230_GSDMA_SDMA_STATUS_BUSY; + c->next_llt =3D 0; + c->current_llt =3D addr; + + while (addr) { + K230GSDMALLT llt; + uint32_t cfg; + hwaddr next; + + if (!k230_gsdma_read_sdma_llt(addr, &llt)) { + k230_gsdma_sdma_set_idle(c); + return; + } + + cfg =3D le32_to_cpu(llt.cfg); + next =3D le32_to_cpu(llt.next_llt_addr); + c->current_llt =3D addr; + + if (!k230_gsdma_transfer_llt(c, &llt)) { + k230_gsdma_sdma_set_idle(c); + return; + } + + if (cfg & K230_GSDMA_LLT_NODE_INTR) { + s->dma_int_stat |=3D K230_GSDMA_SDMA_ITEM_INT(ch); + } + + if (cfg & K230_GSDMA_LLT_PAUSE) { + s->dma_int_stat |=3D K230_GSDMA_SDMA_PAUSE_INT(ch); + k230_gsdma_sdma_set_paused(c, next); + k230_gsdma_update_irq(s); + return; + } + + addr =3D next; + } + + s->dma_int_stat |=3D K230_GSDMA_SDMA_DONE_INT(ch); + s->dma_ch_en &=3D ~BIT(ch); + k230_gsdma_sdma_set_idle(c); + k230_gsdma_update_irq(s); +} + +/* Decomp gzip request step sdma */ +static void k230_gsdma_step_sdma(K230GSDMAState *s, unsigned int ch, hwadd= r addr) +{ + K230GSDMAChannel *c =3D &s->channels[ch]; + K230GSDMALLT llt; + uint32_t cfg; + hwaddr next; + + if (!addr || !k230_gsdma_read_sdma_llt(addr, &llt)) { + k230_gsdma_sdma_set_idle(c); + return; + } + + cfg =3D le32_to_cpu(llt.cfg); + next =3D le32_to_cpu(llt.next_llt_addr); + + c->status |=3D K230_GSDMA_SDMA_STATUS_BUSY; + c->status &=3D ~K230_GSDMA_SDMA_STATUS_PAUSE; + c->current_llt =3D addr; + + if (!k230_gsdma_transfer_llt(c, &llt)) { + k230_gsdma_sdma_set_idle(c); + return; + } + + if (cfg & K230_GSDMA_LLT_NODE_INTR) { + s->dma_int_stat |=3D K230_GSDMA_SDMA_ITEM_INT(ch); + } + + c->status &=3D ~K230_GSDMA_SDMA_STATUS_BUSY; + c->next_llt =3D next; + if (next =3D=3D 0) { + s->dma_int_stat |=3D K230_GSDMA_SDMA_DONE_INT(ch); + s->dma_ch_en &=3D ~BIT(ch); + } + + k230_gsdma_update_irq(s); +} + +static const VMStateDescription vmstate_k230_gsdma_channel =3D { + .name =3D "k230.gsdma.channel", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32(ctl, K230GSDMAChannel), + VMSTATE_UINT32(status, K230GSDMAChannel), + VMSTATE_UINT32(cfg, K230GSDMAChannel), + VMSTATE_UINT32(usr_data, K230GSDMAChannel), + VMSTATE_UINT32(llt_saddr, K230GSDMAChannel), + VMSTATE_UINT32(current_llt, K230GSDMAChannel), + VMSTATE_UINT32(next_llt, K230GSDMAChannel), + VMSTATE_END_OF_LIST() + } +}; + +static const VMStateDescription vmstate_k230_gsdma =3D { + .name =3D "k230.gsdma", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32(dma_ch_en, K230GSDMAState), + VMSTATE_UINT32(dma_int_mask, K230GSDMAState), + VMSTATE_UINT32(dma_int_stat, K230GSDMAState), + VMSTATE_UINT32(dma_cfg, K230GSDMAState), + VMSTATE_UINT32(dma_weight, K230GSDMAState), + VMSTATE_STRUCT_ARRAY(channels, K230GSDMAState, + K230_GSDMA_NUM_SDMA_CHANNELS, 2, + vmstate_k230_gsdma_channel, K230GSDMAChannel), + VMSTATE_END_OF_LIST() + } +}; + +static uint64_t k230_gsdma_read(void *opaque, hwaddr addr, unsigned int si= ze) +{ + K230GSDMAState *s =3D K230_GSDMA(opaque); + unsigned int ch; + hwaddr ch_off; + uint64_t ret =3D 0; + + switch (addr) { + case K230_GSDMA_DMA_CH_EN: + ret =3D s->dma_ch_en; + break; + case K230_GSDMA_DMA_INT_MASK: + ret =3D s->dma_int_mask; + break; + case K230_GSDMA_DMA_INT_STAT: + ret =3D s->dma_int_stat; + break; + case K230_GSDMA_DMA_CFG: + ret =3D s->dma_cfg; + break; + case K230_GSDMA_DMA_WEIGHT: + ret =3D s->dma_weight; + break; + default: + if (addr < K230_GSDMA_CH_BASE) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: not implement gdma at offset 0x%" HWADDR_PRIx + "\n", __func__, addr); + } + break; + } + + ch =3D (addr - K230_GSDMA_CH_BASE) / K230_GSDMA_CH_STRIDE; + ch_off =3D (addr - K230_GSDMA_CH_BASE) % K230_GSDMA_CH_STRIDE; + if (ch < K230_GSDMA_NUM_SDMA_CHANNELS) { + switch (ch_off) { + case K230_GSDMA_CH_CTL: + break; + case K230_GSDMA_CH_STATUS: + ret =3D s->channels[ch].status; + break; + case K230_GSDMA_CH_CFG: + ret =3D s->channels[ch].cfg; + break; + case K230_GSDMA_CH_USR_DATA: + ret =3D s->channels[ch].usr_data; + break; + case K230_GSDMA_CH_LLT_SADDR: + ret =3D s->channels[ch].llt_saddr; + break; + case K230_GSDMA_CH_CURRENT_LLT: + ret =3D s->channels[ch].current_llt; + break; + default: + break; + } + } + + trace_k230_gsdma_read(addr, size, ret); + return ret; +} + +static void k230_gsdma_write_channel(K230GSDMAState *s, unsigned int ch, + hwaddr ch_off, uint32_t value) +{ + K230GSDMAChannel *c =3D &s->channels[ch]; + bool handshake_mode =3D ch < 2 && k230_gsdma_decomp_enabled(s); + + switch (ch_off) { + case K230_GSDMA_CH_CTL: + c->ctl =3D value; + if ((value & K230_GSDMA_CTL_STOP) !=3D 0) { + c->started =3D false; + k230_gsdma_sdma_set_idle(c); + break; + } + if ((value & K230_GSDMA_CTL_RESUME) !=3D 0 && + (c->status & K230_GSDMA_SDMA_STATUS_PAUSE) && c->next_llt !=3D= 0) { + k230_gsdma_run_sdma(s, ch, c->next_llt); + break; + } + if (handshake_mode && (value & K230_GSDMA_CTL_START) !=3D 0) { + c->started =3D true; + c->status &=3D ~(K230_GSDMA_SDMA_STATUS_BUSY | + K230_GSDMA_SDMA_STATUS_PAUSE); + c->current_llt =3D 0; + c->next_llt =3D 0; + break; + } + if ((value & K230_GSDMA_CTL_START) !=3D 0 && + (s->dma_ch_en & BIT(ch)) && c->llt_saddr !=3D 0) { + c->started =3D true; + k230_gsdma_run_sdma(s, ch, c->llt_saddr); + } + break; + case K230_GSDMA_CH_CFG: + c->cfg =3D value; + break; + case K230_GSDMA_CH_USR_DATA: + c->usr_data =3D value; + break; + case K230_GSDMA_CH_LLT_SADDR: + c->llt_saddr =3D value; + break; + case K230_GSDMA_CH_CURRENT_LLT: + break; + default: + break; + } +} + +static void k230_gsdma_write(void *opaque, hwaddr addr, + uint64_t value, unsigned int size) +{ + K230GSDMAState *s =3D K230_GSDMA(opaque); + unsigned int ch; + hwaddr ch_off; + uint32_t v =3D value; + + trace_k230_gsdma_write(addr, size, value); + + switch (addr) { + case K230_GSDMA_DMA_CH_EN: + s->dma_ch_en =3D v & K230_GSDMA_DMA_CH_EN_MASK; + return; + case K230_GSDMA_DMA_INT_MASK: + s->dma_int_mask =3D v; + k230_gsdma_update_irq(s); + return; + case K230_GSDMA_DMA_INT_STAT: + s->dma_int_stat &=3D ~v; + k230_gsdma_update_irq(s); + return; + case K230_GSDMA_DMA_CFG: + s->dma_cfg =3D v; + return; + case K230_GSDMA_DMA_WEIGHT: + s->dma_weight =3D v & 0x00ffffff; + return; + default: + break; + } + + if (addr < K230_GSDMA_CH_BASE) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: not implement gdma at offset 0x%" HWADDR_PRIx + "\n", __func__, addr); + return; + } + + ch =3D (addr - K230_GSDMA_CH_BASE) / K230_GSDMA_CH_STRIDE; + ch_off =3D (addr - K230_GSDMA_CH_BASE) % K230_GSDMA_CH_STRIDE; + if (ch >=3D K230_GSDMA_NUM_SDMA_CHANNELS) { + return; + } + + k230_gsdma_write_channel(s, ch, ch_off, v); +} + +static void k230_gsdma_handle_signal(void *opaque, int n, int level) +{ + K230GSDMAState *s =3D opaque; + K230GSDMAChannel *c; + hwaddr addr; + unsigned int ch; + + if (!level || n =3D=3D K230_GSDMA_GPIO_DECOMP_CTRL_EN) { + return; + } + + ch =3D n - 1; + + c =3D &s->channels[ch]; + if (!k230_gsdma_decomp_enabled(s) || !(s->dma_ch_en & BIT(ch)) || !c->= started) { + return; + } + + if (c->current_llt =3D=3D 0) { + addr =3D c->llt_saddr; + } else { + addr =3D c->next_llt; + } + if (!addr) { + return; + } + + k230_gsdma_step_sdma(s, ch, addr); + qemu_set_irq(s->handshake_out[n - 1], 1); + qemu_set_irq(s->handshake_out[n - 1], 0); +} + +static const MemoryRegionOps k230_gsdma_ops =3D { + .read =3D k230_gsdma_read, + .write =3D k230_gsdma_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .impl.min_access_size =3D 4, + .impl.max_access_size =3D 4, + .valid.min_access_size =3D 4, + .valid.max_access_size =3D 4, +}; + +static void k230_gsdma_reset_hold(Object *obj, ResetType type) +{ + K230GSDMAState *s =3D K230_GSDMA(obj); + + memset(s->channels, 0, sizeof(s->channels)); + s->dma_ch_en =3D 0; + s->dma_int_mask =3D 0; + s->dma_int_stat =3D 0; + s->dma_cfg =3D K230_GSDMA_DMA_CFG_RESET; + s->dma_weight =3D 0; +} + +static void k230_gsdma_realize(DeviceState *dev, Error **errp) +{ + K230GSDMAState *s =3D K230_GSDMA(dev); + SysBusDevice *sbd =3D SYS_BUS_DEVICE(dev); + + memory_region_init_io(&s->iomem, OBJECT(dev), &k230_gsdma_ops, s, + TYPE_K230_GSDMA, K230_GSDMA_MMIO_SIZE); + sysbus_init_mmio(sbd, &s->iomem); + sysbus_init_irq(sbd, &s->irq); + qdev_init_gpio_in(DEVICE(dev), k230_gsdma_handle_signal, + K230_GSDMA_NUM_GPIOS_IN); + qdev_init_gpio_out(DEVICE(dev), s->handshake_out, + K230_GSDMA_NUM_GPIOS_OUT); +} + +static void k230_gsdma_class_init(ObjectClass *klass, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + ResettableClass *rc =3D RESETTABLE_CLASS(klass); + + dc->realize =3D k230_gsdma_realize; + rc->phases.hold =3D k230_gsdma_reset_hold; + dc->vmsd =3D &vmstate_k230_gsdma; + dc->desc =3D "Kendryte K230 GSDMA"; +} + +static const TypeInfo k230_gsdma_info =3D { + .name =3D TYPE_K230_GSDMA, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(K230GSDMAState), + .class_init =3D k230_gsdma_class_init, +}; + +static void k230_gsdma_register_types(void) +{ + type_register_static(&k230_gsdma_info); +} + +type_init(k230_gsdma_register_types) diff --git a/hw/dma/Kconfig b/hw/dma/Kconfig index 98fbb1bb04..0a23e7d7b8 100644 --- a/hw/dma/Kconfig +++ b/hw/dma/Kconfig @@ -30,3 +30,6 @@ config SIFIVE_PDMA config XLNX_CSU_DMA bool select REGISTER + +config K230_GSDMA + bool \ No newline at end of file diff --git a/hw/dma/meson.build b/hw/dma/meson.build index cc7810beb8..45db5e7357 100644 --- a/hw/dma/meson.build +++ b/hw/dma/meson.build @@ -12,3 +12,4 @@ system_ss.add(when: 'CONFIG_OMAP', if_true: files('omap_d= ma.c', 'soc_dma.c')) system_ss.add(when: 'CONFIG_RASPI', if_true: files('bcm2835_dma.c')) system_ss.add(when: 'CONFIG_SIFIVE_PDMA', if_true: files('sifive_pdma.c')) system_ss.add(when: 'CONFIG_XLNX_CSU_DMA', if_true: files('xlnx_csu_dma.c'= )) +system_ss.add(when: 'CONFIG_K230_GSDMA', if_true: files('k230_gsdma.c')) diff --git a/hw/dma/trace-events b/hw/dma/trace-events index 4c09790f9a..a494755b5a 100644 --- a/hw/dma/trace-events +++ b/hw/dma/trace-events @@ -47,3 +47,9 @@ pl330_iomem_read(uint32_t addr, uint32_t data) "addr: 0x%= 08"PRIx32" data: 0x%08" =20 # xilinx_axidma.c xilinx_axidma_loading_desc_fail(uint32_t res) "error:%u" + +# k230_gsdma.c +k230_gsdma_read(uint64_t addr, unsigned int size, uint64_t data) "K230 GSD= MA read: [0x%"PRIx64"] size %u -> 0x%"PRIx64 +k230_gsdma_write(uint64_t addr, unsigned int size, uint64_t data) "K230 GS= DMA write: [0x%"PRIx64"] size %u <- 0x%"PRIx64 +k230_gsdma_read_sdma_llt(uint64_t addr, uint32_t cfg, uint32_t src_addr, u= int32_t line_size, uint32_t line_cfg, uint32_t dst_addr, uint32_t next_llt_= addr) "K230 GSDMA read SDMA LLT: addr=3D0x%"PRIx64" cfg=3D0x%"PRIx32" src= =3D0x%"PRIx32" line_size=3D0x%"PRIx32" line_cfg=3D0x%"PRIx32" dst=3D0x%"PRI= x32" next=3D0x%"PRIx32 +k230_gsdma_read_sdma_llt_failed(uint64_t addr) "K230 GSDMA read SDMA LLT f= ailed: addr=3D0x%"PRIx64 --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550576; cv=none; d=zohomail.com; s=zohoarc; b=FO7qORbnNX2/Lb7BDfRTsn9A8nLNTOjPTWFgZFoZhXIxW1qVitv/q8l5H/Szipn51oTECebocBKAwXSIGZWf40yK7U0h5pyNvKOOmJp3EjQlSTu3DbgrOoiNUCNnbSZyTnrF3ciCUAHw8BCzQRZYTxAGAC++rqmfrjVBzql34ns= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550576; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=zYwYUcVG2VW3tzoyHfgQKdzE7Y51E+RzfXFNYF+fePE=; b=PCCvEhHMgyAjfH7VciSqgPPMckSZ2ASOWorEhIJtLyK8HQ2Yyw7nMNvasrPmmLPImWvtii5QtZbh4dC2xf74ZNbfTheTi4uzGNLRgztPJXXajr5GbZnvkUrlExX8udNpB+etIZaX7ApXen30eB81ou9E5PdANMpNupj0dagyrco= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550576033147.00660655355966; Sun, 23 Aug 2026 22:49:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNYM-0001Fk-De; Mon, 24 Aug 2026 01:49:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNXz-0001DR-IH for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:42 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNXx-0001jT-SJ for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:39 -0400 Received: by mail-pj1-x102f.google.com with SMTP id 98e67ed59e1d1-38dc69c74b8so3268142a91.0 for ; Sun, 23 Aug 2026 22:48:37 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.48.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:48:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550516; x=1788155316; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=zYwYUcVG2VW3tzoyHfgQKdzE7Y51E+RzfXFNYF+fePE=; b=KZByyVRzWUH9AZtJ7XH/4plMfBRE7mtjDkA18n9k1Ut59S2XbxSvdszZyPyNER9UGL pAnOFffRTnmChMQcpj56n339qnw5iKhChgyuhJbAdf/c8wp273wPt9C3Eyeh1zamvwf1 xXdJmApe+MihwX8IqdlCJ1qyq/+A4skjUaYG1sVFQIgtiIa4DJjZ2/aPBQJaQRMEVNUN CgCURg+8vniAlicNOzmxzJmreQ3UObTYB/z8gU92ko72ws4+yoravfcXfo4QyR2j9NcQ emgcodrZY3lr/o/pJw6yUcxGJvNiYA7BvnblYgJ0SlB8xCyjbG9I5rRx897NJaGJ/R4O yX/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550516; x=1788155316; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=zYwYUcVG2VW3tzoyHfgQKdzE7Y51E+RzfXFNYF+fePE=; b=mjw4mUpLzA76wmOpKxgzn4aqTuI39zgW/vZIZFwofnhKHuOCUGMCozYiU/zdKF0PRp i0AYCUi2u9RQfGHeCHQ2XEDEv0m4j6R8s0rVSKF62jNRgA723JjzI+cMXLGWDz7o+utL WvlRPohdSZaZ2cACYBLGbL1z4ORYao/oTWbYrsaruBM/qfeLffycrQlHq/I2uycw7o8F P7QuOjpwben9qJoNoy3Fec4zS0fKB+kdMJKiMm/Qi0GDb3Y0LCDZYe/kv3/UAaa9yCuu 3mxY87Bs/aPehfo2fwjGTeqcwbeLYrnBTg0qOvrOGkIGMuE89yzCb9vo5lPQ2+iOk47b sEgQ== X-Gm-Message-State: AFuF++m9XyNupULS+AXVfUvYAPq3bqRdvcZCCC4s/3sGcrdvctk5F4ku uuOq7vtQkHbccgMqytTodPstzmrCmRXVMRDyLaXJEGJcz26aXfTVWDT6YdqkBQ== X-Gm-Gg: AR+sD13UXf6BsXP5EObwP1Akaxs5OhUtJyMZaPOcy2748ylVTOIDY3vLQ7OsgrZ9v2Y 9+XD8qKBOWyVBRAkJj9WAArAX/okCDrnmMvE/9VI2fX9c3dca30cY6y7XB5owDXa7+1r9MoUv7w xed5VMjb3LC4NEZ3bEbkcpdLSjvUz+HsQ2whi9Li2zfFosLbkNZrr/3fsl3D+HX5kn57m4vJEz3 4+lu3XM9q1GcbQSsb4GVvrzlWCwDqyrKvnKFLQvArA7rhDKCr7JAJBvdIzyF8luHa7m5ZbwECuz jvxqC9tZ32X3DfDBczNcf6tH3jvxtOaK/C9QtXid2vMvckNA26dUfkb5pv0BmZixSAPL29ZCmJV 0lm25PzBJZ5iS1AqKfROi1AYQDwaFQx2tq2l3N8GyYKBh7UiugN+PrlCHrw6FK+/O03EKAh5cjp pyAmQVt5kLn9spKPy0TbTDTH6HSjLpoxMFJv+bT6i3vuGny/lesK0KHV+h/EcytKBlYjXeX+kgT PjOH7o= X-Received: by 2002:a17:90b:5886:b0:395:4de4:92c7 with SMTP id 98e67ed59e1d1-395dee7d5f6mr30817566a91.3.1787550516240; Sun, 23 Aug 2026 22:48:36 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Tao Ding , Junze Cao , Daniel Henrique Barboza , Alistair Francis Subject: [PULL v2 06/96] hw/riscv: k230: add gsdma in K230 board Date: Mon, 24 Aug 2026 15:46:36 +1000 Message-ID: <20260824054806.2790041-7-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102f; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102f.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550576640158500 Content-Type: text/plain; charset="utf-8" From: Tao Ding This commit replaces the unimplemented part of GSDMA in K230. And connect t= he interrupt to plic. Update K230.rst. Signed-off-by: Tao Ding Reviewed-by: Junze Cao Reviewed-by: Daniel Henrique Barboza Message-ID: <20260808062227.66961-3-dingtao0430@163.com> Signed-off-by: Alistair Francis --- docs/system/riscv/k230.rst | 1 + include/hw/riscv/k230.h | 3 +++ hw/riscv/k230.c | 12 +++++++++--- hw/riscv/Kconfig | 1 + 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/docs/system/riscv/k230.rst b/docs/system/riscv/k230.rst index 06a819fbdb..5cbc0b14bc 100644 --- a/docs/system/riscv/k230.rst +++ b/docs/system/riscv/k230.rst @@ -21,6 +21,7 @@ The ``k230`` machine supports the following devices: * 2 K230 Watchdog Timer * 5 UART * K230 DDRC CFG and DDR PHY +* System Direct Memory Access (SDMA) =20 Boot options ------------ diff --git a/include/hw/riscv/k230.h b/include/hw/riscv/k230.h index 80ca16338c..8879d56d98 100644 --- a/include/hw/riscv/k230.h +++ b/include/hw/riscv/k230.h @@ -19,6 +19,7 @@ #include "hw/misc/k230_ddr.h" #include "hw/riscv/riscv_hart.h" #include "hw/watchdog/k230_wdt.h" +#include "hw/dma/k230_gsdma.h" =20 #define C908_CPU_HARTID (0) =20 @@ -36,6 +37,7 @@ typedef struct K230SoCState { K230DDRCfgState ddr_cfg; K230DDRPhyState ddr_phy; K230WdtState wdt[2]; + K230GSDMAState gsdma; MemoryRegion sram; MemoryRegion bootrom; =20 @@ -133,6 +135,7 @@ enum { K230_UART4_IRQ =3D 20, K230_WDT0_IRQ =3D 107, K230_WDT1_IRQ =3D 108, + K230_GSDMA_IRQ =3D 140, }; =20 #define K230_UART_COUNT 5 diff --git a/hw/riscv/k230.c b/hw/riscv/k230.c index 627150b463..49c3b50c57 100644 --- a/hw/riscv/k230.c +++ b/hw/riscv/k230.c @@ -116,6 +116,7 @@ static void k230_soc_init(Object *obj) s->ddr_cfg.phy =3D &s->ddr_phy; object_initialize_child(obj, "k230-wdt0", &s->wdt[0], TYPE_K230_WDT); object_initialize_child(obj, "k230-wdt1", &s->wdt[1], TYPE_K230_WDT); + object_initialize_child(obj, "k230-gsdma", &s->gsdma, TYPE_K230_GSDMA); =20 qdev_prop_set_uint32(DEVICE(cpu0), "hartid-base", 0); qdev_prop_set_string(DEVICE(cpu0), "cpu-type", TYPE_RISCV_CPU_THEAD_C9= 08); @@ -222,6 +223,14 @@ static void k230_soc_realize(DeviceState *dev, Error *= *errp) sysbus_connect_irq(SYS_BUS_DEVICE(&s->wdt[1]), 0, qdev_get_gpio_in(DEVICE(s->c908_plic), K230_WDT1_IR= Q)); =20 + /* Gsdma */ + if (!sysbus_realize(SYS_BUS_DEVICE(&s->gsdma), errp)) { + return; + } + sysbus_mmio_map(SYS_BUS_DEVICE(&s->gsdma), 0, memmap[K230_DEV_GSDMA].b= ase); + sysbus_connect_irq(SYS_BUS_DEVICE(&s->gsdma), 0, + qdev_get_gpio_in(DEVICE(s->c908_plic), K230_GSDMA_I= RQ)); + /* unimplemented devices */ create_unimplemented_device("kpu.l2-cache", memmap[K230_DEV_KPU_L2_CACHE].base, @@ -237,9 +246,6 @@ static void k230_soc_realize(DeviceState *dev, Error **= errp) memmap[K230_DEV_AI_2D_ENGINE].base, memmap[K230_DEV_AI_2D_ENGINE].size); =20 - create_unimplemented_device("gsdma", memmap[K230_DEV_GSDMA].base, - memmap[K230_DEV_GSDMA].size); - create_unimplemented_device("dma", memmap[K230_DEV_DMA].base, memmap[K230_DEV_DMA].size); =20 diff --git a/hw/riscv/Kconfig b/hw/riscv/Kconfig index de37c08cae..d28ac06043 100644 --- a/hw/riscv/Kconfig +++ b/hw/riscv/Kconfig @@ -162,3 +162,4 @@ config K230 select SERIAL_MM select UNIMP select K230_WDT + select K230_GSDMA --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550648; cv=none; d=zohomail.com; s=zohoarc; b=XTnswfIy0s2Z9Pyvt+mFhgG3SHL/dERowGxZo1O8BsZeYb3Yw1tJ6w5x+gf9j9gTDSZ2rF2mY1ffYWDblipY3YggCiiWEvQOJmDb2kB0d5GqXb1o/UdF0Tg/ZPa8guxXyz7Uba9l622bNNcftazQjJWfsjREPd2Bg0qt1oKQTfk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550648; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ISGwObacQP6g+5gFiDUcuJ6IB5GVTpdCetCfXhn1piQ=; b=a0mc72ubWf/z76D/6Cfd8PYRsvjLmI6buXtImWyd3ZDxB341PsplhEcGBBNfGL49s8QiQwVZNDdNq5OhnqBFVsDIA1gl251DkWP3b9oEPwRVi7LOY5uMxn1BtAt5ZPmfUhbGAknPmBAb+NvaBnqWXO3bKi9x4mG0E6MJzdiXJgs= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550648446607.942265899112; Sun, 23 Aug 2026 22:50:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNYa-0001PP-62; Mon, 24 Aug 2026 01:49:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNY5-0001EQ-FY for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:46 -0400 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNY1-0001kJ-RN for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:45 -0400 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-38ec1402b05so2251819a91.2 for ; Sun, 23 Aug 2026 22:48:41 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.48.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:48:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550520; x=1788155320; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ISGwObacQP6g+5gFiDUcuJ6IB5GVTpdCetCfXhn1piQ=; b=AF0OzTWtSYdTOBEpOpQdtVqcMDxb016n27QsJQn6v45ks79wrbK+5Tl3i4/XmzFelp mGunW8mS+GVR2DuD7wyUMAJeROfsevQfV5Y5cgbLAnWsxBRmdTTIuv6wRS8cImsjJ6r/ YCXMExuTxn3aJvEq3PsUkSmLey+HJto8Jls4BwkJ5bgICDYKYiv0moAqJ/4c4diS3ibt u1HhBK8bI726C+Lw9Ra/3njE7UB/8NYzYv5CNVvoy+Laajs80nax30Px8syw7HKiREJI m7eUYsp2soJqDRbLb9uUrmAXGL+/rLiOh1deM8Vr6xf1PU7F4Gu/wthP82AF7yeYLTp4 Js4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550520; x=1788155320; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=ISGwObacQP6g+5gFiDUcuJ6IB5GVTpdCetCfXhn1piQ=; b=KlbToagmQkRT4HtQhrX3BEvFLT+33E15eEhz1fSiNOCUE4+x18fPx5ZmHvelP7wuI3 uPUhRTWQYK2FpWDRZ2QTYtYz9CP0UNK06zWcWOPg+2gjXanRNqRcS60G5ncyJJfPFi1A WO3nNJj8Ke8LTuQPe2iXXLn9lthXzzo7CrJErFRcnzGiQKWILu0UghwK9d1s5/dDCeJV 9Fw4Xz+I/1qKnodyPpfFEjH1E9bP1KVLjGQ956AFXBb07SYgdkTPtoVbhuPkBQbj15bb /ElceF5pTuPeKKcGZlJn2/aTALhxza/+jTWXkDiIqNW6tXciE9EnYEIVJJqUdML1mXTh T4QA== X-Gm-Message-State: AFuF++lnYF8idAAkvjQKzMV0vaIkBv0xvD4sP18zt3KTkttugyQuKC8o Dx+iYARfYEHzgDP8EVfQVscFv6Tt5dLKQbJA6v5fM3a8Qnixe1mJ3/wTQ2KSqA== X-Gm-Gg: AR+sD125g+hBsTK4DT91Wm1tcunSF7Zi1znkfgjIfgLuVD6SX0C19QRLa0yQMKQoSdF izdWDcd/F1qvC0TpMieFi9f+tHG8osBOEt+sCG0Grjh/xIT/IXa3VTCtaGZlmQlFB8DegTAvcU2 BUq12FB4/YC+INIf08fGVcMPFu3UqTJo8amnmc+6rc/KawzCQVZJD/OCcKaSWMASRFrXSaMvKmQ EDNKzz5985H/8zU51O8Wa/dDsoYbeJEbiycEqH9dHaLvWsTMbwrSqqfgdgMZH4u1dkkL3fTfkJK 8LS+1fQY1NllTL/UgcX6zp+KcHdKaEbEeVY8B5Naulw3al0Rl1QX4j4VKtIqCAc8xjSiovBhSc0 YcuPp+VXEkv0M7S4u6zG4BQSb1/CK/+1tTf9l8+LXZ13ld504ec54/XcCH7iWgdZBPdF/eA+chG SvoIVDGYO3PLrO2Z11xhVznCAFWYkJ31IulzAg+g4uLWcLlls02zkCShmFg/5GKgmOUot1qecWF kmTyQ== X-Received: by 2002:a17:90b:528f:b0:380:f85c:94b4 with SMTP id 98e67ed59e1d1-395c35636acmr43986128a91.7.1787550520076; Sun, 23 Aug 2026 22:48:40 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Tao Ding , Daniel Henrique Barboza , Junze Cao , Alistair Francis Subject: [PULL v2 07/96] tests/qtest: add test for K230 gsdma Date: Mon, 24 Aug 2026 15:46:37 +1000 Message-ID: <20260824054806.2790041-8-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102c; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102c.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550648905158500 Content-Type: text/plain; charset="utf-8" From: Tao Ding This commit adds test cases for GSDMA. Imitate the behavior of the driver, set LLT and sdma registers. After the data transmission is completed, check the destination address dat= a. Update MAINTAINERS for this test. Run this qtest: $ mkdir build && cd build && ../configure --target-list=3D"riscv64-soft= mmu" $ QTEST_QEMU_BINARY=3D./qemu-system-riscv64 tests/qtest/k230-gsdma-te= st Signed-off-by: Tao Ding Reviewed-by: Daniel Henrique Barboza Reviewed-by: Junze Cao Message-ID: <20260808062227.66961-4-dingtao0430@163.com> Signed-off-by: Alistair Francis --- MAINTAINERS | 3 + docs/system/riscv/k230.rst | 1 + include/hw/misc/k230_decomp_gzip.h | 92 ++++++ hw/misc/k230_decomp_gzip.c | 511 +++++++++++++++++++++++++++++ tests/qtest/k230-gsdma-test.c | 201 ++++++++++++ hw/misc/Kconfig | 3 + hw/misc/meson.build | 1 + hw/misc/trace-events | 8 +- tests/qtest/meson.build | 2 +- 9 files changed, 816 insertions(+), 6 deletions(-) create mode 100644 include/hw/misc/k230_decomp_gzip.h create mode 100644 hw/misc/k230_decomp_gzip.c create mode 100644 tests/qtest/k230-gsdma-test.c diff --git a/MAINTAINERS b/MAINTAINERS index 027db78b39..ff804b3310 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1848,13 +1848,16 @@ F: hw/misc/k230_ddr.c F: hw/riscv/k230.c F: hw/watchdog/k230_wdt.c F: hw/dma/k230_gsdma.c +F: hw/misc/k230_decomp_gzip.c F: include/hw/misc/k230_ddr.h F: include/hw/riscv/k230.h F: include/hw/watchdog/k230_wdt.h F: include/hw/dma/k230_gsdma.h +F: include/hw/misc/k230_decomp_gzip.h F: tests/functional/riscv64/test_k230.py F: tests/qtest/k230-ddr-test.c F: tests/qtest/k230-wdt-test.c +F: tests/qtest/k230-gsdma-test.c =20 RX Machines ----------- diff --git a/docs/system/riscv/k230.rst b/docs/system/riscv/k230.rst index 5cbc0b14bc..237611eddf 100644 --- a/docs/system/riscv/k230.rst +++ b/docs/system/riscv/k230.rst @@ -22,6 +22,7 @@ The ``k230`` machine supports the following devices: * 5 UART * K230 DDRC CFG and DDR PHY * System Direct Memory Access (SDMA) +* GZIP Decompress Engine (Decomp_gzip) =20 Boot options ------------ diff --git a/include/hw/misc/k230_decomp_gzip.h b/include/hw/misc/k230_deco= mp_gzip.h new file mode 100644 index 0000000000..9911af0095 --- /dev/null +++ b/include/hw/misc/k230_decomp_gzip.h @@ -0,0 +1,92 @@ +/* + * K230 Decompress Engine + * + * Copyright (c) 2026 Tao Ding + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef HW_MISC_K230_DECOMP_GZIP_H +#define HW_MISC_K230_DECOMP_GZIP_H + +#include +#include "hw/core/sysbus.h" + +#define TYPE_K230_DECOMP_GZIP "riscv.k230.decomp-gzip" +OBJECT_DECLARE_SIMPLE_TYPE(K230DecompGzipState, K230_DECOMP_GZIP) + +/* K230 DECOMP GZIP ACK input */ +enum { + K230_DECOMP_GZIP_GPIO_DMA_WRITE_ACK, + K230_DECOMP_GZIP_GPIO_DMA_READ_ACK, + K230_DECOMP_GZIP_NUM_GPIOS_IN, +}; + +/* K230 DECOMP GZIP REQ output */ +enum { + K230_DECOMP_GZIP_GPIO_DECOMP_CTRL_EN, + K230_DECOMP_GZIP_GPIO_DMA_WRITE_REQ, + K230_DECOMP_GZIP_GPIO_DMA_READ_REQ, + K230_DECOMP_GZIP_NUM_GPIOS_OUT, +}; + +#define K230_DECOMP_GZIP_MMIO_SIZE 0x4000 + +/* K230 DECOMP GZIP Registers map */ +/* Start decompression controller */ +#define K230_DECOMP_GZIP_DECOMP_START 0x00 +/* Source data length register */ +#define K230_DECOMP_GZIP_GZIP_SRC_SIZE 0x04 +/* Output data length register */ +#define K230_DECOMP_GZIP_GZIP_OUT_SIZE 0x08 +/* Decompress status register */ +#define K230_DECOMP_GZIP_DECOMP_STAT 0x0c + +/* Start decompression controller */ +#define K230_DECOMP_GZIP_START (1U << 0) + +#define K230_DECOMP_GZIP_CTRL_EN (1U << 31) +#define K230_DECOMP_GZIP_DMA_IN_MASK 0x7fffffffU + +#define K230_DECOMP_GZIP_STAT_CRC_OK (1U << 10) +#define K230_DECOMP_GZIP_STAT_STATE_MASK 0xfU + +#define K230_DECOMP_GZIP_BLOCK_SIZE 0x00020000 +#define K230_DECOMP_GZIP_SRAM_IN_BASE 0x80000 +#define K230_DECOMP_GZIP_SRAM_OUT_BASE 0 + +typedef struct K230DecompGzipSlotState { + uint32_t slot; /* Slot index */ + /* + * Data offset in current slot. + * First valid data in input buffer. Last valid data in output buffer. + */ + uint32_t current_offset; +} K230DecompGzipSlotState; + +struct K230DecompGzipState { + SysBusDevice parent_obj; + + MemoryRegion iomem; + hwaddr sram_base; + qemu_irq signal_out[K230_DECOMP_GZIP_NUM_GPIOS_OUT]; + uint32_t decomp_start; + uint32_t gzip_src_size; + uint32_t gzip_out_size; + uint32_t decomp_stat; + K230DecompGzipSlotState input; /* decomp gzip ring input */ + K230DecompGzipSlotState output; /* decomp gzip ring output */ + uint32_t total_requested; + uint32_t total_produced; + bool active; + bool in_kick; + bool zstream_inited; + bool stream_end; + /* Read from ring input. */ + uint8_t input_buf[K230_DECOMP_GZIP_BLOCK_SIZE]; + /* Write to ring output. */ + uint8_t output_buf[K230_DECOMP_GZIP_BLOCK_SIZE]; + z_stream zs; +}; + +#endif diff --git a/hw/misc/k230_decomp_gzip.c b/hw/misc/k230_decomp_gzip.c new file mode 100644 index 0000000000..0d8a3b2d2e --- /dev/null +++ b/hw/misc/k230_decomp_gzip.c @@ -0,0 +1,511 @@ +/* + * Kendryte K230 GZIP decompression engine + * + * Copyright (c) 2026 Tao Ding + * + * SPDX-License-Identifier: GPL-2.0-or-later + * + * Decompression accelerator is mainly used to implement hardware + * GZIP decompression function. (K230 TRM section 15) + */ + +#include "qemu/osdep.h" +#include "qemu/log.h" +#include "qemu/module.h" +#include "hw/core/qdev-properties.h" +#include "migration/vmstate.h" +#include "system/address-spaces.h" +#include "hw/core/irq.h" +#include "hw/misc/k230_decomp_gzip.h" +#include "trace.h" + +#define GZIP_METHOD_DEFLATE 8 +#define GZIP_METHOD_VENDOR_9 9 + +#define DEFLATE_BTYPE_DYNAMIC 2 + +#define K230_DECOMP_GZIP_OUTPUT_SLOTS 4 +#define K230_DECOMP_GZIP_INPUT_SLOTS 2 + +static void k230_decomp_gzip_set_output(K230DecompGzipState *s, int line, + int level) +{ + qemu_set_irq(s->signal_out[line], level); +} + +static bool k230_decomp_gzip_read_mem(K230DecompGzipState *s, hwaddr addr, + void *buf, size_t len) +{ + MemTxResult ret =3D address_space_read(&address_space_memory, + s->sram_base + addr, + MEMTXATTRS_UNSPECIFIED, buf, len); + + return ret =3D=3D MEMTX_OK; +} + +static bool k230_decomp_gzip_write_mem(K230DecompGzipState *s, hwaddr addr, + const void *buf, size_t len) +{ + return address_space_write(&address_space_memory, s->sram_base + addr, + MEMTXATTRS_UNSPECIFIED, buf, len) =3D=3D ME= MTX_OK; +} + +static hwaddr k230_decomp_gzip_output_addr(K230DecompGzipState *s) +{ + return K230_DECOMP_GZIP_SRAM_OUT_BASE + + s->output.slot * K230_DECOMP_GZIP_BLOCK_SIZE + + s->output.current_offset; +} + +static hwaddr k230_decomp_gzip_input_addr(K230DecompGzipState *s) +{ + return s->input.slot * K230_DECOMP_GZIP_BLOCK_SIZE + + K230_DECOMP_GZIP_SRAM_IN_BASE; +} + +static uint32_t k230_decomp_gzip_current_input_size(K230DecompGzipState *s) +{ + if (s->total_requested =3D=3D 0) { + return 0; + } + + return ((s->total_requested - 1) % K230_DECOMP_GZIP_BLOCK_SIZE) + 1; +} + +static void k230_decomp_gzip_update_ctrl_en(K230DecompGzipState *s) +{ + int level =3D s->active && !!(s->gzip_src_size & K230_DECOMP_GZIP_CTRL= _EN); + + k230_decomp_gzip_set_output(s, K230_DECOMP_GZIP_GPIO_DECOMP_CTRL_EN, + level); +} + +static void k230_decomp_gzip_reset_stream(K230DecompGzipState *s) +{ + if (s->zstream_inited) { + inflateEnd(&s->zs); + s->zstream_inited =3D false; + } + memset(&s->zs, 0, sizeof(s->zs)); +} + +static void k230_decomp_gzip_finish(K230DecompGzipState *s, bool crc_ok) +{ + s->active =3D false; + k230_decomp_gzip_reset_stream(s); + k230_decomp_gzip_update_ctrl_en(s); + if (crc_ok) { + s->decomp_stat |=3D K230_DECOMP_GZIP_STAT_CRC_OK; + } else { + s->decomp_stat &=3D ~K230_DECOMP_GZIP_STAT_CRC_OK; + } +} + +static bool k230_decomp_gzip_load_input(K230DecompGzipState *s, + uint32_t addr, uint32_t size) +{ + s->input.current_offset =3D 0; + + return k230_decomp_gzip_read_mem(s, addr, s->input_buf, size); +} + +static bool k230_decomp_gzip_request_input(K230DecompGzipState *s) +{ + uint32_t total_requested =3D s->total_requested; + + k230_decomp_gzip_set_output(s, K230_DECOMP_GZIP_GPIO_DMA_WRITE_REQ, 1); + if (s->total_requested =3D=3D total_requested) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: dma write request not acknowledged\n", + TYPE_K230_DECOMP_GZIP); + return false; + } + return true; +} + +static bool k230_decomp_gzip_request_output(K230DecompGzipState *s) +{ + uint32_t slot =3D s->output.slot; + uint32_t current_offset =3D s->output.current_offset; + + k230_decomp_gzip_set_output(s, K230_DECOMP_GZIP_GPIO_DMA_READ_REQ, 1); + if (s->output.slot =3D=3D slot && + s->output.current_offset =3D=3D current_offset) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: dma read request not acknowledged\n", + TYPE_K230_DECOMP_GZIP); + return false; + } + return true; +} + +static bool k230_decomp_gzip_init_stream(K230DecompGzipState *s) +{ + uint8_t btype =3D (s->input_buf[10] >> 1) & 0x3; + if (btype !=3D DEFLATE_BTYPE_DYNAMIC) { + qemu_log_mask(LOG_GUEST_ERROR, + "%s: unsupported DEFLATE BTYPE %u\n", + TYPE_K230_DECOMP_GZIP, btype); + return false; + } + + /* The compression script for K230 will modify the third byte to 0x9 */ + if (s->input_buf[2] =3D=3D GZIP_METHOD_VENDOR_9) { + s->input_buf[2] =3D GZIP_METHOD_DEFLATE; + } + + if (inflateInit2(&s->zs, 15 + 16) !=3D Z_OK) { + return false; + } + + s->zstream_inited =3D true; + return true; +} + +static bool k230_decomp_gzip_run_inflate(K230DecompGzipState *s) +{ + uint32_t output_size =3D s->gzip_out_size; + uint32_t current_input_size =3D k230_decomp_gzip_current_input_size(s); + uint32_t avail_in; + uint32_t avail_out; + uint32_t consumed; + uint32_t produced; + int ret; + + avail_in =3D current_input_size - s->input.current_offset; + avail_out =3D K230_DECOMP_GZIP_BLOCK_SIZE - s->output.current_offset; + + s->zs.next_in =3D s->input_buf + s->input.current_offset; + s->zs.avail_in =3D avail_in; + s->zs.next_out =3D s->output_buf; + s->zs.avail_out =3D avail_out; + + ret =3D inflate(&s->zs, Z_NO_FLUSH); + if (ret !=3D Z_OK && ret !=3D Z_STREAM_END && ret !=3D Z_BUF_ERROR) { + return false; + } + + consumed =3D avail_in - s->zs.avail_in; + produced =3D avail_out - s->zs.avail_out; + + if (produced) { + if (s->total_produced + produced > output_size || + !k230_decomp_gzip_write_mem(s, k230_decomp_gzip_output_addr(s), + s->output_buf, produced)) { + return false; + } + s->output.current_offset +=3D produced; + s->total_produced +=3D produced; + } + + if (consumed) { + s->input.current_offset +=3D consumed; + } + + if (ret =3D=3D Z_STREAM_END) { + s->stream_end =3D true; + if (s->total_produced !=3D output_size) { + return false; + } + } + + return true; +} + +static void k230_decomp_gzip_kick(K230DecompGzipState *s) +{ + if (!s->active || s->in_kick) { + return; + } + + uint32_t input_size =3D s->gzip_src_size & K230_DECOMP_GZIP_DMA_IN_MAS= K; + s->in_kick =3D true; + while (s->active) { + uint32_t current_input_size =3D k230_decomp_gzip_current_input_siz= e(s); + /* Output is full or last block */ + if (s->output.current_offset =3D=3D K230_DECOMP_GZIP_BLOCK_SIZE || + (s->stream_end && s->output.current_offset !=3D 0)) { + if (!k230_decomp_gzip_request_output(s)) { + k230_decomp_gzip_finish(s, false); + break; + } + continue; + } + + if (!s->zstream_inited) { + if (!k230_decomp_gzip_request_input(s) || + !k230_decomp_gzip_init_stream(s)) { + k230_decomp_gzip_finish(s, false); + break; + } + continue; + } + + /* Transfer finish */ + if (s->stream_end) { + k230_decomp_gzip_finish(s, + s->total_produced =3D=3D s->gzip_out_s= ize); + break; + } + + /* Input buf has has been fully decompreed, need request more */ + if (s->input.current_offset =3D=3D current_input_size) { + if (s->total_requested < input_size) { + if (!k230_decomp_gzip_request_input(s)) { + k230_decomp_gzip_finish(s, false); + break; + } + continue; + } + k230_decomp_gzip_finish(s, false); + break; + } + + /* Decompress the data, input buf or output buf are consumed in on= e block */ + if (!k230_decomp_gzip_run_inflate(s)) { + k230_decomp_gzip_finish(s, false); + break; + } + } + s->in_kick =3D false; +} + +static void k230_decomp_gzip_handle_ack(void *opaque, int n, int level) +{ + K230DecompGzipState *s =3D opaque; + + if (!level || !s->active) { + return; + } + + switch (n) { + case K230_DECOMP_GZIP_GPIO_DMA_WRITE_ACK: + { + uint32_t input_size =3D s->gzip_src_size & K230_DECOMP_GZIP_DMA_IN= _MASK; + uint32_t chunk =3D MIN(K230_DECOMP_GZIP_BLOCK_SIZE, + input_size - s->total_requested); + + if (!k230_decomp_gzip_load_input(s, k230_decomp_gzip_input_addr(s), + chunk)) { + k230_decomp_gzip_finish(s, false); + return; + } + s->total_requested +=3D chunk; + s->input.slot =3D (s->input.slot + 1) % K230_DECOMP_GZIP_INPUT_SLO= TS; + break; + } + case K230_DECOMP_GZIP_GPIO_DMA_READ_ACK: + if (s->output.current_offset =3D=3D 0) { + k230_decomp_gzip_finish(s, false); + return; + } + s->output.slot =3D (s->output.slot + 1) % K230_DECOMP_GZIP_OUTPUT_= SLOTS; + s->output.current_offset =3D 0; + break; + default: + qemu_log_mask(LOG_GUEST_ERROR, + "%s: invalid DMA acknowledgment signal %d\n", + TYPE_K230_DECOMP_GZIP, n); + return; + } + + k230_decomp_gzip_kick(s); +} + +static void k230_decomp_gzip_start(K230DecompGzipState *s) +{ + uint32_t input_size =3D s->gzip_src_size & K230_DECOMP_GZIP_DMA_IN_MAS= K; + + k230_decomp_gzip_reset_stream(s); + s->decomp_stat &=3D ~K230_DECOMP_GZIP_STAT_CRC_OK; + s->total_requested =3D 0; + s->total_produced =3D 0; + s->stream_end =3D false; + memset(&s->input, 0, sizeof(s->input)); + memset(&s->output, 0, sizeof(s->output)); + + if (!(s->gzip_src_size & K230_DECOMP_GZIP_CTRL_EN) || + input_size =3D=3D 0 || s->gzip_out_size =3D=3D 0) { + k230_decomp_gzip_finish(s, false); + return; + } + + s->active =3D true; + k230_decomp_gzip_update_ctrl_en(s); + k230_decomp_gzip_kick(s); +} + +static uint64_t k230_decomp_gzip_read(void *opaque, hwaddr offset, + unsigned size) +{ + K230DecompGzipState *s =3D opaque; + uint64_t value =3D 0; + + switch (offset) { + case K230_DECOMP_GZIP_DECOMP_START: + value =3D s->decomp_start & ~K230_DECOMP_GZIP_START; /* start bit = is write only */ + break; + case K230_DECOMP_GZIP_GZIP_SRC_SIZE: + value =3D s->gzip_src_size; + break; + case K230_DECOMP_GZIP_GZIP_OUT_SIZE: + value =3D s->gzip_out_size; + break; + case K230_DECOMP_GZIP_DECOMP_STAT: + value =3D s->decomp_stat; + break; + default: + qemu_log_mask(LOG_GUEST_ERROR, + "%s: bad read offset 0x%" HWADDR_PRIx "\n", + TYPE_K230_DECOMP_GZIP, offset); + break; + } + + trace_k230_decomp_gzip_read(offset, size, value); + return value; +} + +static void k230_decomp_gzip_write(void *opaque, hwaddr offset, + uint64_t value, unsigned size) +{ + K230DecompGzipState *s =3D opaque; + + trace_k230_decomp_gzip_write(offset, size, value); + + switch (offset) { + case K230_DECOMP_GZIP_DECOMP_START: + s->decomp_start =3D value; + if (value & K230_DECOMP_GZIP_START) { + k230_decomp_gzip_start(s); + } + break; + case K230_DECOMP_GZIP_GZIP_SRC_SIZE: + s->gzip_src_size =3D value; + k230_decomp_gzip_update_ctrl_en(s); + break; + case K230_DECOMP_GZIP_GZIP_OUT_SIZE: + s->gzip_out_size =3D value; + break; + case K230_DECOMP_GZIP_DECOMP_STAT: + break; + default: + qemu_log_mask(LOG_GUEST_ERROR, + "%s: bad write offset 0x%" HWADDR_PRIx "\n", + TYPE_K230_DECOMP_GZIP, offset); + break; + } +} + +static const MemoryRegionOps k230_decomp_gzip_ops =3D { + .read =3D k230_decomp_gzip_read, + .write =3D k230_decomp_gzip_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid.min_access_size =3D 4, + .valid.max_access_size =3D 4, + .impl.min_access_size =3D 4, + .impl.max_access_size =3D 4, +}; + +static const VMStateDescription vmstate_k230_decomp_gzip_slot =3D { + .name =3D "k230.decomp-gzip.slot", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32(slot, K230DecompGzipSlotState), + VMSTATE_UINT32(current_offset, K230DecompGzipSlotState), + VMSTATE_END_OF_LIST() + } +}; + +static const VMStateDescription vmstate_k230_decomp_gzip =3D { + .name =3D "k230.decomp-gzip", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32(decomp_start, K230DecompGzipState), + VMSTATE_UINT32(gzip_src_size, K230DecompGzipState), + VMSTATE_UINT32(gzip_out_size, K230DecompGzipState), + VMSTATE_UINT32(decomp_stat, K230DecompGzipState), + VMSTATE_STRUCT(input, K230DecompGzipState, 1, + vmstate_k230_decomp_gzip_slot, + K230DecompGzipSlotState), + VMSTATE_STRUCT(output, K230DecompGzipState, 1, + vmstate_k230_decomp_gzip_slot, + K230DecompGzipSlotState), + VMSTATE_UINT32(total_requested, K230DecompGzipState), + VMSTATE_UINT32(total_produced, K230DecompGzipState), + VMSTATE_BOOL(active, K230DecompGzipState), + VMSTATE_BOOL(in_kick, K230DecompGzipState), + VMSTATE_BOOL(zstream_inited, K230DecompGzipState), + VMSTATE_BOOL(stream_end, K230DecompGzipState), + VMSTATE_UINT8_ARRAY(input_buf, K230DecompGzipState, + K230_DECOMP_GZIP_BLOCK_SIZE), + VMSTATE_UINT8_ARRAY(output_buf, K230DecompGzipState, + K230_DECOMP_GZIP_BLOCK_SIZE), + VMSTATE_END_OF_LIST() + } +}; + +static void k230_decomp_gzip_reset_hold(Object *obj, ResetType type) +{ + K230DecompGzipState *s =3D K230_DECOMP_GZIP(obj); + + k230_decomp_gzip_reset_stream(s); + memset(&s->zs, 0, sizeof(s->zs)); + s->decomp_start =3D 0; + s->gzip_src_size =3D 0; + s->gzip_out_size =3D 0; + s->decomp_stat =3D 0; + memset(&s->input, 0, sizeof(s->input)); + memset(&s->output, 0, sizeof(s->output)); + s->total_requested =3D 0; + s->total_produced =3D 0; + s->active =3D false; + s->in_kick =3D false; + s->stream_end =3D false; +} + +static void k230_decomp_gzip_realize(DeviceState *dev, Error **errp) +{ + K230DecompGzipState *s =3D K230_DECOMP_GZIP(dev); + SysBusDevice *sbd =3D SYS_BUS_DEVICE(dev); + + memory_region_init_io(&s->iomem, OBJECT(dev), &k230_decomp_gzip_ops, s, + TYPE_K230_DECOMP_GZIP, + K230_DECOMP_GZIP_MMIO_SIZE); + sysbus_init_mmio(sbd, &s->iomem); + qdev_init_gpio_in(dev, k230_decomp_gzip_handle_ack, + K230_DECOMP_GZIP_NUM_GPIOS_IN); + qdev_init_gpio_out(dev, s->signal_out, + K230_DECOMP_GZIP_NUM_GPIOS_OUT); +} + +static const Property k230_decomp_gzip_properties[] =3D { + DEFINE_PROP_UINT64("sram-base", K230DecompGzipState, sram_base, 0), +}; + +static void k230_decomp_gzip_class_init(ObjectClass *oc, const void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(oc); + ResettableClass *rc =3D RESETTABLE_CLASS(oc); + + dc->realize =3D k230_decomp_gzip_realize; + rc->phases.hold =3D k230_decomp_gzip_reset_hold; + device_class_set_props(dc, k230_decomp_gzip_properties); + dc->vmsd =3D &vmstate_k230_decomp_gzip; + dc->desc =3D "Kendryte K230 GZIP decompression engine"; +} + +static const TypeInfo k230_decomp_gzip_info =3D { + .name =3D TYPE_K230_DECOMP_GZIP, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(K230DecompGzipState), + .class_init =3D k230_decomp_gzip_class_init, +}; + +static void k230_decomp_gzip_register_types(void) +{ + type_register_static(&k230_decomp_gzip_info); +} + +type_init(k230_decomp_gzip_register_types) diff --git a/tests/qtest/k230-gsdma-test.c b/tests/qtest/k230-gsdma-test.c new file mode 100644 index 0000000000..44d4248739 --- /dev/null +++ b/tests/qtest/k230-gsdma-test.c @@ -0,0 +1,201 @@ +/* + * QTest testcase for K230 GSDMA + * + * Copyright (c) 2026 Tao Ding + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "qemu/bitops.h" +#include "exec/hwaddr.h" +#include "hw/dma/k230_gsdma.h" +#include "libqtest.h" + +#define K230_GSDMA_BASE 0x80800000 +#define TEST_LLT_ADDR0 0x10000 +#define TEST_LLT_ADDR1 0x10040 +#define TEST_LLT_ADDR2 0x10080 + +#define TEST_SRC_ADDR0 0x20000 +#define TEST_SRC_ADDR1 0x22000 +#define TEST_SRC_ADDR2 0x23000 +#define TEST_DST_ADDR0 0x30000 +#define TEST_DST_ADDR1 0x32000 +#define TEST_DST_ADDR2 0x33000 + +static inline uint64_t gsdma_reg(hwaddr off) +{ + return K230_GSDMA_BASE + off; +} + +static inline uint64_t gsdma_ch_reg(unsigned int ch, hwaddr off) +{ + return K230_GSDMA_BASE + K230_GSDMA_CH_BASE + + ch * K230_GSDMA_CH_STRIDE + off; +} + +static void write_sdma_llt_node_full(QTestState *qts, hwaddr addr, + uint32_t cfg, hwaddr src, + uint32_t size, hwaddr dst, + hwaddr next) +{ + qtest_writel(qts, addr + offsetof(K230GSDMALLT, cfg), cfg); + qtest_writel(qts, addr + offsetof(K230GSDMALLT, src_addr), src); + qtest_writel(qts, addr + offsetof(K230GSDMALLT, line_size), size); + qtest_writel(qts, addr + offsetof(K230GSDMALLT, line_cfg), 0x1); + qtest_writel(qts, addr + offsetof(K230GSDMALLT, dst_addr), dst); + qtest_writel(qts, addr + offsetof(K230GSDMALLT, next_llt_addr), next); +} + +static void write_sdma_llt_node(QTestState *qts, hwaddr addr, uint32_t cfg, + uint32_t next) +{ + write_sdma_llt_node_full(qts, addr, cfg, 0x11110000, 0x200, + 0x22220000, next); +} + +static void fill_pattern(uint8_t *buf, size_t size, uint8_t seed) +{ + for (size_t i =3D 0; i < size; i++) { + buf[i] =3D seed + i * 37; + } +} + +static void test_global_registers(void) +{ + QTestState *qts =3D qtest_init("-machine k230"); + + g_assert_cmphex(qtest_readl(qts, gsdma_reg(K230_GSDMA_DMA_CFG)), =3D= =3D, + K230_GSDMA_DMA_CFG_RESET); + + qtest_writel(qts, gsdma_reg(K230_GSDMA_DMA_CH_EN), 0xff); + g_assert_cmphex(qtest_readl(qts, gsdma_reg(K230_GSDMA_DMA_CH_EN)), =3D= =3D, + K230_GSDMA_DMA_CH_EN_MASK); + + qtest_writel(qts, gsdma_reg(K230_GSDMA_DMA_INT_MASK), 0x12345); + g_assert_cmphex(qtest_readl(qts, gsdma_reg(K230_GSDMA_DMA_INT_MASK)), = =3D=3D, + 0x12345); + + qtest_writel(qts, gsdma_reg(K230_GSDMA_DMA_CFG), 0xa5a5a5a5); + g_assert_cmphex(qtest_readl(qts, gsdma_reg(K230_GSDMA_DMA_CFG)), =3D= =3D, + 0xa5a5a5a5); + + qtest_writel(qts, gsdma_reg(K230_GSDMA_DMA_WEIGHT), 0xff55aa55); + g_assert_cmphex(qtest_readl(qts, gsdma_reg(K230_GSDMA_DMA_WEIGHT)), = =3D=3D, + 0x55aa55); + + qtest_quit(qts); +} + +static void test_sdma_pause_resume(void) +{ + uint32_t int_stat; + QTestState *qts =3D qtest_init("-machine k230"); + + write_sdma_llt_node(qts, TEST_LLT_ADDR0, K230_GSDMA_LLT_PAUSE, + TEST_LLT_ADDR1); + write_sdma_llt_node(qts, TEST_LLT_ADDR1, K230_GSDMA_LLT_NODE_INTR, 0); + + qtest_writel(qts, gsdma_reg(K230_GSDMA_DMA_CH_EN), BIT(0)); + qtest_writel(qts, gsdma_ch_reg(0, K230_GSDMA_CH_LLT_SADDR), TEST_LLT_A= DDR0); + qtest_writel(qts, gsdma_ch_reg(0, K230_GSDMA_CH_CTL), K230_GSDMA_CTL_S= TART); + + g_assert_cmphex(qtest_readl(qts, gsdma_ch_reg(0, K230_GSDMA_CH_STATUS)= ), =3D=3D, + K230_GSDMA_SDMA_STATUS_PAUSE); + g_assert_cmphex(qtest_readl(qts, gsdma_ch_reg(0, K230_GSDMA_CH_CURRENT= _LLT)), + =3D=3D, TEST_LLT_ADDR0); + + int_stat =3D qtest_readl(qts, gsdma_reg(K230_GSDMA_DMA_INT_STAT)); + g_assert_cmphex(int_stat & K230_GSDMA_SDMA_PAUSE_INT(0), =3D=3D, + K230_GSDMA_SDMA_PAUSE_INT(0)); + g_assert_cmphex(int_stat & K230_GSDMA_SDMA_DONE_INT(0), =3D=3D, 0); + + qtest_writel(qts, gsdma_reg(K230_GSDMA_DMA_INT_STAT), int_stat); + qtest_writel(qts, gsdma_ch_reg(0, K230_GSDMA_CH_CTL), K230_GSDMA_CTL_R= ESUME); + + g_assert_cmphex(qtest_readl(qts, gsdma_ch_reg(0, K230_GSDMA_CH_STATUS)= ), =3D=3D, + 0); + g_assert_cmphex(qtest_readl(qts, gsdma_ch_reg(0, K230_GSDMA_CH_CURRENT= _LLT)), + =3D=3D, TEST_LLT_ADDR1); + + int_stat =3D qtest_readl(qts, gsdma_reg(K230_GSDMA_DMA_INT_STAT)); + g_assert_cmphex(int_stat & K230_GSDMA_SDMA_DONE_INT(0), =3D=3D, + K230_GSDMA_SDMA_DONE_INT(0)); + g_assert_cmphex(int_stat & K230_GSDMA_SDMA_ITEM_INT(0), =3D=3D, + K230_GSDMA_SDMA_ITEM_INT(0)); + + qtest_quit(qts); +} + +static void test_sdma_three_llt_copy(void) +{ + uint8_t src0[0x1000]; + uint8_t src1[1]; + uint8_t src2[511]; + uint8_t dst0[sizeof(src0)]; + uint8_t dst1[sizeof(src1)]; + uint8_t dst2[sizeof(src2)]; + uint32_t int_stat; + QTestState *qts =3D qtest_init("-machine k230"); + + fill_pattern(src0, sizeof(src0), 0x10); + fill_pattern(src1, sizeof(src1), 0x31); + fill_pattern(src2, sizeof(src2), 0x52); + memset(dst0, 0xa5, sizeof(dst0)); + memset(dst1, 0xa5, sizeof(dst1)); + memset(dst2, 0xa5, sizeof(dst2)); + + qtest_memwrite(qts, TEST_SRC_ADDR0, src0, sizeof(src0)); + qtest_memwrite(qts, TEST_SRC_ADDR1, src1, sizeof(src1)); + qtest_memwrite(qts, TEST_SRC_ADDR2, src2, sizeof(src2)); + qtest_memwrite(qts, TEST_DST_ADDR0, dst0, sizeof(dst0)); + qtest_memwrite(qts, TEST_DST_ADDR1, dst1, sizeof(dst1)); + qtest_memwrite(qts, TEST_DST_ADDR2, dst2, sizeof(dst2)); + + write_sdma_llt_node_full(qts, TEST_LLT_ADDR0, 0, TEST_SRC_ADDR0, + sizeof(src0), TEST_DST_ADDR0, TEST_LLT_ADDR1); + write_sdma_llt_node_full(qts, TEST_LLT_ADDR1, 0, TEST_SRC_ADDR1, + sizeof(src1), TEST_DST_ADDR1, TEST_LLT_ADDR2); + write_sdma_llt_node_full(qts, TEST_LLT_ADDR2, 0, TEST_SRC_ADDR2, + sizeof(src2), TEST_DST_ADDR2, 0); + + qtest_writel(qts, gsdma_reg(K230_GSDMA_DMA_CH_EN), BIT(0)); + qtest_writel(qts, gsdma_ch_reg(0, K230_GSDMA_CH_LLT_SADDR), TEST_LLT_A= DDR0); + qtest_writel(qts, gsdma_ch_reg(0, K230_GSDMA_CH_CTL), K230_GSDMA_CTL_S= TART); + + g_assert_cmphex(qtest_readl(qts, gsdma_ch_reg(0, K230_GSDMA_CH_STATUS)= ), =3D=3D, + 0); + g_assert_cmphex(qtest_readl(qts, gsdma_ch_reg(0, K230_GSDMA_CH_CURRENT= _LLT)), + =3D=3D, TEST_LLT_ADDR2); + + int_stat =3D qtest_readl(qts, gsdma_reg(K230_GSDMA_DMA_INT_STAT)); + g_assert_cmphex(int_stat & K230_GSDMA_SDMA_DONE_INT(0), =3D=3D, + K230_GSDMA_SDMA_DONE_INT(0)); + g_assert_cmphex(int_stat & K230_GSDMA_SDMA_PAUSE_INT(0), =3D=3D, 0); + + memset(dst0, 0, sizeof(dst0)); + memset(dst1, 0, sizeof(dst1)); + memset(dst2, 0, sizeof(dst2)); + qtest_memread(qts, TEST_DST_ADDR0, dst0, sizeof(dst0)); + qtest_memread(qts, TEST_DST_ADDR1, dst1, sizeof(dst1)); + qtest_memread(qts, TEST_DST_ADDR2, dst2, sizeof(dst2)); + + g_assert_cmpmem(dst0, sizeof(dst0), src0, sizeof(src0)); + g_assert_cmpmem(dst1, sizeof(dst1), src1, sizeof(src1)); + g_assert_cmpmem(dst2, sizeof(dst2), src2, sizeof(src2)); + + qtest_quit(qts); +} + +int main(int argc, char **argv) +{ + g_test_init(&argc, &argv, NULL); + + qtest_add_func("/k230-gsdma/global-registers", test_global_registers); + qtest_add_func("/k230-gsdma/sdma-pause-resume", test_sdma_pause_resume= ); + qtest_add_func("/k230-gsdma/sdma-three-llt-copy", + test_sdma_three_llt_copy); + + return g_test_run(); +} diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig index b8860dd3e7..46e3c03cc8 100644 --- a/hw/misc/Kconfig +++ b/hw/misc/Kconfig @@ -260,4 +260,7 @@ config XLNX_ZYNQ_DDRC config AXIADO_CLK bool =20 +config K230_DECOMP_GZIP + bool + source macio/Kconfig diff --git a/hw/misc/meson.build b/hw/misc/meson.build index cbeecbf1e0..54e07aacda 100644 --- a/hw/misc/meson.build +++ b/hw/misc/meson.build @@ -38,6 +38,7 @@ system_ss.add(when: 'CONFIG_SIFIVE_E_PRCI', if_true: file= s('sifive_e_prci.c')) system_ss.add(when: 'CONFIG_SIFIVE_E_AON', if_true: files('sifive_e_aon.c'= )) system_ss.add(when: 'CONFIG_SIFIVE_U_OTP', if_true: files('sifive_u_otp.c'= )) system_ss.add(when: 'CONFIG_SIFIVE_U_PRCI', if_true: files('sifive_u_prci.= c')) +system_ss.add(when: 'CONFIG_K230_DECOMP_GZIP', if_true: files('k230_decomp= _gzip.c')) =20 subdir('macio') =20 diff --git a/hw/misc/trace-events b/hw/misc/trace-events index 2d6d2238c5..16db4ba0cc 100644 --- a/hw/misc/trace-events +++ b/hw/misc/trace-events @@ -443,8 +443,6 @@ iommu_testdev_dma_verify(uint32_t expected, uint32_t ac= tual) "expected=3D0x%x actu iommu_testdev_dma_result(uint32_t result) "DMA completed result=3D0x%x" iommu_testdev_dma_armed(bool armed) "armed=3D%d" =20 -# vmlaunchupdate.c -launch_update_write(void) "" -vmlaunch_reset_enter(void) "" -vm_launchupdate_finalize(void) "" -restore_host_x86_igvm(void) "" +# k230_decomp_gzip.c +k230_decomp_gzip_read(uint64_t offset, unsigned int size, uint64_t value) = "K230 DECOMP GZIP read: [0x%"PRIx64"] size %u -> 0x%"PRIx64 +k230_decomp_gzip_write(uint64_t offset, unsigned int size, uint64_t value)= "K230 DECOMP GZIP write: [0x%"PRIx64"] size %u <- 0x%"PRIx64 diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build index 663a66bded..84756ba823 100644 --- a/tests/qtest/meson.build +++ b/tests/qtest/meson.build @@ -300,7 +300,7 @@ qtests_riscv64 =3D ['riscv-csr-test'] + \ config_all_devices.has_key('CONFIG_RISCV_IOMMU') ? ['iommu-riscv-test'] : []) + \ (config_all_devices.has_key('CONFIG_K230') ? - ['k230-ddr-test', 'k230-wdt-test'] : []) + ['k230-ddr-test', 'k230-wdt-test', 'k230-gsdma-test'] : []) =20 qtests_hexagon =3D ['boot-serial-test', 'l2vic-test', 'qct-qtimer-test'] =20 --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550778; cv=none; d=zohomail.com; s=zohoarc; b=YE2tta7vb5Mab1n+lIiVtJp5XUhm8hRQAIY7SK5GOSwL+4Q/Rbbjh8HhSp4AfI6BUA5JSpWHQx6Gc3SMLPuOGUjpzvpzxFCXzGYNzJpc1BUxJoFEf83lhu7qA/PMGioAJ7cVzBqFSeQWWBosgVyuVM3p2syF4ZEuK5nqhxI6z38= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550778; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qZOFXhGNRxNOm5KFMFQUurJQSlkP1SuCKksgxHQSBBc=; b=gGafXKoUe/dN0DEL8A7NbUkJNwj28hgIbgVIWwbbBEeeO7ck/dkgttGGtqv6r6xYYDghB+DFpmj4awzjlfN0v+l8pW1MXyo6tWzCg/15xihwtHt39G1wUeefWyKD7zcP+aCFfUYfKAKSFcYz0tIEhE7yJeiSVcV+wjw4uSZbk+A= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550778973187.11515008021013; Sun, 23 Aug 2026 22:52:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNYP-0001Jn-PO; Mon, 24 Aug 2026 01:49:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNY6-0001EU-Vu for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:48 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNY5-0001kx-8p for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:46 -0400 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-38e347638adso2729383a91.0 for ; Sun, 23 Aug 2026 22:48:44 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.48.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:48:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550523; x=1788155323; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=qZOFXhGNRxNOm5KFMFQUurJQSlkP1SuCKksgxHQSBBc=; b=oDvZzr/nDIJ+EzZu6ViZuUztaXwqfQv4ZYCzL2IvXtns6oa52cFxKW/vMPVCga/QGg yVmIQE8AcQBYjE/SH79onF4JMTB3/nlG+i98R2OJEANurO5fzXv3Gq7uK0dvEbU3ocjU R76VnTwLUoBqG7fWWXgBbjxRxvnmqvuIyO/p0zW0zKouIC3OSNOX4QZLwvisrzv9SWjU G4CdFkjtSwInouuviYRgUzkLzQlmhP+6KLZu/ng4h3c16trVc5eZqkw9l4G9I90S43Cn XT3cVixV+Gg0r1qynhZPFSKQmWGIYiaNkw9zj+Fi3zxCG42ikZceZNNAoVnK1QBHcYY+ IwVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550523; x=1788155323; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=qZOFXhGNRxNOm5KFMFQUurJQSlkP1SuCKksgxHQSBBc=; b=NDjwMJPVjId0PfngpSIFO2Lm/7Yy1eMDZ5+r1MdjQhDEZPCLc0y1PvIQUNkOLbYB3h hLiRc8lyCBHHotGDFwZLgXVdmn6O+cy0W40TaTAt5DX5W5nd6sQvnWX0l/flavqtmWZx LNvhDIO37shBtgYXOtVhWW0HgR510afvKt7+nO2M3ETZg7/O0BWMIZPSTUelZTXKcvFc sR1uskphEjw0pAQGIBzrNnTTnUts2tIvgXEjGhHleJ+CBnn/1KL4Pjt72eCrzZtLfs2B r0WpRZAaYXkqCsSMCLicwLxM+2sB4SDKPNUocisF7gcJ+5Ttlb3KSCpVS1SXtjHp+aMT og1A== X-Gm-Message-State: AFuF++nR2TukHneIQLVeNyIWhXF/9SwA9C4IwnIyzky7Y7v8Gz0CNpXT 1CRRhrFHZ7MW83sZ21DXKZ26M+eoi7zy0g81zhZ9y431f2WFBQhk7Atl60p8Pw== X-Gm-Gg: AR+sD121CZUmKefX3AhHmeAP4wdlpG/EcsbNe0WWKrXxpCZuY68SdNSfZQoc3XaCxeZ +nH8e4u8INrA4k/MHpe8YzhMn9jWNmaOw+vMplRm1OMfTfrvzm1MfOhTWqRR+oAbU7Yx4Uh2Xy9 B8PLZYMP4MpPG+BsobGYw5cS2JQP4bcPrvmdX2D2yagAvJ4cjyldXdsoq3W0nwDjISoLMjZauVs ETdvpxrDTDX0h+tVdVnwm8jm8m0b6Qf8VGv3lg4OkVvtU9J7/SNDa0wbqjnHbgDyG9t07gqOWdw AVcVS5xhGV7AHVZrQLwJg8lARBu6Z36BMQ+XY7EqSJVKKai2h/xM9aVAdkphbA+eEWhT8VeSw58 CO7zdYh6pww+NsvmpgFE2i+noTkmfRnSQN7FbUK/l8/q7wW618jkejnPF2e63hV/rkKNHwW7mP4 xrbIor1mvSef8rV/MkZxZIKiWScziWlbP6Z14COvXxj6CUyNrsStY+++1KM0FQ68IOHjqQpu2MG zxYPQ== X-Received: by 2002:a17:90b:5790:b0:38e:9045:babe with SMTP id 98e67ed59e1d1-395deecf08fmr30815803a91.7.1787550523503; Sun, 23 Aug 2026 22:48:43 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Tao Ding , Junze Cao , Daniel Henrique Barboza , Alistair Francis Subject: [PULL v2 08/96] hw/riscv: k230: add decomp gzip in K230 board Date: Mon, 24 Aug 2026 15:46:38 +1000 Message-ID: <20260824054806.2790041-9-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1034; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1034.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550779281158500 Content-Type: text/plain; charset="utf-8" From: Tao Ding This commit replaces the unimplemented part of Decomp_gzip in K230. Connect to the handshake interface of GSDMA. Signed-off-by: Tao Ding Reviewed-by: Junze Cao Reviewed-by: Daniel Henrique Barboza Message-ID: <20260808062227.66961-6-dingtao0430@163.com> Signed-off-by: Alistair Francis --- include/hw/riscv/k230.h | 2 ++ hw/riscv/k230.c | 23 +++++++++++++++++++---- hw/riscv/Kconfig | 1 + 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/include/hw/riscv/k230.h b/include/hw/riscv/k230.h index 8879d56d98..8679d09891 100644 --- a/include/hw/riscv/k230.h +++ b/include/hw/riscv/k230.h @@ -20,6 +20,7 @@ #include "hw/riscv/riscv_hart.h" #include "hw/watchdog/k230_wdt.h" #include "hw/dma/k230_gsdma.h" +#include "hw/misc/k230_decomp_gzip.h" =20 #define C908_CPU_HARTID (0) =20 @@ -38,6 +39,7 @@ typedef struct K230SoCState { K230DDRPhyState ddr_phy; K230WdtState wdt[2]; K230GSDMAState gsdma; + K230DecompGzipState decomp_gzip; MemoryRegion sram; MemoryRegion bootrom; =20 diff --git a/hw/riscv/k230.c b/hw/riscv/k230.c index 49c3b50c57..5163eaa7ef 100644 --- a/hw/riscv/k230.c +++ b/hw/riscv/k230.c @@ -117,6 +117,8 @@ static void k230_soc_init(Object *obj) object_initialize_child(obj, "k230-wdt0", &s->wdt[0], TYPE_K230_WDT); object_initialize_child(obj, "k230-wdt1", &s->wdt[1], TYPE_K230_WDT); object_initialize_child(obj, "k230-gsdma", &s->gsdma, TYPE_K230_GSDMA); + object_initialize_child(obj, "k230-decomp-gzip", &s->decomp_gzip, + TYPE_K230_DECOMP_GZIP); =20 qdev_prop_set_uint32(DEVICE(cpu0), "hartid-base", 0); qdev_prop_set_string(DEVICE(cpu0), "cpu-type", TYPE_RISCV_CPU_THEAD_C9= 08); @@ -231,6 +233,23 @@ static void k230_soc_realize(DeviceState *dev, Error *= *errp) sysbus_connect_irq(SYS_BUS_DEVICE(&s->gsdma), 0, qdev_get_gpio_in(DEVICE(s->c908_plic), K230_GSDMA_I= RQ)); =20 + /* Decomp gzip */ + qdev_prop_set_uint64(DEVICE(&s->decomp_gzip), "sram-base", + memmap[K230_DEV_SRAM].base); + if (!sysbus_realize(SYS_BUS_DEVICE(&s->decomp_gzip), errp)) { + return; + } + sysbus_mmio_map(SYS_BUS_DEVICE(&s->decomp_gzip), 0, + memmap[K230_DEV_DECOMP_GZIP].base); + for (int i =3D 0; i < K230_DECOMP_GZIP_NUM_GPIOS_OUT; i++) { + qdev_connect_gpio_out(DEVICE(&s->decomp_gzip), i, + qdev_get_gpio_in(DEVICE(&s->gsdma), i)); + } + for (int i =3D 0; i < K230_DECOMP_GZIP_NUM_GPIOS_IN; i++) { + qdev_connect_gpio_out(DEVICE(&s->gsdma), i, + qdev_get_gpio_in(DEVICE(&s->decomp_gzip), i)= ); + } + /* unimplemented devices */ create_unimplemented_device("kpu.l2-cache", memmap[K230_DEV_KPU_L2_CACHE].base, @@ -249,10 +268,6 @@ static void k230_soc_realize(DeviceState *dev, Error *= *errp) create_unimplemented_device("dma", memmap[K230_DEV_DMA].base, memmap[K230_DEV_DMA].size); =20 - create_unimplemented_device("decomp-gzip", - memmap[K230_DEV_DECOMP_GZIP].base, - memmap[K230_DEV_DECOMP_GZIP].size); - create_unimplemented_device("2d-engine.non-ai", memmap[K230_DEV_NON_AI_2D].base, memmap[K230_DEV_NON_AI_2D].size); diff --git a/hw/riscv/Kconfig b/hw/riscv/Kconfig index d28ac06043..d06ac26648 100644 --- a/hw/riscv/Kconfig +++ b/hw/riscv/Kconfig @@ -163,3 +163,4 @@ config K230 select UNIMP select K230_WDT select K230_GSDMA + select K230_DECOMP_GZIP --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551177; cv=none; d=zohomail.com; s=zohoarc; b=TfHvFXzXTPbe9Ah3xO2cbqjCdWm0Sb53a7vdPFOCfpqEbD2s9DVYIV/KaaUYmEFDMpGXBq7fAHksld5KjT1JcZ+MEHOTq4b4THc+yBVy1u6DWK41/63y4r4kTAad2VfH/asOvXfNvNqxCen6k6G0L1JzdXbNzPkB5OnOQMQccRo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551177; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=nS3+Gg9jrbTlteYit/DKve2DphIjOkZyCZSQ+pNRgjw=; b=mrW0gN6uI6P3JSWNxNy2r7NMyJGyd0LNH4Bx0BTOKZO6G21CCJuj7kgq3no+63FSxlbDBHC32qNCZQ5A2ctcwcap2SccdX+AxnNSLe9a8BRHdyUG/47WJ/s5X5nFg3wDW4IyZJdZw+2Sn+iLSZItRQlEBEnUXUAQR07T4MvIquA= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551177802665.0518277184519; Sun, 23 Aug 2026 22:59:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNYa-0001PQ-4v; Mon, 24 Aug 2026 01:49:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNYA-0001Ew-JO for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:52 -0400 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNY8-0001mB-Et for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:50 -0400 Received: by mail-pg1-x530.google.com with SMTP id 41be03b00d2f7-ca12086c06eso2319895a12.0 for ; Sun, 23 Aug 2026 22:48:48 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.48.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:48:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550527; x=1788155327; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=nS3+Gg9jrbTlteYit/DKve2DphIjOkZyCZSQ+pNRgjw=; b=WKD/pZ5x9NN4BIXTmgcp002oW/9U0mBZKPXrsSnUAJfd38QBh/1TYLF5Ni2UNupr9t njmy4VYxEwPaX4l/XXOoI8s2KODk/hlXdrFq4fr/nxr/WBaXnOEhMyMRaiexxOdzUezC /RwSt8wp81TYBOZxi5ucCPdNuo9TVZSyJHm1lo+Dh6OgdP90p7BQzZikFxb7Nq8ZB8OQ ym31tdT+m7ItYZzsnGuA+rqcgtqQuWvVf0ZIOoD0cHsGRtMXnFRni7LC97qt7S7YKhwm e6jPQL5fmK1U7KjBricOiSNRKG/LRQFyTTRDV5lredEoXMEDkAc8Z9KTvgNsL3FW/a+I CC3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550527; x=1788155327; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=nS3+Gg9jrbTlteYit/DKve2DphIjOkZyCZSQ+pNRgjw=; b=oIrumPETTIi/1yxdNlTUe15HLLvxtQjj9PaQATgd2BaSUXU1QMV3LVTsFEsSfS0+hk hHcWiprXxhpCzZnEzT7kBEPxdm3YJNo7p8qvPdod6w+OE7iRUIVrbJXtqjUUd6gP45pk NksTvhzLg2FG0DvpXx+aH94JoJiIWuVqHGs5dW17FsIL6LOccf/tNGOBaRuKYfGH4d3f EXjhGvSUD60kdOuER7uvU/t6btep3MjmsJhG/yWW8HFxhI6Soo25AX5M0KaNdp/BBDRK Odt6B6gYKJr987tEjSZFamJhYu5RJip51RTvjZaNSZZBsQFQg9ZZ7F9VnCGuGAsobq2x gg6A== X-Gm-Message-State: AFuF++nSDFqn8/cjz+xwabJY87plNK5SOJKNpC9vovayK+ehdnIrO4PW 4CSlyt/D9fHXOjyk4UKmeDFZTwQ58iSn+7PYkham+CyAML2/v8MYKffS6v1UIw== X-Gm-Gg: AR+sD11h3gueMgIrK0FV0B205vQ1SPP7eR2L2ToVeRF0lkLpMycPgrDT+ADA3rGQ9fW zt2oU88bbDVOZyMr8vYYpf6EHSq6AEHrpPf84dkrKiXpJV1CAsMpQ2BG1zTGxYCx/MmzbANdE63 Y6hzXT0bDTJ4PcYBcDAi7iotdfcwlFh0m0ZgUwCjAqYra7ZpsOiWoWNy41v9zjUglGeTj3rktBj RmOG9IMyKr21BEbgHX9njzQPqhIMt7cQeR2AqgleXavxhH6aPBqbgmMcUa/h6nTju0OkJeBgKFU qbsBc4dsKEt/lsYNagpi/LePmrRQ2Q/PlZEAdNeWaZ5iRqLyO0gqo1/w9lrZikOG3G6mM/blULJ s2hHN5/t5EHg2eZH7ZHC8o2pB/hCVb48aTOn2gp7HJHHpgtKgVkt9jLT4S+xcfapA7AdxuVtN3L HZm3MOugXFxrsDDpTrjh2V7n4yamg9f8XZTGDAQ06OXQtQV3n2qmoce8mqptUb7cY7PirfoANpp /OJ2a2A0azYWjHO X-Received: by 2002:a17:90b:58cf:b0:37f:eafd:3505 with SMTP id 98e67ed59e1d1-395deec0e5amr30731113a91.6.1787550526896; Sun, 23 Aug 2026 22:48:46 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Tao Ding , Daniel Henrique Barboza , Junze Cao , Alistair Francis Subject: [PULL v2 09/96] tests/qtest: add test for K230 decomp gzip Date: Mon, 24 Aug 2026 15:46:39 +1000 Message-ID: <20260824054806.2790041-10-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::530; envelope-from=alistair23@gmail.com; helo=mail-pg1-x530.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551179063158500 Content-Type: text/plain; charset="utf-8" From: Tao Ding This commit adds test cases for Decomp_gzip. A compressed data segment has been pre-set, configure GSDMA and decomp_gzip. Compare the decompressed data with the original data Update MAINTAINERS for this test. Run this qtest: $ mkdir build && cd build && ../configure --target-list=3D"riscv64-soft= mmu" $ QTEST_QEMU_BINARY=3D./qemu-system-riscv64 tests/qtest/k230-decomp-g= zip-test Signed-off-by: Tao Ding Reviewed-by: Daniel Henrique Barboza Reviewed-by: Junze Cao Message-ID: <20260808062227.66961-7-dingtao0430@163.com> Signed-off-by: Alistair Francis --- MAINTAINERS | 1 + tests/qtest/k230-decomp-gzip-test.c | 200 ++++++++++++++++++++++++++++ tests/qtest/meson.build | 2 +- 3 files changed, 202 insertions(+), 1 deletion(-) create mode 100644 tests/qtest/k230-decomp-gzip-test.c diff --git a/MAINTAINERS b/MAINTAINERS index ff804b3310..c2cc6ae0fe 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1858,6 +1858,7 @@ F: tests/functional/riscv64/test_k230.py F: tests/qtest/k230-ddr-test.c F: tests/qtest/k230-wdt-test.c F: tests/qtest/k230-gsdma-test.c +F: tests/qtest/k230-decomp-gzip-test.c =20 RX Machines ----------- diff --git a/tests/qtest/k230-decomp-gzip-test.c b/tests/qtest/k230-decomp-= gzip-test.c new file mode 100644 index 0000000000..e80113fd28 --- /dev/null +++ b/tests/qtest/k230-decomp-gzip-test.c @@ -0,0 +1,200 @@ +/* + * QTest testcase for K230 GZIP decompression engine + * + * Copyright (c) 2026 Tao Ding + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "qemu/bitops.h" +#include "libqtest.h" +#include "hw/dma/k230_gsdma.h" +#include "hw/misc/k230_decomp_gzip.h" + +#define K230_DECOMP_GZIP_BASE 0x80808000 +#define K230_GSDMA_BASE 0x80800000 +#define K230_SRAM_BASE 0x80200000 +#define TEST_LLT_ADDR0 0x01000000 +#define TEST_LLT_ADDR1 0x01000040 +#define TEST_SRC_ADDR 0x01100000 +#define TEST_DST_ADDR 0x01200000 + +#define TEST_PAYLOAD_LEN (sizeof(test_payload) - 1) + +static inline uint64_t gzip_reg(hwaddr off) +{ + return K230_DECOMP_GZIP_BASE + off; +} + +static inline uint64_t gsdma_reg(hwaddr off) +{ + return K230_GSDMA_BASE + off; +} + +static inline uint64_t gsdma_ch_reg(unsigned int ch, hwaddr off) +{ + return K230_GSDMA_BASE + K230_GSDMA_CH_BASE + + ch * K230_GSDMA_CH_STRIDE + off; +} + +static inline hwaddr k230_sram_addr(hwaddr off) +{ + return K230_SRAM_BASE + off; +} + +static inline hwaddr k230_sram_input_addr(unsigned int slot) +{ + return k230_sram_addr(K230_DECOMP_GZIP_SRAM_IN_BASE + + slot * K230_DECOMP_GZIP_BLOCK_SIZE); +} + +/* + * test_gzip_data was generated by compressing test_payload in gzip format + * using Dynamic Huffman coding. The compression method byte in the gzip + * header was then changed from the standard value 0x08 to the K230-specif= ic + * value 0x09. + */ +static const uint8_t test_gzip_data[] =3D { + 0x1f, 0x8b, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x03, 0x05, 0xc1, 0xb1, 0x0d, 0x00, 0x20, + 0x08, 0x04, 0xc0, 0x9e, 0x29, 0x7e, 0x04, 0x23, + 0x63, 0x38, 0x85, 0x05, 0x21, 0x14, 0x10, 0x23, + 0x5f, 0x39, 0xbd, 0x77, 0x6b, 0xea, 0x80, 0xbf, + 0x38, 0x68, 0x5e, 0xdb, 0x19, 0xe5, 0xa0, 0x35, + 0x65, 0x4d, 0x1d, 0xf0, 0x17, 0x07, 0xcd, 0x6b, + 0x3b, 0xa3, 0x1c, 0xb4, 0xa6, 0xac, 0xa9, 0x03, + 0xfe, 0xe2, 0xa0, 0x79, 0x6d, 0x67, 0x94, 0x83, + 0xd6, 0x94, 0x35, 0x75, 0xc0, 0x5f, 0x1c, 0x34, + 0xaf, 0xed, 0x8c, 0x72, 0xd0, 0x9a, 0xb2, 0xa6, + 0x0e, 0xf8, 0x8b, 0x83, 0xe6, 0xb5, 0x9d, 0x51, + 0x0e, 0x5a, 0x53, 0xd6, 0xd4, 0x01, 0x7f, 0x71, + 0xd0, 0xbc, 0xb6, 0x33, 0xca, 0x41, 0x6b, 0xca, + 0x9a, 0x3a, 0xe0, 0x2f, 0x0e, 0x9a, 0xd7, 0x76, + 0x46, 0x39, 0x68, 0x4d, 0x59, 0x53, 0x07, 0xfc, + 0xc5, 0x41, 0xf3, 0xda, 0xce, 0x28, 0x07, 0xad, + 0x29, 0x1f, 0xdb, 0x9d, 0xbc, 0xdd, 0xc8, 0x00, + 0x00, 0x00, +}; + +static const uint8_t test_payload[] =3D + "K230 gzip streaming test\n" + "K230 gzip streaming test\n" + "K230 gzip streaming test\n" + "K230 gzip streaming test\n" + "K230 gzip streaming test\n" + "K230 gzip streaming test\n" + "K230 gzip streaming test\n" + "K230 gzip streaming test\n"; + +static void write_sdma_llt_node(QTestState *qts, hwaddr addr, uint32_t src, + uint32_t dst, uint32_t len, uint32_t next) +{ + qtest_writel(qts, addr + offsetof(K230GSDMALLT, cfg), 0); + qtest_writel(qts, addr + offsetof(K230GSDMALLT, src_addr), src); + qtest_writel(qts, addr + offsetof(K230GSDMALLT, line_size), len); + qtest_writel(qts, addr + offsetof(K230GSDMALLT, line_cfg), 0x1); + qtest_writel(qts, addr + offsetof(K230GSDMALLT, dst_addr), dst); + qtest_writel(qts, addr + offsetof(K230GSDMALLT, next_llt_addr), next); +} + +static void test_reset_and_rw(void) +{ + QTestState *qts =3D qtest_init("-machine k230"); + + g_assert_cmphex(qtest_readl(qts, gzip_reg(K230_DECOMP_GZIP_DECOMP_STAR= T)), + =3D=3D, 0); + g_assert_cmphex(qtest_readl(qts, gzip_reg(K230_DECOMP_GZIP_GZIP_SRC_SI= ZE)), + =3D=3D, 0); + g_assert_cmphex(qtest_readl(qts, gzip_reg(K230_DECOMP_GZIP_GZIP_OUT_SI= ZE)), + =3D=3D, 0); + g_assert_cmphex(qtest_readl(qts, gzip_reg(K230_DECOMP_GZIP_DECOMP_STAT= )), + =3D=3D, 0); + + qtest_writel(qts, gzip_reg(K230_DECOMP_GZIP_DECOMP_START), + K230_DECOMP_GZIP_START); + + qtest_writel(qts, gzip_reg(K230_DECOMP_GZIP_GZIP_SRC_SIZE), 0xffffffff= ); + g_assert_cmphex(qtest_readl(qts, gzip_reg(K230_DECOMP_GZIP_GZIP_SRC_SI= ZE)), + =3D=3D, 0xffffffff); + + qtest_writel(qts, gzip_reg(K230_DECOMP_GZIP_GZIP_OUT_SIZE), 0x12345678= ); + g_assert_cmphex(qtest_readl(qts, gzip_reg(K230_DECOMP_GZIP_GZIP_OUT_SI= ZE)), + =3D=3D, 0x12345678); + + qtest_quit(qts); +} + +static void test_gsdma_handshake_flow(void) +{ + QTestState *qts =3D qtest_init("-machine k230"); + uint32_t stat; + uint8_t output[TEST_PAYLOAD_LEN]; + + qtest_memwrite(qts, TEST_SRC_ADDR, test_gzip_data, sizeof(test_gzip_da= ta)); + write_sdma_llt_node(qts, TEST_LLT_ADDR0, TEST_SRC_ADDR, + k230_sram_input_addr(0), + sizeof(test_gzip_data), 0); + write_sdma_llt_node(qts, TEST_LLT_ADDR1, + k230_sram_addr(K230_DECOMP_GZIP_SRAM_OUT_BASE), + TEST_DST_ADDR, TEST_PAYLOAD_LEN, 0); + + qtest_writel(qts, gsdma_reg(K230_GSDMA_DMA_CH_EN), BIT(0) | BIT(1)); + qtest_writel(qts, gsdma_ch_reg(0, K230_GSDMA_CH_CFG), + K230_GSDMA_CH0_CFG_DECOMP_CTRL_EN); + qtest_writel(qts, gsdma_ch_reg(1, K230_GSDMA_CH_CFG), 0); + qtest_writel(qts, gsdma_ch_reg(0, K230_GSDMA_CH_LLT_SADDR), TEST_LLT_A= DDR0); + qtest_writel(qts, gsdma_ch_reg(1, K230_GSDMA_CH_LLT_SADDR), TEST_LLT_A= DDR1); + qtest_writel(qts, gsdma_ch_reg(0, K230_GSDMA_CH_CTL), K230_GSDMA_CTL_S= TART); + qtest_writel(qts, gsdma_ch_reg(1, K230_GSDMA_CH_CTL), K230_GSDMA_CTL_S= TART); + + g_assert_cmphex(qtest_readl(qts, gsdma_reg(K230_GSDMA_DMA_CH_EN)), + =3D=3D, BIT(0) | BIT(1)); + g_assert_cmphex(qtest_readl(qts, gsdma_ch_reg(0, K230_GSDMA_CH_CFG)) & + K230_GSDMA_CH0_CFG_DECOMP_CTRL_EN, + =3D=3D, K230_GSDMA_CH0_CFG_DECOMP_CTRL_EN); + g_assert_cmphex(qtest_readl(qts, gsdma_ch_reg(0, K230_GSDMA_CH_LLT_SAD= DR)), + =3D=3D, TEST_LLT_ADDR0); + g_assert_cmphex(qtest_readl(qts, gsdma_ch_reg(1, K230_GSDMA_CH_LLT_SAD= DR)), + =3D=3D, TEST_LLT_ADDR1); + + qtest_writel(qts, gzip_reg(K230_DECOMP_GZIP_GZIP_SRC_SIZE), + K230_DECOMP_GZIP_CTRL_EN | sizeof(test_gzip_data)); + qtest_writel(qts, gzip_reg(K230_DECOMP_GZIP_GZIP_OUT_SIZE), + TEST_PAYLOAD_LEN); + qtest_writel(qts, gzip_reg(K230_DECOMP_GZIP_DECOMP_START), + K230_DECOMP_GZIP_START); + + stat =3D qtest_readl(qts, gzip_reg(K230_DECOMP_GZIP_DECOMP_STAT)); + g_assert_cmphex(stat & K230_DECOMP_GZIP_STAT_CRC_OK, =3D=3D, + K230_DECOMP_GZIP_STAT_CRC_OK); + + g_assert_cmphex(qtest_readl(qts, + gsdma_ch_reg(0, K230_GSDMA_CH_CURRENT_LLT)= ), + =3D=3D, TEST_LLT_ADDR0); + g_assert_cmphex(qtest_readl(qts, + gsdma_ch_reg(1, K230_GSDMA_CH_CURRENT_LLT)= ), + =3D=3D, TEST_LLT_ADDR1); + + stat =3D qtest_readl(qts, gsdma_reg(K230_GSDMA_DMA_INT_STAT)); + g_assert_cmphex(stat & K230_GSDMA_SDMA_DONE_INT(0), =3D=3D, + K230_GSDMA_SDMA_DONE_INT(0)); + g_assert_cmphex(stat & K230_GSDMA_SDMA_DONE_INT(1), =3D=3D, + K230_GSDMA_SDMA_DONE_INT(1)); + + qtest_memread(qts, TEST_DST_ADDR, output, sizeof(output)); + g_assert_cmpmem(output, sizeof(output), test_payload, TEST_PAYLOAD_LEN= ); + + qtest_quit(qts); +} + +int main(int argc, char **argv) +{ + g_test_init(&argc, &argv, NULL); + + qtest_add_func("/k230-decomp-gzip/reset-and-rw", test_reset_and_rw); + qtest_add_func("/k230-decomp-gzip/gsdma-handshake-flow", + test_gsdma_handshake_flow); + + return g_test_run(); +} diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build index 84756ba823..739df71d8d 100644 --- a/tests/qtest/meson.build +++ b/tests/qtest/meson.build @@ -300,7 +300,7 @@ qtests_riscv64 =3D ['riscv-csr-test'] + \ config_all_devices.has_key('CONFIG_RISCV_IOMMU') ? ['iommu-riscv-test'] : []) + \ (config_all_devices.has_key('CONFIG_K230') ? - ['k230-ddr-test', 'k230-wdt-test', 'k230-gsdma-test'] : []) + ['k230-ddr-test', 'k230-wdt-test', 'k230-gsdma-test', 'k230-decomp-gzip= -test'] : []) =20 qtests_hexagon =3D ['boot-serial-test', 'l2vic-test', 'qct-qtimer-test'] =20 --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550624; cv=none; d=zohomail.com; s=zohoarc; b=HXKp/bmxLUG6gmV2VHkty1ciWY9u0plihAZY7L0RYE8PmKJ247zHQ/fOcG9CaqpCvSCW7dQvHG2uV1lgmjZWkwJIDXm1qQcaol8/I5wzvUe1yI24RvcqkXQxr8qzOTgyvImzFMP5lZdodclzTo/rMoBdRRUF6gAR3+5YLosmykg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550624; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=lfg+S33mxYhTkp+vJzcce1d3QWdWhesMvM16KE705Pg=; b=aeKJ3O2ILcoVMLrpJUxtad16dolGO2VdaWwa46WAW83Hz/ozI4mCfev7gHeV45XdCh1FMdcskQCXgVwfjIFNTj5FDcnjwiTBAKUVl64r1EzjSC3VH9iQ8D8+szYTGDIWGgBGydXZnMrHgOE0hFERaUCcvYrvXNzpxbHkwe/VSV4= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178755062403832.98782774668689; Sun, 23 Aug 2026 22:50:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNYZ-0001PO-Od; Mon, 24 Aug 2026 01:49:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNYD-0001F6-81 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:55 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNYB-0001nH-QL for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:52 -0400 Received: by mail-pj1-x1036.google.com with SMTP id 98e67ed59e1d1-38dc69c74b8so3268330a91.0 for ; Sun, 23 Aug 2026 22:48:51 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.48.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:48:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550530; x=1788155330; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=lfg+S33mxYhTkp+vJzcce1d3QWdWhesMvM16KE705Pg=; b=ME5JPmg6tW+hR831P9mi/1oSKDTS0f+Aw9sWP0yGTyU2HQ6a9BKiH0qUvXmfwo2Wiu ZwdplXtZy6p+rGFJ7BiXyuDYR79qcMFY2qm4iIb2QLYxVKPG5sFWoE9JXocS4IdPOnCb jtSCtO4yvbuiOGgfCOAZbsJVzVGm/Th8UogY+zqjLtYvNvhQrsH7MgTerwamOpJ2DXZJ 3cSbU6d3GTbSdDld5lWawhRQMdIrwDJZyhyMpLF+1B4kyW7MRrH7DnII7dmu5MEH1wfr RmPBjA4FzXVtgo0IITvodY0TdvkfFvyxWq8RaX8u8ZUZiXzcDq594zff/Z929gsiA9jT UyGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550530; x=1788155330; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=lfg+S33mxYhTkp+vJzcce1d3QWdWhesMvM16KE705Pg=; b=W5qhegTGB8sSjMr6T4PpsXB3S8bOLslTvx6YgRcsvXcii2pOUIph6LGnkVhYZYHLUI FREuXCNhplzDuNcG5mTlzPp9EzSkxBKrZlvZNoyff2l8EYHaXsl/f07/jzOiCdtl4YBs 9ugBiVlyl+DGynHyfq+Rud0fyqrE6kezz7hyEv/xKupSVtoX731pu7H65S1x3/ebpVby jPGR6k/Tnbrcb5PVXXsDepQuS1jm/tuMAXK8H++dabcf2LrwGawhaBsiYpbD7ikCCgmv Sdv9bQAFodaNl8bwVOqmKbLmAAlBLvO5O8gCn7TEMErMs4hOovWab+kyJ4V7JvT+i0cD xNlQ== X-Gm-Message-State: AFuF++kdq/2bzDlKl8M86O8rYpUmGGFlY49BNYjJNUVQvu3txQuAsi3a Pus8EgeRC+l9r0yLb5YQSupHlwantnYvM75lLGf6980iM8w6Fg3p1ZlQR0wPEw== X-Gm-Gg: AR+sD12FMP5LyWw8kNiDizehturP3Z7eXS40YhmrdiNk8Ta2++XI0MY+wM9efJg7/gR Xm9H1SOBC4fvIIQQpkLaZ1oMfotWLnK9cI0MbuNNWHm+ZSkMvIio8F58fIZw1EuYUBH5LwQfQxw tQTCq5/HsdawKPo9Tj1BDugeXSkAdNANX7hAlAAFcXpxPuqNKGv0ZOFv+hkzwieBd0r8YPWwREt 4Hpyu5apJPKSupd3ImWIufEBcVElmVVJJ99kAfibTfGU9k3E/HAtqxqYVEriG/m7FortIhOxXtu RoCqOtztWGtI0EJMZC5I+sh3+5HJ1e3GCutJlRn9XagWF7+a/98/0QmbRadliHJ8Fb70QK9nnLC BGSagLiHTWi/XOai+la/Ef9z2venQZ42z31HY4cE+/pxFGADeINA+6u7lBliybB9AGxw8dBNGq5 /eUNZz9xo8wQWS4aM5IfScjba0SqCDpGIzvt4lQZFuXEFiuGi6BsiurVfaA+JDt+vhn3eTd+KvG b1yVQ== X-Received: by 2002:a17:90b:2808:b0:37d:f983:7b5 with SMTP id 98e67ed59e1d1-395df289c4bmr29613567a91.9.1787550530340; Sun, 23 Aug 2026 22:48:50 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Tao Ding , Junze Cao , Daniel Henrique Barboza , Alistair Francis Subject: [PULL v2 10/96] hw/riscv: k230: add a noc stub region in K230 board Date: Mon, 24 Aug 2026 15:46:40 +1000 Message-ID: <20260824054806.2790041-11-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1036; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1036.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550624674158500 Content-Type: text/plain; charset="utf-8" From: Tao Ding The NOC address was accessed in the k230_unzip driver, but it is currently = not in k230. This commit uses create_unimplemented_device to preset the region. Signed-off-by: Tao Ding Reviewed-by: Junze Cao Reviewed-by: Daniel Henrique Barboza Message-ID: <20260808062227.66961-8-dingtao0430@163.com> Signed-off-by: Alistair Francis --- hw/riscv/k230.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hw/riscv/k230.c b/hw/riscv/k230.c index 5163eaa7ef..558f30b97e 100644 --- a/hw/riscv/k230.c +++ b/hw/riscv/k230.c @@ -250,6 +250,9 @@ static void k230_soc_realize(DeviceState *dev, Error **= errp) qdev_get_gpio_in(DEVICE(&s->decomp_gzip), i)= ); } =20 + /* Noc stub, the k230 decomp_gzip driver in uboot will access this reg= ion */ + create_unimplemented_device("noc-stub", 0x91302000, 0x1000); + /* unimplemented devices */ create_unimplemented_device("kpu.l2-cache", memmap[K230_DEV_KPU_L2_CACHE].base, --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550600; cv=none; d=zohomail.com; s=zohoarc; b=hP/JqK0CbUKHSQLMhvH++zFg6fK0wWQPOObKNtJ9dKBY29OwO5B4iwsxDEe2GJy4xHAdJ8pJTVVrTihJuFLG06kno4MqM4peJICrTpYwvghTT1wkvwVxhtC2L5nRI+Y6zJLgKf7E34laWIVZj3We7DpWHsJnHInsz/Oz722F0Gk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550600; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=JtX66qmQh5hGei4ld9cb4CgJsixrU426wPgSFrendcA=; b=AD3OPY9zscV8oT+pRyHYS6jTz3VaeO93hO1uCsHauM85iyjQGhGj3SIDXtqciU3j0h9sd8WL+llOKyAeH53g1ZYe9prxX54lX0RLZSHeVzUuGdhVp+uDVnigjUJTSUuvWGfacSlITC4Mge2VaihqIqx13DVUTHEcJYSl5d0UIQ4= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550600527709.0751687280974; Sun, 23 Aug 2026 22:50:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNYj-0001Rd-KM; Mon, 24 Aug 2026 01:49:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNYH-0001Fm-2v for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:59 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNYF-0001oB-Iu for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:48:56 -0400 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-38f620399a0so2590162a91.2 for ; Sun, 23 Aug 2026 22:48:54 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.48.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:48:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550534; x=1788155334; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=JtX66qmQh5hGei4ld9cb4CgJsixrU426wPgSFrendcA=; b=R7uQ1FUArodN6dPBLznR+KqZ7iNXjZNHF/z3vNbmY+iLJlLH2BfFCnqGjKhTrYiqwC c/glh9qkhpaIqUdJq2WBF9DyWtZercq9R1ss8Oe+Pn7CsClOHQEU3pzxjlXJdkeUFbbg 6PgtkxoMe5dJg8eWkv7BJuKgMdDSq5WF8WA/RuSzLooFJMJcz9wQSr4ECJYmA+9DAaLM lFqNOJ1Gir6oR5k4wWU1tTMElautxniCkFGgNrYhi2K5GtESPMA3SCvuw20U77trFUr1 sN5iMyZxAaUTFjHI7OJiq9Ww40ynXNHpxarcGXcC/sJm1ES1f4L8Qp5SEHA41a1AyOhs b5iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550534; x=1788155334; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=JtX66qmQh5hGei4ld9cb4CgJsixrU426wPgSFrendcA=; b=h9Rc1zu31Xr6Ez2l/ifDrtq2bV3CmP5wIZfgEKjBqoYllRuBt1T+KVB0dGGiKE8RR2 U8JAog93rxCV6qI1qfElO/klrXvgucgkFyBJygREYe35X0q/0HAF4rg/UvuN5PrLOsl+ 9bRmOcCP3CHTCG7J6MAELj4m/iWfSxYAWJVpBEY3Yltirql2I2tuODLVGbeMWD0UlrQO et5YaFynv60DegBIFl4P/LVd1a9qQdbNAFnTeRn3YFJkNL7c/SRvp5JOfm5mDTSYgtpj rk8MlHE7xDSEaTRMwJ5fAen+QRYLzikUUApeiD2tpPR26J7xCKuMYuBeCKM30xbeKUNc 5M7Q== X-Gm-Message-State: AFuF++l2ombWjqUg94ukuSFSCJKBwqSzZX1KUzpW9XaBCQycOSCIc+sx t3lEnBYUwQrba3HEiAB+W08sIcQEaF8xgK8tqCf9VnLTi8vjg/fFX1fn+MYs0w== X-Gm-Gg: AR+sD10sf7r7/OCjlfpbrAL7+n9i/Ya47zld8c083oYC0V2Hge5dVkai4bQP0jx3QXi 4LQzqf55hccwUd0wCQAff7Kn5eXijdIFZsCrLLqSZ+tLxps91PYBr9o/4sbz4H+BlK+hw6s5NCA Mb3Kd2ITOTvFTOy1C79xlIV3ejjpZEALrCkSuGNvObzaURZXducfz3eoDGZRPTUjt6ZQhFsK8e2 W8XLVbaAfTGEDvfvlOpYM99vhWkFPEu1I4u4iv+X0LWmvGIHbzK5FLLzBKscNgPy04IT75b/Oxw e6KbXWVAYn1QQ6WrN8bRADp/G+lCupt/rIoslk0dh6ufZMOLJTbFh1CZDnQkILe27HZyCPPuuNi DfzjSen0IR/tzdVco7VJ/03GhpwWz6jZ0s87q1TH5W+fwreuTipQYPVtFH3RJ+Y/L0/IfOwT2xG kYJYO/n2CtpzUzY2KbKbtouAN/yrqVR9GyJa5dYLW8jPivvgfbeT0iqkQP+jPEw60KVUKr8zN6f i5qIA== X-Received: by 2002:a17:90b:4484:b0:392:b509:b1a5 with SMTP id 98e67ed59e1d1-395c3552988mr36242089a91.14.1787550533890; Sun, 23 Aug 2026 22:48:53 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Xie Bo , Daniel Henrique Barboza , Alistair Francis Subject: [PULL v2 11/96] target/riscv/kvm: Synchronize privilege mode Date: Mon, 24 Aug 2026 15:46:41 +1000 Message-ID: <20260824054806.2790041-12-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1034; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1034.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550602870158500 Content-Type: text/plain; charset="utf-8" From: Xie Bo The KVM core register synchronization currently omits the vCPU privilege mode. As a result, env.priv can be stale when the migration stream is saved and the destination can restore the vCPU in the wrong mode. Read and write the KVM core mode register together with the other core registers. The generic RISC-V CPU VMState already carries env.priv, so no migration format change is required. Signed-off-by: Xie Bo Reviewed-by: Daniel Henrique Barboza Message-ID: <20260808125157.1220511-2-xb@ultrarisc.com> Signed-off-by: Alistair Francis --- target/riscv/kvm/kvm-cpu.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/target/riscv/kvm/kvm-cpu.c b/target/riscv/kvm/kvm-cpu.c index 97069bf597..f6ddd0db9b 100644 --- a/target/riscv/kvm/kvm-cpu.c +++ b/target/riscv/kvm/kvm-cpu.c @@ -603,6 +603,12 @@ static int kvm_riscv_get_regs_core(CPUState *cs) } env->pc =3D reg; =20 + ret =3D kvm_get_one_reg(cs, RISCV_CORE_REG(mode), ®); + if (ret) { + return ret; + } + env->priv =3D reg; + for (i =3D 1; i < 32; i++) { uint64_t id =3D KVM_RISCV_REG_ID_ULONG(KVM_REG_RISCV_CORE, i); ret =3D kvm_get_one_reg(cs, id, ®); @@ -628,6 +634,12 @@ static int kvm_riscv_put_regs_core(CPUState *cs) return ret; } =20 + reg =3D env->priv; + ret =3D kvm_set_one_reg(cs, RISCV_CORE_REG(mode), ®); + if (ret) { + return ret; + } + for (i =3D 1; i < 32; i++) { uint64_t id =3D KVM_RISCV_REG_ID_ULONG(KVM_REG_RISCV_CORE, i); reg =3D env->gpr[i]; --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550636; cv=none; d=zohomail.com; s=zohoarc; b=UQRj0GloSbz0759qJau+fseaDHAV1Ut8soPAO9PAQwZpiVFhv8fDDhZWenBMLisUyo2ebUeligmOWULIrLoqqVGdyNmwsn0CZspX051dsWcnkInxZcDUWhc4aveCSvy8/WnDvuyEYfhBJfgje5JHi+Zv6cw8h0jlJWuZGIJgx7c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550636; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=xsIv20ka3W9n/PovKdbA0aIXZvkmbBl4/VeH5qj6NKc=; b=FFvxO1VGJI5IxJkrRwlqoYPEH+1SNmywdnR6+DeOPsFhBobru7yKsy22dwYgh1G/N9nkYNGKCTbxFTU2UJnpOcPP5G7VxCZaCTlW0qiBedQIOd/IgbA5358PukNa1lYyoPA7a0bi0hq6pj1awOXOF3wwgvvcb/g9m+9jkHhDzCM= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550636447164.58214981456877; Sun, 23 Aug 2026 22:50:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNYW-0001Nn-MU; Mon, 24 Aug 2026 01:49:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNYK-0001Im-Ag for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:01 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNYI-0001p9-Ai for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:00 -0400 Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-38e7109321dso2067742a91.3 for ; Sun, 23 Aug 2026 22:48:57 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.48.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:48:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550537; x=1788155337; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=xsIv20ka3W9n/PovKdbA0aIXZvkmbBl4/VeH5qj6NKc=; b=Oq6esTQtSAfHadbwO+duJIYCmp4625q9Z+kAmI+5OgzH9/Bdch2AB3cWodjg26lrRV cV4IjWqr8tCiOH4TuTS/8QlYldTSTREli7Dzg825hn8LRXvLXq++12EO5EXs0A6uzQhf BFbkBZd9zJtLTcgiTdyXp9eqyiTCj0GuPNugUovMPMi16VBx1G2fwSjlZ9vrAQB/IaOu QUqAbkmU21KZkgXtd6UXL/r/IS9mCpDUQ0EujTplltiEIv2vv6jgron80rJ2JSI6HAcT QhrgwXCUZAzZAPIc3Z3ycF5RY7XfIQTkGErwe6ykA1686bCsR0D91phliZOSKhfKN6dy k+OA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550537; x=1788155337; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=xsIv20ka3W9n/PovKdbA0aIXZvkmbBl4/VeH5qj6NKc=; b=BzTbCJtkN/YD2Qj3j6o5iQVq5KQjJkBpPhOlJgD8cIo1BDhu0PZyaVW7OQfZG4vu7E 88gZf1IOP3t7STMbO01jamZtFGw0QcvB8UxqHa6hc0ypyzJXa8tftRyBbOHKGtqV5l+v 13mZVmUT8+DW7mJ+4CowVzn9ifVg8u51tzBX4IjPESr0muYu9kz5WTYCaeELOO92dNUu nOZGepwanwZ9MvWk6jRJ8PoXUbIYEjn7GxZRggRcRu2B04ZSeq/BBRENXTD3N7F+uNoF e/IRYNaJDZ2UK+QUX3KhrtYllUwL0cRyBP+sKwV03NtZOPTzTWlkfso9c5XXtjcD37Bs acmg== X-Gm-Message-State: AFuF++kTGlzmXlgx8Y18c9dLScKzOAA4rysZFS3yOs/vu66UYe3Hikue vyRjB2OUpWbTRCVTsIJWR8YAZpD8jeiXEjpWdgsqxN3Io8dcMQEg64tCQKK/FQ== X-Gm-Gg: AR+sD12p3cicr4Cxq51JsL7XA7jvgfXZfGS3uM+GfUxRkPQXI44le/yul3US0yxzBxE QVV287IKKaB4xt5dC5O9h/4aKd0n3E79c5l2Y8nvBKYR/hvoJxM7onOzHFQiBtlHTdfQQL89qox u/VlP1uypixy/c8ZueO5rBK3fyEJMBNaFAaU+wKzlqubEdsc/xZT445Q3ZW0gFflAw8HqU+rQvF +XFpXpBuE8dMDPQRKJ5AQ+05ZsjeIHYMroP+Pqqe4zeCh6gdhDUAApj9zoyp/aOVJpRlSNtDRXY IRTuEIvqYcykO6Hr4yDMBBwoIlic3/Ep9WvJwG7Aw/Mv+qS/FJ6vBe60CftvLWBOhn53HcKOVno TcQBZgKojn3e3VSrg8XN2R4sOsB0WzTn6DEVBRr4Pb0XnWx7VXJQO7LA7kUIgRRQgKL56plL+vE HZKgbLdM+jVtusMcOXGZiun15y6BiADOu3RrAHBZh+Ip6vI0eFQu0RQO0rOrHT5yDZIi1cKs7h9 gVf+g== X-Received: by 2002:a17:90b:33c2:b0:38e:c232:9d3f with SMTP id 98e67ed59e1d1-395c3597c56mr39361598a91.5.1787550536953; Sun, 23 Aug 2026 22:48:56 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Xie Bo , Daniel Henrique Barboza , Alistair Francis Subject: [PULL v2 12/96] target/riscv/kvm: Preserve MP state across migration Date: Mon, 24 Aug 2026 15:46:42 +1000 Message-ID: <20260824054806.2790041-13-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1032; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1032.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550636885158500 Content-Type: text/plain; charset="utf-8" From: Xie Bo RISC-V KVM initializes secondary vCPUs in KVM_MP_STATE_STOPPED, but QEMU does not save their runtime MP state. A destination therefore retains reset MP state after migration and cannot reliably resume all vCPUs. Save KVM_GET_MP_STATE in a capability-gated KVM VMState subsection and restore it on KVM_PUT_FULL_STATE. Keep the existing reset initialization path unchanged. Track whether the subsection was loaded so streams where the subsection is absent retain the destination reset behavior. Bump the RISC-V CPU VMState version and minimum version to 12 for the new pre_load hook and KVM MP-state subsection. Keep the subsection out of KVM migration streams when the host does not support the MP-state capability. Signed-off-by: Xie Bo Reviewed-by: Daniel Henrique Barboza Message-ID: <20260808125157.1220511-3-xb@ultrarisc.com> Signed-off-by: Alistair Francis --- target/riscv/cpu.h | 4 +++ target/riscv/kvm/kvm_riscv.h | 2 +- target/riscv/kvm/kvm-cpu.c | 50 ++++++++++++++++++++++++------------ target/riscv/machine.c | 49 +++++++++++++++++++++++++++++++++-- 4 files changed, 86 insertions(+), 19 deletions(-) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 376cff656f..718b66487a 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -538,6 +538,10 @@ struct CPUArchState { uint64_t kvm_timer_compare; uint64_t kvm_timer_state; uint64_t kvm_timer_frequency; + + /* KVM multiprocessor state */ + uint32_t kvm_mp_state; + bool kvm_mp_state_loaded; #endif /* CONFIG_KVM */ }; =20 diff --git a/target/riscv/kvm/kvm_riscv.h b/target/riscv/kvm/kvm_riscv.h index b2bcd1041f..61eaa12443 100644 --- a/target/riscv/kvm/kvm_riscv.h +++ b/target/riscv/kvm/kvm_riscv.h @@ -28,7 +28,7 @@ void kvm_riscv_aia_create(MachineState *machine, uint64_t= group_shift, uint64_t aplic_base, uint64_t imsic_base, uint64_t guest_num); void riscv_kvm_aplic_request(void *opaque, int irq, int level); -int kvm_riscv_sync_mpstate_to_kvm(RISCVCPU *cpu, int state); +bool kvm_riscv_has_mp_state(void); void riscv_kvm_cpu_finalize_features(RISCVCPU *cpu, Error **errp); uint64_t kvm_riscv_get_timebase_frequency(RISCVCPU *cpu); =20 diff --git a/target/riscv/kvm/kvm-cpu.c b/target/riscv/kvm/kvm-cpu.c index f6ddd0db9b..68e1501b21 100644 --- a/target/riscv/kvm/kvm-cpu.c +++ b/target/riscv/kvm/kvm-cpu.c @@ -1374,25 +1374,35 @@ int kvm_arch_get_registers(CPUState *cs, Error **er= rp) return ret; } =20 + if (cap_has_mp_state) { + struct kvm_mp_state mp_state; + + ret =3D kvm_vcpu_ioctl(cs, KVM_GET_MP_STATE, &mp_state); + if (ret) { + return ret; + } + RISCV_CPU(cs)->env.kvm_mp_state =3D mp_state.mp_state; + } + return ret; } =20 -int kvm_riscv_sync_mpstate_to_kvm(RISCVCPU *cpu, int state) +bool kvm_riscv_has_mp_state(void) { - if (cap_has_mp_state) { - struct kvm_mp_state mp_state =3D { - .mp_state =3D state - }; + return cap_has_mp_state; +} =20 - int ret =3D kvm_vcpu_ioctl(CPU(cpu), KVM_SET_MP_STATE, &mp_state); - if (ret) { - fprintf(stderr, "%s: failed to sync MP_STATE %d/%s\n", - __func__, ret, strerror(-ret)); - return -1; - } +static int kvm_riscv_put_mp_state(CPUState *cs) +{ + struct kvm_mp_state mp_state =3D { + .mp_state =3D RISCV_CPU(cs)->env.kvm_mp_state, + }; + + if (!cap_has_mp_state) { + return 0; } =20 - return 0; + return kvm_vcpu_ioctl(cs, KVM_SET_MP_STATE, &mp_state); } =20 int kvm_arch_put_registers(CPUState *cs, KvmPutState level, Error **errp) @@ -1431,10 +1441,18 @@ int kvm_arch_put_registers(CPUState *cs, KvmPutStat= e level, Error **errp) } =20 if (KVM_PUT_RESET_STATE =3D=3D level) { - RISCVCPU *cpu =3D RISCV_CPU(cs); - int state =3D cs->cpu_index =3D=3D 0 ? KVM_MP_STATE_RUNNABLE - : KVM_MP_STATE_STOPPED; - ret =3D kvm_riscv_sync_mpstate_to_kvm(cpu, state); + CPURISCVState *env =3D &RISCV_CPU(cs)->env; + + env->kvm_mp_state =3D cs->cpu_index =3D=3D 0 ? KVM_MP_STATE_RUNNAB= LE + : KVM_MP_STATE_STOPPED; + env->kvm_mp_state_loaded =3D false; + ret =3D kvm_riscv_put_mp_state(cs); + if (ret) { + return ret; + } + } else if (KVM_PUT_FULL_STATE =3D=3D level && + RISCV_CPU(cs)->env.kvm_mp_state_loaded) { + ret =3D kvm_riscv_put_mp_state(cs); if (ret) { return ret; } diff --git a/target/riscv/machine.c b/target/riscv/machine.c index 0ab613a298..31c49ca3e6 100644 --- a/target/riscv/machine.c +++ b/target/riscv/machine.c @@ -25,6 +25,9 @@ #include "exec/icount.h" #include "target/riscv/tcg/debug.h" #include "hw/riscv/machines-qom.h" +#ifdef CONFIG_KVM +#include "kvm/kvm_riscv.h" +#endif =20 static bool pmp_needed(void *opaque) { @@ -222,6 +225,44 @@ static const VMStateDescription vmstate_kvmtimer =3D { VMSTATE_END_OF_LIST() } }; + +static int riscv_cpu_kvm_pre_load(void *opaque) +{ + RISCVCPU *cpu =3D opaque; + + cpu->env.kvm_mp_state_loaded =3D false; + return 0; +} + +static bool kvm_mp_state_needed(void *opaque) +{ + return kvm_enabled() && kvm_riscv_has_mp_state(); +} + +static int kvm_mp_state_post_load(void *opaque, int version_id) +{ + RISCVCPU *cpu =3D opaque; + CPURISCVState *env =3D &cpu->env; + + if (!kvm_enabled() || !kvm_riscv_has_mp_state()) { + return -ENOTSUP; + } + + env->kvm_mp_state_loaded =3D true; + return 0; +} + +static const VMStateDescription vmstate_kvm_mp_state =3D { + .name =3D "cpu/kvm-mp-state", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D kvm_mp_state_needed, + .post_load =3D kvm_mp_state_post_load, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32(env.kvm_mp_state, RISCVCPU), + VMSTATE_END_OF_LIST() + } +}; #endif =20 static bool debug_needed(void *opaque) @@ -457,8 +498,11 @@ static const VMStateDescription vmstate_mseccfg =3D { =20 const VMStateDescription vmstate_riscv_cpu =3D { .name =3D "cpu", - .version_id =3D 11, - .minimum_version_id =3D 11, + .version_id =3D 12, + .minimum_version_id =3D 12, +#ifdef CONFIG_KVM + .pre_load =3D riscv_cpu_kvm_pre_load, +#endif .post_load =3D riscv_cpu_post_load, .fields =3D (const VMStateField[]) { VMSTATE_UINT64_ARRAY(env.gpr, RISCVCPU, 32), @@ -522,6 +566,7 @@ const VMStateDescription vmstate_riscv_cpu =3D { &vmstate_rv128, #ifdef CONFIG_KVM &vmstate_kvmtimer, + &vmstate_kvm_mp_state, #endif &vmstate_envcfg, &vmstate_debug, --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550785; cv=none; d=zohomail.com; s=zohoarc; b=lmU8AfkPqv34O58kq8EXAshw/zQ6XswTM7GGzt8o7EmHC6EEYAluGb62CD3rXuW8Cvlt5s5Q1N6zyon/27JTsj/n0VnS5udHWQhn/aFp5OUEiZEUs5h4phqcrX+V888yrCt2TnFWo8RCleC72tRd90z11Woe7vhi5lcam/KiX4A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550785; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=pmOBYgqrw3RiSWM58XHjxeAyd3bF4nHvgyQYSsEFwig=; b=P0pSznQDx7my/PNbILeLPnnRtJs2wQVjZI3C7MoK1rJulSJQcVrcmqbtX4sdPr7IfA2ZcnB94uPeqC/sCt1pxhsKr0G1sUCRAoMDSIiDdtwixbL1qaMg2IcBtiKyJx4cBiOBZUfYhiKWAPUuTynEhmW4R54+JT73lnhxOVJy/5U= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550785143742.4300005411678; Sun, 23 Aug 2026 22:53:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNYV-0001Nl-KA; Mon, 24 Aug 2026 01:49:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNYN-0001Jv-L7 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:04 -0400 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNYL-0001px-SM for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:03 -0400 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-382ef647e20so3148828a91.1 for ; Sun, 23 Aug 2026 22:49:01 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.48.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:48:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550540; x=1788155340; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=pmOBYgqrw3RiSWM58XHjxeAyd3bF4nHvgyQYSsEFwig=; b=elvvM5scIVSL8BslERBm+bYPcJ5+DxId/z1ZuWpRI1U90qSdOuMf2zrhRtFM6Dvpzc 2qiCqhTu6q41HRjGkda5PGECj+3GRcVPf+vMpPS0ZUoih/23/PkklLYseCU/BPGTz/qD we6EpONPqvai+8z4qvTSYfIaWvudOa06XTI5/WVWAt2rUwMexnIo8bjNCvu5yD/gu2+b HAdLzPO5SBSLxeDZmVrIIOVZDe8ROOOXkvSRMIc3QyN1XieATxURFbN3GCWlnJcFw6k7 BBNzm/XV1aK1EmEo3E8etZMm4lf1D/FSuE2akQJFMksVJKX2M4Uk55TTpdmw8cSzUZ2S /gIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550540; x=1788155340; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=pmOBYgqrw3RiSWM58XHjxeAyd3bF4nHvgyQYSsEFwig=; b=mrLmpbpIf8FSSAKV7L4bWNerkgm44tQKY9mJ9EfZP6q5cduas7SCf127DHbc+79Xmx 1cpIuYeDKtYbXVWtU0LSH1jxkVzrHBY6iodOTe6xCWkPv29NLb5YNMFJ1FBnvUK7Dwmc Ydbqxu5M5Cl2ZBiLP6Y4mEpkL+Wfsm2N2oaUQCxdglncNKrzqJvqgQ3UeUC9iLlqL5YT nI+PEiV8ZnjOv9PZjiFkOzST7eiw9GBfvKpTHwhhyKh/fmKYgtlWD3aT3WMfKSMAPLJC aXJwY/NuMIhnoh/2PXhIZqxckRgZRie1D58h9pXmyWtMCO+A+Yc3OBQ69zZ7P0zMbNfW Hkcw== X-Gm-Message-State: AFuF++kNc+eewcU0tL2Ul3m5y9juVqTErAwusY453CB8bDNYFDUI5f6u ZWw6Aaf7YPp6pJH0OF9Dh01VTqkHa9gKMfZykasf+T3MjpP/wPzw1iUMeOVXOg== X-Gm-Gg: AR+sD115gxpp9vrE12Tn/Ln3YsJ5wrREXvep8hnhNFmXgWqI+1sIADK7Sx5qqIKFo7b Tmlijws1QfoiAYYf0gX33DS2ULkVtN1vs59nlh6sYiFMpMn6VJ90ZCDjM94Jr92lZ/9uSGN2iSV xerFpb6MpzXq0ohaMT/zc4fJh6N9bH6MlcOt77ISuYvur5IF2BPJ4enpmU8N2xiH4EqVHgv1d8P odaBZXJzUHhZUIMvx6qW+28rxy80gVOqhiV8Reqn1IXX+9mKPrz5yhaS3FP+YDYK/3r6jUVQPLy CV26vlI5g+e5aPp5SzCLPcd4w9ULGICbT/wJnQDoov4rSFsH/Ve5dTAI1d3+XR7NFy0Et5lBEVO JMPdat2LfuY/DdURaDSkSBAHtycviSPNmp9Hvvnybvbh5i2Gbb6U+R1jV/V6Nlke06LX5fmSArx UJgMe5zea+ZiPeyf3k/wfQSHtN5ApNQaESKiooEXxaWhgZKqNT20aRDxBxKCF/JEhxpnLLqxIe1 4b/iA== X-Received: by 2002:a17:90a:d605:b0:38e:5964:97a8 with SMTP id 98e67ed59e1d1-395df5e8fefmr29822405a91.16.1787550540401; Sun, 23 Aug 2026 22:49:00 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Max Chou , A-Shehab , Daniel Henrique Barboza , Alistair Francis Subject: [PULL v2 13/96] target/riscv: Fix PC sync in trans_sspopchk for CFI exception handling Date: Mon, 24 Aug 2026 15:46:43 +1000 Message-ID: <20260824054806.2790041-14-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102c; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102c.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550787524158500 Content-Type: text/plain; charset="utf-8" From: Max Chou Move gen_update_pc call before conditional logic to ensure consistent PC state regardless of execution path. Previously, the host instructions generated to update the cpu_pc were only executed in the failure path when shadow stack validation failed. This created inconsistent PC synchronization. This inconsistency caused issues in CF_PCREL mode where subsequent instructions calculated wrong relative offsets from stale pc_save values, and could lead to incorrect exception return addresses. This fix ensures PC is always synchronized before any helper that might raise an exception, maintaining consistent translator state across all execution paths. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/4118 Signed-off-by: Max Chou [ahshehab: rebased on current master; file moved to target/riscv/tcg/insn_trans/ and the ssp load is now 64-bit wide] Tested-by: A-Shehab Signed-off-by: A-Shehab Reviewed-by: Daniel Henrique Barboza Message-ID: <20260730181852.1622-1-ahshehab24@gmail.com> Signed-off-by: Alistair Francis --- target/riscv/tcg/insn_trans/trans_rvzicfiss.c.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/riscv/tcg/insn_trans/trans_rvzicfiss.c.inc b/target/ris= cv/tcg/insn_trans/trans_rvzicfiss.c.inc index a813232887..d47a9f9c7d 100644 --- a/target/riscv/tcg/insn_trans/trans_rvzicfiss.c.inc +++ b/target/riscv/tcg/insn_trans/trans_rvzicfiss.c.inc @@ -32,6 +32,7 @@ static bool trans_sspopchk(DisasContext *ctx, arg_sspopch= k *a) TCGLabel *skip =3D gen_new_label(); uint32_t tmp =3D (get_xl(ctx) =3D=3D MXL_RV64) ? 8 : 4; TCGv data =3D tcg_temp_new(); + gen_update_pc(ctx, 0); TCGv_i64 wide_addr =3D tcg_temp_new_i64(); tcg_gen_ld_i64(wide_addr, tcg_env, offsetof(CPURISCVState, ssp)); tcg_gen_trunc_i64_tl(addr, wide_addr); @@ -42,7 +43,6 @@ static bool trans_sspopchk(DisasContext *ctx, arg_sspopch= k *a) tcg_gen_brcond_tl(TCG_COND_EQ, data, rs1, skip); tcg_gen_st8_i32(tcg_constant_i32(RISCV_EXCP_SW_CHECK_BCFI_TVAL), tcg_env, offsetof(CPURISCVState, sw_check_code)); - gen_update_pc(ctx, 0); gen_helper_raise_exception(tcg_env, tcg_constant_i32(RISCV_EXCP_SW_CHECK)); gen_set_label(skip); --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550586; cv=none; d=zohomail.com; s=zohoarc; b=AfhtoZiity3GBw3cUxn/TDU7CRInmapKOudpuXyGP0ctEu1/beOxaRQBEFn/znhpjLGEkKem6YaEkyF7c82QjVeNeKZimOImb8m8ZsiYF5Ljn+LpNiBgcOwOOsJrl5c2iJEeqfqnVUODTk0ZxHNPewn5GbfwEa79l/3G3kGFgQ0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550586; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=InDjCg2L0Bovh8ca/Rz0G2mpdBtxcIk8gJadCrq3EA0=; b=WR4QgDKtkEurFWyUSpS0JpVNTls9uqZhotlbIo9rnc/re3WcnxUntt3TtTorwG6CYNff4quV9wzvtb3rAba4RUSfGjoD/N5fz6d+bY6QYHU5iv0fvChlGeOvvtJRY7mF2GUhbAXNNMsxV0VdQEroQW2NOIhb58Wle/AQQpuuYnI= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550586099990.0530654935878; Sun, 23 Aug 2026 22:49:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNYl-0001SN-IM; Mon, 24 Aug 2026 01:49:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNYR-0001Km-C9 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:08 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNYP-0001qp-0l for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:07 -0400 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-38de840f2f0so2357574a91.0 for ; Sun, 23 Aug 2026 22:49:04 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.49.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:49:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550543; x=1788155343; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=InDjCg2L0Bovh8ca/Rz0G2mpdBtxcIk8gJadCrq3EA0=; b=JOPi3gu38waoWiy9rZF+qNydIFpT4dsEVNK64qyDqrtxYfxhFssGK2bxWS1Y1IOZQ1 qorraKoOmDFIJ4ukDmM+yj/5g8/wA6sjF/mOb7m6D3r3rq3LjVsUgB5Vj/OuoRypk5bI JyS0y93mgKN99UOcwgGmCUCfEP1FgPKqQp1LkMy3wAX6SZgufzpm71n1zT6jSsNPoX0H x4QPcr/qUAwIY8pBJumxX5frPwSfHWct2jjUmg8R5zEeeycM9uVT/uZk10/FwT/DtBwr FppeXc4jrE0jQkzihWLADXvuR9Yqb5JyXqwp6FWeO16KLbcUdik+RGAV6fo+isjC2BJs KcWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550543; x=1788155343; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=InDjCg2L0Bovh8ca/Rz0G2mpdBtxcIk8gJadCrq3EA0=; b=IBGLT7PwjSXVJKmb7bJdxYeUsx1UD1qyly9WCtOPNJipwduUKiZ/qG2OSryn7Jra2e w9lBbd3G8GCCZoRsCW1yj8+i71EsGso9WHL6rJPk2vK0/7kyeRAWhgWcYLoPOMN2rMa6 WDYVKEibkkG3SkNYIt4pX64tLeLavT8zVwUcixBm4D33+T4gc5f0bMKmTOYiXyZJHe0l TbhwrgG7rm5jGTx0fZxcuxkHy/5N6J3TOX9A9uXxlITUhB/Ocuxjg2kRnS9g0wbRKdEu SXH2FJfrUh5nMQXJfbgxTx/4FqNuqpiVh0XWEL99bJ1fHXYWElDpZPpiViqAHhHhCzxx 4PMw== X-Gm-Message-State: AFuF++lGRopZ5s7NK3UwiBwAchXPA9WvH9Lc+hXKDnBC5ZCyUF1h5t3m tpfTilJ2UF+3OABffv8Cyfp3Bf3FGHgB65asfh2svzDQLpL7Rayo8FOnKwQbJA== X-Gm-Gg: AR+sD10q+LxHaMuCoFh+5n61t2TyAoNHEbGTWlArDMWYwO2QlUrXOqrd/MibPOC9x4/ z3KvfQrZX6/tPpXzThge1DkYDkz39ZqyYuWhDOlzAxpSo0yv5JF6l/TWz184cZ8mGXtD/07wrte hPMV8dwfAZDPfku0D24NmJSqL6sbxqaKjo8c2rSvAIp9fhd9ex5rqHT85iwxWFssb3TzQwl85Yu Js0n/xwqF1KWJT6kS2IpwP/8t6NAtWfzq2CZ6h+KzDhHLm4h8uVp2B0+6k2t8BIYZnMCUVdCLU5 jRL+QhjObqRS5/zqgngywnRTBvpGarz/dH40ZEu9AaQSAhtRV4Yc6TMvkgHmqupJ48VAVjaf3+l wPPzFyltuILNyTmwuUzJRktKX5bBugYQELUJ5zJg1yhWbV1fWntZvE4AUrrqG+7o+UlihGDfD97 fEcoBHqc2sMt/aEWrjDS5h+5/f2OxJxrKs5C4GoDx/MS0Pa+Wz8bZysKnoK/YMv1Lxd4CfxEDIV g9Cg4v9D6zeqzdR X-Received: by 2002:a17:90b:5805:b0:38e:485c:ebd3 with SMTP id 98e67ed59e1d1-395c3a514a5mr43599685a91.15.1787550543555; Sun, 23 Aug 2026 22:49:03 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Abhigyan Kumar <314abh@gmail.com>, Daniel Henrique Barboza , Alistair Francis Subject: [PULL v2 14/96] target/riscv: use SXL instead of MXL for read_sstatus Date: Mon, 24 Aug 2026 15:46:44 +1000 Message-ID: <20260824054806.2790041-15-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102d; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102d.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550586571158500 Content-Type: text/plain; charset="utf-8" From: Abhigyan Kumar <314abh@gmail.com> According to the RISC-V spec, a 64-bit system can have M-mode in 64-bit with S-mode being 32-bit (SXL bits or mstatus[35:34] being 1). In this case, read_sstatus should use SXL. QEMU doesn't allow changing the SXL bits in mstatus in M-mode. This was because of the missing MSTATUS64_SXL mask in write_mstatus. Now, both the SXL field in mstatus can be safely modified in M-mode and read_sstatus correctly uses SXL not MXL. Fixes: b550f89457 ("target/riscv: Compute mstatus.sd on demand") Signed-off-by: Abhigyan Kumar <314abh@gmail.com> Reviewed-by: Daniel Henrique Barboza Message-ID: <20260723142254.1683113-1-314abh@gmail.com> Signed-off-by: Alistair Francis --- target/riscv/tcg/csr.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/target/riscv/tcg/csr.c b/target/riscv/tcg/csr.c index 36f2004bc5..a90449b87f 100644 --- a/target/riscv/tcg/csr.c +++ b/target/riscv/tcg/csr.c @@ -2067,6 +2067,11 @@ static RISCVException write_mstatus(CPURISCVState *e= nv, int csrno, } =20 if (xl !=3D MXL_RV32 || env->debugger) { + if ((val & MSTATUS64_SXL) !=3D 0) { + mask |=3D MSTATUS64_SXL; + val =3D riscv_write_uxl(env, val, MSTATUS64_SXL); + } + if ((val & MSTATUS64_UXL) !=3D 0) { mask |=3D MSTATUS64_UXL; val =3D riscv_write_uxl(env, val, MSTATUS64_UXL); @@ -4014,8 +4019,8 @@ static RISCVException read_sstatus(CPURISCVState *env= , int csrno, if (riscv_cpu_cfg(env)->ext_ssdbltrp) { mask |=3D SSTATUS_SDT; } - /* TODO: Use SXL not MXL. */ - *val =3D add_status_sd(riscv_cpu_mxl(env), env->mstatus & mask); + + *val =3D add_status_sd(riscv_cpu_sxl(env), env->mstatus & mask); return RISCV_EXCP_NONE; } =20 --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550621; cv=none; d=zohomail.com; s=zohoarc; b=jPBNMbs/TiukzNKiusSPZjgvv81LdXi72PtCEchIR+T2p2ryK6PWN8FqhjYIdUoM0IlhsLTKyMqk4ZgLIt9AtZ97pprc/qiPh+B8YgCKb5yxA0xFlHgkmThahbBV28WxOr1eQ743/EAmiDTvepNAqhPqmxxKpRH+SGafdwtI0/w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550621; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=1lmUdEov6FqZsd0VDIKqfsQZY33RKDRt1qK6/MBemXQ=; b=WUd7fWixVP5bCQytn+NwJE+yKzAwF2k76QygeiYdk+OyuQkjioG6Nt1aT1KEPHhfXW+AuJJ2kO0awVMQQfCJomZpRo3khWnnXKxT1yXaJizp1wV6a9C/yXnuAYs/NGSxiat9o9nHqpdWfZ3SBGAaNnh3LUgbeOWTp30hOW7aTRM= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550621589680.2877104735344; Sun, 23 Aug 2026 22:50:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNZB-0001ve-70; Mon, 24 Aug 2026 01:49:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNYT-0001N6-Nm for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:09 -0400 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNYS-0001sI-2t for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:09 -0400 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-395cf2535acso2515982a91.1 for ; Sun, 23 Aug 2026 22:49:07 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.49.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:49:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550547; x=1788155347; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=1lmUdEov6FqZsd0VDIKqfsQZY33RKDRt1qK6/MBemXQ=; b=i4AKhD0p0Q07MaSq8bKFBkYiXfzCnltX96eP2ZcbES419quQTpNngnWcZq8z2HFMi2 14LO+QyJ2HNgQq+s11vuLd3pqKD+JT3wFAUI65v21LFTflPFJ4f48ayYDpBrq0SoloWq bUr+2TJ5CITvO/K8XrIl7ryS23Lu8dWBKvRb5OlyuuAS9Y+A1yhUq6q8zQbvOSVrTE9H WQqVUlUk2ekxPi/I7wAaQGROlX9IBPTtlmRHqFTYVaSv9TJfHowgYW4eB7BgadZw4xeX 5Q/rq0vUSxDnz2TtdxbYIfqAe9YzKt1wBh1dXDyBl+UVXRkm/Reueag7wMhneAtdie6H d0lQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550547; x=1788155347; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=1lmUdEov6FqZsd0VDIKqfsQZY33RKDRt1qK6/MBemXQ=; b=XNp4XmVKgBaw0IykugxmCEWabYCp/Bc8Quvua7xGd/T0yIx+FZHQfdzkp8QOJkZxMj oRiDgljQb0PpXgMm3VfZPHpT+kW+av4u58ZY5NFgZ3U1uH/Zl13KcOPW613hQe8ZDNdf fRRiqGdDhNqxY2NlFdb/T/0jDd3th/HUFwsRxdVHa9JYjNGtk0/JJYLDM7+MoFwN7M8j 9T71Nj4TyJf6qgoZijfKUk9OsTYyD6zCLRMvP6He/OCNAQ/k0k8enOk3UcoW8Q0dcJm3 J56XYMcRrUO0iEdipnfKA+ev4AigZ3QgWdrFpD7Tt00mrvN5TjZyQMu1EQeHGj5L9Rig bBBg== X-Gm-Message-State: AFuF++lONPZJfA9lfOw+/MVaoiZ60DMHdMK8Er4vfOf0vE7GUi6ArVpm c1AW+YbHv5ANuZpfa6+UlEvasg2O9IOzHfz6dP7Xflp090gcuGElxJbyo7sIOw== X-Gm-Gg: AR+sD10ycBWkjsSTknZsCveiu//8K2fnipBgRZBsMEUmAL6L1H1m9sRq23xM4UAPvVt 9PEfjicxz+d7mXGPFzG4T/e8HpbJfv6+PduhTLythGLPQnbV9lhN1EQLMKNn4vhBUpft+9NGpt/ 4VeToWuxPCcseCdFZwlecbpPt+9kYGhxJcFnQWzCdgLM/AA5Nctxc+mdNSEEGhU1Qe6VtZDaQim fHKUIaHal6w56DBQoEeX3J32gNLufjIOPlOUmcMVjHxtevZmvVfw02nMPhz9zbtGBhFT8mtm53k 8hpiGTe7YOhYaX6iCLUXitmybRPY6fBua4UdVgKFnf5tAeMYd5XS0zkoeK4JTsDfSVrkBQq8+R4 BZKUvhyJ8sDb05ATGXTwThgRljLynAOJMDSZuYPoDn8m6XS8suuMeO53yMFvLrhVSSdejYwUBMY ww5N+ImEHfdvAaMDYovoxM2YbK2LlW0tJY8LhGaK2+DGAG75IZSMP9mpl/eFUSzjiSqobJfw6ff uttQQ== X-Received: by 2002:a17:90b:5823:b0:38e:c232:9d2c with SMTP id 98e67ed59e1d1-395c4bde19amr22147475a91.2.1787550546854; Sun, 23 Aug 2026 22:49:06 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Zeng Chi , Daniel Henrique Barboza , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alistair Francis Subject: [PULL v2 15/96] target/riscv: Fix memory leak in riscv_trigger_unrealize() Date: Mon, 24 Aug 2026 15:46:45 +1000 Message-ID: <20260824054806.2790041-16-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102c; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102c.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550622934158500 From: Zeng Chi In riscv_trigger_unrealize(), the per-trigger QEMUTimer objects are created in riscv_trigger_realize() using timer_new_ns(). However, unrealize only calls timer_del() to cancel them, but never frees the timer objects themselves. This results in a memory leak every time a CPU instance is unrealized (e.g., during hot-unplug or machine teardown). Fix it by replacing timer_del() with timer_free(), which internally cancels the timer and frees its memory. The separate timer_del() call is no longer needed. Fixes: 820552a92e32 ("target/riscv: dynamic alloc of debug trigger arrays") Signed-off-by: Zeng Chi Reviewed-by: Daniel Henrique Barboza Reviewed-by: Philippe Mathieu-Daud=C3=A9 Message-ID: <20260724063927.3360599-1-zeng_chi911@163.com> Signed-off-by: Alistair Francis --- target/riscv/tcg/debug.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/riscv/tcg/debug.c b/target/riscv/tcg/debug.c index 3c0fe70101..5ab29f6945 100644 --- a/target/riscv/tcg/debug.c +++ b/target/riscv/tcg/debug.c @@ -1080,7 +1080,7 @@ void riscv_trigger_unrealize(CPURISCVState *env) g_free(env->cpu_watchpoint); =20 for (int i =3D 0; i < env->num_triggers; i++) { - timer_del(env->itrigger_timer[i]); + timer_free(env->itrigger_timer[i]); } g_free(env->itrigger_timer); } --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551299; cv=none; d=zohomail.com; s=zohoarc; b=NAvxieqgPqLl8W10pZGp0bZA5X+DswHrLORwyP3z5yOvTEhQGsAePxaSE1fkpr3WhZDYcn8TQ3cUuNz7WRRLWRBfFH8UxXeGjjqvtb1OUWSFfA8M9bR3i+nIvCiWuhA3uSCfkIGWAbzF3yHk8pmnrvatD4NJO7lxoa/A0+pL+NE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551299; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=+FdWVqHvbukBDTAtIE0GsAxOTICi4E0tdgbLrJwjft8=; b=PW+BCOTNPokYDYlUfiRVBVEy8TQcuLYLfhuh2pLTEGBHQizNFBGfoMOF1SbspSL/A2XiW+qET4gMa3z7K3o0bAwW7PWblQh4jVS9YhzJnOuXYcc9lvMWtWLDWKur7XVCVoyWbStBc3jNLSjkZ78sMGC7K0ElVQ7YCOqovOOXKIw= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551299285604.1640283736264; Sun, 23 Aug 2026 23:01:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNZv-0003Hb-V7; Mon, 24 Aug 2026 01:50:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNYa-0001PR-KD for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:16 -0400 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNYX-0001tO-3X for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:16 -0400 Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-2cc61541f8cso42934065ad.0 for ; Sun, 23 Aug 2026 22:49:11 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.49.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:49:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550550; x=1788155350; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=+FdWVqHvbukBDTAtIE0GsAxOTICi4E0tdgbLrJwjft8=; b=c5DZpth1nx8wSqsw3NWaNePj9x1f7A8b62Unb3soF/K2RxNJp0jRIcEWOku574Afcz lb82IhEay0+/uP2Gay0L7/l8VRkVZpRxlDty9/1l/BaaDUFdFZKvdsMt/FLxNNySZOvS yLV6D3hbJ7/j2VpzFzNombAICu32/CeCA0qPRYl752dCRvkFpGJQ+81rrMRG+R9xIfcS tA+K88wI4X7m0DyhYT+PlfQJCPjSMiYAMfULZ5f8QLVnn8c3rN/EaUW192lhSSMCbTGI iRP54R8yDDQ6of7njOVohks1zz87laEhtwfkZAkytkSh0cl/xUxtgWToLKjHRuXl+pgr PuaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550550; x=1788155350; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=+FdWVqHvbukBDTAtIE0GsAxOTICi4E0tdgbLrJwjft8=; b=OaIVsZgLdn/brupXIaAZDpVx2Ji8fsLRknVQcDxrG5eNdafGd9bHxMCU3ZkgEZxNRh 7JS1eeRYWgqaKCASSpQh/B51IBrSSWyir0MWP/tEF06FDA1AGslGHSIdB03MqDbjdH19 b2Tga2PchC2F4Xe7mdoT2ceWjAOZAv0p79Kt4bkJTlJJ3EwMKKKo6RAlJ7yM/HldIXIl 254oDj0AD4Q5pE9+5dA0ggxrdg7NioBnqCsPSx7PynzqoRlkv6dpSqGVZhAekanNP/DT iEog1lXW+miwDgJtCS54PU4aoBej9pPqt54xm3Hm+ZCdzeb4jK/CtZFEJSjHA1rMReCC LetA== X-Gm-Message-State: AFuF++l5BXbBp186OBm79bX1uy4+n7A+NBQAXKmptfR94Z3bHyf9Irkz NXd+yGyh9xO8mWLs6k5fneAKfjDCxhLIV6q6xk4/QeSYEB71yYK8wsKCR0RWpw== X-Gm-Gg: AR+sD115UY5x+1el5ryQgNbRnGS7opcKbfMNkIbI9EuB3FkCYde5RQqtKCb//sEG9vL snGJoO86AiKcjtKW8F5O/pTPVKLHpFze4A5I7hHWlp1lte7P1dQ3LFs419D4r/FahN71dRFPPQz Epj2y4Za/KDoEfGl7btbAtKQS6PQEU8lpuszvfOxFfugc+IrCWBaExOfbE0wBEcuuB8XgZMeysl BhDu63FIkmgHhq9fyIZ4vEWqeCl8NE6suQQ4JFxuiIMji2wLWK1Plfxu11deOj9/lco6E6llefG vorGqxrvl7KTABjlwuxSrDHqcqjqbAEw4fBLChoQRlRRxMHTjhZu2DMLWuJNaLanF2vFKSjp45c XMDj6dvV1LV2P6JQ8MEuOdrPpO3pdHOZo8niFrJ7BHo1EqxXorEKHR2yQ+P7OSlGIqV794NJtdz 88oT/oWzFV93pOohPXCDlAX03SkO1/XH3dQjgH8+ZkRiGrSHgDAUi9Ur7hXTxHlv8SpEjRGZOXm CUyCQ== X-Received: by 2002:a17:90b:3943:b0:38f:657:6823 with SMTP id 98e67ed59e1d1-395c50b43bamr22972613a91.8.1787550550269; Sun, 23 Aug 2026 22:49:10 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Frank Chang , Max Chou , Alistair Francis , Daniel Henrique Barboza Subject: [PULL v2 16/96] target/riscv: Add Zicclsm CPU option and enable it for the eligible CPUs Date: Mon, 24 Aug 2026 15:46:46 +1000 Message-ID: <20260824054806.2790041-17-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62a; envelope-from=alistair23@gmail.com; helo=mail-pl1-x62a.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551299841158502 Content-Type: text/plain; charset="utf-8" From: Frank Chang Add Zicclsm CPU option and enable it for the following eligible CPUs: - Base 32 CPU (to be backward compatible) - Base 64 CPU (to be backward compatible) - XuanTie (T-Head) C908 - Tenstorrent Ascalon - Ventana Veyron V1 - XiangShan Kunminghu - MIPS P8700 (ISA doesn't include Zicclsm, but their datasheet claims that it has unaligned load/store support in hardware) Signed-off-by: Frank Chang Reviewed-by: Max Chou Acked-by: Alistair Francis Reviewed-by: Daniel Henrique Barboza Message-ID: <20260810055618.1175500-2-frank.chang@sifive.com> Signed-off-by: Alistair Francis --- target/riscv/cpu_cfg_fields.h.inc | 2 ++ target/riscv/cpu.c | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/target/riscv/cpu_cfg_fields.h.inc b/target/riscv/cpu_cfg_field= s.h.inc index 9eb47af0a7..f8c27a574f 100644 --- a/target/riscv/cpu_cfg_fields.h.inc +++ b/target/riscv/cpu_cfg_fields.h.inc @@ -139,6 +139,8 @@ BOOL_FIELD(has_priv_1_11) /* Always enabled for TCG if has_priv_1_11 */ BOOL_FIELD(ext_ziccrse) =20 +BOOL_FIELD(ext_zicclsm) + /* Vendor-specific custom extensions */ BOOL_FIELD(ext_xtheadba) BOOL_FIELD(ext_xtheadbb) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index e73ff53159..b2693f4c20 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -3347,6 +3347,7 @@ static const TypeInfo riscv_cpu_type_infos[] =3D { .cfg.ext_zicbom =3D true, .cfg.ext_zicbop =3D true, .cfg.ext_zicboz =3D true, + .cfg.ext_zicclsm =3D true, .cfg.ext_zicntr =3D true, .cfg.ext_zicsr =3D true, .cfg.ext_zifencei =3D true, @@ -3419,6 +3420,7 @@ static const TypeInfo riscv_cpu_type_infos[] =3D { .cfg.ext_zicbom =3D true, .cfg.ext_zicbop =3D true, .cfg.ext_zicboz =3D true, + .cfg.ext_zicclsm =3D true, .cfg.ext_zicntr =3D true, .cfg.ext_zicsr =3D true, .cfg.ext_zifencei =3D true, @@ -3505,6 +3507,7 @@ static const TypeInfo riscv_cpu_type_infos[] =3D { .cfg.ext_zbs =3D true, .cfg.ext_zkt =3D true, .cfg.ext_zbkc =3D true, + .cfg.ext_zicclsm =3D true, .cfg.ext_zicsr =3D true, .cfg.ext_zifencei =3D true, .cfg.ext_zihintpause =3D true, @@ -3548,6 +3551,7 @@ static const TypeInfo riscv_cpu_type_infos[] =3D { .cfg.ext_zicbom =3D true, .cfg.ext_zicbop =3D true, .cfg.ext_zicboz =3D true, + .cfg.ext_zicclsm =3D true, .cfg.ext_zicntr =3D true, .cfg.ext_zicond =3D true, .cfg.ext_zicsr =3D true, @@ -3597,6 +3601,7 @@ static const TypeInfo riscv_cpu_type_infos[] =3D { =20 /* ISA extensions */ .cfg.mmu =3D true, + .cfg.ext_zicclsm =3D true, .cfg.ext_zifencei =3D true, .cfg.ext_zicsr =3D true, .cfg.pmp =3D true, @@ -3656,6 +3661,7 @@ static const TypeInfo riscv_cpu_type_infos[] =3D { * The RISC-V Instruction Set Manual: Volume I * Unprivileged Architecture */ + .cfg.ext_zicclsm =3D true, .cfg.ext_zicntr =3D true, .cfg.ext_zihpm =3D true, .cfg.ext_zihintntl =3D true, @@ -3712,6 +3718,7 @@ static const TypeInfo riscv_cpu_type_infos[] =3D { .misa_ext =3D RVI | RVM | RVA | RVF | RVD | RVC | RVS | RVU, .priv_spec =3D PRIV_VERSION_1_12_0, .cfg.max_satp_mode =3D VM_1_10_SV48, + .cfg.ext_zicclsm =3D true, .cfg.ext_zifencei =3D true, .cfg.ext_zicsr =3D true, .cfg.mmu =3D true, --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550627; cv=none; d=zohomail.com; s=zohoarc; b=LYbpnd7tbNKEm5IIt3XjPkN03vQgT4/nsM79CxQZAmEsgSDfYyrWC5nGR0M00j4pT4gQOfHSHOmQzB23mBL9QKDmTRlS1O6Yy4WnkFRi/3ypqlhHN5d2K5TFe9qwdUwsDknlpwRalIjXdkzvhC99vZQAN8lyx86EF/uSXtp+LgQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550627; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=bEOIVZvOI6v3LMY4XYw/LCi0puozDvkVflYenuC6IF8=; b=nxx+A27hO6gqAS5fxXVIDHPggBgY3mEUjBWh6dDjTNKLzUgvzsVw9kS73hn/NP7bu4N7iuVL/yDYc+BQwgYoDzurRRQ1lVK7ia6YLIYygKNpFUAkEwOPyTIif8VYXruG54ftJWRF0860TECMWBfmRv1sdn5LT2xgzIpKi9u09PI= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550627332824.0858605106175; Sun, 23 Aug 2026 22:50:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNZY-0002Rz-Dp; Mon, 24 Aug 2026 01:50:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNYd-0001R4-Qm for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:24 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNYY-0001uf-J2 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:17 -0400 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-38dc4553f62so4138919a91.0 for ; Sun, 23 Aug 2026 22:49:14 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.49.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:49:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550553; x=1788155353; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=bEOIVZvOI6v3LMY4XYw/LCi0puozDvkVflYenuC6IF8=; b=IN1/k9pPPP4YYdMfaRYh3wl1r9rOOSSDR5tb30LtyE+JHuFwbtW2oj2LoyRdGD/WcR PdOZ+SQAc3Cw79BFH897UjmnMEFvZZobnH5JB3NvaPT9KnAiuo/w+sGxEaSSOFl5Ihoj nOwGS6FloyO9t4fUnHO7FW6iFr0efhqJVRss9OXwu0p5aTODRJhzW0Zw9/OwYUhI5HgE OvXhtBQXWCt9y+Oio8Ri1aX9iWiIABnHtJ1S3haTcTwoOeAswWZ7Nq5qSN8+KI8Hf6Tp 47/r+JJIhnfklmxYHY5npL9i/iS19/J0rvY2aIoClng5kkciW84lsEkjT4xst55UokNW kfAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550553; x=1788155353; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=bEOIVZvOI6v3LMY4XYw/LCi0puozDvkVflYenuC6IF8=; b=E4TwNNuG5+GNYhRGYqBLbohD+Wyv1VItQ2AdtpLyatlaW0oAdMDqz02o+eOMMtM59O XFjtdtddQ+pP4nwHZIAYCLbG1giXD4EzqEUOUCA+RzxmK95i71t5A+RuHF7ZjR3Of3eH O0nSQUSSRcklj10+RRFBXvyeo1/59mnTRnGoMkxCqrq53vrU2qHLuqyfRs8m2hGa8F5Q TK53L57EsUzXiunTYERE/IROJJrVR9wrA9T5hHxqxS4cZIudnc0Xo7A+W3wBC159eCfD 5HlqnZkHByzfjI3YuD86imatZ6860leRDb9nr9PiopzEPEftKrKRkl4PxlXQk49XC+cW Fb0w== X-Gm-Message-State: AFuF++n1uMQ5inPj/SfFDDpa8e3dhoE0K9aA2CBoesiLMDqHdvIMtXut czEAettqTUbl1FUKxPjnEmM+cmFeWLWrQzbaElYHtVpj9dnZWZuP0Uf7qyzsNA== X-Gm-Gg: AR+sD10crECxS3mBDJaaHt08LaQntr7wHNnPF4sYf07z+Y8ubk7hgNx44QYGaMwHW08 lp4RCwDDcfGLBbh5l2aDNJdVB9if2d/dd8OSuQ0zQQp8Beke2iQRJtWyvwDmuP/b+0sYtBfUPhM vZFLI0syRx71WlVEubM+YmyHAq3SYTQmXDmyixzzIHusbDq1qPbogUQY7DTXlqyvdBSR8y88C5y 48c4JXekC58c19MTY31/kWhD5NoRSYe+1IOfHU6qBhtP8e5k7pSQKQAPxm4x1SwDklOuvpG3Z6d 7ab4MdlyGcO4fH+pcNKCujSz9ENYiGl533PnO7Cz9PpCzZ5AuOB2M7UEfTBLmaX2BWuxkq9P1+1 R/bpkmC4DRY0tQ4U7Cr+q9auThF2G74sgwJYHP98WkIhFWurmOcaALOrPWbrvn8C1sbJsxvoKvN 8VOq4zEZBpWiHesJvmeqaQwv0pI3yCRU2QVkBPw2rVjuOBxJ8/QlL12qQHPWchMTvrUcRlupRa4 4Siog== X-Received: by 2002:a17:90a:f945:b0:38e:8300:af51 with SMTP id 98e67ed59e1d1-395c35485b4mr44971143a91.8.1787550553359; Sun, 23 Aug 2026 22:49:13 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Frank Chang , Daniel Henrique Barboza , Alistair Francis Subject: [PULL v2 17/96] hw/riscv: sifive_u: Align ROM reset vector data Date: Mon, 24 Aug 2026 15:46:47 +1000 Message-ID: <20260824054806.2790041-18-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1034; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1034.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550628902158500 Content-Type: text/plain; charset="utf-8" From: Frank Chang The SiFive U ROM reset vector data needs proper 8-byte alignment for RV64 ld instructions. The misaligned load will cause exception when Zicclsm is supported as SiFive U CPU doesn't support hardware misaligned loads and stores. Add padding to ensure start_addr and fdt_load_addr are placed at 8-byte aligned offsets and adjust the load instruction offsets to match the new data layout. Signed-off-by: Frank Chang Reviewed-by: Daniel Henrique Barboza Message-ID: <20260810055618.1175500-3-frank.chang@sifive.com> Signed-off-by: Alistair Francis --- hw/riscv/sifive_u.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c index 99423ef472..57a57c96e1 100644 --- a/hw/riscv/sifive_u.c +++ b/hw/riscv/sifive_u.c @@ -564,19 +564,20 @@ static void sifive_u_machine_init(MachineState *machi= ne) 0, 0, 0x00028067, /* jr t0 */ + 0x00000000, /* padding for alignment */ start_addr, /* start: .dword */ start_addr_hi32, fdt_load_addr, /* fdt_laddr: .dword */ fdt_load_addr_hi32, - 0x00000000, /* fw_dyn: */ }; + if (riscv_is_32bit(&s->soc.u_cpus)) { - reset_vec[4] =3D 0x0202a583; /* lw a1, 32(t0) */ - reset_vec[5] =3D 0x0182a283; /* lw t0, 24(t0) */ + reset_vec[4] =3D 0x0242a583; /* lw a1, 36(t0) */ + reset_vec[5] =3D 0x01c2a283; /* lw t0, 28(t0) */ } else { - reset_vec[4] =3D 0x0202b583; /* ld a1, 32(t0) */ - reset_vec[5] =3D 0x0182b283; /* ld t0, 24(t0) */ + reset_vec[4] =3D 0x0242b583; /* ld a1, 36(t0) */ + reset_vec[5] =3D 0x01c2b283; /* ld t0, 28(t0) */ } =20 =20 --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550779; cv=none; d=zohomail.com; s=zohoarc; b=Cxka5EM/MOTCgoVxCAf2/ZHQxPgSwvDDN1gOsGoGEWRAVCWvKvEfFfouHxmkxwIWW+Bp6NaLebNncVmxTAubWS9fopxeeOt7T1Pqiclh5sdDlUk+aSd1fT0PXd9UycUJabstcAkx9pvbfuZhbw1aNtGt17ndp/xVdwsR51nt2z0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550779; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=dpctRoR5ytohYBbHmTxahKvAOMfFUypV6/ZUeeRK850=; b=JGYeRhBGf48gO4rwiGATCR4GJnZSl2LIvNVZe4bPwAxefdJvDLzvdQ4NaixyeUZuuBrl5IZnTo4JvSjHWwUcyDpYs1KZXbA8Xi2uUV4oROZCD5YEtXKstWC6TvgAXjpKXHprEnIR4gejBiS8jvB4eB3M+7/IU0O3Mey03sn4zCA= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550779752374.743021698089; Sun, 23 Aug 2026 22:52:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNZG-0001yh-DY; Mon, 24 Aug 2026 01:49:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNYi-0001RL-Kw for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:24 -0400 Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNYc-0001vq-Ma for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:21 -0400 Received: by mail-pg1-x535.google.com with SMTP id 41be03b00d2f7-c96c92c0980so1744228a12.3 for ; Sun, 23 Aug 2026 22:49:17 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.49.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:49:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550556; x=1788155356; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=dpctRoR5ytohYBbHmTxahKvAOMfFUypV6/ZUeeRK850=; b=FzWp54Ifqwn6KojhndYT7cGwCctWMAVaBnEnMGNHQbs0AhrNzA39PCuPUD+wBOaoY9 X2zyS5S/HPabSyOKHkW2yKJrFguPK9HeiLHwOHsn8V0iuF+iop++YZ2tQ4gIm6KKLv30 75r3XWVghpllQsVqG4sGYzMCAV8n1sdfH+YiaccqLTBuH7L8e/TwzGprIb1C64yZeKvy jgQH2PjtrwPi1oHfU2TDZFvuRGCSe7q/LZD64+34aENZgTilNp+l8QcKtcLWRQWRfP17 1fA3GVdd740ftqBV5PJdWRb8aZE3q2gWUlObGyQuVWd9vfWdgf//Km5jXlnFNV+WOxpw zcFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550556; x=1788155356; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=dpctRoR5ytohYBbHmTxahKvAOMfFUypV6/ZUeeRK850=; b=pwkK1qAc5phpFcG+Hn3f1D6ago3+Am/LN1YP0KlFm+HLbKGeFigYVVW4DeWfkhXcvx HBJp9GAgqgnIcx0jyHdJ3k+Hg1wmTadGFg+FIJk3c2W/TdDhAnJgqbUD8AQ5G+V/5eU8 VhSPKcO0U561+E+vaU/YiyC57mtTP7LNyHKzHSOASvgePBLZ8Ol9LPErgwFcBF1A77FL TcDU3gLD9mTqyLM1zYJn8JqoNuuKzSZ/9Aa89IPqzb2Kn2QcaHOE4H9SRxrJmd87azas L5sRNWVtCgqGW9lQISsUVN5wE6Sy3JiJAG5dIJ/GrXqTKBTlyC0w33GxWzVT46YXQ/Bp QYWw== X-Gm-Message-State: AFuF++nPUqWzQMY4nBnnLp9rBHTC//itVNO5di8FxIbo1cJmp6FlBrQw EIvApWBG63hgvWXGt8n+bqIJf5R3yeO1G1x3buL5L7eFFrP85+Xo8exIA7QxrQ== X-Gm-Gg: AR+sD11QZg62rq3NAWdAXLdm9T1ye6LEUDWmH8CmrptpscKDfxephJd+uWtR+yBcr4W r94H+6GOZ2aAj+/nhibUPT7CCfA9XkCxPvoD3/Fk9cBDmtU0Y9aPM8Llep5zwWPloH0Fy0KGkmw 5Y20BoZz4GgfKgUN1J27g5D3+IMxJrKvdBdASwQBWuxmS3iziUXStz6QW016kPzt79uZZT9M+9R CEYKWE7Msf+Or6yxEFO/RHrAEpti6FYR+3DGVCEXKFMEYrjG7SEdPrRKDfkyoXmzbPf6Zp6J+KW zGmBaQmkSi4Lw143iTqyk1xoCuPkvFoVlGfu53aTVPh6P4aGvU+GxYiMwuA5Co5TM9TsY3lTZVg 8OoKtXZ41x2ubZJ4gZ/TyOJ0XNKLdTd7fqII/5jl9v3IllExk3cVtsQ48Jgw/9t5Pve1Opm9w0q dq60eGs8EUSSGdgH79oo+7R1qVBBynFkdLoE44wbjid7b6uzdEEB9imzBx69irH46XRGAewOfhO C53p7HDgluLyOohIw== X-Received: by 2002:a17:90b:2c87:b0:392:7f74:58c9 with SMTP id 98e67ed59e1d1-395c3a43766mr48550963a91.15.1787550556389; Sun, 23 Aug 2026 22:49:16 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Frank Chang , Max Chou , Alistair Francis Subject: [PULL v2 18/96] target/riscv: Support raising misaligned exceptions for scalar loads/stores Date: Mon, 24 Aug 2026 15:46:48 +1000 Message-ID: <20260824054806.2790041-19-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::535; envelope-from=alistair23@gmail.com; helo=mail-pg1-x535.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550781343158500 Content-Type: text/plain; charset="utf-8" From: Frank Chang When the Zicclsm extension is not enabled, raise misaligned load/store exceptions for misaligned accesses from scalar load/store instructions. Signed-off-by: Frank Chang Reviewed-by: Max Chou Reviewed-by: Alistair Francis Message-ID: <20260810055618.1175500-4-frank.chang@sifive.com> Signed-off-by: Alistair Francis --- target/riscv/tcg/insn_trans/trans_rvi.c.inc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/target/riscv/tcg/insn_trans/trans_rvi.c.inc b/target/riscv/tcg= /insn_trans/trans_rvi.c.inc index e47b16a7fa..cc1b5dbbad 100644 --- a/target/riscv/tcg/insn_trans/trans_rvi.c.inc +++ b/target/riscv/tcg/insn_trans/trans_rvi.c.inc @@ -413,6 +413,9 @@ static bool gen_load(DisasContext *ctx, arg_lb *a, MemO= p memop) if (ctx->cfg_ptr->ext_zama16b) { memop |=3D MO_ATOM_WITHIN16; } + if (!ctx->cfg_ptr->ext_zicclsm) { + memop |=3D MO_ALIGN; + } decode_save_opc(ctx, 0); if (get_xl(ctx) =3D=3D MXL_RV128) { out =3D gen_load_i128(ctx, a, memop); @@ -524,6 +527,9 @@ static bool gen_store(DisasContext *ctx, arg_sb *a, Mem= Op memop) if (ctx->cfg_ptr->ext_zama16b) { memop |=3D MO_ATOM_WITHIN16; } + if (!ctx->cfg_ptr->ext_zicclsm) { + memop |=3D MO_ALIGN; + } decode_save_opc(ctx, 0); if (get_xl(ctx) =3D=3D MXL_RV128) { return gen_store_i128(ctx, a, memop); --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551013; cv=none; d=zohomail.com; s=zohoarc; b=Z8Tuusz0jgWc4BKfni4UnmFJDWc3a4sQDvmQV5WAjGWwxuYDz1+lGZvEXMXnfWpAJYWblumkbHBKwhcwNc5kRN7qaAcRqoIJRTDZ/CHE0K/1boeg4603qzQ7BPVGw+NswxdpBcYgZIQ7TmrvkTC0qP5AaJ5KwJtK/l75kHYFssc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551013; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=f/u6W5uGxQ0lZiZRWiD37XIIJQNcqJvCdasbU0HSOvs=; b=B8eVKw0fU6HzFmdBF+OK77hzPheyRZxR8YkBxAqgT5PVJ7qGMtj+LDOL6uV2RSjTnNScsSRIXms2Sa6Cbim8HRr1dM/b1EGhDQV8Bdtp04T3hhzrZpCse+h2ez13BixEUxzl3p8CNXb6WpZSRdy01T8fdugYo74xj8mzQqdhxJY= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551013543900.9561027875595; Sun, 23 Aug 2026 22:56:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNZm-0002xm-MT; Mon, 24 Aug 2026 01:50:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNYk-0001SV-09 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:26 -0400 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNYg-0001x4-U4 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:25 -0400 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-38dc4553f62so4139016a91.0 for ; Sun, 23 Aug 2026 22:49:20 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.49.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:49:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550559; x=1788155359; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=f/u6W5uGxQ0lZiZRWiD37XIIJQNcqJvCdasbU0HSOvs=; b=AZxbL2WL9sQJHYGhmLaJqrfOmcTXOz67dESSA6icVE/Z4llJl8JzBof39klnmNf1Hz 5MkHCyeoIWSWp79t+YT81+4a+VvqlBl/Sl9XC51Xio2iY0o2AyS8CyGpgW2okzETs121 /5axF3XuINsTtJxzOmitGxjEw6lfezYUHKhC7Q1YkTsZKpILEeesdHTVHZ+5FWSb9Tu1 /dBEGGc8NNYVn64mPsFNQ3V3TnTako7DNQTyJQE9hwFDpoZH4iy6dW3ti679YQ2Fc3hL B1dVzmrXCWaUEHd7aLVZoN/wZUH4jU98F4qPffNllxBgp+AawinnV+OX2GVsZyhaW1Xx 5F4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550559; x=1788155359; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=f/u6W5uGxQ0lZiZRWiD37XIIJQNcqJvCdasbU0HSOvs=; b=SecCvhUO7m28a6PvTB728Nj01JB/qZmokAsrR4zSUejrSb4yiD4jGmTcukcZE6tkw0 nn5uD/gdWCK9wVk5vFps0J8qBso3KDazJxcTECARESr4d6hFNGh4smT/n2WvQXFnmHKm AA0G25JzJLt/HSgpfqPhIhIk/Fonc31hV3xSU9wkT+gNojdxWLoIOc6N4qVDmyOyGBAI Y+HrUVfjA+6rJNldbFvUJ4s06Rr/rtJWHiU0XIr6ZAM4CmGg3MYUK/kuHckpf1EqBScY rcEcJD4xqu6GbFtGVd05P6CndXRf3tamdz6MEU+mLd8Sqo9z4GlILR7whmzmITWEoukJ 8Qvw== X-Gm-Message-State: AFuF++kK9bjLt4L2qRHlKnpTw7iwqWziB3NfYYw6KcUdhTLUhJ9uwadw aV8T9gnysDd/mfSY+oc5rbs36ggTsKpzN5guECfVEjE5KS+J/sFSgAeB0rF8ow== X-Gm-Gg: AR+sD12biOyVRxQMAy+qT16OY6I3U8ZHzmyXBtY4foQVHQ9zUFH+M3Rpfvh1/9EmtAL QfIDNgDbpjaIKP4ahzdI4xB5SW0HQblbq+6+Pwe5APUQc7jJvA9bWeAf3fAch8FhSIcbQfnIvZn kYKZDatMGrKnmdjR5RnR6Qeo5ge5suLNkaw1+K+Oe33F1rBsbnCj+hby+rFXGPE5nkEDDjC1LOG wfd32kh12Q1KsXJo0WiZqhf7Jm1nDHDDbMNsHuaeavJ0av8E/s43mioWSn4TNZ2U9H8Y3b60cPP QFxB/7+H7zF/HfCvCQ1WYiNLcYznIxY7SS18xj/hnC/5BErxTwW5XxNgZng8w/t0jfex7CKrgxP uPqyZMi2dum1ScOwEEcq1ZT37+142kw6uZC4a+eHSQJTkyvVDqkK+eKMOGu2P573/TBeb6q5kKf hoirTXtmAMMtH6DP24SEY8NAXGWpNeRrhCmlO44WHrM1/KIekt8RuQiwqZUjIztT1rA8pJ0sHDG kED0Q== X-Received: by 2002:a17:90b:390f:b0:38e:4114:d8c7 with SMTP id 98e67ed59e1d1-395c2f29705mr40198810a91.0.1787550559452; Sun, 23 Aug 2026 22:49:19 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Frank Chang , Daniel Henrique Barboza , Alistair Francis Subject: [PULL v2 19/96] target/riscv: Support raising misaligned exceptions for floating-point loads/stores Date: Mon, 24 Aug 2026 15:46:49 +1000 Message-ID: <20260824054806.2790041-20-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102c; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102c.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551014342158500 Content-Type: text/plain; charset="utf-8" From: Frank Chang When the Zicclsm extension is not enabled, raise misaligned load/store exceptions for misaligned accesses from floating-point load/store instructions (RVF, RVD, Zfh). Signed-off-by: Frank Chang Reviewed-by: Daniel Henrique Barboza Message-ID: <20260810055618.1175500-5-frank.chang@sifive.com> Signed-off-by: Alistair Francis --- target/riscv/tcg/insn_trans/trans_rvd.c.inc | 6 ++++++ target/riscv/tcg/insn_trans/trans_rvf.c.inc | 6 ++++++ target/riscv/tcg/insn_trans/trans_rvzfh.c.inc | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/target/riscv/tcg/insn_trans/trans_rvd.c.inc b/target/riscv/tcg= /insn_trans/trans_rvd.c.inc index 3b9a745520..1be2bee946 100644 --- a/target/riscv/tcg/insn_trans/trans_rvd.c.inc +++ b/target/riscv/tcg/insn_trans/trans_rvd.c.inc @@ -61,6 +61,9 @@ static bool trans_fld(DisasContext *ctx, arg_fld *a) memop |=3D MO_ATOM_IFALIGN; } memop |=3D ctx->mo_endianness; + if (!ctx->cfg_ptr->ext_zicclsm) { + memop |=3D MO_ALIGN; + } =20 decode_save_opc(ctx, 0); addr =3D get_address(ctx, a->rs1, a->imm); @@ -86,6 +89,9 @@ static bool trans_fsd(DisasContext *ctx, arg_fsd *a) memop |=3D MO_ATOM_IFALIGN; } memop |=3D ctx->mo_endianness; + if (!ctx->cfg_ptr->ext_zicclsm) { + memop |=3D MO_ALIGN; + } =20 decode_save_opc(ctx, 0); addr =3D get_address(ctx, a->rs1, a->imm); diff --git a/target/riscv/tcg/insn_trans/trans_rvf.c.inc b/target/riscv/tcg= /insn_trans/trans_rvf.c.inc index e935523c93..481f7282da 100644 --- a/target/riscv/tcg/insn_trans/trans_rvf.c.inc +++ b/target/riscv/tcg/insn_trans/trans_rvf.c.inc @@ -52,6 +52,9 @@ static bool trans_flw(DisasContext *ctx, arg_flw *a) if (ctx->cfg_ptr->ext_zama16b) { memop |=3D MO_ATOM_WITHIN16; } + if (!ctx->cfg_ptr->ext_zicclsm) { + memop |=3D MO_ALIGN; + } =20 decode_save_opc(ctx, 0); addr =3D get_address(ctx, a->rs1, a->imm); @@ -75,6 +78,9 @@ static bool trans_fsw(DisasContext *ctx, arg_fsw *a) if (ctx->cfg_ptr->ext_zama16b) { memop |=3D MO_ATOM_WITHIN16; } + if (!ctx->cfg_ptr->ext_zicclsm) { + memop |=3D MO_ALIGN; + } =20 decode_save_opc(ctx, 0); addr =3D get_address(ctx, a->rs1, a->imm); diff --git a/target/riscv/tcg/insn_trans/trans_rvzfh.c.inc b/target/riscv/t= cg/insn_trans/trans_rvzfh.c.inc index f36b46c211..88711fb076 100644 --- a/target/riscv/tcg/insn_trans/trans_rvzfh.c.inc +++ b/target/riscv/tcg/insn_trans/trans_rvzfh.c.inc @@ -50,6 +50,9 @@ static bool trans_flh(DisasContext *ctx, arg_flh *a) REQUIRE_ZFHMIN_OR_ZFBFMIN(ctx); =20 memop |=3D ctx->mo_endianness; + if (!ctx->cfg_ptr->ext_zicclsm) { + memop |=3D MO_ALIGN; + } decode_save_opc(ctx, 0); t0 =3D get_gpr(ctx, a->rs1, EXT_NONE); if (a->imm) { @@ -75,6 +78,9 @@ static bool trans_fsh(DisasContext *ctx, arg_fsh *a) REQUIRE_ZFHMIN_OR_ZFBFMIN(ctx); =20 memop |=3D ctx->mo_endianness; + if (!ctx->cfg_ptr->ext_zicclsm) { + memop |=3D MO_ALIGN; + } decode_save_opc(ctx, 0); t0 =3D get_gpr(ctx, a->rs1, EXT_NONE); if (a->imm) { --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550656; cv=none; d=zohomail.com; s=zohoarc; b=LyKHMXF5IsanCDMqM35hMz9dOHF1Me2th57pdtHIAZrXw4BNcuis0Zpg0ijveZ+GCHJyFc7g51fS/FcVB000oPsQLw9/EJ4pYClRwq5bOVD+vwLBoHxD3+NjcDeSmsDYo1on0PsIrZU5XeR4w1HWqI3H9jdAouEdKG4XChii0qU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550656; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=/8dJDx1ilTYyZ18Kjsv/DFio2MP9Dc526iF16cUqG6E=; b=h92UZSwL4R+0aBY+wrwkXUIe7tHMEAlImApb99Nkgxjpbd8kpHop9yROYdBbnH9ODCPyt8h/YuTMJ5Dz0054X3GFR6lMM+5K3IxrqMane1U0YRrTHo+vQa1oEy+mLgmUoqwvvdWdZMLCFqi6XJil1n78cQFlZj0Uj9ipaXcSy38= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550656839690.8123803598282; Sun, 23 Aug 2026 22:50:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNZx-0003KN-Ro; Mon, 24 Aug 2026 01:50:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNYk-0001St-O7 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:29 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNYi-0001xn-Bq for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:26 -0400 Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-381c51fde6bso3587952a91.2 for ; Sun, 23 Aug 2026 22:49:23 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.49.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:49:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550563; x=1788155363; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=/8dJDx1ilTYyZ18Kjsv/DFio2MP9Dc526iF16cUqG6E=; b=Xwu3dsFn3e89n6qeTXVG9i9xQmfCw1IkIMJPfBNwaSOH2QXfzRM5dkAjp2a0gGNY5j NXRJg9el+LQ9yTheCyZLvMKnDkLniiSQUoyt4JpaAuSG4s7iSrYCMnlWe00pf0EB7lEe ZgxWHw69MZF01KdxSWbc2++SRYY8VzHuJ95f2sc3uzL9R5u1l/LS1iSH3wFsBKvg0rA+ +jZ9JEN2dzKgRVOBNJiruuFEjeWlVDAdIg2J6yCURiA3cQgp2phNcvLLn/uJXHO/Yr8s O3QwLfAryl6itNl+1QcxaHsCKrIL825RJGjrDtxqFh50ReKNJSXm9IL4gE9cQRabUkid ApvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550563; x=1788155363; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=/8dJDx1ilTYyZ18Kjsv/DFio2MP9Dc526iF16cUqG6E=; b=UkAd8CBXagiw5wSblAul32CayadaghfFgkLKTXTCjR5bQXpyvHVN2BY347nNuoHZrh U3rBQbt4XDbYs6EU8s63mwI+dBoxssy+dMXka7z8SS2WUMNa4ei04Og4YQE6qljHWuOl MP04vPbQMlxutS3lj7BmcIbsfqRWEq0GW6tBszF7/TBEFt/uOLeMct1sWGc5Z9mAn5hK vmbBGyNDQzHwFc+2HZ8RhmjIBUG3ImqGhtq6m8RJj5aUnidT6A7paYHPxtimTtBTc+ff XXoihMCKFl4m+iiv1FKt02xpCHLESK42kwZraHOcC6Y14dc7hCmz+6YadNhpwYDmkWlX bgeg== X-Gm-Message-State: AFuF++nOmc7t826cmXYVNwDpaw6DMvHzTC45JZtw9yBN4YeUtwjYlQS6 2wZXyad8wCfYdb+G+JkF0XstdlK/qD4bjsUC4F3Taz88j1rj88TYhu661IMbQw== X-Gm-Gg: AR+sD11P4s+FqMwNmqaT0JRtPnfrtHBmxixBRLs3I6FwLfTAmwzkME5oJpNyxYeJHh0 kuEu+AsyQIrbDdLq/N4BB++GqNFdWVEve1KhkA5ctdCq4eWakygf4PdRuYYr7bqyYHaa6g01nZq It3fcJrLgeCv/i0AkLNuTxWDWntDWxjGb1C9nPstnx5+6ZH2qe34r44LFWFabv/3na+dZZ7CsC+ aO5X77anTRASB6ZPyvErmeGfF+7y2b1V5nY6Boz96TNR1mh5PtxweKto5G+yJgi5NkVz11ttD+D y+7UPYaXXN12QsbpgjVg6R8SOqOwXHtJVP1jI+rpBT4A8+K9y3JWdA3fPcnvIHX6Sn6abq26vO0 U/x2vVJ/OyFUYxuAtqYGVLb6O/cWHAOx2jbTvX467m6moTfFF2tkNRn0VYzDrDZbAAB98xftsi/ pH2z5NBHFVCIYQLxXxQOD+T+E6UdRLpT1d2/f9fTY5rdIS9bAhLS6BfUc0RVAqu9WTOSQltGQDa DCAHw== X-Received: by 2002:a17:90b:560d:b0:38e:9045:bac0 with SMTP id 98e67ed59e1d1-395deea6acbmr31161319a91.5.1787550562531; Sun, 23 Aug 2026 22:49:22 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Frank Chang , Max Chou , Alistair Francis Subject: [PULL v2 20/96] target/riscv: Support raising misaligned exceptions for vector loads/stores Date: Mon, 24 Aug 2026 15:46:50 +1000 Message-ID: <20260824054806.2790041-21-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1032; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1032.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550658886158500 Content-Type: text/plain; charset="utf-8" From: Frank Chang When the Zicclsm extension is not enabled, raise misaligned load/store exceptions for misaligned accesses from vector load/store instructions. We will skip the host fast-path and fall back to the slow TLB-path to raise misaligned load/store exceptions for the misaligned accesses when Zicclsm extension is disabled. Signed-off-by: Frank Chang Reviewed-by: Max Chou Acked-by: Alistair Francis Message-ID: <20260810055618.1175500-6-frank.chang@sifive.com> Signed-off-by: Alistair Francis --- target/riscv/tcg/vector_helper.c | 65 ++++++++++++++++----- target/riscv/tcg/insn_trans/trans_rvv.c.inc | 18 +++++- 2 files changed, 65 insertions(+), 18 deletions(-) diff --git a/target/riscv/tcg/vector_helper.c b/target/riscv/tcg/vector_hel= per.c index e321ca2616..e28d8a3d9f 100644 --- a/target/riscv/tcg/vector_helper.c +++ b/target/riscv/tcg/vector_helper.c @@ -199,20 +199,34 @@ static inline void vext_set_elem_mask(void *v0, int i= ndex, ((uint64_t *)v0)[idx] =3D deposit64(old, pos, 1, value); } =20 +static inline MemOpIdx vext_make_memop_idx(CPURISCVState *env, size_t size) +{ + int mmu_idx =3D riscv_env_mmu_index(env, false); + MemOp memop =3D size_memop(size) | mo_endian_env(env); + + if (!riscv_cpu_cfg(env)->ext_zicclsm) { + memop |=3D MO_ALIGN; + } + + return make_memop_idx(memop, mmu_idx); +} + /* elements operations for load and store */ typedef void vext_ldst_elem_fn_tlb(CPURISCVState *env, abi_ptr addr, uint32_t idx, void *vd, uintptr_t retad= dr); typedef void vext_ldst_elem_fn_host(void *vd, uint32_t idx, void *host); =20 -#define GEN_VEXT_LD_ELEM(NAME, ETYPE, H, LDSUF) \ +#define GEN_VEXT_TLB_LD_ELEM(NAME, ETYPE, H, LDSUF) \ static inline QEMU_ALWAYS_INLINE \ void NAME##_tlb(CPURISCVState *env, abi_ptr addr, \ uint32_t idx, void *vd, uintptr_t retaddr) \ { \ ETYPE *cur =3D ((ETYPE *)vd + H(idx)); \ - *cur =3D cpu_##LDSUF##_data_ra(env, addr, retaddr); \ + MemOpIdx oi =3D vext_make_memop_idx(env, sizeof(ETYPE)); \ + *cur =3D cpu_##LDSUF##_mmu(env, addr, oi, retaddr); \ } \ - \ + +#define GEN_VEXT_HOST_LD_ELEM(NAME, ETYPE, H, LDSUF) \ static inline QEMU_ALWAYS_INLINE \ void NAME##_host(void *vd, uint32_t idx, void *host) \ { \ @@ -220,20 +234,27 @@ void NAME##_host(void *vd, uint32_t idx, void *host) = \ *cur =3D (ETYPE)LDSUF##_p(host); \ } =20 -GEN_VEXT_LD_ELEM(lde_b, uint8_t, H1, ldub) -GEN_VEXT_LD_ELEM(lde_h, uint16_t, H2, lduw_le) -GEN_VEXT_LD_ELEM(lde_w, uint32_t, H4, ldl_le) -GEN_VEXT_LD_ELEM(lde_d, uint64_t, H8, ldq_le) +GEN_VEXT_TLB_LD_ELEM(lde_b, uint8_t, H1, ldb) +GEN_VEXT_TLB_LD_ELEM(lde_h, uint16_t, H2, ldw) +GEN_VEXT_TLB_LD_ELEM(lde_w, uint32_t, H4, ldl) +GEN_VEXT_TLB_LD_ELEM(lde_d, uint64_t, H8, ldq) =20 -#define GEN_VEXT_ST_ELEM(NAME, ETYPE, H, STSUF) \ +GEN_VEXT_HOST_LD_ELEM(lde_b, uint8_t, H1, ldub) +GEN_VEXT_HOST_LD_ELEM(lde_h, uint16_t, H2, lduw_le) +GEN_VEXT_HOST_LD_ELEM(lde_w, uint32_t, H4, ldl_le) +GEN_VEXT_HOST_LD_ELEM(lde_d, uint64_t, H8, ldq_le) + +#define GEN_VEXT_TLB_ST_ELEM(NAME, ETYPE, H, STSUF) \ static inline QEMU_ALWAYS_INLINE \ void NAME##_tlb(CPURISCVState *env, abi_ptr addr, \ uint32_t idx, void *vd, uintptr_t retaddr) \ { \ ETYPE data =3D *((ETYPE *)vd + H(idx)); \ - cpu_##STSUF##_data_ra(env, addr, data, retaddr); \ + MemOpIdx oi =3D vext_make_memop_idx(env, sizeof(ETYPE)); \ + cpu_##STSUF##_mmu(env, addr, data, oi, retaddr); \ } \ - \ + +#define GEN_VEXT_HOST_ST_ELEM(NAME, ETYPE, H, STSUF) \ static inline QEMU_ALWAYS_INLINE \ void NAME##_host(void *vd, uint32_t idx, void *host) \ { \ @@ -241,10 +262,15 @@ void NAME##_host(void *vd, uint32_t idx, void *host) = \ STSUF##_p(host, data); \ } =20 -GEN_VEXT_ST_ELEM(ste_b, uint8_t, H1, stb) -GEN_VEXT_ST_ELEM(ste_h, uint16_t, H2, stw_le) -GEN_VEXT_ST_ELEM(ste_w, uint32_t, H4, stl_le) -GEN_VEXT_ST_ELEM(ste_d, uint64_t, H8, stq_le) +GEN_VEXT_TLB_ST_ELEM(ste_b, uint8_t, H1, stb) +GEN_VEXT_TLB_ST_ELEM(ste_h, uint16_t, H2, stw) +GEN_VEXT_TLB_ST_ELEM(ste_w, uint32_t, H4, stl) +GEN_VEXT_TLB_ST_ELEM(ste_d, uint64_t, H8, stq) + +GEN_VEXT_HOST_ST_ELEM(ste_b, uint8_t, H1, stb) +GEN_VEXT_HOST_ST_ELEM(ste_h, uint16_t, H2, stw_le) +GEN_VEXT_HOST_ST_ELEM(ste_w, uint32_t, H4, stl_le) +GEN_VEXT_HOST_ST_ELEM(ste_d, uint64_t, H8, stq_le) =20 static inline QEMU_ALWAYS_INLINE void vext_continuous_ldst_tlb(CPURISCVState *env, vext_ldst_elem_fn_tlb *ldst_t= lb, @@ -398,7 +424,16 @@ vext_page_ldst_us(CPURISCVState *env, void *vd, target= _ulong addr, probe_pages(env, addr, size, ra, access_type, mmu_index, &host, &flags, true); =20 - if (flags =3D=3D 0) { + bool misaligned =3D addr & (esz - 1); + + /* + * Allow the host fast-pash when: + * 1. Page permission/pmp/watchpoint are checked and we have a conti= gous + * host mapping. + * 2. Zicclsm is enabled or load/store is not a misaligned access. + * Otherwise, we will fall back to the slow TLB-path. + */ + if (flags =3D=3D 0 && (riscv_cpu_cfg(env)->ext_zicclsm || !misaligned)= ) { if (nf =3D=3D 1) { vext_continuous_ldst_host(env, ldst_host, vd, evl, env->vstart, host, esz, is_load); diff --git a/target/riscv/tcg/insn_trans/trans_rvv.c.inc b/target/riscv/tcg= /insn_trans/trans_rvv.c.inc index 23262b1d03..a22e2cae6c 100644 --- a/target/riscv/tcg/insn_trans/trans_rvv.c.inc +++ b/target/riscv/tcg/insn_trans/trans_rvv.c.inc @@ -1191,26 +1191,38 @@ static bool ldst_whole_trans(uint32_t vd, uint32_t = rs1, uint32_t nf, * Use the helper function if either: * - vstart is not 0. */ - bool use_helper_fn =3D !s->vstart_eq_zero; =20 if (!use_helper_fn) { uint32_t size =3D s->cfg_ptr->vlenb * nf; TCGv_i64 t8 =3D tcg_temp_new_i64(); MemOp atomicity =3D MO_ATOM_NONE; + MemOp alignment =3D MO_UNALN; + + /* + * If Zicclsm is disabled, require alignment based on element size. + * Use MO_ALIGN_* based on log2_esz (0 =3D MO_UNALN, 1 =3D MO_ALIG= N_2, etc). + */ + if (!s->cfg_ptr->ext_zicclsm) { + alignment =3D log2_esz << MO_ASHIFT; + } + if (log2_esz =3D=3D 0) { atomicity =3D MO_ATOM_NONE; } else { atomicity =3D MO_ATOM_IFALIGN_PAIR; } + for (int i =3D 0; i < size; i +=3D 8) { TCGv addr =3D get_address(s, rs1, i); if (is_load) { - tcg_gen_qemu_ld_i64(t8, addr, s->mem_idx, MO_LEUQ | atomic= ity); + tcg_gen_qemu_ld_i64(t8, addr, s->mem_idx, + MO_LEUQ | atomicity | alignment); tcg_gen_st_i64(t8, tcg_env, vreg_ofs(s, vd) + i); } else { tcg_gen_ld_i64(t8, tcg_env, vreg_ofs(s, vd) + i); - tcg_gen_qemu_st_i64(t8, addr, s->mem_idx, MO_LEUQ | atomic= ity); + tcg_gen_qemu_st_i64(t8, addr, s->mem_idx, + MO_LEUQ | atomicity | alignment); } if (i =3D=3D size - 8) { tcg_gen_movi_i32(cpu_vstart, 0); --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550654; cv=none; d=zohomail.com; s=zohoarc; b=eDeqc/7fAST68U9beCph6XKcUSIsyLvTr1nyF/VMN/1CkLKjM8JxZnwyEbjxWHrKHvC/tiQJDojIYSHDl98nPG9RsBPW/dnM5vpfaXCEmzR3Po5SYRuq1hUwpBUnW6aBivTJb/o2pjxS3bOnl5d/9hIpr3ytExI2mYnX6L0G9Kg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550654; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=0zVHz1vI4ZmKFiVEVtHQt6VWbe6dmqIzbriZ7N5663A=; b=awyuVXLtB0sYie1IfYktWlLre5EFqY7iamBU/ibTMDFzx6cEOdKUMk96oQvy8YrFVQslVG3xsbHUt20jvMdBVtYHd1zjOoNj7qqbbzcUhIC9HRuVvgCvXXA/qzKRK4FOsw2sdHqAbuJd9z0nkSFOVPhldKaUXlQvpUcCWqYg7IM= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550654063594.0807918626059; Sun, 23 Aug 2026 22:50:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNZU-0002N3-Nh; Mon, 24 Aug 2026 01:50:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNYn-0001Uf-Nz for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:34 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNYl-0001zD-57 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:28 -0400 Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-2d58efc7356so34133965ad.1 for ; Sun, 23 Aug 2026 22:49:26 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.49.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:49:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550566; x=1788155366; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=0zVHz1vI4ZmKFiVEVtHQt6VWbe6dmqIzbriZ7N5663A=; b=hGaC2Pmcf5GTK37GlsV80CdVqtiDeQoDYpfRkBjLQqqh8O77hrVhkB0VmJvJEIQWjO 9q/jpeppc5gfwToOz7xs04rjep3aMbR9PHbg4AMDHI/ampmgSHihF/ruhGNcurtnzr9C AMJqT0ZVegoEK8IP0piqLmK5uMHPsMsS7PMF0N2a6QlHNYEvywNwZcmy8WHvE5P1zxaS 7XWEmjMkTsjywDLZ8iF7ddWmDkvat+lSvZixMmIrfIemZR7mGaTLHzAhMlBl9oqoswvd RzzWZQm2tyrMImlUIOhmdmj0fyS01dyZp8gn76sHn1QSYXukB44vsPE91C++LwZEEpa2 mxgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550566; x=1788155366; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=0zVHz1vI4ZmKFiVEVtHQt6VWbe6dmqIzbriZ7N5663A=; b=HYqVttWfA/hVCy+VdWSENJFm4fPj40a8kAq8Lj0xaCHUUqUIFa+KuC7TaSeZsH9WrO orEED2hzStBGfzVDxebHZrq5mi5sy3xKXoQXoq2I46pe+M6QhRP2P7BQi3gtAtroMhZY 3nqBVXMGG0HoMWbS3P4Pm8Mtv4cIYYKTvFUFDx0idDhTNzizRqUg8IImaivI5VBzY2Th 54iJUNLBY1TArXFSVm5R1EbEhDobfKrvJHPP215Kpfgi6ZwLB9BWCPAmOuxSzUEO3Zb9 4UgpzePXSAyxYzphLbLjeUQZyqX8UayUm7QtjKgyT2uFYbedRKvwaac8AX0a3c8JxWBm 7+3A== X-Gm-Message-State: AFuF++kOl69hB9l/0EFvWbR9IW93UCQjmBxJLsrPRI5cftiWBsd+bDSi EcuxNT8QHNc5beAG7KB4wEWz8Xu2crVg6mw8iiYk2YLm75XGgiKe1zImxCgjlg== X-Gm-Gg: AR+sD11DHogLQ70zkDGcPaaAHacm2Yv+psIKZ+tImtx8F14eO49aePHseDliN41Orcc s+KAGaMH7365gfHOY5VKb0EfF5ze8PiDcD3I7fK5EctzRu8mDyZV7nXrwbUsEnhoNhYnIa5D5dz dAyslHR8jxedzF8lPAxrS2AswkZVdG74g/b6whmbW/4X4mACCefB69+JTutkB7xMMFa/04hoF4R zg6FPWuGXigNOdxxtXShXPxKBOezywanhuTF0kS6QGYi1IFzr4Hprscz2/tMttNCHzxOOl/x2fE 67XdMRTQHhWt5kt1Xntlh4ziCr60qUwQKv9kHs2x/wwsOsEv6uOciOfAzNlu/Jfp5gJQN+UStWg Q7YX/yvSxVIT15AV2qSx6GUGEGMF6oe42g1X9XE3OmjBdH030KBLyH3MT6aL8ly8cG/YnwXdKHa G7yNY2Yc7EVjzWBkc+9ljdxk+NtDgwcB8dHGLf5YDwEDW4NdkqrSN0aCCADiT6e6NCbf2gsy9/c CJyKQ== X-Received: by 2002:a17:90b:2cc3:b0:392:e5b1:d833 with SMTP id 98e67ed59e1d1-395df29666cmr29922276a91.13.1787550565576; Sun, 23 Aug 2026 22:49:25 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Frank Chang , Daniel Henrique Barboza , Alistair Francis Subject: [PULL v2 21/96] target/riscv: Expose Zicclsm as a CPU property and update RVA22U64 profile Date: Mon, 24 Aug 2026 15:46:51 +1000 Message-ID: <20260824054806.2790041-22-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::634; envelope-from=alistair23@gmail.com; helo=mail-pl1-x634.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550654850158501 Content-Type: text/plain; charset="utf-8" From: Frank Chang Update Zicclsm ISA string and expose it as a CPU property to allow user to turn on/off Zicclsm extension. In addition, Zicclsm extension is mandatory for the RVA22U64 profile. Previously, Zicclsm was enabled automatically when has_priv_1_11 was true. Now that Zicclsm has been converted to an explicit CPU option, it must be explicitly added to the RVA22U64 profile's extension list to ensure the profile remains compliant with the specification. Signed-off-by: Frank Chang Reviewed-by: Daniel Henrique Barboza Message-ID: <20260810055618.1175500-7-frank.chang@sifive.com> Signed-off-by: Alistair Francis --- target/riscv/cpu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index b2693f4c20..d8f239e41d 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -165,7 +165,7 @@ const RISCVIsaExtData isa_edata_arr[] =3D { ISA_EXT_DATA_ENTRY(zicboz, PRIV_VERSION_1_12_0, ext_zicboz), ISA_INTERNAL_EXT_DATA_ENTRY(ziccamoa, PRIV_VERSION_1_11_0, has_priv_1_= 11), ISA_INTERNAL_EXT_DATA_ENTRY(ziccif, PRIV_VERSION_1_11_0, has_priv_1_11= ), - ISA_INTERNAL_EXT_DATA_ENTRY(zicclsm, PRIV_VERSION_1_11_0, has_priv_1_1= 1), + ISA_EXT_DATA_ENTRY(zicclsm, PRIV_VERSION_1_11_0, ext_zicclsm), ISA_EXT_DATA_ENTRY(ziccrse, PRIV_VERSION_1_11_0, ext_ziccrse), ISA_EXT_DATA_ENTRY(zicfilp, PRIV_VERSION_1_12_0, ext_zicfilp), ISA_EXT_DATA_ENTRY(zicfiss, PRIV_VERSION_1_13_0, ext_zicfiss), @@ -2316,6 +2316,7 @@ static RISCVCPUProfile RVA22U64 =3D { CPU_CFG_OFFSET(ext_zkt), CPU_CFG_OFFSET(ext_zicntr), CPU_CFG_OFFSET(ext_zihpm), CPU_CFG_OFFSET(ext_zicbom), CPU_CFG_OFFSET(ext_zicbop), CPU_CFG_OFFSET(ext_zicboz), + CPU_CFG_OFFSET(ext_zicclsm), =20 /* mandatory named features for this profile */ CPU_CFG_OFFSET(ext_zic64b), --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550656; cv=none; d=zohomail.com; s=zohoarc; b=IL/Tb4c514g0aq/NAtaSJt0pdHWgQj4wLQ+ZiPYMCwVQnp34BMcL7F3U2bqRX0hNroMOpfQAq/YRwRx/0dZJv14aMpbRy3hKsOtZUtE5Kirs0xZyhL2OdTzWsfvTDhD8pxel00xfaMcGwxI+d5ng+YzIkQKQtQThdoi1QiNajLE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550656; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=P/6Agw5nt0+eKUGMb/KCImqqQ0Wj2MEA9zyQKBC5/kA=; b=OOPpT15UK5ohdRW8mX76eIKI4mqbAzxwNTRo4HmV8DPROPhl1zYG+l2+1H3OCZBhikGnQD1uOgQo6KO0b0NVof1jS6kN00P5EwAFipAcYo3RwBUi6Ci1d505abFSDsrrsWEQ8Z+vFmVzj25sGuSJdWn9Y1Lt7JPxamZTwaxLB+4= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550656299501.68334538950364; Sun, 23 Aug 2026 22:50:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNa8-0003n0-Ub; Mon, 24 Aug 2026 01:50:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNYq-0001dh-N4 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:38 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNYo-00020n-8Z for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:32 -0400 Received: by mail-pj1-x1035.google.com with SMTP id 98e67ed59e1d1-383cb94f742so3154106a91.3 for ; Sun, 23 Aug 2026 22:49:29 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.49.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:49:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550569; x=1788155369; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=P/6Agw5nt0+eKUGMb/KCImqqQ0Wj2MEA9zyQKBC5/kA=; b=B43Giysx2i++z9qH1gee78j4INMOiholjJkgDlNu+0toNf38HKT7uteGyxaDgcthqP 6gOtq8+cmoz8fRQVe4Sr4aVvVbWEc4RSvM/dxYSsGSU2KeysqghHZ5todVy1nVOYcHm+ 8hQ5JhkvmNol1oqdmA0l5g4kg6958rjQc6Lk7kchlNqOIzRC3vWmB2pB9kH30Ink6htl PbXIMKeKN8pJWBFfelQi7e7UiOSjW6yzquPaGeUNFJXjBMyPQdksu/43eOxH81t72pkM svKv0pGmCsvyiBU4DKfVUnEYbwrekRCJQbOOVPrWPJNKzy/fqg5glLmj1N8hf3vNiIKl v77w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550569; x=1788155369; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=P/6Agw5nt0+eKUGMb/KCImqqQ0Wj2MEA9zyQKBC5/kA=; b=tOj/xVBdlNmnjB/sVJo56sEf1mrNGhxj3hHmcNyiuU+aViYb7LbaaOKamMLUlprUyZ 20U7Qp94oqN7ru0x2MIwq1/JcyHMc/CnKXLZrjKdSOA+pyebSPcHznzEbkX5i0TlyMX+ K9LCS3/eB6vk6H3dw2IAkBd1ByZCq29E3Zn33YDw9qxkA0frCsqCO8VsBT1+ShYP0Um4 +ltSa4wxKHiElAoPyt06p2h+tbua/V8A0dFVWNEYc1R6GXPyePGHxpZ/TvZsWkgV+V2z pyiIltBWSx+oHVCwCuZUZs/2tyKDCnsRlTmU/9KsoJO2fDnRbhMFxCuv+vEVI+uWCU6f 98lw== X-Gm-Message-State: AFuF++lquwfnSIDiSDRvhoyQLUzf8pEVJDNbkr0eFdFc0zcA1ZSsOvxw 2WJEOCCXrHtQAN0GUy1TS/O6JuDg9Ky5DOQQqBu3WDD9gCmyPn4AQ3mkRyr9QA== X-Gm-Gg: AR+sD12kQYLo25t5WkAHu/YVFToZNxoadvc9cWxtvUrLuJMlgxiIBdiJdwEey3EAvJl wi6Xpiy0FJjbZJgVXZFX2kdcSyckmGQZT6+mHEl9+yA7/ctNTnhKEnhsvWYQQFKqR3+eCSwgcaa x73s62JtmQGZYCIvtmHQoebmfCSRtRv8WPhQ2b7tObTQc69gLi6eQlO2P7l70IIm7ZzXSmvUy/N 04lbd9e6HMXcSn2v/FNaxWOh/aF46irwZDa0b1tmR0eX78X2iHwnXtdaIuon/K50jLoytlETJt/ wv34WjvtN2KT/dN+VydZNu+NLPfnkjnpeZdwy55vE4SvFhxSNa/8ZE3pk4Jz3jiAfzJSMO/Pjrv tEMym2QblA1HsZ31TpLlK2Dl0+N8NEWF0DmdfzMCNm7d6f2R0/3pCfdIrNupQpiniww8ClysTMV 9ziYu4gHNSWLgWBLHtSmBShWcsF0l09nRIkm5uG79jq689A/AUEKTNthAX+9uo9PiHyZe+pvZ6i BuLXA== X-Received: by 2002:a17:90b:524b:b0:38f:7f60:ba35 with SMTP id 98e67ed59e1d1-395deec4953mr30437985a91.5.1787550568697; Sun, 23 Aug 2026 22:49:28 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Frank Chang , Daniel Henrique Barboza , Alistair Francis Subject: [PULL v2 22/96] tests/tcg/riscv64: Add test for Zicclsm Date: Mon, 24 Aug 2026 15:46:52 +1000 Message-ID: <20260824054806.2790041-23-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1035; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1035.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550656923158500 Content-Type: text/plain; charset="utf-8" From: Frank Chang Cover scalar, floating-point, vector, and segmented misaligned accesses with Zicclsm enabled and disabled. Clean up both generated test binaries. To build and run the tests: make -C build/tests/tcg/riscv64-softmmu \ CC=3Driscv64-unknown-elf-gcc LD=3Driscv64-unknown-elf-ld \ test-zicclsm test-zicclsm-off make -C build/tests/tcg/riscv64-softmmu \ run-test-zicclsm run-test-zicclsm-off To clean the generated binaries and objects: make -C build/tests/tcg/riscv64-softmmu clean Signed-off-by: Frank Chang Reviewed-by: Daniel Henrique Barboza Message-ID: <20260810055618.1175500-8-frank.chang@sifive.com> Signed-off-by: Alistair Francis --- tests/tcg/riscv64/Makefile.softmmu-target | 22 ++ tests/tcg/riscv64/test-zicclsm.S | 368 ++++++++++++++++++++++ 2 files changed, 390 insertions(+) create mode 100644 tests/tcg/riscv64/test-zicclsm.S diff --git a/tests/tcg/riscv64/Makefile.softmmu-target b/tests/tcg/riscv64/= Makefile.softmmu-target index 82be8a2c91..908fd008e4 100644 --- a/tests/tcg/riscv64/Makefile.softmmu-target +++ b/tests/tcg/riscv64/Makefile.softmmu-target @@ -41,5 +41,27 @@ comma:=3D , run-test-crc32: test-crc32 $(call run-test, $<, $(QEMU) -cpu rv64$(comma)xlrbr=3Dtrue $(QEMU_OPTS)$<) =20 +# Zicclsm: misaligned load/store support. Assemble one source twice: the +# default build expects every misaligned access to succeed (zicclsm=3Dtrue= ), +# the -DZICCLSM_DISABLED build expects every one to trap (zicclsm=3Dfalse). +ZICCLSM_MARCH =3D -march=3Drv64gcv_zfh +CLEANFILES +=3D test-zicclsm test-zicclsm-off + +test-zicclsm: test-zicclsm.S $(LINK_SCRIPT) + $(CC) $(CFLAGS) $(ZICCLSM_MARCH) $< -Wa,--noexecstack -c -o test-zicclsm.o + $(LD) $(LDFLAGS) test-zicclsm.o -o $@ + +test-zicclsm-off: test-zicclsm.S $(LINK_SCRIPT) + $(CC) $(CFLAGS) $(ZICCLSM_MARCH) -DZICCLSM_DISABLED $< -Wa,--noexecstack = -c -o test-zicclsm-off.o + $(LD) $(LDFLAGS) test-zicclsm-off.o -o $@ + +EXTRA_RUNS +=3D run-test-zicclsm +run-test-zicclsm: test-zicclsm + $(call run-test, $<, $(QEMU) -cpu rv64$(comma)v=3Dtrue$(comma)zfh=3Dtrue$= (comma)zicclsm=3Dtrue $(QEMU_OPTS)$<) + +EXTRA_RUNS +=3D run-test-zicclsm-off +run-test-zicclsm-off: test-zicclsm-off + $(call run-test, $<, $(QEMU) -cpu rv64$(comma)v=3Dtrue$(comma)zfh=3Dtrue$= (comma)zicclsm=3Dfalse $(QEMU_OPTS)$<) + # We don't currently support the multiarch system tests undefine MULTIARCH_TESTS diff --git a/tests/tcg/riscv64/test-zicclsm.S b/tests/tcg/riscv64/test-zicc= lsm.S new file mode 100644 index 0000000000..a2f217c0d1 --- /dev/null +++ b/tests/tcg/riscv64/test-zicclsm.S @@ -0,0 +1,368 @@ +/* + * Test the Zicclsm extension (misaligned load/store support). + * + * This single source is assembled twice: + * - test-zicclsm : run on a CPU with zicclsm=3Dtrue. Every misalig= ned + * scalar integer, floating-point and vector + * load/store must complete WITHOUT raising a trap. + * - test-zicclsm-off : built with -DZICCLSM_DISABLED and run on a CPU = with + * zicclsm=3Dfalse. Every misaligned access must r= aise a + * misaligned load/store exception, with the corre= ct + * mcause and mtval. + * + * Zicclsm governs all regular scalar loads/stores (integer and F/D/Zfh + * floating-point) as well as vector element loads/stores. Floating-point + * loads/stores (flh/flw/fld, fsh/fsw/fsd) are therefore exercised here. + * + * Atomic (A/Zacas/...) accesses are intentionally excluded: they always + * require natural alignment regardless of Zicclsm. Likewise cm.push/cm.p= op + * (Zcmp) are excluded, as they are not regular loads/stores. + * + * Register conventions (persist across the whole test; the trap handler o= nly + * clobbers t0-t4): + * s1 =3D expected mcause for the pending misaligned access + * s2 =3D expected mtval (the misaligned address) + * s3 =3D trap counter (incremented by the handler) + * s4 =3D base address of the aligned data buffer + * s5 =3D snapshot of s3 taken before an access, used to check the delta + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + + .option norelax + .option norvc + +/* RISC-V exception causes (see target/riscv/cpu_bits.h). */ +#define CAUSE_LOAD_MISALIGNED 0x4 +#define CAUSE_STORE_MISALIGNED 0x6 + +/* + * EXPECT sets up the expectation for the access that immediately follows = and + * snapshots the trap counter. + * \cause =3D expected mcause if the access traps + * \off =3D byte offset from the buffer base; also the expected mtval + */ + .macro EXPECT cause, off + li s1, \cause + addi s2, s4, \off + mv s5, s3 + .endm + +/* + * CHECK validates the outcome of the preceding access. + * - When Zicclsm is disabled, exactly one trap must have fired. + * - When Zicclsm is enabled, no trap must have fired. + */ + .macro CHECK +#ifdef ZICCLSM_DISABLED + addi s5, s5, 1 + bne s3, s5, fail +#else + bne s3, s5, fail +#endif + .endm + +/* In the enabled case, also verify the value returned by scalar loads. */ + .macro CHECK_VALUE value +#ifndef ZICCLSM_DISABLED + li t0, \value + bne a2, t0, fail +#endif + .endm + +/* Verify bytes written by an enabled scalar store. */ + .macro CHECK_BYTE off, value +#ifndef ZICCLSM_DISABLED + lbu t0, \off(s4) + li t1, \value + bne t0, t1, fail +#endif + .endm + + .text + .global _start +_start: + /* Install the trap handler. */ + lla t0, trap + csrw mtvec, t0 + + /* Enable the FP (FS) and Vector (VS) unit state so F/D/V instructions + * do not trap as illegal. 0x6600 =3D FS[14:13]=3D11 | VS[10:9]=3D11. */ + li t0, 0x6600 + csrs mstatus, t0 + + /* Initialise persistent state. */ + li s3, 0 /* trap counter */ + lla s4, buf /* aligned buffer base */ + + /* + * ---- Scalar integer loads ---- + * lh/lhu need 2-byte alignment; lw/lwu 4-byte; ld 8-byte. + */ + EXPECT CAUSE_LOAD_MISALIGNED, 1 + lh a2, 1(s4) + CHECK + CHECK_VALUE 0x2211 + EXPECT CAUSE_LOAD_MISALIGNED, 1 + lhu a2, 1(s4) + CHECK + CHECK_VALUE 0x2211 + + EXPECT CAUSE_LOAD_MISALIGNED, 1 + lw a2, 1(s4) + CHECK + CHECK_VALUE 0x44332211 + EXPECT CAUSE_LOAD_MISALIGNED, 3 + lw a2, 3(s4) + CHECK + CHECK_VALUE 0x66554433 + EXPECT CAUSE_LOAD_MISALIGNED, 1 + lwu a2, 1(s4) + CHECK + CHECK_VALUE 0x44332211 + + EXPECT CAUSE_LOAD_MISALIGNED, 1 + ld a2, 1(s4) + CHECK + CHECK_VALUE 0x8877665544332211 + EXPECT CAUSE_LOAD_MISALIGNED, 3 + ld a2, 3(s4) + CHECK + CHECK_VALUE 0xaa99887766554433 + EXPECT CAUSE_LOAD_MISALIGNED, 7 + ld a2, 7(s4) + CHECK + CHECK_VALUE 0xeeddccbbaa998877 + + /* + * ---- Scalar integer stores ---- + */ + li t6, 0x1122334455667788 + EXPECT CAUSE_STORE_MISALIGNED, 1 + sh t6, 1(s4) + CHECK + CHECK_BYTE 1, 0x88 + CHECK_BYTE 2, 0x77 + + EXPECT CAUSE_STORE_MISALIGNED, 1 + sw t6, 1(s4) + CHECK + CHECK_BYTE 1, 0x88 + CHECK_BYTE 2, 0x77 + CHECK_BYTE 3, 0x66 + CHECK_BYTE 4, 0x55 + EXPECT CAUSE_STORE_MISALIGNED, 3 + sw t6, 3(s4) + CHECK + CHECK_BYTE 3, 0x88 + CHECK_BYTE 4, 0x77 + CHECK_BYTE 5, 0x66 + CHECK_BYTE 6, 0x55 + + EXPECT CAUSE_STORE_MISALIGNED, 1 + sd t6, 1(s4) + CHECK + CHECK_BYTE 1, 0x88 + CHECK_BYTE 2, 0x77 + CHECK_BYTE 3, 0x66 + CHECK_BYTE 4, 0x55 + CHECK_BYTE 5, 0x44 + CHECK_BYTE 6, 0x33 + CHECK_BYTE 7, 0x22 + CHECK_BYTE 8, 0x11 + EXPECT CAUSE_STORE_MISALIGNED, 7 + sd t6, 7(s4) + CHECK + CHECK_BYTE 7, 0x88 + CHECK_BYTE 8, 0x77 + CHECK_BYTE 9, 0x66 + CHECK_BYTE 10, 0x55 + CHECK_BYTE 11, 0x44 + CHECK_BYTE 12, 0x33 + CHECK_BYTE 13, 0x22 + CHECK_BYTE 14, 0x11 + + /* + * ---- Floating-point loads ---- + * flh needs 2-byte alignment; flw 4-byte; fld 8-byte. Their alignment + * is governed by Zicclsm just like the scalar integer forms. + */ + EXPECT CAUSE_LOAD_MISALIGNED, 1 + flh fa0, 1(s4) + CHECK + + EXPECT CAUSE_LOAD_MISALIGNED, 1 + flw fa0, 1(s4) + CHECK + EXPECT CAUSE_LOAD_MISALIGNED, 3 + flw fa0, 3(s4) + CHECK + + EXPECT CAUSE_LOAD_MISALIGNED, 1 + fld fa0, 1(s4) + CHECK + EXPECT CAUSE_LOAD_MISALIGNED, 7 + fld fa0, 7(s4) + CHECK + + /* + * ---- Floating-point stores ---- + */ + EXPECT CAUSE_STORE_MISALIGNED, 1 + fsh fa0, 1(s4) + CHECK + + EXPECT CAUSE_STORE_MISALIGNED, 1 + fsw fa0, 1(s4) + CHECK + EXPECT CAUSE_STORE_MISALIGNED, 3 + fsw fa0, 3(s4) + CHECK + + EXPECT CAUSE_STORE_MISALIGNED, 1 + fsd fa0, 1(s4) + CHECK + EXPECT CAUSE_STORE_MISALIGNED, 7 + fsd fa0, 7(s4) + CHECK + + /* + * ---- Vector unit-stride loads / stores ---- + * A base address that is not aligned to the element size (SEW) is + * misaligned for the first element access. + */ + vsetvli t1, x0, e16, m1, ta, ma + EXPECT CAUSE_LOAD_MISALIGNED, 1 + addi a0, s4, 1 + vle16.v v0, (a0) + CHECK + EXPECT CAUSE_STORE_MISALIGNED, 1 + addi a0, s4, 1 + vse16.v v0, (a0) + CHECK + + vsetvli t1, x0, e32, m1, ta, ma + EXPECT CAUSE_LOAD_MISALIGNED, 1 + addi a0, s4, 1 + vle32.v v0, (a0) + CHECK + EXPECT CAUSE_STORE_MISALIGNED, 3 + addi a0, s4, 3 + vse32.v v0, (a0) + CHECK + + vsetvli t1, x0, e64, m1, ta, ma + EXPECT CAUSE_LOAD_MISALIGNED, 1 + addi a0, s4, 1 + vle64.v v0, (a0) + CHECK + EXPECT CAUSE_STORE_MISALIGNED, 7 + addi a0, s4, 7 + vse64.v v0, (a0) + CHECK + + /* + * ---- Vector strided loads / stores ---- + */ + vsetvli t1, x0, e32, m1, ta, ma + li a1, 8 /* stride in bytes */ + EXPECT CAUSE_LOAD_MISALIGNED, 1 + addi a0, s4, 1 + vlse32.v v0, (a0), a1 + CHECK + EXPECT CAUSE_STORE_MISALIGNED, 1 + addi a0, s4, 1 + vsse32.v v0, (a0), a1 + CHECK + + /* ---- Vector indexed loads / stores ---- */ + /* + * Zero indices keep the first element at the deliberately misaligned bas= e. + */ + vmv.v.i v1, 0 + EXPECT CAUSE_LOAD_MISALIGNED, 1 + addi a0, s4, 1 + vluxei32.v v0, (a0), v1 + CHECK + EXPECT CAUSE_STORE_MISALIGNED, 1 + addi a0, s4, 1 + vsuxei32.v v0, (a0), v1 + CHECK + + /* ---- Vector segmented loads / stores ---- */ + EXPECT CAUSE_LOAD_MISALIGNED, 1 + addi a0, s4, 1 + vlseg2e32.v v0, (a0) + CHECK + EXPECT CAUSE_STORE_MISALIGNED, 1 + addi a0, s4, 1 + vsseg2e32.v v0, (a0) + CHECK + + /* + * ---- Vector whole-register load ---- + * Only the whole-register *load* forms carry an element width + * (vl1re32.v =3D> EEW=3D32), so only they enforce alignment when Zicclsm= is + * off. The whole-register store form (vs1r.v) is defined as EEW=3D8 + * (byte granular) and therefore never faults on misalignment, so it is + * not exercised here. + */ + EXPECT CAUSE_LOAD_MISALIGNED, 1 + addi a0, s4, 1 + vl1re32.v v1, (a0) + CHECK + + /* Success. */ + li a0, 0 + j _exit + + /* + * Trap handler: validate mcause and mtval against the expectation, bump + * the trap counter, then skip past the faulting instruction. The + * instruction length is decoded from its low two bits (0b11 =3D> 4 bytes, + * otherwise a 2-byte compressed instruction). + */ + .balign 4 +trap: + csrr t0, mcause + bne t0, s1, fail + csrr t1, mtval + bne t1, s2, fail + addi s3, s3, 1 + + csrr t0, mepc + lhu t2, 0(t0) + andi t3, t2, 3 + li t4, 3 + bne t3, t4, 1f + addi t0, t0, 4 /* 32-bit instruction */ + j 2f +1: + addi t0, t0, 2 /* 16-bit compressed instruction */ +2: + csrw mepc, t0 + mret + +fail: + li a0, 1 +_exit: + lla a1, semiargs + li t0, 0x20026 /* ADP_Stopped_ApplicationExit */ + sd t0, 0(a1) + sd a0, 8(a1) + li a0, 0x20 /* TARGET_SYS_EXIT_EXTENDED */ + .balign 16 + slli zero, zero, 0x1f + ebreak + srai zero, zero, 0x7 + j . + + .data + .balign 16 +semiargs: + .space 16 + .balign 64 +buf: + .byte 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 + .byte 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff + .space 240 --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550745; cv=none; d=zohomail.com; s=zohoarc; b=RjxkdDSIcH3PKC5EsfZr7BK6A31RHc+F1cl7a5vtSHjca+W29Hc9Wop9D41Rp+R6XOLSdPqj6fr3+wSa0D7BcG2f4ZpwV9l7+yKXXTYnxF+iJEqqDL86XczIypZSXQ8xeYEupGIWcCU2R4H6+BIPCLeMgQooqefHC52J0o1dhjg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550745; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=U9hvvtE/mLZxSo9keqAsE4vQdBL311za+hiZdp6fz9g=; b=LknTTEQEyNT/XDAHn3Ez8G9MKVJfWeGolWyZ96/0an/yWV3jeTvSCafvfk9oQGNE7wR5lGlGmDAF+n3+9oScTnwnmfhN+5n+eIthqpUhdY8/jwy4gwVnCS5modtdO0x5cI2r+KrwsGGo5xn+vrFlrdoE64KzIFkJJk/6rxDVyHM= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550745873822.0664206642163; Sun, 23 Aug 2026 22:52:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNZj-0002ox-Pk; Mon, 24 Aug 2026 01:50:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNYv-0001gv-4e for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:40 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNYr-00021y-Bb for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:35 -0400 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-384930ca5e2so2861860a91.3 for ; Sun, 23 Aug 2026 22:49:32 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.49.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:49:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550572; x=1788155372; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=U9hvvtE/mLZxSo9keqAsE4vQdBL311za+hiZdp6fz9g=; b=eUFVlbPzeXRLLiUonwX7TqjYUREV6aynTriebYZo+gjeW3guTlcNji0JblEyQWEYy2 p/DW0RWUTydjgdhNsT+lvGCVaW5DyqcgCNClPtSRP3Gn79Cmpdtx6xPxBEUm6COmD7jr VFy34dS2H7M+tUQNnrrrSJnBJX9Af86KRq6qIF2vVkM1VDJhojBlnGaTN1rjuXNUqsN0 P6wMsJVE9yVD187J1khbnp5G/lK2EPc7gJZlnyM+RtLgAbmie5JtT5pvwJZeZMo8zq5b GjXpGbVc0ocH9CXbMxZma3LDKLQJfrzY+lZjvN6Od1cWX/EU6r6NGyHBPNTwMhl+/fDA xTsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550572; x=1788155372; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=U9hvvtE/mLZxSo9keqAsE4vQdBL311za+hiZdp6fz9g=; b=G4gYpBV18yScOc/w8pIbyWErUiBINq4BLDTlx9atws1PLmloHGQWiHxXqimFzRvQXL irsUvsdFF34eVYkLFlOVB4eUUJgrwCq/q9v9XUwzhKW90Q+1vpkFPzr2VHoT40eISB0a TBkpdba00P15osiYR2WsL1/XVyfV0UWQPoJKSWtG7RLz0KY54x7HzvquVFW3Rx0JpvHQ MJ6EsdEksTMYdxun54YuFqBdsxBtLzZcvhkTYQp4+Z7hqr1XGyR2G3oE7JWkETBKYmLY 1E3uFMdLZKXqZ0bEKRVYbq3WPkE+PEENZWiYC9k2OXup7wF4uv1C4elvv62UkVpjBpzL eibw== X-Gm-Message-State: AFuF++lYP3smG/l1ebi/0m/OxuE2uxa3u45sFVKk0Ser5rl4evFA1Lxf X3eKz0+AlZnUI2zTLbZuW50gFs066Dtv1E+5DsXxozBXJtasQEbh+JJuCoRj9Q== X-Gm-Gg: AR+sD12tOmIaUhewKfvzc4626XplNo/2XAGlx/lUkuMOnhy2ecWZ9+25HNDLhPeiBOl e0+DKJIP39IT9e7X122IGY0f2Iv+4uNb6BoZzlPgzXsDeI5KjHDZ6JiNh2+aZaTaka1QeN3CU1w 5rKIvUpwY1h9U28Lt5kvqfWt4ItaXAuwwwxpLmrpMUK7JaM/QiKIpRYgm14VyjDIl3VnxZfPZGw fRbM6NtfKE4x1WDuvLeBiBEd5rdLn9C5l2X/aTFgPaphFrJmUe5gsTx/jDpC3VUgmXAvE1LKVS+ fmpEkWn/ActPm2SxotT1EpogehrhoRPRtX+TOSv0ZhbO1YpuOktWWo8ZlUl5VCx7yfHIHDJJ/BK HJFDeX4CnjZE9JyxdVuZ4k1W8a6ztzOYRkjqGrvb/OZkxWr/1L4VQZMUxAn7KdxTIGYpDjELdPJ kRWxPAGsTZbyH1rdvpjqoyxjRb+6ZIUe3AU/3XlLXSmr0MWrR9XwJ/UbcI7PPX59MXn7MozGAGv NkFKA== X-Received: by 2002:a17:90a:d404:b0:38e:ad9d:1161 with SMTP id 98e67ed59e1d1-395decde369mr29780501a91.0.1787550571741; Sun, 23 Aug 2026 22:49:31 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Zephyr Li , Daniel Henrique Barboza , Alistair Francis Subject: [PULL v2 23/96] target/riscv: do not count ECALL in minstret Date: Mon, 24 Aug 2026 15:46:53 +1000 Message-ID: <20260824054806.2790041-24-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1031; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1031.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550747338158500 Content-Type: text/plain; charset="utf-8" From: Zephyr Li With icount enabled, helper_raise_exception() leaves ECALL in icount_get_raw() because it exits without restoring the current TB state. This makes minstret count an instruction that does not retire. Adjust only the fixed minstret baseline so that mcycle accounting remains unchanged. Add an RV64 softmmu regression test for the issue. Fixes: 4fe8ae09062d ("target/riscv: Combine mhpmcounter and mhpmcounterh") Resolves: https://gitlab.com/qemu-project/qemu/-/issues/4087 Signed-off-by: Zephyr Li Reviewed-by: Daniel Henrique Barboza Reviewed-by: Alistair Francis Message-ID: <20260730032122.2564190-1-fritchleybohrer@gmail.com> Signed-off-by: Alistair Francis --- target/riscv/tcg/pmu.h | 1 + target/riscv/tcg/op_helper.c | 6 +++ target/riscv/tcg/pmu.c | 44 +++++++++++++----- tests/tcg/riscv64/Makefile.softmmu-target | 4 ++ tests/tcg/riscv64/test-minstret-ecall.S | 55 +++++++++++++++++++++++ 5 files changed, 98 insertions(+), 12 deletions(-) create mode 100644 tests/tcg/riscv64/test-minstret-ecall.S diff --git a/target/riscv/tcg/pmu.h b/target/riscv/tcg/pmu.h index b4f1e469a2..2429c01b77 100644 --- a/target/riscv/tcg/pmu.h +++ b/target/riscv/tcg/pmu.h @@ -36,6 +36,7 @@ int riscv_pmu_setup_timer(CPURISCVState *env, uint64_t va= lue, uint32_t ctr_idx); void riscv_pmu_update_fixed_ctrs(CPURISCVState *env, privilege_mode_t newp= riv, bool new_virt); +void riscv_pmu_decr_instret(CPURISCVState *env); RISCVException riscv_pmu_read_ctr(CPURISCVState *env, target_ulong *val, bool upper_half, uint32_t ctr_idx); =20 diff --git a/target/riscv/tcg/op_helper.c b/target/riscv/tcg/op_helper.c index ba3c7da375..acdccd1a97 100644 --- a/target/riscv/tcg/op_helper.c +++ b/target/riscv/tcg/op_helper.c @@ -21,6 +21,9 @@ #include "qemu/osdep.h" #include "cpu.h" #include "target/riscv/tcg/csr.h" +#ifndef CONFIG_USER_ONLY +#include "pmu.h" +#endif #include "internals.h" #include "exec/cputlb.h" #include "accel/tcg/cpu-ldst.h" @@ -47,6 +50,9 @@ G_NORETURN void riscv_raise_exception(CPURISCVState *env, =20 void helper_raise_exception(CPURISCVState *env, uint32_t exception) { +#ifndef CONFIG_USER_ONLY + riscv_pmu_decr_instret(env); +#endif riscv_raise_exception(env, exception, 0); } =20 diff --git a/target/riscv/tcg/pmu.c b/target/riscv/tcg/pmu.c index 38ad2737e1..1a4658319b 100644 --- a/target/riscv/tcg/pmu.c +++ b/target/riscv/tcg/pmu.c @@ -49,6 +49,21 @@ static bool riscv_pmu_counter_enabled(RISCVCPU *cpu, uin= t32_t ctr_idx) } } =20 +static bool riscv_pmu_counter_filtered(CPURISCVState *env, uint64_t cfg) +{ + bool virt_on =3D env->virt_enabled; + + return (env->priv =3D=3D PRV_M && (cfg & MHPMEVENT_BIT_MINH)) || + (env->priv =3D=3D PRV_S && virt_on && + (cfg & MHPMEVENT_BIT_VSINH)) || + (env->priv =3D=3D PRV_U && virt_on && + (cfg & MHPMEVENT_BIT_VUINH)) || + (env->priv =3D=3D PRV_S && !virt_on && + (cfg & MHPMEVENT_BIT_SINH)) || + (env->priv =3D=3D PRV_U && !virt_on && + (cfg & MHPMEVENT_BIT_UINH)); +} + /* * Information needed to update counters: * new_priv, new_virt: To correctly save starting snapshot for the newly @@ -147,12 +162,27 @@ void riscv_pmu_update_fixed_ctrs(CPURISCVState *env, riscv_pmu_icount_update_priv(env, newpriv, new_virt); } =20 +void riscv_pmu_decr_instret(CPURISCVState *env) +{ + if (!icount_enabled() || + (env->mcountinhibit & COUNTEREN_IR) || + riscv_pmu_counter_filtered(env, env->minstretcfg)) { + return; + } + + /* + * minstret is derived from icount, which includes the current + * instruction. Move the baseline forward to exclude an instruction + * that raises an exception and therefore does not retire. + */ + env->pmu_ctrs[2].mhpmcounter_prev++; +} + int riscv_pmu_incr_ctr(RISCVCPU *cpu, enum riscv_pmu_event_idx event_idx) { uint32_t ctr_idx; CPURISCVState *env =3D &cpu->env; uint64_t max_val =3D UINT64_MAX; - bool virt_on =3D env->virt_enabled; PMUCTRState *counter; gpointer value; =20 @@ -170,17 +200,7 @@ int riscv_pmu_incr_ctr(RISCVCPU *cpu, enum riscv_pmu_e= vent_idx event_idx) return -1; } =20 - /* Privilege mode filtering */ - if ((env->priv =3D=3D PRV_M && - (env->mhpmevent_val[ctr_idx] & MHPMEVENT_BIT_MINH)) || - (env->priv =3D=3D PRV_S && virt_on && - (env->mhpmevent_val[ctr_idx] & MHPMEVENT_BIT_VSINH)) || - (env->priv =3D=3D PRV_U && virt_on && - (env->mhpmevent_val[ctr_idx] & MHPMEVENT_BIT_VUINH)) || - (env->priv =3D=3D PRV_S && !virt_on && - (env->mhpmevent_val[ctr_idx] & MHPMEVENT_BIT_SINH)) || - (env->priv =3D=3D PRV_U && !virt_on && - (env->mhpmevent_val[ctr_idx] & MHPMEVENT_BIT_UINH))) { + if (riscv_pmu_counter_filtered(env, env->mhpmevent_val[ctr_idx])) { return 0; } =20 diff --git a/tests/tcg/riscv64/Makefile.softmmu-target b/tests/tcg/riscv64/= Makefile.softmmu-target index 908fd008e4..fac0474746 100644 --- a/tests/tcg/riscv64/Makefile.softmmu-target +++ b/tests/tcg/riscv64/Makefile.softmmu-target @@ -24,6 +24,10 @@ EXTRA_RUNS +=3D run-test-mepc-masking run-test-mepc-masking: test-mepc-masking $(call run-test, $<, $(QEMU) $(QEMU_OPTS)$<) =20 +EXTRA_RUNS +=3D run-test-minstret-ecall +run-test-minstret-ecall: test-minstret-ecall + $(call run-test, $<, $(QEMU) -icount shift=3D1 $(QEMU_OPTS)$<) + EXTRA_RUNS +=3D run-plugin-doubletrap run-plugin-doubletrap: doubletrap $(call run-test, $<, \ diff --git a/tests/tcg/riscv64/test-minstret-ecall.S b/tests/tcg/riscv64/te= st-minstret-ecall.S new file mode 100644 index 0000000000..ab268f7f22 --- /dev/null +++ b/tests/tcg/riscv64/test-minstret-ecall.S @@ -0,0 +1,55 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + + .option norvc + + .text + .global _start +_start: + lla t0, trap + csrw mtvec, t0 + + /* + * The first CSR read retires after obtaining s0. The ecall does not + * retire, so the trap handler must observe a difference of one. + */ + csrr s0, minstret + ecall + sub t0, s1, s0 + li t1, 1 + bne t0, t1, fail + + li a0, 0 + j _exit + +trap: + csrr s1, minstret + csrr t0, mcause + li t1, 11 /* Environment call from M-mode */ + bne t0, t1, fail + + csrr t0, mepc + addi t0, t0, 4 + csrw mepc, t0 + mret + +fail: + li a0, 1 + +_exit: + lla a1, semiargs + li t0, 0x20026 /* ADP_Stopped_ApplicationExit */ + sd t0, 0(a1) + sd a0, 8(a1) + li a0, 0x20 /* TARGET_SYS_EXIT_EXTENDED */ + + /* Semihosting call sequence */ + .balign 16 + slli zero, zero, 0x1f + ebreak + srai zero, zero, 0x7 + j . + + .data + .balign 16 +semiargs: + .space 16 --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550690; cv=none; d=zohomail.com; s=zohoarc; b=HaYkyHuUkt6Bs2q8fiCZzLPqjE7MM861FXv+oI7Z0hq09ql8NHvuwsKsCKVWOkwtFPv8yMjAcFjEBwcQhFBQPxIwnD01bRrwau67EqY0MmeLD4U28K22/OPHeKvusw4je9kLPrkpg7xtRtA+bhEwq6BcuqmTG9yCJf6N8Af3mTY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550690; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qfECYY3QZRTyl/SOMv9+jWU3ydUdOrBVrmpFSQeHgA8=; b=Hhe8fuXeeLFf4ZJ69mZZ9AiYKkOl0+8n94+benV+Oy+1Zx/LgrJHlRyxT1aBp4UPxt0iccpY4nuavMEvULMnKQ/EFW4iiK9TI2qCBI4ZUjX7/X+7QoUrZN6wp1+9FNWgByEbemvEDlSSx+1BoyoHi0um/cFVmgWN6u+i4UygVZk= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTP id 178755069068993.61617929805777; Sun, 23 Aug 2026 22:51:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNa6-0003dV-Cz; Mon, 24 Aug 2026 01:50:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNYw-0001nw-Vi for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:40 -0400 Received: from mail-pg1-x52e.google.com ([2607:f8b0:4864:20::52e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNYu-00022i-TV for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:38 -0400 Received: by mail-pg1-x52e.google.com with SMTP id 41be03b00d2f7-ca97d139d5fso2750249a12.0 for ; Sun, 23 Aug 2026 22:49:35 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.49.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:49:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550574; x=1788155374; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=qfECYY3QZRTyl/SOMv9+jWU3ydUdOrBVrmpFSQeHgA8=; b=lvSTiA7ocvo1DIrx2dPn2p6MT5KB1zGb2fNSepb6/Kk0SoSiny1DQ8VLaX105j7+5S Ia/JT66ILzjbQ2T5wYIPJcIc5wgqoe1L0ZuhhjwvjwXQesxL4idvGb2SqaBBQYcJhfB8 PKHwXg5svHnW74Zzbjt8MjBw/wgCsYljfcodzHPRc/FZ+N7z4hTlpP48f9yxYRLOOHKo h7Oc32Q7VJhCoPnkCrPb6R364SB7cE6upJZH9YhKnxSdORJQGvwzJowZH5fK72H94h0c VhAn+AqlqZS8a0f5aHm1f7JxPG4kegDo4SG8GPFErSubLV44HN4Dyv50IueWON7n8zS1 ckSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550574; x=1788155374; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=qfECYY3QZRTyl/SOMv9+jWU3ydUdOrBVrmpFSQeHgA8=; b=DqBWrjV2JVW1C2ocx//j8IZ0KoleTKyypY334OO6YShUBsafRc0gypTRYXf5R7qGUd 5JpqEfoK3Aub/pbK6DSy4bIpEC4UZs2Rf6cZsR8DyfalRu8Qx7qkEoEYkkDKCqQmHA2N Wmlurs760zuJL9Ay8XKp3L4rXB2MFVb5GE5e8kw68+aNq3/+zUrSrY4RGJdtBIUkIgmS 8RMRN5DPX59NtOR59bBSXBjHO/RABDnEeUo3dkYWD1TwPt2bgjpafB/I9Prm2pT8sZmr ooNxV8UxOdujyuiFB9+VZZOO+p6sd/kD2+jIvXyYhj9OuInFUgbkNIJe35vB4d7zNYtc iDZw== X-Gm-Message-State: AFuF++mwWFNAzGj9oz2QJLs2/e9QWIniMVhdyKd1jveL1FQRqkf21+UV KQ9ZUnZCZsV1/Cr4gLRTQm6WhuYLoVp1Df7uiuUavBQOdUyZBDMdgPhZStUD1A== X-Gm-Gg: AR+sD11lpNNJT244OuvjZ6+w2IObzXtuHkEYIzpLfQaLx2yLXS4tLxKCWT5RADzv+Lk zOJcv0/XYACGRCQeZ0twJ/eTaZXq2VzDOfhywEwiWSh/MotxSYI1YkI2m/PoU6aQlNWYSeOtCRW xkDCBvNu6U1JPzllj1iTKbugPsFtBF+lHrpLeR2KY9wjjZrKvO+WhH2oMEsSyZFoB+OSbYpahPJ 8sTBe5bKiXLtW4W5XaxELjlxspFtFQ6cc8cDsAwTMEGtH3Lp9aho6CJmKlrdE/rAdRw8AZRyUyU vc4sVhKTx4tZg2uoAse6fh3oTiqTyAcDPVzyMElpMozfkB5NafW8X9NM9TOIs55YKV7AaiDsFoQ y4YCEuqrZDEWYNDprpc4Ni42x15DH8MxVkWVaEohoyoXLSmrDLaz49WZMh5OMnr2NMthHsyo8IV fX4x9HKiuT9IauJqTzu3nfjJCAdU/oVeLxteiXOkKt8mozxFKT82p0iojuOeH9zSygB6ZaVmDyP f+8dqut/1Xwi3zjlgUQado2HnYt X-Received: by 2002:a17:90b:6cc:b0:392:ca3b:370a with SMTP id 98e67ed59e1d1-395c33d786amr46103363a91.2.1787550574495; Sun, 23 Aug 2026 22:49:34 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Ivan Efremov , Alistair Francis Subject: [PULL v2 24/96] target/riscv: Fix seed CSR sign extension Date: Mon, 24 Aug 2026 15:46:54 +1000 Message-ID: <20260824054806.2790041-25-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52e; envelope-from=alistair23@gmail.com; helo=mail-pg1-x52e.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550691362158500 Content-Type: text/plain; charset="utf-8" From: Ivan Efremov The SEED_OPST_* macros expanded to int expressions. When bit 31 was present, converting a CSR seed value to target_ulong on RV64 sign extended the value and incorrectly set the upper 32 bits. Make the SEED_OPST_* constants unsigned so that CSR values are zero extended on RV64. Fixes: 77442380ecbe ("target/riscv: rvk: add CSR support for Zkr") Resolves: https://gitlab.com/qemu-project/qemu/-/issues/4121 Signed-off-by: Ivan Efremov Reviewed-by: Alistair Francis Message-ID: <20260802113130.7818-2-nendensu@ispras.ru> Signed-off-by: Alistair Francis --- target/riscv/cpu_bits.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index 3f146a43fe..c01050ce2b 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -1086,11 +1086,11 @@ typedef enum CTRType { (HVICTL_VTI | HVICTL_IID | HVICTL_IPRIOM | HVICTL_IPRIO) =20 /* seed CSR bits */ -#define SEED_OPST (0b11 << 30) -#define SEED_OPST_BIST (0b00 << 30) -#define SEED_OPST_WAIT (0b01 << 30) -#define SEED_OPST_ES16 (0b10 << 30) -#define SEED_OPST_DEAD (0b11 << 30) +#define SEED_OPST (0b11U << 30) +#define SEED_OPST_BIST (0b00U << 30) +#define SEED_OPST_WAIT (0b01U << 30) +#define SEED_OPST_ES16 (0b10U << 30) +#define SEED_OPST_DEAD (0b11U << 30) /* PMU related bits */ #define MIE_LCOFIE (1 << IRQ_PMU_OVF) =20 --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550864; cv=none; d=zohomail.com; s=zohoarc; b=GhmKKNoQ1t+5UHeOLqu0nPsyNickiVa/b7DYKmByVDRcMb6f1sRLjBE5tAGM4sbyWpkI0mWQSXEMuG5bii/dNRrXqa+I6Lcum85e7evy4yqVBGfmVN5w6pw/Ov63SyleO3vRDiNOzgtp+v037ladvKJWGUDEaOXjXpzUTungpqQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550864; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=xN0xQN5mdER04LVt6luBkNx814GvD/i+FtKZY4I0s/E=; b=jzjkTjDAcQMChHq4NGmFyAWHxJJP4nSHBbz9JxpTdQm8A7EHzk+t5kMaytCBCTXz2ZAh6kqo+f5wxiqXd1MroM+8rDP0eNj8JkPoLPpn1AvQcaNpI5IJcjR6BSEE7ugofokuFo+CzK/NicxJ9TYUdOzqP051ueXikt5RvFRaPco= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550864704763.9673474848203; Sun, 23 Aug 2026 22:54:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNZT-0002JP-Jx; Mon, 24 Aug 2026 01:50:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNYy-0001qC-Ul for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:42 -0400 Received: from mail-pg1-x533.google.com ([2607:f8b0:4864:20::533]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNYx-00023m-C7 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:40 -0400 Received: by mail-pg1-x533.google.com with SMTP id 41be03b00d2f7-cbedda4c154so1805536a12.1 for ; Sun, 23 Aug 2026 22:49:38 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.49.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:49:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550578; x=1788155378; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=xN0xQN5mdER04LVt6luBkNx814GvD/i+FtKZY4I0s/E=; b=EXdGEMuaGghiZjQ9+i2Wu9eTmYswbIm0yv/sxt8Ka51CPHBbN560VcAvm7CX5NYJ3f 94wj/oa+eXjyuoJ8VBYiCqpkmjrBy7fUuiJQWFPLeWlujwqV7yXmEJzcnW6BjYO3Z+Tg IsHR2/2i5zTO1uB8G6Ws9c5jocJP2grYDF/dNsaaQSDVcZWsaKGkmJ9FP5EnEVwN4ZHR 1eFQEUPayy431sqXk+KxwwMlwkxQ8yQKiUrzD/e/Hn/PmFoTLtrplTwLMw7qgMkf8d32 eyL77RU0zMqXw0yXkdBhujeVdchxsSmdAfyb1pbmqvjxW8/NGnRHTw7Z9sgYpIPv80Hc Kseg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550578; x=1788155378; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=xN0xQN5mdER04LVt6luBkNx814GvD/i+FtKZY4I0s/E=; b=rFBI8RxRIuNzbbLmGolJ775ROscRkrsANH/EkBXsj5SZyxgEpoqOkUNTvADO4Sc9lG mr5wCevOvlnNYdaWeYJSPOyImL0L2ADgqStaJw8tfjTTi9kZTAWNsO5O5f4Du+mGyteQ j7B71WBbKVnPwwAOABcHj7nFIuKymqBFD+F7eIZG5nKl/8o2v/ZdPRW97dmeBO+klAFW ZDqu83V9qHbhZUjLdcKVjjpAs0rU+8XyGmsYkG/ktDUzAV74ezI53A2Ib3jfUkSAbl8K ejnVKUNqPDKfmmHY4scFuCrZnjsMISqg3NMlGRYwP3qUMzIWiKhjKqwspiE5QfjnoSIV qOcQ== X-Gm-Message-State: AFuF++mwNa8lTJqiPbCKGumuCBmwp26VkP51JBetbRUQ5UGuVckNZGyj MMOQuWYGAkUv/nH040pEOKxJxz3J+36vldoNYxCqtlz2bWcQ47g2+rWwDg0p2g== X-Gm-Gg: AR+sD105g6LYD1IS8d3wQKL0G/HnFVDHjftqm4UpHuH4Bw1b9oRgQBp6U/D880JZIvQ nB7VC+FTDrKxrWFKedfiHzN8GNSzZRli6JJAaOEvSX+ctqKQXmE2qcdJTU8TowoAQB8gBpFLTak ApCz2+bKTze5Ur/OSsDgaS2t9hXFYqmum7i44/exhdDZ9Fj1+fHLkR53XWUJzaMzYGJheD7OU0Z B6tU8BCKj+tnjAIS+5RtDUj0jaVUR6YUVT9yXSZy6ItkwddVbl6FKIFyG2Dws0hH53chZw08z7D o31ANrGFVPmf/Gr5OHCmLvDFygccvF6m9zh8Txe+oxFEAuyxhWKb7PjlZpDTJNo0WhNYchWGURJ l8w9wV35mha2Nep2jLyr1Bxs9RjGomMFfyrMY6ZBexwF9QQY8Tq1gQaNaaAECmQXKHM3l8rnFha vuuWRED/qPaxbiS9SXJ8yZ4qwnDeIQHOPCkHZknzrI+tZ6gkI7W5kOCwJic0I0YkApwD8VBxhsy cUBZg== X-Received: by 2002:a17:90b:5646:b0:381:28e0:6259 with SMTP id 98e67ed59e1d1-395c36fb278mr45522695a91.9.1787550577873; Sun, 23 Aug 2026 22:49:37 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Ivan Efremov , Alistair Francis Subject: [PULL v2 25/96] tests/qtest: Add seed CSR zero extension test Date: Mon, 24 Aug 2026 15:46:55 +1000 Message-ID: <20260824054806.2790041-26-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::533; envelope-from=alistair23@gmail.com; helo=mail-pg1-x533.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550866206158500 Content-Type: text/plain; charset="utf-8" From: Ivan Efremov Add a qtest that reads the seed CSR on RV64 machine with Zkr support and verifies that the upper 32 bits are clear. Signed-off-by: Ivan Efremov Reviewed-by: Alistair Francis Message-ID: <20260802113130.7818-3-nendensu@ispras.ru> Signed-off-by: Alistair Francis --- tests/qtest/riscv-csr-test.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/tests/qtest/riscv-csr-test.c b/tests/qtest/riscv-csr-test.c index bb1b0ffed3..7479a5c5bc 100644 --- a/tests/qtest/riscv-csr-test.c +++ b/tests/qtest/riscv-csr-test.c @@ -20,6 +20,12 @@ #define CSR_MVENDORID 0xf11 #define CSR_MISELECT 0x350 =20 +#define CSR_SEED 0x015 + +#define SEED_OPST_MASK (UINT64_C(0x3) << 30) +#define SEED_OPST_ES16 (UINT64_C(0x2) << 30) +#define SEED_OPST_DEAD (UINT64_C(0x3) << 30) + static void run_test_csr(void) { uint64_t res; @@ -46,12 +52,32 @@ static void run_test_csr(void) qtest_quit(qts); } =20 +static void run_test_seed_csr(void) +{ + uint64_t val =3D 0; + uint64_t opst; + QTestState *qts; + + qts =3D qtest_init("-machine virt -cpu tt-ascalon"); + + qtest_csr_call(qts, "get_csr", 0, CSR_SEED, &val); + + opst =3D val & SEED_OPST_MASK; + g_assert_true(opst =3D=3D SEED_OPST_ES16 || + opst =3D=3D SEED_OPST_DEAD); + + g_assert_cmphex(val >> 32, =3D=3D, 0); + + qtest_quit(qts); +} + int main(int argc, char **argv) { g_test_init(&argc, &argv, NULL); =20 if (qtest_has_machine("virt")) { qtest_add_func("/cpu/csr", run_test_csr); + qtest_add_func("/cpu/csr/seed", run_test_seed_csr); } =20 return g_test_run(); --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550998; cv=none; d=zohomail.com; s=zohoarc; b=L0kxn7rIT1Laj49JLOjLWIBU94uabjS+K7njpzcTACxd3n8OvpSe8Wiaj837I4cNddXza9ljY8ESUV150jOmj/1s1+af7+1kNvn3h0iw2JXQWEceEzCd+4xjSMNrhYFE1pIBgDVPAxLjnj+SjI5DEQNtXXH2nN2qR+ey6NycYHM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550998; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=K7jyUxpCMyWmPG7deRl8ThJ1u0ATYoDtwpi499af0mc=; b=TG5W77bvFYYXTzfUv9GW0iJGEfs2b7uyVoDGtEGBmFRNccfibJtmvtBLNxWeQoIsWP48W442fg03bpAF5zF6Gjpx2A+hrBc3vahdqf/Cbu+2t72/AXhEA100XpP/QTB4uSIeQ03C3L6x+WGelZmC6mwULHaaLd5HYJnF1aXN2iM= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550998461213.12223210823163; Sun, 23 Aug 2026 22:56:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNam-0004So-2u; Mon, 24 Aug 2026 01:51:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNZ3-0001u5-N1 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:46 -0400 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNZ1-00024g-Qf for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:45 -0400 Received: by mail-pj1-x1030.google.com with SMTP id 98e67ed59e1d1-395ea741d07so1002993a91.1 for ; Sun, 23 Aug 2026 22:49:42 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.49.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:49:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550581; x=1788155381; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=K7jyUxpCMyWmPG7deRl8ThJ1u0ATYoDtwpi499af0mc=; b=f21EnGHiXli5OLmcLrcT0akTYIKJzY7vlTOtkJdZe+ExqyNFS4TipQMK/mlyKcpXKs z6xS6EwWcux1ZFn7P/65f7aKwAtDgteXquRpaJakqkXdsAQYTvjHaI9ElTAHvtS+R+8c N7tHFuYzI+p+koZufB0C6gccfzka0jcD4J4eDtyxKm7LqmqvZUr73uVlJlqTkuYBv4G+ rn9EcIxHKv8HjzrYeJkMKkU1KCVJxFBoeWNruNlPY2QqlYKrBZ99DX7HHNhrFZMjWZvb 70BJYPmE8s6d3BXhgNajXF9VayMtkGp+HsWqqg/OrgCY+y3mee7wWwxqbKCP4IhgHSKI OX7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550581; x=1788155381; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=K7jyUxpCMyWmPG7deRl8ThJ1u0ATYoDtwpi499af0mc=; b=odxkgeSseJPRS1Aqv5CnlAOVf8RBijGtbAxDfkgOetrHcw9LKsYl95HpCBh/E/3pOh HREfzet3dzeHP3xgSJm8VWGyusdi8wIpa2FgYEnzZxvw3Y45lSZNXN+QHkOmgQtx4TpX ZhgFZVHS/5wiMv1oerqB+oBUA3xn87qZtVqHgR/bBT8BQslyctAaJzJr7NK20oOWfhAK 3vryeninHb6zrxrgvtMmLn0hrjlkZSBMsrWLqThwiO89qlJlmUtDcffxwfmCIxJh0kGV Pe6IqzFvp1TZ1JVCWmBzpmHCJ/f7r+3wmGIQEqnGZFA3RgKfkvGLdcbbpB83/NmzuJ+5 60EQ== X-Gm-Message-State: AFuF++nihOsWy8whHUhlKEqLgSetBagSHq7lLIdB5bIFbxqnkwGw2Jkr CVai2H33gW6V7BphN5mr1NbQihiiAV8B4WfuyjzgjxT1wEn7pq1f+jVuXcxXmA== X-Gm-Gg: AR+sD10Z+w1V2rYqmUTu5rHiS2LJTTDZgCkeYD8hFplC3EV85VxCdNUZ31YK9yURQRk r8RptPrWDwJX/FJpgGQU5LvDuZHaOmmnnoejH3mVe0hRnsF2LIaXtUUdqa/mFk2rG5ZHgMJm/zH wIe/XmLEwLNVKcTakg3G9LPI4icOmk8ISOf3hiKAwkUzt/GPWPuIGRkYbhLNEDIca8VmvG77+WS IIkfYGRvF9U7tLBBADPwMTEEmLVhjmcnFo9L6V2D3kSRu60CZBF9gbUx3kL9KcAiwCzWpQbu/23 tWQuJwVVp11iJg0fJjT1xMB8VQDWm/xisNCMJ/oA48CxbREUeILO2I1sa5ZjGmoBAnW7IhY84xs 8PVDzXdJeuNkommd7bfMK7eRDI4J3uJYhAsOsURlreR2Q92fj1wLk32w0egQhwSKwxmhXXwLKFg nVrTwa0fXsG/VY1XBSYTFxbZyTO9Tgs+MxEgo1ixYq0F7Rt1ZQUAvAfpPWvdfOn0uD/tSZgB0iL 8iImA== X-Received: by 2002:a17:90b:4a81:b0:37d:f206:a2ac with SMTP id 98e67ed59e1d1-395c33ec558mr39401655a91.7.1787550581422; Sun, 23 Aug 2026 22:49:41 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: TANG Tiancheng , LIU Zhiwei , Daniel Henrique Barboza , Alistair Francis Subject: [PULL v2 26/96] disas/riscv: Fix th.srri decoding Date: Mon, 24 Aug 2026 15:46:56 +1000 Message-ID: <20260824054806.2790041-27-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1030; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1030.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551000313158501 Content-Type: text/plain; charset="utf-8" From: TANG Tiancheng target/riscv/xthead.decode defines th.srri as funct6=3D000100 in bits 31:26, with the 6-bit immediate in bits 25:20. decode_xtheadbb() switches on bits 31:25, i.e. funct6 plus imm[5]. Therefore valid th.srri encodings are 0001000 and 0001001. The current 0000100 and 0000101 cases use the wrong funct6 value and decode valid th.srri instructions as illegal. Fix the cases to match funct6=3D000100 with both imm[5] values. Fixes: 318df7238b9f ("disas/riscv: Add support for XThead* instructions") Signed-off-by: TANG Tiancheng Reviewed-by: LIU Zhiwei Reviewed-by: Daniel Henrique Barboza Reviewed-by: Alistair Francis Message-ID: <20260703-b4-disas-xthead-fix-riscv-next-v4-1-84c566330bc7@linu= x.alibaba.com> Signed-off-by: Alistair Francis --- disas/riscv-xthead.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/disas/riscv-xthead.c b/disas/riscv-xthead.c index fcca326d1c..2f2ddb8dd9 100644 --- a/disas/riscv-xthead.c +++ b/disas/riscv-xthead.c @@ -315,8 +315,10 @@ void decode_xtheadbb(rv_decode *dec, rv_isa isa) op =3D rv_op_th_revw; } break; - case 0b0000100: - case 0b0000101: op =3D rv_op_th_srri; break; + case 0b0001000: + case 0b0001001: + op =3D rv_op_th_srri; + break; } break; case 2: op =3D rv_op_th_ext; break; --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550901; cv=none; d=zohomail.com; s=zohoarc; b=J9QzrfJPq3LZMR6Mz2AnIV/loB4dNHE6CSIhmNZdTWj8aSvubM6xWlCDJWhOKOcbzn5fP1tACNMVVQH82R7Jc4hNuJT3BIITfJpFenQTmKCVRYSqLLsXbikdHyBh8Q2dN0UBYhsFaJ2G0npkSqBfnZ2+cP/2f8ELdbhVXH7lerU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550901; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=pvkNgzPBnkClRwc9O5eyz1kkZLDtZhEMJDHTwwC8vGY=; b=hHDn08B4q7G+TZb+G71A7vhZfFfWtP5G//JBRn+kbWYi4+D9kbHvLwQ/9yMJJN42tRo++RLX4AdUMpG85guUj2CashcYWLWbewesmnDqdoWM8plxVdXkj/tqeXR2JITjla4spoQTSvcbmI6BqaggzX0Nj0ItxhwIMj3uWNcORXs= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550901700198.714859829778; Sun, 23 Aug 2026 22:55:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbE-0004zg-Q5; Mon, 24 Aug 2026 01:52:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNZ6-0001yB-2r for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:51 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNZ4-00025p-Hn for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:47 -0400 Received: by mail-pj1-x102b.google.com with SMTP id 98e67ed59e1d1-38dfe910e9dso3368443a91.3 for ; Sun, 23 Aug 2026 22:49:46 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.49.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:49:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550585; x=1788155385; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=pvkNgzPBnkClRwc9O5eyz1kkZLDtZhEMJDHTwwC8vGY=; b=cGl6RNZqLuVHSZH/mdC1/3A7qFO6geNUFCxUykeO0zk2E4+gQE1gzzi4kEw2MFQecs /7x2Dr3y7Aq0iBz+6/H9zGN3pTkbgYZUYYYLPF2HSR4Wh1UuYAdebVYmOp34vRd44PtF mBQOstUkXQxoUTbfvSAwrBED8suBU/41RSF6Zwi2tC6R7nVIHLF4BhHs7kLcq5AHLHEc ojBa6B5Tw5abJjV+HE4fZUysx6uHysKs7WVgDNFZnULBflEg5wjq7F86DhVn8Z01+AZD Jx7xAE6tN0+5drSCZ8+Q9YDy2JV2m1mvMOqQCQzIOZDVwO0W9EkfNKS66k3cwkowI7eS VNtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550585; x=1788155385; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=pvkNgzPBnkClRwc9O5eyz1kkZLDtZhEMJDHTwwC8vGY=; b=QO8CcCeAu94CEET5nF9MlltYKwKr64ehAOH5ODU940DQdLYVYOdIlvf+uf2qNZv9dR AaDsAOpz+lh3e42EvJm8zc+ZreOCg6n+8oEbodZ/QrLTo4i2WHm29qRglgkfD6UxaYKa 9oab3oA0EYG0D3b003v9nuMBlRCg0cHedgEj7sBT3G5ix+4Q9toR33D510OKjeWeOLeP b1EGpWiKBpPA+lEKOMHrZyOtCangKlBIeWxxYkCbwJB+7qUI+ejQ8InU9n99GRlQTcEW gj9HLJBQ6bB09JdV/eLpAkt6aWG/PKaseJ36OGngu8dn56A52qqgJNHL0+5Fut9ukOBo amrw== X-Gm-Message-State: AFuF++kvqvSLDDUH5ADOVzppfvZLWnpKXsHKbwl4KTZWI0kRWbfvvSpM 7OInxRgDb6vLPqszjtnTVUkXXZfsMPFb70acuLxoFRxvzrIbKjJoJhh72VViJQ== X-Gm-Gg: AR+sD13jN4PPWTx6Qp+KIFW2rY1zb9H5I+QxPhlCpC+5f6SamLPl1fBX9q0EKkFerAe X4lAgdv6nKIqua7gBjz458LjhoeYuWP1knIaaGt4ClF7SLWTT/mJSmgkOXUs493okwLtoL8+AXi /AVUs7sjDg0FGkmXvxqHNXG3JAcP2NM0mGR8H3NogdpAma7VmvR4koXzbDg8Z44ezQJoJlQxtuW d/H7J0SR5YSuhCvyn2C3dyzOAUIKW9r5I+176an/30J7CHv0824NkwJlVkk2ViK6J0daRxs0tap y+HYVmivMJYO2MhW9TFQgB8VEpqr8H5lNo5SHCsNK456Um6Yy/sStggnfvPf9KMsCqOjj2sZekA gwQqYvW1h5J1IkXtNpN8pXPtYI1V8uswMWLQvy/zaTJ0RV16VWDqCoGFScdDnN39MxD3kzohOGl Os/Ucv1nqXuoPFlWLjPOhnqRTZdUDmXN0S3vO9F8lB1akiCuXYq3nifnTdNOtiV1C2K1wAcnjUu xWaoQ== X-Received: by 2002:a17:90b:4a89:b0:390:8361:a532 with SMTP id 98e67ed59e1d1-395c33bd6d1mr41672629a91.7.1787550585057; Sun, 23 Aug 2026 22:49:45 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: TANG Tiancheng , =?UTF-8?q?Alex=20Benn=C3=A9e?= , LIU Zhiwei , Daniel Henrique Barboza , Alistair Francis Subject: [PULL v2 27/96] disas/riscv: Fix 6-bit immediate extraction Date: Mon, 24 Aug 2026 15:46:57 +1000 Message-ID: <20260824054806.2790041-28-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102b; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102b.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550903948158500 From: TANG Tiancheng rv_codec_r2_imm6 is used for XThead instructions whose 6-bit immediate field is encoded in bits 25:20. The old expression left-shifted by 38 and then right-shifted by 60, so it kept only bits 25:22. Use extract32() to decode bits 25:20 directly. This fixes the immediate printed for th.srri and th.tst. Fixes: 318df7238b9f ("disas/riscv: Add support for XThead* instructions") Suggested-by: Alex Benn=C3=A9e Signed-off-by: TANG Tiancheng Reviewed-by: LIU Zhiwei Reviewed-by: Daniel Henrique Barboza Reviewed-by: Alistair Francis Message-ID: <20260703-b4-disas-xthead-fix-riscv-next-v4-2-84c566330bc7@linu= x.alibaba.com> Signed-off-by: Alistair Francis --- disas/riscv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/disas/riscv.c b/disas/riscv.c index 7f1b262773..fdf75a12ef 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -4546,7 +4546,7 @@ static uint32_t operand_zcmp_rlist(rv_inst inst) =20 static uint32_t operand_imm6(rv_inst inst) { - return (inst << 38) >> 60; + return extract32(inst, 20, 6); } =20 static uint32_t operand_imm2(rv_inst inst) --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551142; cv=none; d=zohomail.com; s=zohoarc; b=ijHtJhgPdiodhKD3wQ6W22MwDfnB8J+rT8AaNuxgl5lECDB3k2BnprDaAbrDVrJFz6H5FnHm4msHyTb3CLsllciBBRBu4HZsZjiyA9TG4L6V9gMQdoTxbkblCPlhVq4Bo1mET6LwOGVrX1Qs0ygb7yYX859kWIq87+JPZySkONw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551142; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=uqnXWGuDLvEfhlq4w5r6kD4ZoGnJTkkdca1i+GCVCbs=; b=YWd2YHBCYqTV8eBxIfr2nEuMWOfw7v62GwoCN+wcvtAAjKmaqjxeYqse6LIqMjqSd2ZIvyfwl9eiIKLr+HX90/HV8PUSmwJ5BcEsLM0uoMLNzj/MtCFu7XXknTtzDNlrnXVmTGcKTE3hHgS2vr74BhKGmKI0xpYJ4sVLODh1X+c= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551142340978.6230798926249; Sun, 23 Aug 2026 22:59:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNaI-00045U-UJ; Mon, 24 Aug 2026 01:51:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNZ9-0001ys-1V for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:53 -0400 Received: from mail-pg1-x534.google.com ([2607:f8b0:4864:20::534]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNZ7-00026W-K9 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:50 -0400 Received: by mail-pg1-x534.google.com with SMTP id 41be03b00d2f7-ca80d708489so1947303a12.1 for ; Sun, 23 Aug 2026 22:49:49 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.49.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:49:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550588; x=1788155388; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=uqnXWGuDLvEfhlq4w5r6kD4ZoGnJTkkdca1i+GCVCbs=; b=sj0twRGaPZq6xRiBmpdYPh5EUo+AR5tjIALHEe8/zF9rFG97cqf8iYwqYq0LYY3R70 l2zibRrJPlkQCGVZXMs4D4HYUgntsLG6QXkuO6I1oiSp+P8Pp3g+FFhGrGwpCLAGmsJG a1816Yr6rlVYsAMiuQY1vcU/8dvNxKU7TEiNBRzdU0CCpb7kXbNjbOv68DDDliBGMXkW 1EiRqEUll+5WKUo5N/lhbZejsFcx29gLnK/xl1Wtqn1JcbhkjXue4HpoJVOXfrXKjoJM O28xsUtsnCmD4BddR+YMe3Vx7GfaZjv4ictlI41C5tgNe9FuLIgkz465ysWDykpV2kM2 YX3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550588; x=1788155388; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=uqnXWGuDLvEfhlq4w5r6kD4ZoGnJTkkdca1i+GCVCbs=; b=jVVYUcssfYC/V8NtQFz/Cp8rBCr0PxYV95q/O8RE/ehrf23aA41U8z4Ng9/FTQSgVl XBltjhesAthDxPBHiaL2/jgBsjgMgB+3aW4UccRSA9EU+rjiSQWfQyJmyJDhOYadNscb mZErtpDZ+Uuqn9vZ/tfoktCDNkWYL3y1G5yMfXBh5DotfEdIcoNWXfdeM3NrD3Gq997z qNMJVS2+FKc3vjkary95d2NXxgzUlCCezmRlmZQ1ckFP0ieNU9athXVAszt64/iChVJe Pf08jYyF3c9GVykbxvu6J1X8xsRs/SACj8YXdg6KqVe0YQHvpbromcgBADanqocibg1O JIKA== X-Gm-Message-State: AFuF++nN5aeDw1vY4uCfTXv5CbJXLkczS61q1/50rII0JFtoGbCjkpm2 UjlD+9bnj37JnqGv1jRmV3Tm/6qgllaV2GZW9qn390SOFmw4voNfQj6wJy7wiQ== X-Gm-Gg: AR+sD11rdIwcIJ7vbyUOXHSic3xr+KGk3CGFGFepJ+jPOEPZSmrSPG6UuMsaUq8L13a QYXW9PdtMm8s444moP7MVgXzfnHC7iglMikLMy4GvhXQVoxBmvx4hxo2N93qYoKsMU9sVxFrTad BTDG3NE31Qf3Z+utB6UvbMbn2D0Io7tqxZeLjOjBuBJM/XEESA6wPuj7dDLq3N8RnzW2QKkJCso PXq7ehg2GAzfGKJpfCY6b33nRyR5xgWpx04xVna67tajkE/Pct7NmS2DuTm448NkMZCu7BoxTRv dsnVOehV4cWEasXvDoiOegnXjxtQGyjc44PqgTAWVp24KTf6UYrl8WPIljxhTdKGfgjk+BYJAhD TWoAzWxbEQpY5Hnxe9ZXPmny6x6Btc9JeFJm+AmY1Q+CKyukCXyYTfZZf/LYm4Z2iM6hLaS94yo 8OsM+ZS5q5apaL5ABoOxNgoX2nokSxkBuexaBacTIG32pFhOCPhVsB9OZJSFoPHyIOO09IrNIDF 1vIs99vE0nIXmH+ X-Received: by 2002:a17:90b:2e4b:b0:38f:de94:bf34 with SMTP id 98e67ed59e1d1-395c514b5cbmr22294819a91.10.1787550588146; Sun, 23 Aug 2026 22:49:48 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: TANG Tiancheng , LIU Zhiwei , Alistair Francis Subject: [PULL v2 28/96] disas/riscv: Use signed type for vector immediates Date: Mon, 24 Aug 2026 15:46:58 +1000 Message-ID: <20260824054806.2790041-29-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::534; envelope-from=alistair23@gmail.com; helo=mail-pg1-x534.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551144940158500 Content-Type: text/plain; charset="utf-8" From: TANG Tiancheng operand_vimm() sign-extends the 5-bit vector immediate field in bits 19:15, but returns uint32_t. This sends negative immediates through an unsigned type before they are assigned to rv_decode.imm. Return int32_t to match the signed value extracted by the helper. Signed-off-by: TANG Tiancheng Reviewed-by: LIU Zhiwei Reviewed-by: Alistair Francis Message-ID: <20260703-b4-disas-xthead-fix-riscv-next-v4-3-84c566330bc7@linu= x.alibaba.com> Signed-off-by: Alistair Francis --- disas/riscv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/disas/riscv.c b/disas/riscv.c index fdf75a12ef..967739bdbb 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -4487,7 +4487,7 @@ static uint32_t operand_cimmq(rv_inst inst) ((inst << 57) >> 62) << 6; } =20 -static uint32_t operand_vimm(rv_inst inst) +static int32_t operand_vimm(rv_inst inst) { return (int64_t)(inst << 44) >> 59; } --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550777; cv=none; d=zohomail.com; s=zohoarc; b=fRIHRskMIs8A/zzNvvOSdeCUOpGi32rSe/oYyfx8dtQR/OUjo4irhwHxuMAB61OHDn+0QDJtqcRlbBn7D7CEzK6Tu9KKDBAnxlJkV76mlEz3N7dAbSQv9zTqfMLpwhBs57GKT+AdbQn4WQgzZB9y4y5o2E2EOw+q7IOWdt6/c8g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550777; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=UxYkvzeEyEowcGzylLSarORZJmNgzBitvz+9ePz3P9w=; b=QFiJ/1ltllbqCOwrLV4lTEBg7CpCC0Tp+SNMa/hlyTyUtZEY6CgCsM7XQ7ruNCqshBYbgG81jHej2fSEvPvlTwoBhz17T0bgfRDtpsSKxaW1AM9r2u6ytsiWz2Fc7HdNEtpAfNiwhuR9f/46i+FSEkhxXzpUSgbkehHNyoLSjos= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550777727959.7777082414688; Sun, 23 Aug 2026 22:52:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNaB-0003uJ-2b; Mon, 24 Aug 2026 01:50:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNZE-00020y-2x for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:59 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNZB-000270-3u for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:54 -0400 Received: by mail-pj1-x1036.google.com with SMTP id 98e67ed59e1d1-38ec1402b05so2252591a91.2 for ; Sun, 23 Aug 2026 22:49:52 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.49.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:49:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550591; x=1788155391; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=UxYkvzeEyEowcGzylLSarORZJmNgzBitvz+9ePz3P9w=; b=o1oulswleiefbXo7/m0QvHa8Hg/StH1L7v3FuntUt2b2+Y6L/Xmu1b5a1FGH4RVSj/ DqBkeXpCr1rcSDpO6Txz7oh26MLNtqdgYe3rxtNHfjWsdqZB8T0VDZGKOcSUs5m5o5x7 k37IvClgbCNXP+d3FlF+ou/Sc+qRf1PAiG7oU8MAfRgGxWIw7BnHYeK4hcO78Yw+/s4c 9Ka+qLgvlGC7slfsm/GtTQoUIAj/cWszFpAsoOkqcsM3MPhZNT4+Up/AYu4nq/dQZepm jGmbrHmR99s8QMWXsHa78ZX0zZABXxT1ywx2rMQLqvfs0W7kcqQzGhhTm+MgWUhwseX5 wFuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550591; x=1788155391; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=UxYkvzeEyEowcGzylLSarORZJmNgzBitvz+9ePz3P9w=; b=TF3uq1b9YjS5kL+0rZVUoIjJZrVf1AA3NhgSzr//b+XugitDpaQiWm4yEquH9Z3thp CfR19enwWKQxEbtd2G52cbeQ/5+20nIuJ6TrbSVsa/lpUkaAY+lcYgZXPRk88g3fPv6+ A7K9LnbNCG+eqgludZNe0TtLwwTFSx3W3I0zMzZTHnYnNmomFCYDKxe+XwQDU3p7p3qy qsGxs1X2GZECVFZWoeKXiYtbOuq2kI8VuxWYN/U3BVUHyD+XPk0bcQJB9c4HHYDaJ6ut qdC6gYroYMmisZKD2uJVjH9o2kTNZg8HhzRw+MYLLpUxEgFkrfuLJhjyNhXEuDUN4UCv SP5A== X-Gm-Message-State: AFuF++njsrt+08rdR4lBEbYuyM/9lAMroH03CEpBwOBid8WzudxOcDRx TtdO/8YQMAALcOIa5c/3CCRWRNi0T+z6UMquOfhB5ZIa/Emki2JZEaQJY5LrnQ== X-Gm-Gg: AR+sD11VixPGnn7Jm5pysVnWXThCDJ8DtyfbXtMYcNmhABbovXEefFx2/dy4yEnb3cS AbYKUh2/nFelwLbUu7SznKiVeClIqL6MHN/OqlHl2tC3BfoqyHt8NfgHtB9pjpxaWAyroneUUw3 TaoKQhNCXfPDY9g5479KejHGfB0d/wr2hWAf6LepIK9sulHDGI6BYRcrMFF93LppNVkGOqetNwl cV2iZyyMUTzj0BL+V5H9CTD0qB75pk6pe+l+AGmBYKx7C0W9QYYcjiZMM1d5WP3Og259FvInu5m cNHMD5ZB9uf682DiwpX/tWegLFRL/JqiFJtiGhBSxKxgoKruv52C1v0WqTE0he363luSwH30vHh rP9QjGg5g3HmnCE49psNlXiwIT2b39hCNX79q+vNP1VbXbnqC9xRjHxDZ3xgQAKmuoULNIA1TKT U1D+K5v4vtxVH2H6itiAVoFcwQrM61ax4N6GoqDtPcJ0USasxDBiQzkxJqf1VwO+okv6vn7MiKg uLBHg== X-Received: by 2002:a17:90b:3ec4:b0:381:528a:808c with SMTP id 98e67ed59e1d1-395c397c6ccmr38190116a91.12.1787550591160; Sun, 23 Aug 2026 22:49:51 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: TANG Tiancheng , LIU Zhiwei , Alistair Francis Subject: [PULL v2 29/96] disas/riscv: Decode unsigned vector immediates as unsigned Date: Mon, 24 Aug 2026 15:46:59 +1000 Message-ID: <20260824054806.2790041-30-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1036; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1036.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550779422158500 Content-Type: text/plain; charset="utf-8" From: TANG Tiancheng rv_codec_v_i decodes all .vi operands with operand_vimm(), which sign-extends bits 19:15. That matches spec operands named imm, but not the .vi forms whose operand is uimm; uimm=3D31 is decoded as -1 and printed by the shared 6-bit 'u' formatter as 63. Add rv_codec_v_i_u/operand_vuimm() for the 5-bit uimm forms: vsll.vi, vsrl.vi, vsra.vi, vnsrl.wi, vnsra.wi, vssrl.vi, vssra.vi, vnclipu.wi, vnclip.wi, vslideup.vi, vslidedown.vi, vrgather.vi, vaeskf1.vi, vaeskf2.vi, vsm3c.vi, vsm4k.vi and vwsll.vi. The remaining rv_codec_v_i entries are the signed imm forms. Fixes: 07f4964d1785 ("disas/riscv.c: rvv: Add disas support for vector inst= ructions") Fixes: 9d92f56d4a44 ("disas/riscv: Add support for vector crypto extensions= ") Signed-off-by: TANG Tiancheng Reviewed-by: LIU Zhiwei Reviewed-by: Alistair Francis Message-ID: <20260703-b4-disas-xthead-fix-riscv-next-v4-4-84c566330bc7@linu= x.alibaba.com> Signed-off-by: Alistair Francis --- disas/riscv.h | 1 + disas/riscv.c | 45 ++++++++++++++++++++++++++++----------------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/disas/riscv.h b/disas/riscv.h index 379e642ec8..91ada8b531 100644 --- a/disas/riscv.h +++ b/disas/riscv.h @@ -149,6 +149,7 @@ typedef enum { rv_codec_v_r, rv_codec_v_ldst, rv_codec_v_i, + rv_codec_v_i_u, rv_codec_vsetvli, rv_codec_vsetivli, rv_codec_vror_vi, diff --git a/disas/riscv.c b/disas/riscv.c index 967739bdbb..82b962dc71 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1803,19 +1803,19 @@ const rv_opcode_data rvi_opcode_data[] =3D { { "vxor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, { "vsll.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, { "vsll.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vsll.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, + { "vsll.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, { "vsrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, { "vsrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vsrl.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, + { "vsrl.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, { "vsra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, { "vsra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vsra.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, + { "vsra.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, { "vnsrl.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, { "vnsrl.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vnsrl.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, + { "vnsrl.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, { "vnsra.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, { "vnsra.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vnsra.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, + { "vnsra.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, { "vmseq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, { "vmseq.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, { "vmseq.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, @@ -1909,16 +1909,16 @@ const rv_opcode_data rvi_opcode_data[] =3D { { "vsmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, { "vssrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, { "vssrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vssrl.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, + { "vssrl.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, { "vssra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, { "vssra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vssra.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, + { "vssra.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, { "vnclipu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, { "vnclipu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vnclipu.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, + { "vnclipu.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, { "vnclip.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, { "vnclip.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vnclip.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, + { "vnclip.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, { "vfadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, { "vfadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, { "vfsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, @@ -2048,15 +2048,15 @@ const rv_opcode_data rvi_opcode_data[] =3D { { "vfmv.f.s", rv_codec_v_r, rv_fmt_fd_vs2, NULL, 0, 0, 0 }, { "vfmv.s.f", rv_codec_v_r, rv_fmt_vd_fs1, NULL, 0, 0, 0 }, { "vslideup.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vslideup.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, + { "vslideup.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 = }, { "vslide1up.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, { "vslidedown.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vslidedown.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 = }, + { "vslidedown.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, = 0 }, { "vslide1down.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 = }, { "vrgather.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, { "vrgatherei16.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0= }, { "vrgather.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vrgather.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, + { "vrgather.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 = }, { "vcompress.vm", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, 0, 0, 0 }, { "vmv1r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, { "vmv2r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, @@ -2144,8 +2144,8 @@ const rv_opcode_data rvi_opcode_data[] =3D { { "vaesef.vs", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, { "vaesem.vv", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, { "vaesem.vs", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, - { "vaeskf1.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm, NULL, 0, 0, 0 }, - { "vaeskf2.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm, NULL, 0, 0, 0 }, + { "vaeskf1.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm, NULL, 0, 0, 0 }, + { "vaeskf2.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm, NULL, 0, 0, 0 }, { "vaesz.vs", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, { "vandn.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, { "vandn.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, @@ -2169,14 +2169,14 @@ const rv_opcode_data rvi_opcode_data[] =3D { { "vsha2ch.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, 0, 0, 0 }, { "vsha2cl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, 0, 0, 0 }, { "vsha2ms.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, 0, 0, 0 }, - { "vsm3c.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm, NULL, 0, 0, 0 }, + { "vsm3c.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm, NULL, 0, 0, 0 }, { "vsm3me.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, 0, 0, 0 }, - { "vsm4k.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm, NULL, 0, 0, 0 }, + { "vsm4k.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm, NULL, 0, 0, 0 }, { "vsm4r.vv", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, { "vsm4r.vs", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, { "vwsll.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, { "vwsll.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vwsll.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, + { "vwsll.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, { "amocas.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, { "amocas.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, { "amocas.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, @@ -4492,6 +4492,11 @@ static int32_t operand_vimm(rv_inst inst) return (int64_t)(inst << 44) >> 59; } =20 +static uint32_t operand_vuimm(rv_inst inst) +{ + return extract32(inst, 15, 5); +} + static uint32_t operand_vzimm11(rv_inst inst) { return (inst << 33) >> 53; @@ -4895,6 +4900,12 @@ static void decode_inst_operands(rv_decode *dec, rv_= isa isa) dec->imm =3D operand_vimm(inst); dec->vm =3D operand_vm(inst); break; + case rv_codec_v_i_u: + dec->rd =3D operand_rd(inst); + dec->rs2 =3D operand_rs2(inst); + dec->imm =3D operand_vuimm(inst); + dec->vm =3D operand_vm(inst); + break; case rv_codec_vror_vi: dec->rd =3D operand_rd(inst); dec->rs2 =3D operand_rs2(inst); --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550798; cv=none; d=zohomail.com; s=zohoarc; b=lOC/57Wl8L93jSLgS18uiZ58j0fUapxNvYsa2iVRFitKb4fxMggOmNVzYke2hBXKyX9fpOhmFthN6HOkjV/5lKyijO+5HhncdJq1/4nGW0CCNNVmE1/PqW6rAqokhoLOprwIs381uEBLhXp6+0maXAf05GyVnBl2ZlejhKaySoA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550798; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=RNFgnM0t7+t0Hez1CnQLXLKNEeRTeeGqtk2q17G/SNg=; b=BjutKHkDwi3RHk8KwhTE85d57CeyT/+M2lCIdXWyyd/9QoYxgY/Hh3PfO2mvTQI5t/smG+ez51ITi2m4MkvfSONSGqvvnDiIQDUkqe/L12j0+O3ccGYncG7fuT+gSLHAat4i6HfM34AW63JYPQrh/7Tuxzl94O9iH7Er/OovS2U= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550798025250.36869991992967; Sun, 23 Aug 2026 22:53:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbG-00051i-CA; Mon, 24 Aug 2026 01:52:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNZG-00022I-Hy for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:59 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNZE-00027b-6v for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:49:58 -0400 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2cc7e86e7aeso42469075ad.2 for ; Sun, 23 Aug 2026 22:49:55 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.49.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:49:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550595; x=1788155395; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=RNFgnM0t7+t0Hez1CnQLXLKNEeRTeeGqtk2q17G/SNg=; b=ZzumLSt5i2LgW1cPdJowdQVWG5+C7HoElZ2V3S0N5JwCpI05/t4nIfdp9BRrASkqnQ cJtek0wauB3xlpNlk0icEMXpOCyU/mSaY0AphG4dre671LbjiX8hT7x2q6PtuOarRa10 +c7AqGaniw64GFPMkivnsrGJwuSNs76n6wCHjtXlmm2s7Er9VDk7yjnBr5ZOXGRp/mrq g53UjFJ6mKjGFi4b9I3ZTkfamVyqIaS4P0e2nr1IWl6o58q5ekcuYiP2NR7wkP+Nfy0T d40tbM1ehdhhrZn/Car9tCRSmx5NNSHruYHHztJiWbVfD3ddoNE11XVcFLn+UAHoyYxF hitQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550595; x=1788155395; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=RNFgnM0t7+t0Hez1CnQLXLKNEeRTeeGqtk2q17G/SNg=; b=bIrO56ssQNPBt9sIDLAV5vVvC1QtxjEcPC/P5n63tMNk7esOLHizMpNKF+YlOlihNH kMnVcgT9bLfD4eMZcdm7A/RLpH89LzUUAgwaXzq/IVXX8cj0qRALfsUAhzAui1A+f5O5 3o9vi9XGzbnrE7Vn/i6t3YI1MX6Ku8B9CeE6LbQ0BqMCELAL8UOcJaMOZWkROjqlFb6C Hum8+CCZafa/oR3DZi1SgysY4xstQeI2CRGUwDm1uguD01Nibeu+Sbgw9rLyEUE4HByc Keh93OFFOD+8Noxc5Wwe+ROXBhc8u6taz4NOgOWYjdBQAxsjOAqsHaiZ8vhnLyxlKYrM o6yA== X-Gm-Message-State: AFuF++lGhKtLfJZJbOevGz0e+ry5KYTCX676hkqHbK3LOj6dczWdEoPC r656793dLAEFIy4HkL9utlFxo1YS2IHbCPbq2mseZgDo8I60o5SkqM8xqy9nMw== X-Gm-Gg: AR+sD13yH6dp0bZX8ClMEFLXLEggvuhRFnLIhc+AWovKvduEGDpCXKwVhQ13gENi1RG HAuS3/gqTdt5+Rmcj2Uji3I7bKLG3hNcGQXNwFxqUd0EN66jWf0HFIYpU7y6o+/vs5JqIeOcp8t 11PvC+o+1hLNbkRyTHcMXGkl88CP23etFKvF1ZeOyaf7lsEK9DSkhelPI/4mYuSAjg3YSW434Q5 0nh7XawvOE/f7hYZd56de7b8nzZRckZmwvd2ay8h/6vdxLBJI9KzScMPLqne9a6NBbDNs/Ll0rO orltqmQisFk+aEw6W3qgNsTjshBG9rKVJL7ZSKb8zV+o9T5YbUlyiGak7cduFjNtz880JVjZr2e fRQGJvYEIu9S1QdFxJUbVObLNEQ4bO9OZrVFtktfOY9O0wGNr6ESz4MzoDPVFX6rcaTpmqLMwLz f/9ABsGEC9gJIwV5lydmpeslOE51Gin+ttEMg1mGZgblE5+HEQ4iGwemWNb3gJXi7HmakmB3etw F2RrA== X-Received: by 2002:a17:90b:2785:b0:38f:23d6:b4ad with SMTP id 98e67ed59e1d1-395c3594cf5mr45125684a91.8.1787550594550; Sun, 23 Aug 2026 22:49:54 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: TANG Tiancheng , Richard Henderson , LIU Zhiwei , Alistair Francis Subject: [PULL v2 30/96] disas/riscv: Use extract helpers for operand fields Date: Mon, 24 Aug 2026 15:47:00 +1000 Message-ID: <20260824054806.2790041-31-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=alistair23@gmail.com; helo=mail-pl1-x629.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550799559158500 Content-Type: text/plain; charset="utf-8" From: TANG Tiancheng Replace shift-based operand extraction with extract32() and sextract32(). For signed immediates, use sextract32() on the field that carries the sign bit and combine it with the remaining extract32() fields. The RISC-V disassembler currently follows target/riscv/internals.h: insn_len() and decodes only 16-bit or 32-bit instruction lengths, so the converted fields are all in the low 32 bits of rv_inst. Suggested-by: Richard Henderson Signed-off-by: TANG Tiancheng Reviewed-by: LIU Zhiwei Reviewed-by: Alistair Francis Message-ID: <20260703-b4-disas-xthead-fix-riscv-next-v4-5-84c566330bc7@linu= x.alibaba.com> Signed-off-by: Alistair Francis --- disas/riscv.c | 214 +++++++++++++++++++++++++------------------------- 1 file changed, 107 insertions(+), 107 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index 82b962dc71..2ba0a6a73a 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -4202,82 +4202,82 @@ static void decode_inst_opcode(rv_decode *dec, rv_i= sa isa) =20 static uint32_t operand_rd(rv_inst inst) { - return (inst << 52) >> 59; + return extract32(inst, 7, 5); } =20 static uint32_t operand_rs1(rv_inst inst) { - return (inst << 44) >> 59; + return extract32(inst, 15, 5); } =20 static uint32_t operand_rs2(rv_inst inst) { - return (inst << 39) >> 59; + return extract32(inst, 20, 5); } =20 static uint32_t operand_rs3(rv_inst inst) { - return (inst << 32) >> 59; + return extract32(inst, 27, 5); } =20 static uint32_t operand_aq(rv_inst inst) { - return (inst << 37) >> 63; + return extract32(inst, 26, 1); } =20 static uint32_t operand_rl(rv_inst inst) { - return (inst << 38) >> 63; + return extract32(inst, 25, 1); } =20 static uint32_t operand_pred(rv_inst inst) { - return (inst << 36) >> 60; + return extract32(inst, 24, 4); } =20 static uint32_t operand_succ(rv_inst inst) { - return (inst << 40) >> 60; + return extract32(inst, 20, 4); } =20 static uint32_t operand_rm(rv_inst inst) { - return (inst << 49) >> 61; + return extract32(inst, 12, 3); } =20 static uint32_t operand_shamt5(rv_inst inst) { - return (inst << 39) >> 59; + return extract32(inst, 20, 5); } =20 static uint32_t operand_shamt6(rv_inst inst) { - return (inst << 38) >> 58; + return extract32(inst, 20, 6); } =20 static uint32_t operand_shamt7(rv_inst inst) { - return (inst << 37) >> 57; + return extract32(inst, 20, 7); } =20 static uint32_t operand_crdq(rv_inst inst) { - return (inst << 59) >> 61; + return extract32(inst, 2, 3); } =20 static uint32_t operand_crs1q(rv_inst inst) { - return (inst << 54) >> 61; + return extract32(inst, 7, 3); } =20 static uint32_t operand_crs1rdq(rv_inst inst) { - return (inst << 54) >> 61; + return extract32(inst, 7, 3); } =20 static uint32_t operand_crs2q(rv_inst inst) { - return (inst << 59) >> 61; + return extract32(inst, 2, 3); } =20 static uint32_t calculate_xreg(uint32_t sreg) @@ -4287,80 +4287,80 @@ static uint32_t calculate_xreg(uint32_t sreg) =20 static uint32_t operand_sreg1(rv_inst inst) { - return calculate_xreg((inst << 54) >> 61); + return calculate_xreg(extract32(inst, 7, 3)); } =20 static uint32_t operand_sreg2(rv_inst inst) { - return calculate_xreg((inst << 59) >> 61); + return calculate_xreg(extract32(inst, 2, 3)); } =20 static uint32_t operand_crd(rv_inst inst) { - return (inst << 52) >> 59; + return extract32(inst, 7, 5); } =20 static uint32_t operand_crs1(rv_inst inst) { - return (inst << 52) >> 59; + return extract32(inst, 7, 5); } =20 static uint32_t operand_crs1rd(rv_inst inst) { - return (inst << 52) >> 59; + return extract32(inst, 7, 5); } =20 static uint32_t operand_crs2(rv_inst inst) { - return (inst << 57) >> 59; + return extract32(inst, 2, 5); } =20 static uint32_t operand_cimmsh5(rv_inst inst) { - return (inst << 57) >> 59; + return extract32(inst, 2, 5); } =20 static uint32_t operand_csr12(rv_inst inst) { - return (inst << 32) >> 52; + return extract32(inst, 20, 12); } =20 static int32_t operand_imm12(rv_inst inst) { - return ((int64_t)inst << 32) >> 52; + return sextract32(inst, 20, 12); } =20 static int32_t operand_imm20(rv_inst inst) { - return (((int64_t)inst << 32) >> 44) << 12; + return sextract32(inst, 12, 20) << 12; } =20 static int32_t operand_jimm20(rv_inst inst) { - return (((int64_t)inst << 32) >> 63) << 20 | - ((inst << 33) >> 54) << 1 | - ((inst << 43) >> 63) << 11 | - ((inst << 44) >> 56) << 12; + return sextract32(inst, 31, 1) << 20 | + extract32(inst, 21, 10) << 1 | + extract32(inst, 20, 1) << 11 | + extract32(inst, 12, 8) << 12; } =20 static int32_t operand_simm12(rv_inst inst) { - return (((int64_t)inst << 32) >> 57) << 5 | - (inst << 52) >> 59; + return sextract32(inst, 25, 7) << 5 | + extract32(inst, 7, 5); } =20 static int32_t operand_sbimm12(rv_inst inst) { - return (((int64_t)inst << 32) >> 63) << 12 | - ((inst << 33) >> 58) << 5 | - ((inst << 52) >> 60) << 1 | - ((inst << 56) >> 63) << 11; + return sextract32(inst, 31, 1) << 12 | + extract32(inst, 25, 6) << 5 | + extract32(inst, 8, 4) << 1 | + extract32(inst, 7, 1) << 11; } =20 static uint32_t operand_cimmshl6(rv_inst inst, rv_isa isa) { - int imm =3D ((inst << 51) >> 63) << 5 | - (inst << 57) >> 59; + int imm =3D extract32(inst, 12, 1) << 5 | + extract32(inst, 2, 5); if (isa =3D=3D rv128) { imm =3D imm ? imm : 64; } @@ -4369,8 +4369,8 @@ static uint32_t operand_cimmshl6(rv_inst inst, rv_isa= isa) =20 static uint32_t operand_cimmshr6(rv_inst inst, rv_isa isa) { - int imm =3D ((inst << 51) >> 63) << 5 | - (inst << 57) >> 59; + int imm =3D extract32(inst, 12, 1) << 5 | + extract32(inst, 2, 5); if (isa =3D=3D rv128) { imm =3D imm | (imm & 32) << 1; imm =3D imm ? imm : 64; @@ -4380,116 +4380,116 @@ static uint32_t operand_cimmshr6(rv_inst inst, rv= _isa isa) =20 static int32_t operand_cimmi(rv_inst inst) { - return (((int64_t)inst << 51) >> 63) << 5 | - (inst << 57) >> 59; + return sextract32(inst, 12, 1) << 5 | + extract32(inst, 2, 5); } =20 static int32_t operand_cimmui(rv_inst inst) { - return (((int64_t)inst << 51) >> 63) << 17 | - ((inst << 57) >> 59) << 12; + return sextract32(inst, 12, 1) << 17 | + extract32(inst, 2, 5) << 12; } =20 static uint32_t operand_cimmlwsp(rv_inst inst) { - return ((inst << 51) >> 63) << 5 | - ((inst << 57) >> 61) << 2 | - ((inst << 60) >> 62) << 6; + return extract32(inst, 12, 1) << 5 | + extract32(inst, 4, 3) << 2 | + extract32(inst, 2, 2) << 6; } =20 static uint32_t operand_cimmldsp(rv_inst inst) { - return ((inst << 51) >> 63) << 5 | - ((inst << 57) >> 62) << 3 | - ((inst << 59) >> 61) << 6; + return extract32(inst, 12, 1) << 5 | + extract32(inst, 5, 2) << 3 | + extract32(inst, 2, 3) << 6; } =20 static uint32_t operand_cimmlqsp(rv_inst inst) { - return ((inst << 51) >> 63) << 5 | - ((inst << 57) >> 63) << 4 | - ((inst << 58) >> 60) << 6; + return extract32(inst, 12, 1) << 5 | + extract32(inst, 6, 1) << 4 | + extract32(inst, 2, 4) << 6; } =20 static int32_t operand_cimm16sp(rv_inst inst) { - return (((int64_t)inst << 51) >> 63) << 9 | - ((inst << 57) >> 63) << 4 | - ((inst << 58) >> 63) << 6 | - ((inst << 59) >> 62) << 7 | - ((inst << 61) >> 63) << 5; + return sextract32(inst, 12, 1) << 9 | + extract32(inst, 6, 1) << 4 | + extract32(inst, 5, 1) << 6 | + extract32(inst, 3, 2) << 7 | + extract32(inst, 2, 1) << 5; } =20 static int32_t operand_cimmj(rv_inst inst) { - return (((int64_t)inst << 51) >> 63) << 11 | - ((inst << 52) >> 63) << 4 | - ((inst << 53) >> 62) << 8 | - ((inst << 55) >> 63) << 10 | - ((inst << 56) >> 63) << 6 | - ((inst << 57) >> 63) << 7 | - ((inst << 58) >> 61) << 1 | - ((inst << 61) >> 63) << 5; + return sextract32(inst, 12, 1) << 11 | + extract32(inst, 11, 1) << 4 | + extract32(inst, 9, 2) << 8 | + extract32(inst, 8, 1) << 10 | + extract32(inst, 7, 1) << 6 | + extract32(inst, 6, 1) << 7 | + extract32(inst, 3, 3) << 1 | + extract32(inst, 2, 1) << 5; } =20 static int32_t operand_cimmb(rv_inst inst) { - return (((int64_t)inst << 51) >> 63) << 8 | - ((inst << 52) >> 62) << 3 | - ((inst << 57) >> 62) << 6 | - ((inst << 59) >> 62) << 1 | - ((inst << 61) >> 63) << 5; + return sextract32(inst, 12, 1) << 8 | + extract32(inst, 10, 2) << 3 | + extract32(inst, 5, 2) << 6 | + extract32(inst, 3, 2) << 1 | + extract32(inst, 2, 1) << 5; } =20 static uint32_t operand_cimmswsp(rv_inst inst) { - return ((inst << 51) >> 60) << 2 | - ((inst << 55) >> 62) << 6; + return extract32(inst, 9, 4) << 2 | + extract32(inst, 7, 2) << 6; } =20 static uint32_t operand_cimmsdsp(rv_inst inst) { - return ((inst << 51) >> 61) << 3 | - ((inst << 54) >> 61) << 6; + return extract32(inst, 10, 3) << 3 | + extract32(inst, 7, 3) << 6; } =20 static uint32_t operand_cimmsqsp(rv_inst inst) { - return ((inst << 51) >> 62) << 4 | - ((inst << 53) >> 60) << 6; + return extract32(inst, 11, 2) << 4 | + extract32(inst, 7, 4) << 6; } =20 static uint32_t operand_cimm4spn(rv_inst inst) { - return ((inst << 51) >> 62) << 4 | - ((inst << 53) >> 60) << 6 | - ((inst << 57) >> 63) << 2 | - ((inst << 58) >> 63) << 3; + return extract32(inst, 11, 2) << 4 | + extract32(inst, 7, 4) << 6 | + extract32(inst, 6, 1) << 2 | + extract32(inst, 5, 1) << 3; } =20 static uint32_t operand_cimmw(rv_inst inst) { - return ((inst << 51) >> 61) << 3 | - ((inst << 57) >> 63) << 2 | - ((inst << 58) >> 63) << 6; + return extract32(inst, 10, 3) << 3 | + extract32(inst, 6, 1) << 2 | + extract32(inst, 5, 1) << 6; } =20 static uint32_t operand_cimmd(rv_inst inst) { - return ((inst << 51) >> 61) << 3 | - ((inst << 57) >> 62) << 6; + return extract32(inst, 10, 3) << 3 | + extract32(inst, 5, 2) << 6; } =20 static uint32_t operand_cimmq(rv_inst inst) { - return ((inst << 51) >> 62) << 4 | - ((inst << 53) >> 63) << 8 | - ((inst << 57) >> 62) << 6; + return extract32(inst, 11, 2) << 4 | + extract32(inst, 10, 1) << 8 | + extract32(inst, 5, 2) << 6; } =20 static int32_t operand_vimm(rv_inst inst) { - return (int64_t)(inst << 44) >> 59; + return sextract32(inst, 15, 5); } =20 static uint32_t operand_vuimm(rv_inst inst) @@ -4499,54 +4499,54 @@ static uint32_t operand_vuimm(rv_inst inst) =20 static uint32_t operand_vzimm11(rv_inst inst) { - return (inst << 33) >> 53; + return extract32(inst, 20, 11); } =20 static uint32_t operand_vzimm10(rv_inst inst) { - return (inst << 34) >> 54; + return extract32(inst, 20, 10); } =20 static uint32_t operand_vzimm6(rv_inst inst) { - return ((inst << 37) >> 63) << 5 | - ((inst << 44) >> 59); + return extract32(inst, 26, 1) << 5 | + extract32(inst, 15, 5); } =20 static uint32_t operand_bs(rv_inst inst) { - return (inst << 32) >> 62; + return extract32(inst, 30, 2); } =20 static uint32_t operand_rnum(rv_inst inst) { - return (inst << 40) >> 60; + return extract32(inst, 20, 4); } =20 static uint32_t operand_vm(rv_inst inst) { - return (inst << 38) >> 63; + return extract32(inst, 25, 1); } =20 static uint32_t operand_uimm_c_lb(rv_inst inst) { - return (((inst << 58) >> 63) << 1) | - ((inst << 57) >> 63); + return extract32(inst, 5, 1) << 1 | + extract32(inst, 6, 1); } =20 static uint32_t operand_uimm_c_lh(rv_inst inst) { - return (((inst << 58) >> 63) << 1); + return extract32(inst, 5, 1) << 1; } =20 static uint32_t operand_zcmp_spimm(rv_inst inst) { - return ((inst << 60) >> 62) << 4; + return extract32(inst, 2, 2) << 4; } =20 static uint32_t operand_zcmp_rlist(rv_inst inst) { - return ((inst << 56) >> 60); + return extract32(inst, 4, 4); } =20 static uint32_t operand_imm6(rv_inst inst) @@ -4556,17 +4556,17 @@ static uint32_t operand_imm6(rv_inst inst) =20 static uint32_t operand_imm2(rv_inst inst) { - return (inst << 37) >> 62; + return extract32(inst, 25, 2); } =20 static uint32_t operand_immh(rv_inst inst) { - return (inst << 32) >> 58; + return extract32(inst, 26, 6); } =20 static uint32_t operand_imml(rv_inst inst) { - return (inst << 38) >> 58; + return extract32(inst, 20, 6); } =20 static uint32_t calculate_stack_adj(rv_isa isa, uint32_t rlist, uint32_t s= pimm) @@ -4585,12 +4585,12 @@ static uint32_t operand_zcmp_stack_adj(rv_inst inst= , rv_isa isa) =20 static uint32_t operand_tbl_index(rv_inst inst) { - return ((inst << 54) >> 56); + return extract32(inst, 2, 8); } =20 static uint32_t operand_lpl(rv_inst inst) { - return inst >> 12; + return extract32(inst, 12, 20); } =20 /* decode operands */ --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551194; cv=none; d=zohomail.com; s=zohoarc; b=PGlfBLpbQW5k+iaJZtNeh1ntFqICPqpo4b/St/ffi+as2rZ8u8OulJMNI2FFgM1aiuOYtVPNKnFIfA5ec+xhKt6Qn6UnGoS0eAwE+4FjRgVBKHMZ9/fnPiFSRZDoyPz37uFh1vTexG8E/UkSk8YH7Y4iLoBzCxeyS0ooqYK/OT0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551194; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Dcu9FE/U8PfA/SpygFMvwaeC9nhEaYjrnABSaaS6uHA=; b=ZTsFuGO/G96fCx81j0PrixzIS1/DTBe9/FbBxK2DtJ+j6MWwvVPMOIUBm+Bu6UGHuF3Z4vYeQqjfx9g51CO3XcIZbVGpoTawzLIOpNttQ7cGBtEWo0m2I6X91ZR8lL7R+W+/ql87OqX1ktDAueZAz3RdcPD2TBgx+TGcpbKXGIU= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551194147742.7093002642872; Sun, 23 Aug 2026 22:59:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNaS-0004Ce-8F; Mon, 24 Aug 2026 01:51:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNZJ-00025Z-Bv for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:04 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNZH-00029t-EY for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:00 -0400 Received: by mail-pj1-x102f.google.com with SMTP id 98e67ed59e1d1-38ec1402b05so2252682a91.2 for ; Sun, 23 Aug 2026 22:49:58 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.49.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:49:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550598; x=1788155398; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Dcu9FE/U8PfA/SpygFMvwaeC9nhEaYjrnABSaaS6uHA=; b=nrbi76uoV9b7BTndsQKaVx5fT1kQLewAhzMbvep3GnoHtrLyvUu7OSHvrm12IGinVx /RAW2XkqwTHw0glYfCuxC5y4mrvrb2QoZwwah0d94xfYJ+15q5wVWd5ezu5QiLs6qgyV 6YxeMxbNsARrC1xcsEhqLtJgJrv3A40uEsD8IfaJAehVumLKdyxJtzppmAMyYHxPz38K EPn8KvugtLgQy8IXyosJj1mhI7rwksEaI1CsG/S+M262K6C/xqArCKzk67F4K2/HZ+8+ /6H+sEG1nNwaECff05DymSlBd8wlSdgO4vhIKjMCEWsw7JnVBagNKUcaK1GKx8el13Wo gaIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550598; x=1788155398; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Dcu9FE/U8PfA/SpygFMvwaeC9nhEaYjrnABSaaS6uHA=; b=j4W+IVx/lmDT2Gj5F5hwmYR15LujqMll39GpOQKauGgVYNhyrO8BZLBNYs+uLnhZ3A EU6hqLweufKtTjBhPbr8qR9Q//hbwfqspWF/a2crA1R4cUzR1/TfLKO/pyOByq1T90hG yx9Vt9IHgnjuHGGm7akILHo3KDrip/ayW4P2Vgw36GB74UfYgfZrAHnLVEmONR5wqm7b w7JFxEhStCbDYQjj+pfLC/Rxh3O2SSnGozv6MtYmWRPfFqaQOwVoIygeDnzHPtmDvrSS +ERD0513lhJhLUqKYhnf5z97gH4nugCiYLKRqj5nxGh01hIG7quM4OukTpaQuICxu3J1 inXA== X-Gm-Message-State: AFuF++lhElh2VThzsgZTghkTLp9BgKjO5A4cmrj8zkaw/7E8uJ1ZqDpg Ry0xm+qtvbnfmoIebk9U1uCHJ++49qFq/n/QKvy2J24JsJ6n5nSErXgc2VRx5Q== X-Gm-Gg: AR+sD13KU1GIHbIzpXAv4dwRI+t+W86+73s4WY4i/V0VVtSv3DLs92W062veWaKoFJX sXmRev2UPi+mRbds8L+962w57xzIlZ6ku8+rMNgsutAaUDoTxu0b75gQGpDaQtHQFVGSyyEUiM4 Dsr/jhQSiDRVRhPowxtk9ql7u1wM/NwJEqQ2INg43f4b6e7Ecf0NryKOZy/GXVNOL5ZwN8BIs5N iJTymJccXjn9BsyzDgVc73+5Fe09Bd1ODnXxZaJ/mlVBF5fuHP4kWTq97oK/ZYV/DN7J2QzFjlp s511Bb9NIZtzXx9JYpemdMqlLa10vqo67TJQg5tqBPtiJfmT9y3Qty7nqQj0v6rh7Tpw334SLmV OAdJu7tzAz01KgAcvEqVJmGdahU+h6qsN5bLU4JOzngds05RcsJQlwIyhzJr09I+n9wHzf6mvhp FVeHVoJRbAZHsH7S75Pvm00n9Z5BOLqZMxr1J/Zlq0gzRAAi5BMdWs/lFrT7mmaMv3H56XSx26C JhRtXfkgp1O/t07 X-Received: by 2002:a17:90b:1b03:b0:38e:524:8797 with SMTP id 98e67ed59e1d1-395c39cb2damr37498503a91.13.1787550597898; Sun, 23 Aug 2026 22:49:57 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Andrew Jones , Daniel Henrique Barboza , Nutty Liu , Alistair Francis Subject: [PULL v2 31/96] hw/riscv/riscv-iommu: fix U-bit check to apply only to leaf S/VS-stage PTEs Date: Mon, 24 Aug 2026 15:47:01 +1000 Message-ID: <20260824054806.2790041-32-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102f; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102f.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551195034158500 Content-Type: text/plain; charset="utf-8" From: Andrew Jones Commit b795ea0ba471 ("hw/riscv/riscv-iommu.c: fault when !PTE_U and no priv access") placed its check ahead of the leaf-vs-non-leaf branch in riscv_iommu_spa_fetch(), so it fires on every PTE walked, including non-leaf/table entries. Per the RISC-V privileged spec's address translation algorithm (Sv39/Sv48/etc., the "leaf PTE has been reached" step, followed separately by the U-bit permission check), the U bit is only defined and checked for the leaf PTE reached at the end of the walk -- non-leaf PTEs don't carry a meaningful U bit at all. Move the check after the leaf/non-leaf branch, alongside the other leaf-only checks, mirroring how the G_STAGE U-bit check (added in 9158c900ab30) is already correctly placed. Fixes: b795ea0ba471 ("hw/riscv/riscv-iommu.c: fault when !PTE_U and no priv= access") Signed-off-by: Andrew Jones Reviewed-by: Daniel Henrique Barboza Reviewed-by: Nutty Liu Message-ID: <20260717112340.1071148-1-andrew.jones@oss.qualcomm.com> Signed-off-by: Alistair Francis --- hw/riscv/riscv-iommu.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/hw/riscv/riscv-iommu.c b/hw/riscv/riscv-iommu.c index f6865d1e16..ed9fb09f8b 100644 --- a/hw/riscv/riscv-iommu.c +++ b/hw/riscv/riscv-iommu.c @@ -476,13 +476,6 @@ static int riscv_iommu_spa_fetch(RISCVIOMMUState *s, R= ISCVIOMMUContext *ctx, break; /* Invalid PTE */ } else if (pte & PTE_RESERVED(false)) { break; /* Reserved PTE bits set */ - } else if (!(pte & PTE_U) && !pv) { - /* - * All accesses are assumed to be User mode unless - * process_id is valid (pv). In case we have a - * non-user mode PTE and !pv we need to fault. - */ - break; } else if (!(pte & (PTE_R | PTE_W | PTE_X))) { base =3D PPN_PHYS(ppn); /* Inner PTE, continue walking */ } else if ((pte & (PTE_R | PTE_W | PTE_X)) =3D=3D PTE_W) { @@ -491,6 +484,13 @@ static int riscv_iommu_spa_fetch(RISCVIOMMUState *s, R= ISCVIOMMUContext *ctx, break; /* Reserved leaf PTE flags: PTE_W + PTE_= X */ } else if (ppn & ((1ULL << (va_skip - TARGET_PAGE_BITS)) - 1)) { break; /* Misaligned PPN */ + } else if (!(pte & PTE_U) && !pv) { + /* + * All accesses are assumed to be User mode unless + * process_id is valid (pv). In case we have a + * non-user mode leaf PTE and !pv we need to fault. + */ + break; } else if ((iotlb->perm & IOMMU_RO) && !(pte & PTE_R)) { break; /* Read access check failed */ } else if ((iotlb->perm & IOMMU_WO) && !(pte & PTE_W)) { --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550782; cv=none; d=zohomail.com; s=zohoarc; b=DsAgfoNnhlWl3ShK/giCt63eHD9wzkvvr1tkD5B7snjS/je4el+Y8bRUbHwnv/A4DIfJW1c1//rsXuYscsLizo8nwWDUQXgVcDm7d//oKlcKdCBAWqwLQqVD/B9AvV07g5Ydaa/Csck4aUiECdzzhhLmm9TskZg03+hggAFQNQs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550782; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=o/fTBWqLW9yjSBoUtJBWig0CY18yMfD1dQ5DwZQGMgw=; b=Sa0XDW0tFquDq9AmhrS/GneRdUJomEdueGuEmqzo01USf9f0Se8SDXbhuvpXN00FtepyYm+lNUaAIXMvcRNbPhIv5mXEIcUklh0TSA7mG7klCdADBfZiyOfuU0Q54AEuRyfSRWjm8WLgF3Fk1PqXYCaMC5RH4eBEJ/E2SyY0Ef4= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550782992558.1940459108458; Sun, 23 Aug 2026 22:53:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNak-0004SJ-M5; Mon, 24 Aug 2026 01:51:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNZM-00028L-Ub for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:07 -0400 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNZL-0002As-0N for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:04 -0400 Received: by mail-pg1-x536.google.com with SMTP id 41be03b00d2f7-c9d1fff21edso2435915a12.1 for ; Sun, 23 Aug 2026 22:50:01 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.49.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550601; x=1788155401; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=o/fTBWqLW9yjSBoUtJBWig0CY18yMfD1dQ5DwZQGMgw=; b=bPF+OVhYj85QABc+zwUOcyCd1k0RwhHx6ZlFUe8LpANQcDFiTTjTIL09/IBKvyPNX+ 3VISQTsxhmirQig9Q/Hf8h+z46wmvWtVNqh/AVl1n1rH2p3WFyTi8CWeZkgSODLZfXWa r3s1V3PNMdmOmCWa/2WvMJlIuX03E2QOqIJ5qA0EKDwkbM7lWGdwBebBSXPcZaXeSqHm aYmA5j59ROpoaVvtWSmfEMSD9X9uVVDOtLYZ5zqq69QjvMbs/hkJ3jyjE19QbJXptdvq o/yvoF1cSQDHOKa6n6pNrtUSpPaXloX5p6Os6scbWClCV2U3umIXBMrgR6KMIO14422+ 8uTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550601; x=1788155401; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=o/fTBWqLW9yjSBoUtJBWig0CY18yMfD1dQ5DwZQGMgw=; b=hxPzhwzJxFpHzD5JYu5lTV0Pft4T1jBzIQeUcWll2naCX4mwQAHHQwLLxDzJVFHM06 TS5nDAkcdPIjU4DurSEr4dMIaGLaiH3/EQMuG/WRIXK+6AmLYSKJS6oD66DyDIY7yPDZ QD0gRxK60Oo1ACzx8dEozVtyTTbTpSHCY8E2F0FK+nC+kH6z+tshDMezfQuW2wBvIJAD RqxHQhpNuP0wPMjUBYkdCuqY7omazb60Tg/icK6B0udcxM+VoyHgTbRycs0p1ZLmEzyx 8HISS7y2QkUXkeWMqkIYMvVCdTXOWTfrGXCEkw9WgEHhW8aV14x25wbfCd87nkCHJsWV F1OQ== X-Gm-Message-State: AFuF++lQHXxSBUBgcx8fj+K/BqPuKPhQDHVxlupP2nGMoAV/geS6moy0 AdsrE9aAxtlBzSgq+a74CmiZGDVHnV6u4oe4MqefIeHnUJodDjB5r5CNOBUJ1g== X-Gm-Gg: AR+sD129eyBWNr7AcMJl5IpqqPeq0bG/1M7k1+hTjHo3FvwWv2nDV6PDQzyHAlFOzQb U1HAi28udkEbkCEZ+ynLMVdnV2SrPgE9eoo6F9etfvKH4FO4R8chAN2szMm2yMhAGmGzKqxj3og m2lBuNKSbSjikp2PcDEuVLAygc9scvnZ8NqYFwCHfafDJ3vvimmSGxyT1/UKMUUfSYwqmDjwA8w csg/vsapc/tG//Ef4r+1z9MkQur+A7IQzc7iwUSCfWasAw05YxLarr+rLUaskhiawivnk2IKNkQ l93jVr1Dqh7xEggVCEYJlrSL2Q4VY0A4WiVaIrcWdhCnBn20vfXwMkMgU8QVao4x61E6R9urptu uy8eabX+mmeKxFCCz9wP44ytO2WVFaiKZxsjOzAZwV59ML6kW58XXJ6QWI556w4ZQrWM9dDDm4/ 8iHV1zrItG+mQY0x5LLD60D9FIfSPgPaqvgrGMQXgUMavTOY2YCbK/xNCeWwZTslRaUnhgby75x ZRZCQ== X-Received: by 2002:a17:90b:4f91:b0:381:6c5:3f63 with SMTP id 98e67ed59e1d1-395c33a6e92mr40608717a91.6.1787550600912; Sun, 23 Aug 2026 22:50:00 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Andrew Jones , Daniel Henrique Barboza , Alistair Francis Subject: [PULL v2 32/96] hw/riscv/riscv-iommu: preserve requested perm in spa_fetch() Date: Mon, 24 Aug 2026 15:47:02 +1000 Message-ID: <20260824054806.2790041-33-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::536; envelope-from=alistair23@gmail.com; helo=mail-pg1-x536.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550783404158500 Content-Type: text/plain; charset="utf-8" From: Andrew Jones b18e3f0e2d0f fixed spa_fetch() faults whose TTYP used the leaf PTE permission instead of the original request permission. However, it kept that request-narrowed value in iotlb->perm after a successful walk, and riscv_iommu_translate() caches iotlb->perm for later accesses to the same IOVA. That means a write to an RW mapping can cache the entry as write-only. A later read then hits the cache and faults even though the mapping allows it, which showed up in NVMe testing as bogus completions and controller timeouts. Keep the requested permission in a separate req_perm and use it for all permission checks and fault-type decisions. Accumulate the leaf permissions separately and copy them to iotlb->perm only after the full walk succeeds, so cached entries describe the mapping rather than the current request. Since faults leave iotlb->perm as the original request, the S-stage and G-stage TTYP fixes remain intact. Fixes: b18e3f0e2d0f ("hw/riscv/riscv-iommu.c: fix fault type for spa_fetch(= ) faults") Signed-off-by: Andrew Jones Reviewed-by: Daniel Henrique Barboza Message-ID: <20260717144525.1154204-1-andrew.jones@oss.qualcomm.com> Signed-off-by: Alistair Francis --- hw/riscv/riscv-iommu.c | 50 ++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/hw/riscv/riscv-iommu.c b/hw/riscv/riscv-iommu.c index ed9fb09f8b..323a041b4a 100644 --- a/hw/riscv/riscv-iommu.c +++ b/hw/riscv/riscv-iommu.c @@ -281,7 +281,7 @@ static hwaddr riscv_iommu_napot_page_mask(hwaddr ppn, h= waddr addr, hwaddr *out) static int riscv_iommu_spa_fetch(RISCVIOMMUState *s, RISCVIOMMUContext *ct= x, IOMMUTLBEntry *iotlb) { - IOMMUAccessFlags pte_perm; + IOMMUAccessFlags trans_perm =3D IOMMU_NONE; dma_addr_t addr, base; uint64_t satp, gatp, pte; bool en_s, en_g; @@ -298,6 +298,14 @@ static int riscv_iommu_spa_fetch(RISCVIOMMUState *s, R= ISCVIOMMUContext *ctx, } pass; MemTxResult ret; bool pv =3D !!ctx->process_id; + /* + * Keep the request permission separate from iotlb->perm. G-stage + * walks translate S-stage PTE addresses before the real leaf is + * reached, but permission checks and fault types must still use the + * original request. A successful walk leaves iotlb->perm with the + * effective leaf permission for the translation cache. + */ + const IOMMUAccessFlags req_perm =3D iotlb->perm; =20 satp =3D get_field(ctx->satp, RISCV_IOMMU_ATP_MODE_FIELD); gatp =3D get_field(ctx->gatp, RISCV_IOMMU_ATP_MODE_FIELD); @@ -316,7 +324,7 @@ static int riscv_iommu_spa_fetch(RISCVIOMMUState *s, RI= SCVIOMMUContext *ctx, * means we can't do an early MSI check unless we have * strictly !en_s. */ - if (!en_s && (iotlb->perm & IOMMU_WO) && + if (!en_s && (req_perm & IOMMU_WO) && riscv_iommu_msi_check(s, ctx, iotlb->iova)) { iotlb->target_as =3D &s->trap_as; iotlb->translated_addr =3D iotlb->iova; @@ -434,13 +442,13 @@ static int riscv_iommu_spa_fetch(RISCVIOMMUState *s, = RISCVIOMMUContext *ctx, masked_msbs =3D (addr >> (va_len - 1)) & mask; =20 if (masked_msbs !=3D 0 && masked_msbs !=3D mask) { - return (iotlb->perm & IOMMU_WO) ? + return (req_perm & IOMMU_WO) ? RISCV_IOMMU_FQ_CAUSE_WR_FAULT_S : RISCV_IOMMU_FQ_CAUSE_RD_FAULT_S; } } else { if ((addr & va_mask) !=3D addr) { - return (iotlb->perm & IOMMU_WO) ? + return (req_perm & IOMMU_WO) ? RISCV_IOMMU_FQ_CAUSE_WR_FAULT_VS : RISCV_IOMMU_FQ_CAUSE_RD_FAULT_VS; } @@ -465,8 +473,8 @@ static int riscv_iommu_spa_fetch(RISCVIOMMUState *s, RI= SCVIOMMUContext *ctx, MEMTXATTRS_UNSPECIFIED); } if (ret !=3D MEMTX_OK) { - return (iotlb->perm & IOMMU_WO) ? RISCV_IOMMU_FQ_CAUSE_WR_FAULT - : RISCV_IOMMU_FQ_CAUSE_RD_FAUL= T; + return (req_perm & IOMMU_WO) ? RISCV_IOMMU_FQ_CAUSE_WR_FAULT + : RISCV_IOMMU_FQ_CAUSE_RD_FAULT; } =20 sc[pass].step++; @@ -491,13 +499,13 @@ static int riscv_iommu_spa_fetch(RISCVIOMMUState *s, = RISCVIOMMUContext *ctx, * non-user mode leaf PTE and !pv we need to fault. */ break; - } else if ((iotlb->perm & IOMMU_RO) && !(pte & PTE_R)) { + } else if ((req_perm & IOMMU_RO) && !(pte & PTE_R)) { break; /* Read access check failed */ - } else if ((iotlb->perm & IOMMU_WO) && !(pte & PTE_W)) { + } else if ((req_perm & IOMMU_WO) && !(pte & PTE_W)) { break; /* Write access check failed */ } else if (!ade && !(pte & PTE_A)) { break; /* Access bit not set */ - } else if ((iotlb->perm & IOMMU_WO) && !ade && !(pte & PTE_D)) { + } else if ((req_perm & IOMMU_WO) && !ade && !(pte & PTE_D)) { break; /* Dirty bit not set */ } else if (pass =3D=3D G_STAGE && !(pte & PTE_U)) { /* @@ -532,21 +540,20 @@ static int riscv_iommu_spa_fetch(RISCVIOMMUState *s, = RISCVIOMMUContext *ctx, addr =3D iotlb->iova; continue; } + + /* Cache the effective permission, not this request's subset. = */ + IOMMUAccessFlags leaf_perm =3D (pte & PTE_W) ? + ((pte & PTE_R) ? IOMMU_RW : IOMMU= _WO) : + IOMMU_RO; + + trans_perm =3D trans_perm =3D=3D IOMMU_NONE ? + leaf_perm : trans_perm & leaf_perm; + /* Translation phase completed (GPA or SPA) */ iotlb->translated_addr =3D base; =20 - /* - * Do a bit_and between the PTE bits and the original - * request flags to determine the exact permission we - * need, i.e. if the original request is RO and the - * PTE has RW flags the actual perm is RO. - */ - pte_perm =3D (pte & PTE_W) ? ((pte & PTE_R) ? IOMMU_RW : IOMMU= _WO) - : IOMMU_RO; - iotlb->perm &=3D pte_perm; - /* Check MSI GPA address match */ - if (pass =3D=3D S_STAGE && (iotlb->perm & IOMMU_WO) && + if (pass =3D=3D S_STAGE && (req_perm & IOMMU_WO) && riscv_iommu_msi_check(s, ctx, base)) { /* Trap MSI writes and return GPA address. */ iotlb->target_as =3D &s->trap_as; @@ -563,6 +570,7 @@ static int riscv_iommu_spa_fetch(RISCVIOMMUState *s, RI= SCVIOMMUContext *ctx, continue; } =20 + iotlb->perm =3D trans_perm; return 0; } =20 @@ -587,7 +595,7 @@ static int riscv_iommu_spa_fetch(RISCVIOMMUState *s, RI= SCVIOMMUContext *ctx, */ iotlb->translated_addr =3D addr; =20 - return (iotlb->perm & IOMMU_WO) ? + return (req_perm & IOMMU_WO) ? (pass ? RISCV_IOMMU_FQ_CAUSE_WR_FAULT_VS : RISCV_IOMMU_FQ_CAUSE_WR_FAULT_S) : (pass ? RISCV_IOMMU_FQ_CAUSE_RD_FAULT_VS : --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550873; cv=none; d=zohomail.com; s=zohoarc; b=WRYnwSqYhX22E/Ffa7NxLI2u88Vb26X0H9MQpsmf9dVKEgc7ux4bIEtA1ZuhAQ3ofALWx/MfluKFW21a1xmd7edRwPOLhMrPFpl/PwD59cCa3bTKuNu/CUkE355mj+39u66nheeKnRAHWGl4wDyv6N2JUwXwHD7GevZIijwpGyU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550873; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=8ZvrE0OJGfngMr7vtDZpzHvPZXdScoco3DbqKgkdkXM=; b=MGVnjrUHrdA1R/E7KpG6xnHQJtn1gd8gH0INnFJZ5z54IBJzgdEP80GvR8U2IKom/tlpVulYf4IjVMfyLYWwQ1mjGeOo8Oj0EN5/eCBU3rfPMnJnKl80UBeLDwmLM1luPpwK8iA/cVS3uJUc/VKpvkYpXCKlJBscQIjzNjr/SZs= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550873714212.93977249784677; Sun, 23 Aug 2026 22:54:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNa0-0003S9-18; Mon, 24 Aug 2026 01:50:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNZQ-0002G6-8F for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:10 -0400 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNZO-0002BS-49 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:07 -0400 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-2ceaf8a1265so34603035ad.2 for ; Sun, 23 Aug 2026 22:50:05 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550604; x=1788155404; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=8ZvrE0OJGfngMr7vtDZpzHvPZXdScoco3DbqKgkdkXM=; b=CbpKI9cqL+GcnTM8Swln6n4n4Kjl2Ik8QPZzhvtx7aii7O9d6wSHFY/MsDVIC0Kyci gx7yzsNaIbTROl/UI6DQLF1q76kuI8scpKy6a+fN1zemx4XyK199JzkABdI5RKCRrUMM UEomlK23wNpMnbg6S0JwmBgznfxzvtSshVOVvX0NG2JTtykz+m8WlR2aSbvI74tsUL3R KY0XPiTGYCrtL6ROTWz0QTlSZerQQvnKZWtZzSjl5GQqfGOxlnPLn+HETvhxhu4cgOAA LAywJIv3GiZjqrQ0ALeoUDCoZ5kXjvM5/9ksBEbqfWlsSttY0y4r0UZm0o4nZaZ/jYQW 0FKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550604; x=1788155404; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=8ZvrE0OJGfngMr7vtDZpzHvPZXdScoco3DbqKgkdkXM=; b=pVqsqK00WXxiyDM3FQSowziCFJ/1N8cOm5RFC+kPRg/Lp8vzkQ58w0Lt8TqcDqXRI1 fAn19O4dVZ/HTWwn0rrD5aQsWchQH/vwJIuSeJ/546rEqCv1JiemiQNNQIAaxMFe+UBT N1IeCjx9d04hA33k0vTR7qX3pgQULU8QHWQCrX4rXGBIauCEv/2OSSQroD8xcUT9e44N 36DQPKcQTcRHprm+MWL9m4DhKvMhyPNxNg6nDaMFOv7YO/PDImpfO9mbTjmnwyoHekq7 Yqth9B1b5leHiajhCmWsXSEQ5/cPjGtxuFrKpXI2cZ7v2RijGPt3SKC956QRFf4wuGJ9 IkjQ== X-Gm-Message-State: AFuF++keaWKv+IRn48mN3xfIhY4vIzjeSexVhtGnqVrd9k+rPn31v4BP 2kxSuvQkslBF1E2iIfrPy6dGL+JFDVkONEWT2vbtlT7Bd2ZykCkUbclsLHW+Iw== X-Gm-Gg: AR+sD10bZ7BYbFG7NRNSnrhifiIzrQ/cIeYnVC6fqJf0CkEkLKDJDYMPmn1rZZNXNPs b78SIyBl5K5nNqppzQttPQhk9N8+CgkWbRmaTK/XirD7Av710FLo1Fkx2dEsM0AXJqaQov81kaA 6SxJaU+SbeMybHJzAHIQpHpy6GS+iH2uQj45z75TiUIehYoABrG9qVFASbol+6EkBG+bdHGE/xW 8T9N07tjbbQWUe8IfHUaoasvlkFO9dql2Osn7Gmx4VdEDSnWxfgVu7ivqfnNqYIqDvCv0F6aLES KlBXuH7AMp7jTpmG7S2CBuRrekoWWi6WJqCp03nGw9JVqAe9c/v/0AH8ulgG+XP2SpmmZfdChet 72ksqAq/L6JPZA1+N1N1N4IIxq8+JiegkOW3Obiy12InNVH2dop8kKROYY0hhaMNz/Ep4cqHBDS 4CKN3rbKWeg7p6bg17zszYIlZcomS0EH9NwL8fatsZBXq/fyTM2gDLDtghgilgI2h8Hc8mX9HVk jdj/Q== X-Received: by 2002:a17:90b:4a81:b0:381:a766:efcb with SMTP id 98e67ed59e1d1-395c34fed98mr37548683a91.4.1787550603960; Sun, 23 Aug 2026 22:50:03 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: A-Shehab , Daniel Henrique Barboza , Alistair Francis Subject: [PULL v2 33/96] target/riscv: allow menvcfg/henvcfg LPE and SSE bits on RV32 Date: Mon, 24 Aug 2026 15:47:03 +1000 Message-ID: <20260824054806.2790041-34-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::631; envelope-from=alistair23@gmail.com; helo=mail-pl1-x631.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550875843158500 Content-Type: text/plain; charset="utf-8" From: A-Shehab The Zicfilp landing-pad enable (LPE, bit 2) and Zicfiss shadow-stack enable (SSE, bit 3) controls live in the low 32 bits of menvcfg and henvcfg, and the CFI specification defines them for both RV32 and RV64. QEMU only adds MENVCFG_LPE/MENVCFG_SSE (and the henvcfg equivalents) to the writable mask inside the "riscv_cpu_mxl(env) =3D=3D MXL_RV64" block, so on RV32 these bits are silently dropped and the features cannot be enabled. This is inconsistent with write_senvcfg(), which already handles SENVCFG_LPE/SENVCFG_SSE regardless of MXLEN. Hoist the LPE/SSE mask handling out of the RV64-only block in write_menvcfg() and write_henvcfg() so the bits become writable on RV32 as well. The upper-half writers (write_menvcfgh/write_henvcfgh) are unaffected because these bits reside in the low 32 bits. Reproducible on qemu-system-riscv32 -cpu rv32,zicfilp=3Dtrue,zicfiss=3Dtrue: an M-mode write of menvcfg.{LPE,SSE} reads back as zero, while the same program on rv64 keeps the bits set. Fixes: 4923f672e3d7 ("target/riscv: Introduce elp state and enabling contro= ls for zicfilp") Fixes: 8205bc127a83 ("target/riscv: introduce ssp and enabling controls for= zicfiss") Resolves: https://gitlab.com/qemu-project/qemu/-/issues/4045 Signed-off-by: A-Shehab Reviewed-by: Daniel Henrique Barboza Message-ID: <20260726080537.13913-1-ahshehab24@gmail.com> Signed-off-by: Alistair Francis --- target/riscv/tcg/csr.c | 45 +++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/target/riscv/tcg/csr.c b/target/riscv/tcg/csr.c index a90449b87f..ffd751caa5 100644 --- a/target/riscv/tcg/csr.c +++ b/target/riscv/tcg/csr.c @@ -3221,6 +3221,19 @@ static RISCVException write_menvcfg(CPURISCVState *e= nv, int csrno, MENVCFG_CBZE; bool stce_changed =3D false; =20 + /* + * menvcfg.LPE (Zicfilp) and menvcfg.SSE (Zicfiss) reside in the low + * 32 bits and are defined for both RV32 and RV64, so they must be + * writable regardless of MXLEN. + */ + if (cfg->ext_zicfilp) { + mask |=3D MENVCFG_LPE; + } + + if (cfg->ext_zicfiss) { + mask |=3D MENVCFG_SSE; + } + if (riscv_cpu_mxl(env) =3D=3D MXL_RV64) { mask |=3D (cfg->ext_svpbmt ? MENVCFG_PBMTE : 0) | (cfg->ext_sstc ? MENVCFG_STCE : 0) | @@ -3228,14 +3241,6 @@ static RISCVException write_menvcfg(CPURISCVState *e= nv, int csrno, (cfg->ext_svadu ? MENVCFG_ADUE : 0) | (cfg->ext_ssdbltrp ? MENVCFG_DTE : 0); =20 - if (env_archcpu(env)->cfg.ext_zicfilp) { - mask |=3D MENVCFG_LPE; - } - - if (env_archcpu(env)->cfg.ext_zicfiss) { - mask |=3D MENVCFG_SSE; - } - /* Update PMM field only if the value is valid according to Zjpm v= 1.0 */ if (env_archcpu(env)->cfg.ext_smnpm && get_field(val, MENVCFG_PMM) !=3D PMM_FIELD_RESERVED) { @@ -3383,20 +3388,24 @@ static RISCVException write_henvcfg(CPURISCVState *= env, int csrno, return ret; } =20 + /* + * henvcfg.LPE (Zicfilp) and henvcfg.SSE (Zicfiss) reside in the low + * 32 bits and are defined for both RV32 and RV64, so they must be + * writable regardless of MXLEN. + */ + if (cfg->ext_zicfilp) { + mask |=3D HENVCFG_LPE; + } + + /* H can light up SSE for VS only if HS had it from menvcfg */ + if (cfg->ext_zicfiss && get_field(env->menvcfg, MENVCFG_SSE)) { + mask |=3D HENVCFG_SSE; + } + if (riscv_cpu_mxl(env) =3D=3D MXL_RV64) { mask |=3D env->menvcfg & (HENVCFG_PBMTE | HENVCFG_STCE | HENVCFG_A= DUE | HENVCFG_DTE); =20 - if (env_archcpu(env)->cfg.ext_zicfilp) { - mask |=3D HENVCFG_LPE; - } - - /* H can light up SSE for VS only if HS had it from menvcfg */ - if (env_archcpu(env)->cfg.ext_zicfiss && - get_field(env->menvcfg, MENVCFG_SSE)) { - mask |=3D HENVCFG_SSE; - } - /* Update PMM field only if the value is valid according to Zjpm v= 1.0 */ if (env_archcpu(env)->cfg.ext_ssnpm && get_field(val, HENVCFG_PMM) !=3D PMM_FIELD_RESERVED) { --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551285; cv=none; d=zohomail.com; s=zohoarc; b=ENUFNMOvMllF1VkF4Us5+5kJ9ipIZLemTA3PPYzditBpKUX2yZv5WnxnNi2T/GzMENEVo/sSnMpvx0qMzF6F4jWZ/xaPcd1Uq32ALd4orQpG2995f59F/AsRRz8JSlZ9pxrW5bcPD1+jPs1FssQrsYnfPsKx8oNTH6P3yV9z//s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551285; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=YDe9QslZfKvhuINTOB9JrcuDeFDRZ6aQd6kbXZ9uq/w=; b=HWkqHjGCnDfcT7iKp1AewudE6UNOH/5/1tBbObdeNMcAIDzA9TRRw8ZKo/z2/duvFSBJoDVIpcM8JCgi0f/NvAusluHOR67/WY58PBBPI1atqlKmr32Z1jlZ50635utG9s5jq81RvOfURhn5KbrcGDL/1uGv9Qj3kBDOLV3c+3o= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551285049888.6345951516485; Sun, 23 Aug 2026 23:01:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNao-0004UA-VI; Mon, 24 Aug 2026 01:51:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNZT-0002MO-BP for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:11 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNZQ-0002Co-FS for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:11 -0400 Received: by mail-pj1-x102f.google.com with SMTP id 98e67ed59e1d1-39266382df6so2397771a91.3 for ; Sun, 23 Aug 2026 22:50:07 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550607; x=1788155407; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=YDe9QslZfKvhuINTOB9JrcuDeFDRZ6aQd6kbXZ9uq/w=; b=Q0/ntjh+yOnBxvxFVfjH3YLk1iaXD/Nh85KVc3DY0nWrC4wXIwpdtVQFMMwZl1QbSr jw/WhtV7R+zYqOGrxUvibORa6oc03BmCpa6dTaSV+cJWBLLv0at2f2SVnIQZJW8AnqvO esgNnaCug5gENMSJOsfOIQ1UUUuOp/o4gvctLDcZA5CrxhQZtTrUoHkm5vnePkCgiwnG kfsZ3hqyqWsNaow8rxcN76NwtV7yRzbd2zSC7pNm2kKQfvrb9hPi2xKVF+VfHIs8MjuN DeSbAsZjj8IC8/wRyDvgheNlUO2Ki5Yv4HlFoXoU3OphhAGJ5mczneUOVCQ5BjZohXqn fE4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550607; x=1788155407; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=YDe9QslZfKvhuINTOB9JrcuDeFDRZ6aQd6kbXZ9uq/w=; b=DWvzYTS9BE/Zx/A271qqrXPzIH94ZEBsE3P57qZBPePqjPCBgfYKEFbGqLsFXwbt8F Q3eLUkDuS3Th97/TGnge/8sBQFfirExzp48hS0j0viWghtH7E9E2g5/NAdKGhUQ2JOyh Cjtc2RImGtAfSnN0geKqbe1B99sUCxQo910JeNTdcAa7gjg7EmR8gcnNLbxvKROMeqtB BUysSrvMxRfQLggG3JmW75cm61jSF0iDdEMBO6MiV6pP9qszU8WGZDukIdEi2pMq/yNX UYcI2JumVDNrXI5XiZIvjPP3CPVm3FKKqdWKdH75bIhQCqvMQF5YongLKQ+kTSLBWl3u y0lg== X-Gm-Message-State: AFuF++km3mUgSfbL8Fxz8OpwazeGGm/QFsXrMLVp1QXmkapEF0i1+/xu 7ZyGhSSeQsjCgJysog3xIzJhFDq+MCjMUwDPz8YoNqmjJY0gQZD0cdvspT+g8g== X-Gm-Gg: AR+sD12v/Gv6WKwrnk/dAJhns9dZx55jbGxjKxKlsCVt9+Mk3FU8Z8dk8z9NG86Ol+c kigfVv4kwsKhl9H1IoJo787sa1y7mC7cRCpC017hJ6Y5MWB1R7OGBvgOW3Jspggy5ig7w9XzZG5 mtgHy/ViyB/oQ20E/ezTp8ndTOp0Wer5LPFTY6rNbZgOjaB6OF0Uj7TuYKjCXggnBljLhUCwUTh FU0Cob6gtfDM0KywfBqevAU8Ih2LPtntrzKlw4mRpPLrxiWSDwU6CEuQSknol84oA4AaglALlZC OAShjujD/SGLovp0VEXiajbgO1woQFyg2uJn1jyD8SSIT9tX4dFv5UJU57/oo4iBJdkS6ZSF74U 0ja0DlnJWG8tv467ugT2ZaL6uiUWYxcdoyYaz3qLORd19AYRPUIv6uqGA1kNtxbtrsZa3JIURVF GL04QNiDtsQTnCq16zweEh4N82NCvM2E7wapgWvVQQ0szGt/OzriWQ7OdDw1YzZjXRk+0NR5Clz AyZ96EbCHVAjJXF X-Received: by 2002:a17:90b:3d85:b0:392:c80b:8eff with SMTP id 98e67ed59e1d1-395c3573af2mr42011934a91.11.1787550606879; Sun, 23 Aug 2026 22:50:06 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 34/96] disas/riscv: Move operand extractors earlier in file Date: Mon, 24 Aug 2026 15:47:04 +1000 Message-ID: <20260824054806.2790041-35-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102f; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102f.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551285672158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-2-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 870 +++++++++++++++++++++++++------------------------- 1 file changed, 435 insertions(+), 435 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index 2ba0a6a73a..e3fbc26626 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1259,6 +1259,401 @@ static const rv_comp_data rvcp_fsgnjx_q[] =3D { { rv_op_illegal, NULL } }; =20 +/* operand extractors */ + +static uint32_t operand_rd(rv_inst inst) +{ + return extract32(inst, 7, 5); +} + +static uint32_t operand_rs1(rv_inst inst) +{ + return extract32(inst, 15, 5); +} + +static uint32_t operand_rs2(rv_inst inst) +{ + return extract32(inst, 20, 5); +} + +static uint32_t operand_rs3(rv_inst inst) +{ + return extract32(inst, 27, 5); +} + +static uint32_t operand_aq(rv_inst inst) +{ + return extract32(inst, 26, 1); +} + +static uint32_t operand_rl(rv_inst inst) +{ + return extract32(inst, 25, 1); +} + +static uint32_t operand_pred(rv_inst inst) +{ + return extract32(inst, 24, 4); +} + +static uint32_t operand_succ(rv_inst inst) +{ + return extract32(inst, 20, 4); +} + +static uint32_t operand_rm(rv_inst inst) +{ + return extract32(inst, 12, 3); +} + +static uint32_t operand_shamt5(rv_inst inst) +{ + return extract32(inst, 20, 5); +} + +static uint32_t operand_shamt6(rv_inst inst) +{ + return extract32(inst, 20, 6); +} + +static uint32_t operand_shamt7(rv_inst inst) +{ + return extract32(inst, 20, 7); +} + +static uint32_t operand_crdq(rv_inst inst) +{ + return extract32(inst, 2, 3); +} + +static uint32_t operand_crs1q(rv_inst inst) +{ + return extract32(inst, 7, 3); +} + +static uint32_t operand_crs1rdq(rv_inst inst) +{ + return extract32(inst, 7, 3); +} + +static uint32_t operand_crs2q(rv_inst inst) +{ + return extract32(inst, 2, 3); +} + +static uint32_t calculate_xreg(uint32_t sreg) +{ + return sreg < 2 ? sreg + 8 : sreg + 16; +} + +static uint32_t operand_sreg1(rv_inst inst) +{ + return calculate_xreg(extract32(inst, 7, 3)); +} + +static uint32_t operand_sreg2(rv_inst inst) +{ + return calculate_xreg(extract32(inst, 2, 3)); +} + +static uint32_t operand_crd(rv_inst inst) +{ + return extract32(inst, 7, 5); +} + +static uint32_t operand_crs1(rv_inst inst) +{ + return extract32(inst, 7, 5); +} + +static uint32_t operand_crs1rd(rv_inst inst) +{ + return extract32(inst, 7, 5); +} + +static uint32_t operand_crs2(rv_inst inst) +{ + return extract32(inst, 2, 5); +} + +static uint32_t operand_cimmsh5(rv_inst inst) +{ + return extract32(inst, 2, 5); +} + +static uint32_t operand_csr12(rv_inst inst) +{ + return extract32(inst, 20, 12); +} + +static int32_t operand_imm12(rv_inst inst) +{ + return sextract32(inst, 20, 12); +} + +static int32_t operand_imm20(rv_inst inst) +{ + return sextract32(inst, 12, 20) << 12; +} + +static int32_t operand_jimm20(rv_inst inst) +{ + return sextract32(inst, 31, 1) << 20 | + extract32(inst, 21, 10) << 1 | + extract32(inst, 20, 1) << 11 | + extract32(inst, 12, 8) << 12; +} + +static int32_t operand_simm12(rv_inst inst) +{ + return sextract32(inst, 25, 7) << 5 | + extract32(inst, 7, 5); +} + +static int32_t operand_sbimm12(rv_inst inst) +{ + return sextract32(inst, 31, 1) << 12 | + extract32(inst, 25, 6) << 5 | + extract32(inst, 8, 4) << 1 | + extract32(inst, 7, 1) << 11; +} + +static uint32_t operand_cimmshl6(rv_inst inst, rv_isa isa) +{ + int imm =3D extract32(inst, 12, 1) << 5 | + extract32(inst, 2, 5); + if (isa =3D=3D rv128) { + imm =3D imm ? imm : 64; + } + return imm; +} + +static uint32_t operand_cimmshr6(rv_inst inst, rv_isa isa) +{ + int imm =3D extract32(inst, 12, 1) << 5 | + extract32(inst, 2, 5); + if (isa =3D=3D rv128) { + imm =3D imm | (imm & 32) << 1; + imm =3D imm ? imm : 64; + } + return imm; +} + +static int32_t operand_cimmi(rv_inst inst) +{ + return sextract32(inst, 12, 1) << 5 | + extract32(inst, 2, 5); +} + +static int32_t operand_cimmui(rv_inst inst) +{ + return sextract32(inst, 12, 1) << 17 | + extract32(inst, 2, 5) << 12; +} + +static uint32_t operand_cimmlwsp(rv_inst inst) +{ + return extract32(inst, 12, 1) << 5 | + extract32(inst, 4, 3) << 2 | + extract32(inst, 2, 2) << 6; +} + +static uint32_t operand_cimmldsp(rv_inst inst) +{ + return extract32(inst, 12, 1) << 5 | + extract32(inst, 5, 2) << 3 | + extract32(inst, 2, 3) << 6; +} + +static uint32_t operand_cimmlqsp(rv_inst inst) +{ + return extract32(inst, 12, 1) << 5 | + extract32(inst, 6, 1) << 4 | + extract32(inst, 2, 4) << 6; +} + +static int32_t operand_cimm16sp(rv_inst inst) +{ + return sextract32(inst, 12, 1) << 9 | + extract32(inst, 6, 1) << 4 | + extract32(inst, 5, 1) << 6 | + extract32(inst, 3, 2) << 7 | + extract32(inst, 2, 1) << 5; +} + +static int32_t operand_cimmj(rv_inst inst) +{ + return sextract32(inst, 12, 1) << 11 | + extract32(inst, 11, 1) << 4 | + extract32(inst, 9, 2) << 8 | + extract32(inst, 8, 1) << 10 | + extract32(inst, 7, 1) << 6 | + extract32(inst, 6, 1) << 7 | + extract32(inst, 3, 3) << 1 | + extract32(inst, 2, 1) << 5; +} + +static int32_t operand_cimmb(rv_inst inst) +{ + return sextract32(inst, 12, 1) << 8 | + extract32(inst, 10, 2) << 3 | + extract32(inst, 5, 2) << 6 | + extract32(inst, 3, 2) << 1 | + extract32(inst, 2, 1) << 5; +} + +static uint32_t operand_cimmswsp(rv_inst inst) +{ + return extract32(inst, 9, 4) << 2 | + extract32(inst, 7, 2) << 6; +} + +static uint32_t operand_cimmsdsp(rv_inst inst) +{ + return extract32(inst, 10, 3) << 3 | + extract32(inst, 7, 3) << 6; +} + +static uint32_t operand_cimmsqsp(rv_inst inst) +{ + return extract32(inst, 11, 2) << 4 | + extract32(inst, 7, 4) << 6; +} + +static uint32_t operand_cimm4spn(rv_inst inst) +{ + return extract32(inst, 11, 2) << 4 | + extract32(inst, 7, 4) << 6 | + extract32(inst, 6, 1) << 2 | + extract32(inst, 5, 1) << 3; +} + +static uint32_t operand_cimmw(rv_inst inst) +{ + return extract32(inst, 10, 3) << 3 | + extract32(inst, 6, 1) << 2 | + extract32(inst, 5, 1) << 6; +} + +static uint32_t operand_cimmd(rv_inst inst) +{ + return extract32(inst, 10, 3) << 3 | + extract32(inst, 5, 2) << 6; +} + +static uint32_t operand_cimmq(rv_inst inst) +{ + return extract32(inst, 11, 2) << 4 | + extract32(inst, 10, 1) << 8 | + extract32(inst, 5, 2) << 6; +} + +static int32_t operand_vimm(rv_inst inst) +{ + return sextract32(inst, 15, 5); +} + +static uint32_t operand_vuimm(rv_inst inst) +{ + return extract32(inst, 15, 5); +} + +static uint32_t operand_vzimm11(rv_inst inst) +{ + return extract32(inst, 20, 11); +} + +static uint32_t operand_vzimm10(rv_inst inst) +{ + return extract32(inst, 20, 10); +} + +static uint32_t operand_vzimm6(rv_inst inst) +{ + return extract32(inst, 26, 1) << 5 | + extract32(inst, 15, 5); +} + +static uint32_t operand_bs(rv_inst inst) +{ + return extract32(inst, 30, 2); +} + +static uint32_t operand_rnum(rv_inst inst) +{ + return extract32(inst, 20, 4); +} + +static uint32_t operand_vm(rv_inst inst) +{ + return extract32(inst, 25, 1); +} + +static uint32_t operand_uimm_c_lb(rv_inst inst) +{ + return extract32(inst, 5, 1) << 1 | + extract32(inst, 6, 1); +} + +static uint32_t operand_uimm_c_lh(rv_inst inst) +{ + return extract32(inst, 5, 1) << 1; +} + +static uint32_t operand_zcmp_spimm(rv_inst inst) +{ + return extract32(inst, 2, 2) << 4; +} + +static uint32_t operand_zcmp_rlist(rv_inst inst) +{ + return extract32(inst, 4, 4); +} + +static uint32_t operand_imm6(rv_inst inst) +{ + return extract32(inst, 20, 6); +} + +static uint32_t operand_imm2(rv_inst inst) +{ + return extract32(inst, 25, 2); +} + +static uint32_t operand_immh(rv_inst inst) +{ + return extract32(inst, 26, 6); +} + +static uint32_t operand_imml(rv_inst inst) +{ + return extract32(inst, 20, 6); +} + +static uint32_t calculate_stack_adj(rv_isa isa, uint32_t rlist, uint32_t s= pimm) +{ + int xlen_bytes_log2 =3D isa =3D=3D rv64 ? 3 : 2; + int regs =3D rlist =3D=3D 15 ? 13 : rlist - 3; + uint32_t stack_adj_base =3D ROUND_UP(regs << xlen_bytes_log2, 16); + return stack_adj_base + spimm; +} + +static uint32_t operand_zcmp_stack_adj(rv_inst inst, rv_isa isa) +{ + return calculate_stack_adj(isa, operand_zcmp_rlist(inst), + operand_zcmp_spimm(inst)); +} + +static uint32_t operand_tbl_index(rv_inst inst) +{ + return extract32(inst, 2, 8); +} + +static uint32_t operand_lpl(rv_inst inst) +{ + return extract32(inst, 12, 20); +} + /* instruction metadata */ =20 const rv_opcode_data rvi_opcode_data[] =3D { @@ -4155,442 +4550,47 @@ static void decode_inst_opcode(rv_decode *dec, rv_= isa isa) case 2: op =3D rv_op_vaesem_vv; break; case 3: op =3D rv_op_vaesef_vv; break; case 16: op =3D rv_op_vsm4r_vv; break; - case 17: op =3D rv_op_vgmul_vv; break; - } - break; - case 41: - switch ((inst >> 15) & 0b11111) { - case 0: op =3D rv_op_vaesdm_vs; break; - case 1: op =3D rv_op_vaesdf_vs; break; - case 2: op =3D rv_op_vaesem_vs; break; - case 3: op =3D rv_op_vaesef_vs; break; - case 7: op =3D rv_op_vaesz_vs; break; - case 16: op =3D rv_op_vsm4r_vs; break; - } - break; - case 42: op =3D rv_op_vaeskf2_vi; break; - case 43: op =3D rv_op_vsm3c_vi; break; - case 44: op =3D rv_op_vghsh_vv; break; - case 45: op =3D rv_op_vsha2ms_vv; break; - case 46: op =3D rv_op_vsha2ch_vv; break; - case 47: op =3D rv_op_vsha2cl_vv; break; - } - } - break; - case 30: - switch (((inst >> 22) & 0b1111111000) | - ((inst >> 12) & 0b0000000111)) { - case 0: op =3D rv_op_addd; break; - case 1: op =3D rv_op_slld; break; - case 5: op =3D rv_op_srld; break; - case 8: op =3D rv_op_muld; break; - case 12: op =3D rv_op_divd; break; - case 13: op =3D rv_op_divud; break; - case 14: op =3D rv_op_remd; break; - case 15: op =3D rv_op_remud; break; - case 256: op =3D rv_op_subd; break; - case 261: op =3D rv_op_srad; break; - } - break; - } - break; - } - dec->op =3D op; -} - -/* operand extractors */ - -static uint32_t operand_rd(rv_inst inst) -{ - return extract32(inst, 7, 5); -} - -static uint32_t operand_rs1(rv_inst inst) -{ - return extract32(inst, 15, 5); -} - -static uint32_t operand_rs2(rv_inst inst) -{ - return extract32(inst, 20, 5); -} - -static uint32_t operand_rs3(rv_inst inst) -{ - return extract32(inst, 27, 5); -} - -static uint32_t operand_aq(rv_inst inst) -{ - return extract32(inst, 26, 1); -} - -static uint32_t operand_rl(rv_inst inst) -{ - return extract32(inst, 25, 1); -} - -static uint32_t operand_pred(rv_inst inst) -{ - return extract32(inst, 24, 4); -} - -static uint32_t operand_succ(rv_inst inst) -{ - return extract32(inst, 20, 4); -} - -static uint32_t operand_rm(rv_inst inst) -{ - return extract32(inst, 12, 3); -} - -static uint32_t operand_shamt5(rv_inst inst) -{ - return extract32(inst, 20, 5); -} - -static uint32_t operand_shamt6(rv_inst inst) -{ - return extract32(inst, 20, 6); -} - -static uint32_t operand_shamt7(rv_inst inst) -{ - return extract32(inst, 20, 7); -} - -static uint32_t operand_crdq(rv_inst inst) -{ - return extract32(inst, 2, 3); -} - -static uint32_t operand_crs1q(rv_inst inst) -{ - return extract32(inst, 7, 3); -} - -static uint32_t operand_crs1rdq(rv_inst inst) -{ - return extract32(inst, 7, 3); -} - -static uint32_t operand_crs2q(rv_inst inst) -{ - return extract32(inst, 2, 3); -} - -static uint32_t calculate_xreg(uint32_t sreg) -{ - return sreg < 2 ? sreg + 8 : sreg + 16; -} - -static uint32_t operand_sreg1(rv_inst inst) -{ - return calculate_xreg(extract32(inst, 7, 3)); -} - -static uint32_t operand_sreg2(rv_inst inst) -{ - return calculate_xreg(extract32(inst, 2, 3)); -} - -static uint32_t operand_crd(rv_inst inst) -{ - return extract32(inst, 7, 5); -} - -static uint32_t operand_crs1(rv_inst inst) -{ - return extract32(inst, 7, 5); -} - -static uint32_t operand_crs1rd(rv_inst inst) -{ - return extract32(inst, 7, 5); -} - -static uint32_t operand_crs2(rv_inst inst) -{ - return extract32(inst, 2, 5); -} - -static uint32_t operand_cimmsh5(rv_inst inst) -{ - return extract32(inst, 2, 5); -} - -static uint32_t operand_csr12(rv_inst inst) -{ - return extract32(inst, 20, 12); -} - -static int32_t operand_imm12(rv_inst inst) -{ - return sextract32(inst, 20, 12); -} - -static int32_t operand_imm20(rv_inst inst) -{ - return sextract32(inst, 12, 20) << 12; -} - -static int32_t operand_jimm20(rv_inst inst) -{ - return sextract32(inst, 31, 1) << 20 | - extract32(inst, 21, 10) << 1 | - extract32(inst, 20, 1) << 11 | - extract32(inst, 12, 8) << 12; -} - -static int32_t operand_simm12(rv_inst inst) -{ - return sextract32(inst, 25, 7) << 5 | - extract32(inst, 7, 5); -} - -static int32_t operand_sbimm12(rv_inst inst) -{ - return sextract32(inst, 31, 1) << 12 | - extract32(inst, 25, 6) << 5 | - extract32(inst, 8, 4) << 1 | - extract32(inst, 7, 1) << 11; -} - -static uint32_t operand_cimmshl6(rv_inst inst, rv_isa isa) -{ - int imm =3D extract32(inst, 12, 1) << 5 | - extract32(inst, 2, 5); - if (isa =3D=3D rv128) { - imm =3D imm ? imm : 64; - } - return imm; -} - -static uint32_t operand_cimmshr6(rv_inst inst, rv_isa isa) -{ - int imm =3D extract32(inst, 12, 1) << 5 | - extract32(inst, 2, 5); - if (isa =3D=3D rv128) { - imm =3D imm | (imm & 32) << 1; - imm =3D imm ? imm : 64; + case 17: op =3D rv_op_vgmul_vv; break; + } + break; + case 41: + switch ((inst >> 15) & 0b11111) { + case 0: op =3D rv_op_vaesdm_vs; break; + case 1: op =3D rv_op_vaesdf_vs; break; + case 2: op =3D rv_op_vaesem_vs; break; + case 3: op =3D rv_op_vaesef_vs; break; + case 7: op =3D rv_op_vaesz_vs; break; + case 16: op =3D rv_op_vsm4r_vs; break; + } + break; + case 42: op =3D rv_op_vaeskf2_vi; break; + case 43: op =3D rv_op_vsm3c_vi; break; + case 44: op =3D rv_op_vghsh_vv; break; + case 45: op =3D rv_op_vsha2ms_vv; break; + case 46: op =3D rv_op_vsha2ch_vv; break; + case 47: op =3D rv_op_vsha2cl_vv; break; + } + } + break; + case 30: + switch (((inst >> 22) & 0b1111111000) | + ((inst >> 12) & 0b0000000111)) { + case 0: op =3D rv_op_addd; break; + case 1: op =3D rv_op_slld; break; + case 5: op =3D rv_op_srld; break; + case 8: op =3D rv_op_muld; break; + case 12: op =3D rv_op_divd; break; + case 13: op =3D rv_op_divud; break; + case 14: op =3D rv_op_remd; break; + case 15: op =3D rv_op_remud; break; + case 256: op =3D rv_op_subd; break; + case 261: op =3D rv_op_srad; break; + } + break; + } + break; } - return imm; -} - -static int32_t operand_cimmi(rv_inst inst) -{ - return sextract32(inst, 12, 1) << 5 | - extract32(inst, 2, 5); -} - -static int32_t operand_cimmui(rv_inst inst) -{ - return sextract32(inst, 12, 1) << 17 | - extract32(inst, 2, 5) << 12; -} - -static uint32_t operand_cimmlwsp(rv_inst inst) -{ - return extract32(inst, 12, 1) << 5 | - extract32(inst, 4, 3) << 2 | - extract32(inst, 2, 2) << 6; -} - -static uint32_t operand_cimmldsp(rv_inst inst) -{ - return extract32(inst, 12, 1) << 5 | - extract32(inst, 5, 2) << 3 | - extract32(inst, 2, 3) << 6; -} - -static uint32_t operand_cimmlqsp(rv_inst inst) -{ - return extract32(inst, 12, 1) << 5 | - extract32(inst, 6, 1) << 4 | - extract32(inst, 2, 4) << 6; -} - -static int32_t operand_cimm16sp(rv_inst inst) -{ - return sextract32(inst, 12, 1) << 9 | - extract32(inst, 6, 1) << 4 | - extract32(inst, 5, 1) << 6 | - extract32(inst, 3, 2) << 7 | - extract32(inst, 2, 1) << 5; -} - -static int32_t operand_cimmj(rv_inst inst) -{ - return sextract32(inst, 12, 1) << 11 | - extract32(inst, 11, 1) << 4 | - extract32(inst, 9, 2) << 8 | - extract32(inst, 8, 1) << 10 | - extract32(inst, 7, 1) << 6 | - extract32(inst, 6, 1) << 7 | - extract32(inst, 3, 3) << 1 | - extract32(inst, 2, 1) << 5; -} - -static int32_t operand_cimmb(rv_inst inst) -{ - return sextract32(inst, 12, 1) << 8 | - extract32(inst, 10, 2) << 3 | - extract32(inst, 5, 2) << 6 | - extract32(inst, 3, 2) << 1 | - extract32(inst, 2, 1) << 5; -} - -static uint32_t operand_cimmswsp(rv_inst inst) -{ - return extract32(inst, 9, 4) << 2 | - extract32(inst, 7, 2) << 6; -} - -static uint32_t operand_cimmsdsp(rv_inst inst) -{ - return extract32(inst, 10, 3) << 3 | - extract32(inst, 7, 3) << 6; -} - -static uint32_t operand_cimmsqsp(rv_inst inst) -{ - return extract32(inst, 11, 2) << 4 | - extract32(inst, 7, 4) << 6; -} - -static uint32_t operand_cimm4spn(rv_inst inst) -{ - return extract32(inst, 11, 2) << 4 | - extract32(inst, 7, 4) << 6 | - extract32(inst, 6, 1) << 2 | - extract32(inst, 5, 1) << 3; -} - -static uint32_t operand_cimmw(rv_inst inst) -{ - return extract32(inst, 10, 3) << 3 | - extract32(inst, 6, 1) << 2 | - extract32(inst, 5, 1) << 6; -} - -static uint32_t operand_cimmd(rv_inst inst) -{ - return extract32(inst, 10, 3) << 3 | - extract32(inst, 5, 2) << 6; -} - -static uint32_t operand_cimmq(rv_inst inst) -{ - return extract32(inst, 11, 2) << 4 | - extract32(inst, 10, 1) << 8 | - extract32(inst, 5, 2) << 6; -} - -static int32_t operand_vimm(rv_inst inst) -{ - return sextract32(inst, 15, 5); -} - -static uint32_t operand_vuimm(rv_inst inst) -{ - return extract32(inst, 15, 5); -} - -static uint32_t operand_vzimm11(rv_inst inst) -{ - return extract32(inst, 20, 11); -} - -static uint32_t operand_vzimm10(rv_inst inst) -{ - return extract32(inst, 20, 10); -} - -static uint32_t operand_vzimm6(rv_inst inst) -{ - return extract32(inst, 26, 1) << 5 | - extract32(inst, 15, 5); -} - -static uint32_t operand_bs(rv_inst inst) -{ - return extract32(inst, 30, 2); -} - -static uint32_t operand_rnum(rv_inst inst) -{ - return extract32(inst, 20, 4); -} - -static uint32_t operand_vm(rv_inst inst) -{ - return extract32(inst, 25, 1); -} - -static uint32_t operand_uimm_c_lb(rv_inst inst) -{ - return extract32(inst, 5, 1) << 1 | - extract32(inst, 6, 1); -} - -static uint32_t operand_uimm_c_lh(rv_inst inst) -{ - return extract32(inst, 5, 1) << 1; -} - -static uint32_t operand_zcmp_spimm(rv_inst inst) -{ - return extract32(inst, 2, 2) << 4; -} - -static uint32_t operand_zcmp_rlist(rv_inst inst) -{ - return extract32(inst, 4, 4); -} - -static uint32_t operand_imm6(rv_inst inst) -{ - return extract32(inst, 20, 6); -} - -static uint32_t operand_imm2(rv_inst inst) -{ - return extract32(inst, 25, 2); -} - -static uint32_t operand_immh(rv_inst inst) -{ - return extract32(inst, 26, 6); -} - -static uint32_t operand_imml(rv_inst inst) -{ - return extract32(inst, 20, 6); -} - -static uint32_t calculate_stack_adj(rv_isa isa, uint32_t rlist, uint32_t s= pimm) -{ - int xlen_bytes_log2 =3D isa =3D=3D rv64 ? 3 : 2; - int regs =3D rlist =3D=3D 15 ? 13 : rlist - 3; - uint32_t stack_adj_base =3D ROUND_UP(regs << xlen_bytes_log2, 16); - return stack_adj_base + spimm; -} - -static uint32_t operand_zcmp_stack_adj(rv_inst inst, rv_isa isa) -{ - return calculate_stack_adj(isa, operand_zcmp_rlist(inst), - operand_zcmp_spimm(inst)); -} - -static uint32_t operand_tbl_index(rv_inst inst) -{ - return extract32(inst, 2, 8); -} - -static uint32_t operand_lpl(rv_inst inst) -{ - return extract32(inst, 12, 20); + dec->op =3D op; } =20 /* decode operands */ --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551022; cv=none; d=zohomail.com; s=zohoarc; b=T0lcl93ZM+I8sSQ8W5dlXdSnEZujxzgcZE9Z/PL9uzRe+bAhzjthcyiL8uAJDQpxZ3QQJ5xDhY85Uiacq2sZ57VDzCk/eSIwhHR9gBkKIn56klAQHFI82OvVl69Rf7tzs2jUmlTbaCA5Dspt8ncr336SIe+oKIHA6QJeuuePZWM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551022; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qpYDuVLamBiG/Q1V6ktBM2fQXQo2lFRXtyDFj85aeY4=; b=QDRYvCegs4apvNGJVBELMdCdFfDvUdmDyArijCAbTHqr2pdKNWLgGr7j24hGPfLrKKfLrEIZ7U/GmUx1ynITsfd/X/MM/poPVtXf8AAuQg/xTXFn3Kp8EwfLmC7iPu7BWZfeoR1UnG/BaLEzlaGwSYCaY4CFvAA7jIWV+rxCFnE= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551022110861.3285891587512; Sun, 23 Aug 2026 22:57:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNah-0004RO-Cw; Mon, 24 Aug 2026 01:51:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNZU-0002Pm-VD for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:13 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNZT-0002O9-CI for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:12 -0400 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-38e7109321dso2068349a91.3 for ; Sun, 23 Aug 2026 22:50:10 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550610; x=1788155410; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=qpYDuVLamBiG/Q1V6ktBM2fQXQo2lFRXtyDFj85aeY4=; b=LeVcpwzrs3mNABH2krg+KF1ytpCu8yHnAFxgvFxoqLyJ2M7apzwQQTO6kb1nDKytT3 wSo3z1gHEdV0WMGn9fMMLWH9Dk194dwD80m6xRplRT/cMmtuelDHm9eJ59hMMUTiF+1v LSqTI0X0W5uIwVYHmg6Y/hgYq49NYIcHyJKqFS6WqnPZkT+PIntmtHscOYeeKqeaU819 rDXqHnONGOj4MEE8vcinI+bQRnBVgRMAT5ZpoADvDmvlRr37WqSInkejzgbvoAm10rqu lu0lEXin7p7fsLft+jv1Q0I/92zs8U85aPRpciWpfNBU5Ky7MnF/aNLXTBqU7tj1efxO yS0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550610; x=1788155410; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=qpYDuVLamBiG/Q1V6ktBM2fQXQo2lFRXtyDFj85aeY4=; b=PvTuX9C2FPZdTgMImfB4pkfqGW8hpGY3RuIHLUr74uFCZTsyXo1YB3lSGNlYt8HCk7 ZlBH9/cZHePTvFpn+Y/Q4/nNNzMmPhqKcQUjxnJfJXwkGlgfWM0rL6ffPFo8tz1n388I ih4VHkK266Oi0AdqY0RKq/ErffP3/bKsP2UoYEtWyR8D0uezHi8xa4M2qfrp7eE9Q6Kx uHiRXhD/NnCwydx9vN8voQoE5oWB594Em/450sw6MhfHm1eWw+Db3BnEA7arMybHjlpf fSep9Bmqwm4hcTvcz4YYcihZh4oVyEo1c308sKDGylOv3Bl5cCGIbfZLw+99+9FjkcuB sVmQ== X-Gm-Message-State: AFuF++ls7ElKtQaV3rn2xkVba622Pi3FVGQGV8rfiDEV32o9+RXEgKOe tKE6gT+7bGOPrg9g7QVZuN6OhREOWAi0/xv9/xUj7AhoE+p/2zR4NEs9+PwJEA== X-Gm-Gg: AR+sD11UCBi6QOpnIyULU1kiMGPhDTFbZ8zsN43euSwlY89gociBEuht8SG6i3PTM00 wMfaH/6UDlOrwoVMWwaeUN+jz+/RtmDHptCDDYjjcEywROWiwNN376ikyz0DMmAUXoodAn1Qbfg j8fMG9trLdCTh0iNDKlhviFNnacI9sA/IPeUibZasy/jnBBobO8mM4kknIBJpRW7RW7bJQF9z1y Ak1nJvvM/hllwlKuuCGDqQ77oIiTD1AO9ZsVmPkD+oV92UsCNBVCXwXXuyeNXLHUTVvCozw2GDj FFKrO2w7rtZfEpi4R+ah8GG/a5NkQsA0oVpiRwm1egnZne5CClltLJgoOcM4/i7uiKtA+nNtzGZ xE43TpKT+XZ3jAtLAoxt6MQyjeJlYQb0n7o66GqfBZx8sjLEWRno8Ztbpk+PYkXSl1jgw23LFVg YZC7KTk+mqOKK/ftszHNtlXi/RGzb7agx0rYhkk6fItRA+2OBSyIEhgKCbFkWQ24jCLJu7irkAu osbCxZSX0M48XR0kMXDMA== X-Received: by 2002:a17:90b:224f:b0:381:1f51:1ff0 with SMTP id 98e67ed59e1d1-395c354d445mr39273613a91.2.1787550610009; Sun, 23 Aug 2026 22:50:10 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL v2 35/96] disas/riscv: Reduce rv_insn to uint32_t Date: Mon, 24 Aug 2026 15:47:05 +1000 Message-ID: <20260824054806.2790041-36-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1034; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1034.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551022366158500 From: Richard Henderson Since 758dce9c98a, the only possible values for instruction length are 2 and 4. Reviewed-by: Alistair Francis Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-3-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.h | 2 +- disas/riscv.c | 12 +++--------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/disas/riscv.h b/disas/riscv.h index 91ada8b531..eabe193b4f 100644 --- a/disas/riscv.h +++ b/disas/riscv.h @@ -11,7 +11,7 @@ =20 /* types */ =20 -typedef uint64_t rv_inst; +typedef uint32_t rv_inst; typedef uint16_t rv_opcode; =20 /* enums */ diff --git a/disas/riscv.c b/disas/riscv.c index e3fbc26626..012f90fce6 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -5491,10 +5491,8 @@ static GString *disasm_inst(rv_isa isa, uint64_t pc,= rv_inst inst, return format_inst(24, &dec); } =20 -#define INST_FMT_2 "%04" PRIx64 " " -#define INST_FMT_4 "%08" PRIx64 " " -#define INST_FMT_6 "%012" PRIx64 " " -#define INST_FMT_8 "%016" PRIx64 " " +#define INST_FMT_2 "%04x " +#define INST_FMT_4 "%08x " =20 static int print_insn_riscv(bfd_vma memaddr, struct disassemble_info *info, rv_isa is= a) @@ -5530,12 +5528,8 @@ print_insn_riscv(bfd_vma memaddr, struct disassemble= _info *info, rv_isa isa) case 4: (*info->fprintf_func)(info->stream, INST_FMT_4, inst); break; - case 6: - (*info->fprintf_func)(info->stream, INST_FMT_6, inst); - break; default: - (*info->fprintf_func)(info->stream, INST_FMT_8, inst); - break; + g_assert_not_reached(); } } =20 --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550905; cv=none; d=zohomail.com; s=zohoarc; b=LrCIl8z/HSsTO0aaaOoDqEjymZMVZzmXaj8J3J6qkrEcvGnMZGS7Z78EESZiRkicumfduLebJEZGdu9Y7xUiG0l6vOW04t8vKFny7Z5AHnY6f6c7/oDLB2OGzjVvZcwnAIVoid3N/idD4ZwN72ptIJwlD3jYEa+o74Akzq/IwuA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550905; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=2/TGr75vkp0br2SHR4F1+UQxBkhDhZrz6IHZEj1QXJE=; b=M2CbcTUEYA58kC2X9BWFFWlgfBdy5Gdrp2BaiS0F9nAgAEhiHBMEDForxP6STndeCZzKdPFHdC8H2f0j+1SYf52taIIpX7C0xjRopo9oUzOylKEfFSEKz/elEJW4nKkKzfmX5qPGjuJUPJdvDg224mir6VjvleSPkUZqeTma9m8= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550905786955.1690008302064; Sun, 23 Aug 2026 22:55:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbH-00052b-3r; Mon, 24 Aug 2026 01:52:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNZY-0002Z3-0g for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:16 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNZW-0002Ok-JP for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:15 -0400 Received: by mail-pj1-x1035.google.com with SMTP id 98e67ed59e1d1-38e08baf860so3372986a91.2 for ; Sun, 23 Aug 2026 22:50:14 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550613; x=1788155413; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=2/TGr75vkp0br2SHR4F1+UQxBkhDhZrz6IHZEj1QXJE=; b=o+th2Xz/xn5Sf7+MFfSePex/VOAovszK6oYjrfg8hYG+/LaBhJH5lD1DKURHlqjKcT 6LrcM/J2xajg6QTSgt3Hk0W8aNaGm5/SeWtjDzxIc/b16JucBfwqO4yjKgnJ5+6sEJHf jr4UqafVgh3b8CfGHyDggvzvpRMxv8YC8NMvu64TIfiZclxJQ/jl4umb1ZMpvx0py9JA 1y5rR6XI8uGMJ1xXdS2EWRzv2AfKe5Jh2FB/3itdhLBZ7ac58jwnBkiqP93Ms2l1jsgA q0SDokQ6jz9aHRSc3PHHbp2s4D+/eh2a+nXKwe+1MBljfL7tm+JelSjFxd1KkHdK/G7L fHVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550613; x=1788155413; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=2/TGr75vkp0br2SHR4F1+UQxBkhDhZrz6IHZEj1QXJE=; b=V7r3cx/WZgM7X7JbCbodSps4HhpojjKrA9pkJg0Lf4Tm8nZcht3WlLTdUvfBgKSZL1 /6v4PmxJjRD4xw7TxtaZh7m1mnF6NSRJ1UAopv7RdT91/1RjS51QH7tmM4xQi56C2LtP 58t864JDC6URJXSVCHVuJKMmXvvZuJ+QM57vzgf4RcpuSF8KccGnXpoarUoA+Q59ox0I VdGm2rG9uFPA+mwjKr1f8yHCaVeNueahouDsGqrqmOiE7anxN3l0P6RVqqnGWUwa3FGw cKmvRS0bGOU9f5UWCO306MtSUMbF8K8njjCfpY2ulwBNLPEIx3nNEqPrNHpAcN75ILzk 1qnA== X-Gm-Message-State: AFuF++m5x8WBYssgtImiEQqdPvuLl6g+8VfyEBxQSBlkpSVsi1iFnhZs w7kJ3vg6S2WbwT2kMoxSpawpFKs9HqmXxR5Dhm68rUg0zczlBSLFi2/kP/hgTw== X-Gm-Gg: AR+sD13+0OWttxw8ox9RJihAY/pdmklIcmQd0YplhtseGW81+Ku2qHy5pMHgFoqVgG8 P7Gog1BM8jxfBw00sduppPxWN4CyW4KnhyDT+jfUz90E3i2EjrIr2ITRyiWW70d7+DbFqRqp8Qt pery2u4KFuU/1/JaZyfQqsAo1mRR5+zVt6cKpQM0YzFJx63tEi0hRh5c2UR4HS6YD/GFuOZgQVd 4wgppS55F65ylxqQWhDa92fG726t7wpw2qLkNQx/ZSYp1R8n+W6mQvvWZdvrDPKozC9mzwsopJ3 F+NoaujjW2uHceKftgsaUxQtcHPj6/JALqgKZS2VjwsKJRKamO2wE8J1x+InE5TknFdL3QxP862 MvwTtVu31zTrWqonNlG7WG+SCFDMyTWq+/7262cixkZMeIDwaGho1B39z0ce2N4eSZop0CCCM7S rZZta2aB5iE2VVRyXsBAAa7YZYjU1tNiNHLjI0OEO7n0gHGj80t+EozMkdqi31rCSZwq5bEVa5X 5iglw== X-Received: by 2002:a17:90b:4b89:b0:38e:67e1:15b with SMTP id 98e67ed59e1d1-395deeae6e3mr27425563a91.6.1787550613076; Sun, 23 Aug 2026 22:50:13 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL v2 36/96] disas/riscv: Tidy dec initialization in disasm_inst Date: Mon, 24 Aug 2026 15:47:06 +1000 Message-ID: <20260824054806.2790041-37-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1035; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1035.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550908001158500 From: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-4-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index 012f90fce6..986dc6b752 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -5441,10 +5441,11 @@ static void decode_inst_decompress(rv_decode *dec, = rv_isa isa) static GString *disasm_inst(rv_isa isa, uint64_t pc, rv_inst inst, const RISCVCPUConfig *cfg) { - rv_decode dec =3D { 0 }; - dec.pc =3D pc; - dec.inst =3D inst; - dec.cfg =3D cfg; + rv_decode dec =3D { + .pc =3D pc, + .inst =3D inst, + .cfg =3D cfg, + }; =20 static const struct { bool (*guard_func)(const RISCVCPUConfig *); --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550826; cv=none; d=zohomail.com; s=zohoarc; b=CH5PjBEe5x9LAZ39JKcsKss103ng+eaCIOShyAkP6f9bWDODNO6j1pDJ0oEmP2jOtePWlj5U3OcPhpYmmFUYDyv9yHV4yXzNy2uquTufcI+evxcRYoIIlsvvF8wACcA8mbWd/NK2bMqY1VwDivMxDGexGSjbfN024Bvwgbiwr3c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550826; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=AXSMuIYcdvTbWFw3R3IymTx+qxtp/rW/iojAskcb29A=; b=kkoJ1HeBVZ1P5afjM2SPBfqGqCw3ipKPXnLqp2KFUucXzS4SItEveDTv2bvjAjXMimqc44xneab9OLczzAlgbs2ki5Xh/qe14MenK9k5K5ADvBxwzNWR1dTbMQAE40I78yXtK1PrM7aqXzYNgqzwwAypnQTpfPX1mjFk9kUQ2WY= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550826813620.4599308075375; Sun, 23 Aug 2026 22:53:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNae-0004QR-Bq; Mon, 24 Aug 2026 01:51:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNZa-0002dQ-H8 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:21 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNZZ-0002PI-25 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:18 -0400 Received: by mail-pj1-x1035.google.com with SMTP id 98e67ed59e1d1-38e041ea211so2461761a91.0 for ; Sun, 23 Aug 2026 22:50:16 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550616; x=1788155416; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=AXSMuIYcdvTbWFw3R3IymTx+qxtp/rW/iojAskcb29A=; b=bHBnkm0ckBwP2830IEfV0xzpCZwNAoPszAV6SpX7epow9omRVrMiTBVmrVRhqjJa/b Dq72DHj2/d3tVfY2Sw/7qEm6sZP1kHEnhHPMWa2NdCB3ZgylMB+MpVm2Op2N0oAGMT1d Hiz2TfrDeg7k6QT7N5iRaYWLIwQcJZrsrdurfLwgzNpzCf0ELQuLk3sGOhk8bcy+dMtB CdNoZ1bW7iw3bnSywfgj6bhVVJbUc47NRsp4Aoqe8WYAktVlqiJw6FRablK+t+cN1gYJ gOvmvZtgXsFLdFJDYz/gKsbJIRQfmHYrnY9h/8yzfnu5y4jFBKMApWvtlyb5TsjB85iB ZGmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550616; x=1788155416; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=AXSMuIYcdvTbWFw3R3IymTx+qxtp/rW/iojAskcb29A=; b=qSKk8goPKsqTU7K+LHFGe8CJN05N3rh4jTMDxTtLuYdxAF/0sT1Ae86MDyFC3quRue J0Hp9wn87bM1+E4y7XEv8+0wAYuAaaL9CYyVMP27T1CQIzr7izPlDDZ4viqG/aL99nGq 5dT27S+RRwtpylf9diTZUdzgo40LWicZvasoljBKQguoFAEmnjHLszU/0El793FOxUed nYSQ9zVOIUDn2VVv0DbtOgAuQgnt+NgMSeuZj2TrJ6i5Us+NoX3rzOak0j369vDukEnZ EB7q9s8QjnswiresggD8fn9kl6ngT5PbgtjbpWdHKskgI9NM3si71MJzRSIdwkVvSATa kZ1Q== X-Gm-Message-State: AFuF++mw89CDofV27saLqZbG/lB72UwsB32DfLGIamZyJQHz7uHKvz/y 8778Hd5ujj2QP12Kflr4VOx8bsXPg1nvoqJV06qZGscTxHxokgFe0vA80aUb1w== X-Gm-Gg: AR+sD1256+y3k5XStca1gW4IJrKqChj2nMy7ZuEvMYeV6kA4FVAkb4MJaChEj+fCByl sthCp3Al/3jt3GNZep7zZCxMGdyaKi2U+bCd2w+kTymRZmnkJEl5ed0YWjByZNF2Vv4NJLHIsRx iLsRbznVSfEJb393dtZzxSL+a7t9QZCCQ7NVLCYAuVzC3kt35bM0HupwWXZEpg7kXv5XXYe/BGE wJd17yszqgnQItsXUFm5Qlis16D7TszmQ4g+SJ1/SxZ2Hf7gsu1vIVp9IfXvPcwittP932SzsWz EIFctjI8pDIMNc6SJQoZUnr6Km3LD8l6GGOWYw+mWx2yBqjpwCOjBdfyvpY+/Cw5U7HtXhtlO18 FShoVowJywzykK8B/r3ANW8+g6rbVg9j8TMp6AJ8JFS6s6sbXN9mP9J6A6ZWiFWmyEoXbhuAgtJ PUAA37dFrYlvZ04PF4uJRWMzIfOfwsK/25PWl4OwGUFa+MMMMttpmcRkZKIyjuz+JVJjIBpMT26 Prs9iv0pY7G9LWo X-Received: by 2002:a17:90b:1a90:b0:37f:bfd6:8b40 with SMTP id 98e67ed59e1d1-395c33a0168mr33300025a91.5.1787550615783; Sun, 23 Aug 2026 22:50:15 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 37/96] disas/riscv: Pass rv_opcode_data pointer to decode_inst_operands Date: Mon, 24 Aug 2026 15:47:07 +1000 Message-ID: <20260824054806.2790041-38-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1035; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1035.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550827570158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-5-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index 986dc6b752..af43940732 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -4595,11 +4595,12 @@ static void decode_inst_opcode(rv_decode *dec, rv_i= sa isa) =20 /* decode operands */ =20 -static void decode_inst_operands(rv_decode *dec, rv_isa isa) +static void decode_inst_operands(rv_decode *dec, rv_isa isa, + const rv_opcode_data *op) { - const rv_opcode_data *opcode_data =3D dec->opcode_data; rv_inst inst =3D dec->inst; - dec->codec =3D opcode_data[dec->op].codec; + + dec->codec =3D op->codec; switch (dec->codec) { case rv_codec_none: dec->rd =3D dec->rs1 =3D dec->rs2 =3D rv_ireg_zero; @@ -5468,6 +5469,8 @@ static GString *disasm_inst(rv_isa isa, uint64_t pc, = rv_inst inst, { has_xlrbr_p, rv_xlrbr_opcode_data, decode_xlrbr }, }; =20 + const rv_opcode_data *op; + for (size_t i =3D 0; i < ARRAY_SIZE(decoders); i++) { bool (*guard_func)(const RISCVCPUConfig *) =3D decoders[i].guard_f= unc; const rv_opcode_data *opcode_data =3D decoders[i].opcode_data; @@ -5486,7 +5489,8 @@ static GString *disasm_inst(rv_isa isa, uint64_t pc, = rv_inst inst, dec.opcode_data =3D rvi_opcode_data; } =20 - decode_inst_operands(&dec, isa); + op =3D &dec.opcode_data[dec.op]; + decode_inst_operands(&dec, isa, op); decode_inst_decompress(&dec, isa); decode_inst_lift_pseudo(&dec); return format_inst(24, &dec); --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551289; cv=none; d=zohomail.com; s=zohoarc; b=cbZjLrznafjD4sk/uQvqmCr/oEGz7E1sNz+D6ijaGUpLvoVOmW6HW/t0SJBC/riEgi6RvwGsMrQ5MYqMOvaYmVQZbiUk9RTZBscm0tBRVFLnNKivTGZWOumpKfLRb8sT/uVgesHCQepe91Etc1Rg1zj9Uf17Dwe6DCVCGQ4e9A4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551289; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=cjyHLAWuHJgJ/+lIjyXwN6xYrYB6otvsADCyVj8AJtU=; b=C22qVt5hADcbsn8/8tgp88SVyEe2D7pmDnxEMbPY3QbSib16FmaFhCuqYIKqx+zs28TXAtt08cE8/6i3BYsrc1uHs4opeDY+FIPAztLVIoWRIEtgxXBt4IbEVejgkRfczJbybbJDLsEygWPIEWnirjQWUv8ylSJSOAl/UXj5JG0= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551289106590.7119865644015; Sun, 23 Aug 2026 23:01:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbN-00059F-2P; Mon, 24 Aug 2026 01:52:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNZd-0002hX-GR for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:22 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNZb-0002Q0-SH for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:21 -0400 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-38e08baf860so3373064a91.2 for ; Sun, 23 Aug 2026 22:50:19 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550618; x=1788155418; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=cjyHLAWuHJgJ/+lIjyXwN6xYrYB6otvsADCyVj8AJtU=; b=Q4LCP41sv8+M89j8MdOKs55IytLCZiPUpfwo6sMxOC10RwrGOOmXKhf9LfC89Wjo82 IGYdyP993LosSlypjB8qnUVV34Y51EEwglJ7sJ7JVLNAADWIXn7LhBPYKG2q7pdzoenx WqDVtj4aH5nf34WQn3U8lL88LKWUs5QnGkkViU3lc8ATI5KPX9B9wDTaJyOHpwuAYdbN 4rWlML4DE6YAxIysVjXjK+AbleKln00A+jLIwNIVxNG0vTrJneVYCdYzjQ1MVxfrHhG2 WSadK1LsJyHDPEx/a1Hukd28ILAoxEauBNEHoATWPy8ZosuQC/pwrf5RY6lUhemHepKb 440Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550618; x=1788155418; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=cjyHLAWuHJgJ/+lIjyXwN6xYrYB6otvsADCyVj8AJtU=; b=EKCGFOdxk64hpDxA+OpChEEQEz22mNAlKF5msfTUSIdrQR0Vkx4wy2fM6AIfPBPc5/ PfpPz20KB/qNKIWqBb5GUqqD/CdktJgMGNxhiOcp/JT/VVahMcEJIRFKGKxPw3kYEanI iVdNOKsmJlSdkll4pF8XDh/RKLqOl8Z4OjgAdHijVUbADKurhJZhFHXJcYRsls09WIZ9 zSPHl0JuIiFeD52eXGY8PrEQbiyx8uYd5xMXyF4ne9Ij0yqngDtoqG9MC7u4AHumWLwr EmiJE1a5F0i3RiKee0HsNE/5Dsrpz/CUnWlVNmh+G3XaOn9T1pDXV4SJkBuwQ/G1rsC0 9gAw== X-Gm-Message-State: AFuF++nwGWWIswafwsDYYOjneVQ3iHdDyD6KLDRzrVDaW+1w8ObYZFb+ ilx3MANbjDWPi8kLu51h0kpn4MDWxOIgghCB/baMBCtoUsdYSPtIl70T1JLRTw== X-Gm-Gg: AR+sD10VOu9eFEeDkN2mjFoDc+5A5XQw4mFXyT58a04JpDOaGEVkYC7Lhk/O9px2xm2 NY/8CBGdx/Mg3Z58/Cei4NrGZQISYaxBDMFiCl5w1V4aFKn3OnLo0+1/Zgp89SlSgLXtSxul8Bw LdY/RBtkPyCf9+FY/GV7PieMKYFO2XdydoUEhPG4tjetNlBoTEUzwK2d7LTu0up31nmbjHSTDJf i8l4qXpiUQDUMw8m3FLuGToxzKnscTQABBLsi5b2vWhUFQMH620LMX+K1G1QUjtDIY3aDJyS9u/ 85INkyyQgpBiCZAqtK0v7h1R0N35VovSaL1Pb+2r2uSUx+5PGDF3e869D9Fo+gJOq25tdrtg91y L2puauw1xxYn8b47tJga7zgDbAEs7DYtvDdloxCrg89BskJuGIYetLmrvOcmLXmPoQfij+m0nSQ g5FvASX9hLcxCJ0XTOiL9y96xkYeeUSuA51uPRFBIA4ife9rAN4XlosGbKUxpT6j5mob3lCpAx3 EM6Wg== X-Received: by 2002:a17:90b:2cc3:b0:392:e5b1:d833 with SMTP id 98e67ed59e1d1-395df29666cmr29931094a91.13.1787550618526; Sun, 23 Aug 2026 22:50:18 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 38/96] disas/riscv: Pass rv_opcode_data pointer to/from decode_inst_decompress Date: Mon, 24 Aug 2026 15:47:08 +1000 Message-ID: <20260824054806.2790041-39-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102d; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102d.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551293707158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Unify 4 functions, sharing code. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-6-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 70 ++++++++++++++++----------------------------------- 1 file changed, 21 insertions(+), 49 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index af43940732..47fae7316c 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -5377,64 +5377,36 @@ static void decode_inst_lift_pseudo(rv_decode *dec) =20 /* decompress instruction */ =20 -static void decode_inst_decompress_rv32(rv_decode *dec) +static const rv_opcode_data *decode_inst_decompress(rv_decode *dec, rv_isa= isa, + const rv_opcode_data *= op) { - const rv_opcode_data *opcode_data =3D dec->opcode_data; - int decomp_op =3D opcode_data[dec->op].decomp_rv32; - if (decomp_op !=3D rv_op_illegal) { - if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz) - && dec->imm =3D=3D 0) { - dec->op =3D rv_op_illegal; - } else { - dec->op =3D decomp_op; - dec->codec =3D opcode_data[decomp_op].codec; - } - } -} - -static void decode_inst_decompress_rv64(rv_decode *dec) -{ - const rv_opcode_data *opcode_data =3D dec->opcode_data; - int decomp_op =3D opcode_data[dec->op].decomp_rv64; - if (decomp_op !=3D rv_op_illegal) { - if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz) - && dec->imm =3D=3D 0) { - dec->op =3D rv_op_illegal; - } else { - dec->op =3D decomp_op; - dec->codec =3D opcode_data[decomp_op].codec; - } - } -} + int decomp_op; =20 -static void decode_inst_decompress_rv128(rv_decode *dec) -{ - const rv_opcode_data *opcode_data =3D dec->opcode_data; - int decomp_op =3D opcode_data[dec->op].decomp_rv128; - if (decomp_op !=3D rv_op_illegal) { - if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz) - && dec->imm =3D=3D 0) { - dec->op =3D rv_op_illegal; - } else { - dec->op =3D decomp_op; - dec->codec =3D opcode_data[decomp_op].codec; - } - } -} - -static void decode_inst_decompress(rv_decode *dec, rv_isa isa) -{ switch (isa) { case rv32: - decode_inst_decompress_rv32(dec); + decomp_op =3D op->decomp_rv32; break; case rv64: - decode_inst_decompress_rv64(dec); + decomp_op =3D op->decomp_rv64; break; case rv128: - decode_inst_decompress_rv128(dec); + decomp_op =3D op->decomp_rv128; break; + default: + g_assert_not_reached(); + } + + if (decomp_op !=3D rv_op_illegal) { + if ((op->decomp_data & rvcd_imm_nz) && dec->imm =3D=3D 0) { + dec->opcode_data =3D rvi_opcode_data; + dec->op =3D rv_op_illegal; + } else { + dec->op =3D decomp_op; + } + op =3D &dec->opcode_data[decomp_op]; + dec->codec =3D op->codec; } + return op; } =20 /* disassemble instruction */ @@ -5491,7 +5463,7 @@ static GString *disasm_inst(rv_isa isa, uint64_t pc, = rv_inst inst, =20 op =3D &dec.opcode_data[dec.op]; decode_inst_operands(&dec, isa, op); - decode_inst_decompress(&dec, isa); + op =3D decode_inst_decompress(&dec, isa, op); decode_inst_lift_pseudo(&dec); return format_inst(24, &dec); } --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551171; cv=none; d=zohomail.com; s=zohoarc; b=A/Ld5gJ53NG76QPm5L3C8lBDxbAFbvI+WgrVPZSWU9i5GfiS6tsdMxXgNUoHs+8I67DO0nnagcx+Q62fJGPzTUgrxaYh5AoJfLkttKzcKaxmnn+7CMTIO4M7C62qZgKki3qGV12vy+7951s3/4BptVYJ3J8qpWkoG9Uj/Mv1Elw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551171; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=WGgzdLMhBzqqG5u7HPy4pNvhAXusg8bxQ2Tn3SIcnEE=; b=R2Wp7erdDAa7iErG/QAgQAwPy4INcbMB0PXwFGZccbCj2GlpCEWwR05s3z0e8N/dqCKeQBGnF41mHEZRYwt4PvoEGW93E6/XD5HWIawOioHmUrDQYjK0l98eS43NE4rD6Tj25n703086q2mK9b8WTuyl6Ndm9ccVtFjAxbE/Ez8= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551171549971.7455134978729; Sun, 23 Aug 2026 22:59:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbI-00054L-JT; Mon, 24 Aug 2026 01:52:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNZg-0002ow-AN for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:25 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNZe-0002Qa-M5 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:24 -0400 Received: by mail-pj1-x1033.google.com with SMTP id 98e67ed59e1d1-38e08baf860so3373097a91.2 for ; Sun, 23 Aug 2026 22:50:22 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550621; x=1788155421; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=WGgzdLMhBzqqG5u7HPy4pNvhAXusg8bxQ2Tn3SIcnEE=; b=jH+B9g9lOvNNL2kkb6dcHS24OT/yi6K33eCpvFlyNCNpiGqYg0FV31WC4MIE8oTYO2 RtYUsk4nW5YF2VZVM6J/sov/21eHE4XCP7FS0vULnngxQhZa2LDBv+xyO2goZsD0QgJB UEMKxugSJJyX8sytIPo+517u50gWooX2ekUAf9kRSLcjKaVZMJFh1j/oOeK73O+bOEKe B6EexUNEPSheWCR4SJ+9z6onwgF+IQOVqUcOrcCzl2VNZ5M2bMCVAStRHtEjs3/cJhYP lDLhsxUX8YqDn2RRFMyaSnpFKA2jlwjJ35275k/t3Ctjrn+xFXw8mOZt7T8DvMgCTqwP Jw9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550621; x=1788155421; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=WGgzdLMhBzqqG5u7HPy4pNvhAXusg8bxQ2Tn3SIcnEE=; b=WGLGSIebp/QRPMNIPLcL9TXL6RZuq7tAMb9OvWc6wEXZcTbkasLK20QAJ6Z11RfsW1 u6tg0o9T2a1PlfPwk0GCohJlSda9Un5gWPzclv1W0jBaTkhvrOPs1AUM1S4FtxcrybBB c7q3VpGdk8ci0NwRdHUkWyIrnqGthb2OzpYRaJ/9MIKpO5cWpXUJRy6Ehazn+0rZcZGo RD1leT7q2JVlnYP531S5wIgW2G4ZJ23ov4gIVliJHD05YhCe6izIsWPOksZiDEtMMeJE Jq+9HUedyeiLMlx7U2sPDCNi94npkEbu6OLwKhhVWSx/omu+86MmOqSmzVtq3kaqE7Dn Z0/A== X-Gm-Message-State: AFuF++noaIpc3yeNdUn2Iao4Ffz/49dgrpDNLb9zXkeotnEU/jL7Y4yS 2gR02/QWheMUcVTOEA/iCLyreRqS6Gvi173EOeLTV7Yft71CU3ux8hhx/cagZw== X-Gm-Gg: AR+sD13g+2czGrt1IjC/Web5uZtbAeie1P763XVi+nIUH5ONhiy/gr4IkLNjFpj9U1V C7iqaTond99B3FLvIXq1GVPp83y2oXNeuoCrBCTGFECf9apPK3QX/qqlo0RfTdUqKXp9saSVUQ+ de7yHNLaGA/8pO233F3Z/s0h8+RLZREegWAbeK9CW4ziAOQDwiNhPyhQo+k35lqHLQG2IssRnkX IsFfDtF5hgDZbHtm7ipBag9RZQ0/OFMtGo5Ws+EwQSr5lpwhGvE1GpnTzyHdlJmEWS+XUKPwuN8 YpJ1/Ts1q77kbwANcPdd1rq+MoeKrnw8mSR1boInMwgReIyzAoFCks+m4eDvmaGpImAxAE3Ix5U 255QKnB2zk8bAgEBexqF+rv9p33VqQ3dOwcrKIsDOTzpMuJenMfMfpO2ji2EKzmHTwggB2FR+PC CPxbukPrJ1pOeJqmzDMWiw9WB3JHuC+LUj8LT81IxYqzXzFtn7YC6QxOQ2zFkwQoeKiby3eTkhc LbvCQ== X-Received: by 2002:a17:90a:d404:b0:38e:ad9d:1161 with SMTP id 98e67ed59e1d1-395decde369mr29789090a91.0.1787550621213; Sun, 23 Aug 2026 22:50:21 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 39/96] disas/riscv: Pass rv_opcode_data pointer to/from decode_inst_lift_pseudo Date: Mon, 24 Aug 2026 15:47:09 +1000 Message-ID: <20260824054806.2790041-40-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1033; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1033.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551172986158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-7-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index 47fae7316c..0be2f07612 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -5358,21 +5358,22 @@ static GString *format_inst(size_t tab, rv_decode *= dec) =20 /* lift instruction to pseudo-instruction */ =20 -static void decode_inst_lift_pseudo(rv_decode *dec) +static const rv_opcode_data *decode_inst_lift_pseudo(rv_decode *dec, + const rv_opcode_data = *op) { - const rv_opcode_data *opcode_data =3D dec->opcode_data; - const rv_comp_data *comp_data =3D opcode_data[dec->op].pseudo; - if (!comp_data) { - return; - } - while (comp_data->constraints) { - if (check_constraints(dec, comp_data->constraints)) { - dec->op =3D comp_data->op; - dec->codec =3D opcode_data[dec->op].codec; - return; + const rv_comp_data *comp_data =3D op->pseudo; + if (comp_data) { + while (comp_data->constraints) { + if (check_constraints(dec, comp_data->constraints)) { + dec->op =3D comp_data->op; + op =3D &dec->opcode_data[dec->op]; + dec->codec =3D op->codec; + break; + } + comp_data++; } - comp_data++; } + return op; } =20 /* decompress instruction */ @@ -5464,7 +5465,7 @@ static GString *disasm_inst(rv_isa isa, uint64_t pc, = rv_inst inst, op =3D &dec.opcode_data[dec.op]; decode_inst_operands(&dec, isa, op); op =3D decode_inst_decompress(&dec, isa, op); - decode_inst_lift_pseudo(&dec); + op =3D decode_inst_lift_pseudo(&dec, op); return format_inst(24, &dec); } =20 --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551171; cv=none; d=zohomail.com; s=zohoarc; b=Bt6zkOvvZitTB5O2HlGzuw4FNIqbKOxmnVyg0HsFUVzuRv46S25sLMA8JBQ8d51CbB6K0iD48kizzQmVmPfO8v/Kj7hAayWtW9oBnKffsc5EzrE57Rxam/LkaTkj7TzHp4fw34mppi79kppdtmiuA2/UU0rP+m/WJCvzdgsYxgo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551171; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=fQDgWJg7DF9eHEdRBw/5L4zK1k6fMkTJXubxOKeqz3Y=; b=OyWt5YGF2PD+jCnXhK2+j9bHQTaMsqT0mk/cXfIMf9EN1Bhv2Vwr/jAE2Y/Jj+1KSwARfz9cDXnvA4WuH883nfzbBO1lbf8Q8sGiRkZpkGseKBR9e5ARs4VG2bgLBY1zDFCf+yZNIraAbiBTexHS3kWPCXwIPNTbQ0RqYgLtitg= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551171229357.49181837201706; Sun, 23 Aug 2026 22:59:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbI-00054J-5X; Mon, 24 Aug 2026 01:52:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNZi-0002wr-Ob for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:28 -0400 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNZh-0002RM-5E for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:26 -0400 Received: by mail-pl1-x632.google.com with SMTP id d9443c01a7336-2cc891373e0so33519025ad.2 for ; Sun, 23 Aug 2026 22:50:24 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550624; x=1788155424; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=fQDgWJg7DF9eHEdRBw/5L4zK1k6fMkTJXubxOKeqz3Y=; b=dPF6C9qd2XUX+ujYkDLSvwfp7TowFiHXlm2rLAxA80GUjX3WgBmDw6Wvb4CH+dtR4p 5Z2HnYGu7Af3JSPfNQ0BkJ3k+f88y0eLpE8Lwc1HjJU6nlsDzw2Ds+WV0Npyoj6vB33R vEjK6RPP0JK0WRHpzIsDbNjI43YyD8XgrUcfvynAkTGfbE0hfbg6XKoshKxXonzG/fQ9 OrxHkAIhjY0kOZ2u/Kl13/CMYsn6YJ7c7A6s4QVIITFWhUhXCwgwjajg1lBXB9TOnn34 H57WSMpU9+5Afo2Ax5r0PgUutvQODLaj9qtH+tc5f2+1W64YCPJOXCv15QmrrO7ykquY /kaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550624; x=1788155424; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=fQDgWJg7DF9eHEdRBw/5L4zK1k6fMkTJXubxOKeqz3Y=; b=TF5KVtPdFhqq7mF+Ci9Vrg0zu04zAWLj85CyyP5OyrW7k/MeqeHiPUZVLyoCtPMxFC rEBJrcCgbK32RQmpeGoJAq+tU2iWsa5wYCCmBjS71zZLJnUgkkno/Mc9vQ+Diepyn+qv UiqUvtrpz+oLBAU/kziAjMk07lnwEikzdcWCiM1wBBROR8cSliUdJf4gZnebHz5GVD2y g1M17kjpn1U8QA8oE4T+C0m7GAE5MX3xdmfwmRTbiCO/Li53JjnH6d6n+dDXD6DXfIIy cYkgL0ZeQzhcI4OAXZ3XOEwRP1RSNxNffmmzuU/9Ikrov59gy/VzYfNhbPhwSmjaV5HM WwkQ== X-Gm-Message-State: AFuF++k2wA7Tc1R8eMNRjRoEV2+CS5sNc70fTPmUorGm/n19LLON8Y46 tu+frqU+9jEt0jTV0d43OuRIBy1DjmqGFfY4LCfdtalBUipXOWGsjUtUaCG9Ng== X-Gm-Gg: AR+sD12JVAIwcCbFOqhLAZVjcpOekYMae1aPZv3lMDSl7VUaYNGJuXGWvi7uV1AaE6H IBwMIDPXDI0Pn6pgHg/VXCtL+RURby/1eKDRkDxxKyOk3NpMe2AvqIegc4CFCW+9n91stxXiP/J sQ54ncC0fSDWvj/kSJpf5wT2tFjitkwh/KYlyQ/unKuYeq2DWNXROMMr4YMYMMdZJl8WyH4ADZn Cj4VB1NC7YIfjzkEWj4h/HZcaV1ut68E38l0FB0r0BEbAOiT61ZZ6k3iITDrWDA4oGHq2jXfBBR ZfEGs824stMA4siFurCAbDHA7sjGrfmM3dpWA7AHmN3JC/ZyxZ1Jum0Z1ZekM06Vl+qGRbpctFW XvVF8lIJlmwCmRdu98muqVyKOiAGnePAjXO9+SwdfoHN0S1PcvdMiWPr95yz1/C1WLjOS6/rn5T 3TBIdsvZuufNIkK1p7yJ3rYTGxK0nEle2MNuVMRltpt48z2OmUhO7J0kGj6WRufoCMXj8YKJb1Q I9Axg== X-Received: by 2002:a17:90b:5485:b0:38e:11ba:992c with SMTP id 98e67ed59e1d1-395df6080e0mr30917753a91.12.1787550623869; Sun, 23 Aug 2026 22:50:23 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 40/96] disas/riscv: Pass rv_opcode_data pointer to format_inst Date: Mon, 24 Aug 2026 15:47:10 +1000 Message-ID: <20260824054806.2790041-41-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::632; envelope-from=alistair23@gmail.com; helo=mail-pl1-x632.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551172985158501 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-8-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index 0be2f07612..70ea41f125 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -5111,17 +5111,16 @@ static size_t inst_length(rv_inst inst) =20 /* format instruction */ =20 -static GString *format_inst(size_t tab, rv_decode *dec) +static GString *format_inst(size_t tab, rv_decode *dec, + const rv_opcode_data *op) { - const rv_opcode_data *opcode_data =3D dec->opcode_data; GString *buf =3D g_string_sized_new(64); - const char *fmt; + const char *fmt =3D op->format; =20 - fmt =3D opcode_data[dec->op].format; while (*fmt) { switch (*fmt) { case 'O': - g_string_append(buf, opcode_data[dec->op].name); + g_string_append(buf, op->name); break; case '(': case ',': @@ -5466,7 +5465,7 @@ static GString *disasm_inst(rv_isa isa, uint64_t pc, = rv_inst inst, decode_inst_operands(&dec, isa, op); op =3D decode_inst_decompress(&dec, isa, op); op =3D decode_inst_lift_pseudo(&dec, op); - return format_inst(24, &dec); + return format_inst(24, &dec, op); } =20 #define INST_FMT_2 "%04x " --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550870; cv=none; d=zohomail.com; s=zohoarc; b=HZ7L6GlFETJr//wshrrMUVj3hVNt2RwQDlQUisP9eLShJHvQhtmN28S2CeHTzCbrkeWUMX6YSU+x4FfMzA8/oRhYjqI9BHP5CKE/UwD3EKyAe8YUSJ565Fjjju1ZBJ+uxuypbc/0ooMzX+5Xz0M77KpKMI6TJSfpMUKH9alAmn0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550870; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=HiY1OdOtBijExrR7AqCE72zrQVCis7QsYpBlu+X6Ymk=; b=U8Pj7ntOMrbXi5FiyvcPku1twaj0ALuGOxDtGjQ3YanH8Y1VentClWYcJ1k7XjrdXdOwYOh0azxdftpdbVA40kaYe5QQ2D8HURxgJFbXxtFnlbgI8ILL2DdoBAJYMFLGAh4aCev1QVH7ilzRuYGTTcfmpgp6sf1aPMq/0358g0c= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550870334287.70658602377375; Sun, 23 Aug 2026 22:54:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbA-0004p6-3U; Mon, 24 Aug 2026 01:51:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNZm-00031W-Eg for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:31 -0400 Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNZk-0002S3-7b for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:30 -0400 Received: by mail-pg1-x52c.google.com with SMTP id 41be03b00d2f7-cc147d86bebso2503117a12.0 for ; Sun, 23 Aug 2026 22:50:27 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550627; x=1788155427; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=HiY1OdOtBijExrR7AqCE72zrQVCis7QsYpBlu+X6Ymk=; b=NKXJt7tGJ5dLKxTh5Q91TLXa8lBbcwsewsVlkl3UYvtMJR3cbGcdMTz4z8PV+bGU2u 794/ld4ybIssKRTP1CvK8XBJMIbjRRJRAYRYo0ibx80YiFJ8bvXh6pA0r3b1PjYcWflA PkUjmsZ5BCntCBnjHibqnTZqq7QtaVK2V9RGuiR/dfNb3d8EMZKRPRF593Vw6W4cDSkR iwOSKGkskqQv+76UFOAkBS2MFbUZ088+ckSrcHYJVKIL3h7DzGdidUfBV9zUs4GAOtXO 03N/kU/xMFB0V6hruPoZDr50+j0xP96ULBuABJF3YLxLc+3GGpdxLHKs8aMGUejChBFi kjKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550627; x=1788155427; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=HiY1OdOtBijExrR7AqCE72zrQVCis7QsYpBlu+X6Ymk=; b=QFHVj6OIprCZ7aoHqAFJq1z0Nas02vYFC6vNZ+74nqU5TAL6Ik6OBI4WsIp4IPza1A wQK1Q5rME8gYfH2q7cBza0MKXcIGNubWw5nzHlgxtMDWUOFjFv6w5lNbAy2wqGlBMTsa EDbVN4/zLpQG1nseIQmJ0yRSujek53jIv0vthM88EAVkNqwWL+80oz5l2lbgdsAA+jV6 F59wveJPrQtedncouTxh6kh3oU11qJxl6ePqMNcVxJcZsih6OkfbnXV3AQjAfbFZ1XU/ S6VeLp4qq0gc6jBQOLF6PXh2lyxY18h06tRyQKnGW6+z+rPXqolXgerkRyrRmOcjdgh4 DttA== X-Gm-Message-State: AFuF++kvr28TugGh6OuAAoxMz2gER1fcecJxpis/ai9SPQwm+lKUWpfH xu08juxElx9v7XVSUCHrQ/Lhjyk0nIATkTSvbSorqSAWaYxVLeOAFoPVrGW41w== X-Gm-Gg: AR+sD12eMQzXmZPGjUpc9A+/nUZ8SrzgZd1+a1iIpSVMIgDNMdxT55j1X8okw3JUIsH UIyC1Gn+G48HEMtrpvrzrDfbv8geE4qG+RFrNSufssLjKkz60wxJy5rR8xjcIw3j7C04HHsSohc FYBR3iy6J3b7bUhHOS0XnJi1cI4EsSiQZ9s8COpzWH2ERQzfxoKSfQOQJhfZK7lFUnrGI+MKB/q kfoyxr5nflWbtviKx1+bBhynEn+QGwqPcF5lIUhtfGfkuxlHLpPgHLX+9jOiocDlhXkByVyTO3J ddyBKPCg+LidtQnHWXP8pNOD6MIFtgP1QF2yiS2BgCJ15AuE8/9w9hDnMsai6FcAO7vk5PABTV3 qg1vcWqIEJzReT3uDSnjDxgog5gkSQr8lzG5NC205Jms+NiINscfAQUWnJFevzw1lm31xK9uthw 9bC6p+KIks4xxL6QrL568zX+IM4gb2zB5Us1je1gq1BHEqlvGoVP7mjga5oJYELmN8V8nVryL4x NqTcA== X-Received: by 2002:a17:90b:3e8d:b0:38e:9ca8:e99 with SMTP id 98e67ed59e1d1-395c4fa444bmr14521579a91.5.1787550626649; Sun, 23 Aug 2026 22:50:26 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 41/96] disas/riscv: Tidy disasm_inst main loop Date: Mon, 24 Aug 2026 15:47:11 +1000 Message-ID: <20260824054806.2790041-42-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52c; envelope-from=alistair23@gmail.com; helo=mail-pg1-x52c.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550872526158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Unroll first iteration, so that always_true_p is not used, Drop some local variables and use 'decoders' directly. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-9-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 65 +++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index 70ea41f125..9880b8de20 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -5419,41 +5419,40 @@ static GString *disasm_inst(rv_isa isa, uint64_t pc= , rv_inst inst, .inst =3D inst, .cfg =3D cfg, }; - - static const struct { - bool (*guard_func)(const RISCVCPUConfig *); - const rv_opcode_data *opcode_data; - void (*decode_func)(rv_decode *, rv_isa); - } decoders[] =3D { - { always_true_p, rvi_opcode_data, decode_inst_opcode }, - { has_xtheadba_p, xthead_opcode_data, decode_xtheadba }, - { has_xtheadbb_p, xthead_opcode_data, decode_xtheadbb }, - { has_xtheadbs_p, xthead_opcode_data, decode_xtheadbs }, - { has_xtheadcmo_p, xthead_opcode_data, decode_xtheadcmo }, - { has_xtheadcondmov_p, xthead_opcode_data, decode_xtheadcondmov }, - { has_xtheadfmemidx_p, xthead_opcode_data, decode_xtheadfmemidx }, - { has_xtheadfmv_p, xthead_opcode_data, decode_xtheadfmv }, - { has_xtheadmac_p, xthead_opcode_data, decode_xtheadmac }, - { has_xtheadmemidx_p, xthead_opcode_data, decode_xtheadmemidx }, - { has_xtheadmempair_p, xthead_opcode_data, decode_xtheadmempair }, - { has_xtheadsync_p, xthead_opcode_data, decode_xtheadsync }, - { has_XVentanaCondOps_p, ventana_opcode_data, decode_xventanacondo= ps }, - { has_xlrbr_p, rv_xlrbr_opcode_data, decode_xlrbr }, - }; - const rv_opcode_data *op; =20 - for (size_t i =3D 0; i < ARRAY_SIZE(decoders); i++) { - bool (*guard_func)(const RISCVCPUConfig *) =3D decoders[i].guard_f= unc; - const rv_opcode_data *opcode_data =3D decoders[i].opcode_data; - void (*decode_func)(rv_decode *, rv_isa) =3D decoders[i].decode_fu= nc; - - /* always_true_p don't dereference cfg */ - if (((i =3D=3D 0) || cfg) && guard_func(cfg)) { - dec.opcode_data =3D opcode_data; - decode_func(&dec, isa); - if (dec.op !=3D rv_op_illegal) - break; + dec.opcode_data =3D rvi_opcode_data; + decode_inst_opcode(&dec, isa); + + if (dec.op =3D=3D rv_op_illegal && cfg) { + static const struct { + bool (*guard_func)(const RISCVCPUConfig *); + const rv_opcode_data *opcode_data; + void (*decode_func)(rv_decode *, rv_isa); + } decoders[] =3D { + { has_xtheadba_p, xthead_opcode_data, decode_xtheadba }, + { has_xtheadbb_p, xthead_opcode_data, decode_xtheadbb }, + { has_xtheadbs_p, xthead_opcode_data, decode_xtheadbs }, + { has_xtheadcmo_p, xthead_opcode_data, decode_xtheadcmo }, + { has_xtheadcondmov_p, xthead_opcode_data, decode_xtheadcondmo= v }, + { has_xtheadfmemidx_p, xthead_opcode_data, decode_xtheadfmemid= x }, + { has_xtheadfmv_p, xthead_opcode_data, decode_xtheadfmv }, + { has_xtheadmac_p, xthead_opcode_data, decode_xtheadmac }, + { has_xtheadmemidx_p, xthead_opcode_data, decode_xtheadmemidx = }, + { has_xtheadmempair_p, xthead_opcode_data, decode_xtheadmempai= r }, + { has_xtheadsync_p, xthead_opcode_data, decode_xtheadsync }, + { has_XVentanaCondOps_p, ventana_opcode_data, decode_xventanac= ondops }, + { has_xlrbr_p, rv_xlrbr_opcode_data, decode_xlrbr }, + }; + + for (size_t i =3D 0; i < ARRAY_SIZE(decoders); i++) { + if (decoders[i].guard_func(cfg)) { + dec.opcode_data =3D decoders[i].opcode_data; + decoders[i].decode_func(&dec, isa); + if (dec.op !=3D rv_op_illegal) { + break; + } + } } } =20 --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550736; cv=none; d=zohomail.com; s=zohoarc; b=fFf3zErqRA+PWjonCoDIaguFeRR4MdORPwmLixP6qNlb30oNZ0uSLdiskZZRYjHKK6OU6e/37zPISDd/KWSH7AYr853vOvgazwq0scy24stQFyl1Q41hIT0trBlcb0GByteES5IwU4yKUo7D32CtKO+rhS+UyTXwTerxQpiZhTM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550736; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=V3fM4y2C472xM9X4uqOcufwfeVn3Wu1NX6yZjjnlfQ0=; b=Qq4UMXtbDlmUSVPR1fxJAsJFy+KVSc18T3UKJxIoUbNGMuTpukBPMMUh6PMohFnODRtF8HbryTkdQ+++bop1gwMush3pKOWvHcxRrCUVIc0EfooihQJHng4nS+eif6wV24UmO0RgQwHIfW4pqcervltU/ni7S/iLWIl4zkLJZs4= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550736781822.5076029304198; Sun, 23 Aug 2026 22:52:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNal-0004SX-CD; Mon, 24 Aug 2026 01:51:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNZp-00037N-Eg for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:35 -0400 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNZn-0002Sl-CF for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:33 -0400 Received: by mail-pj1-x1030.google.com with SMTP id 98e67ed59e1d1-38fdeaed181so4234146a91.1 for ; Sun, 23 Aug 2026 22:50:30 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550630; x=1788155430; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=V3fM4y2C472xM9X4uqOcufwfeVn3Wu1NX6yZjjnlfQ0=; b=sWAy3um4uk2SQU23G6tQGdn1UzBn0lu6KcebXqIyV/tAUdnQcQDt5OE+KxPM3KR9YE mR+1Gesgyab3VMqKYxQ4BHWc0qKZJDP43diHJdBFkGOCFxRv4QMY3/Evuo/g0HMDpuy3 AWhduLPfqXBLje4CrRaAxRtZEUgdYm7MeEdtQpvFMZiUqDbciGScTpM5XRBL6e/Ft1m+ +EhoAFSl06OHMWyG4HgsSa20r83P/8CV+KjvgqoeFhuNkt4j8E9ESXFNzJjfqCXaY8Hv 3U5uV13Z1apXDM+XWpvMULuEc/vyPYVszgH9hWnK6rnIi920AyigVkKI2bF4Jh2vVoDP vQnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550630; x=1788155430; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=V3fM4y2C472xM9X4uqOcufwfeVn3Wu1NX6yZjjnlfQ0=; b=T6h/e1dsu60Q6g+Ga+EbajED7qGnvvOZ7x2QukL/uM+Rp2sO38jOzg3Zu2Ft8Pxg0A VjnCCHWewAZiPaJyNBDpryU80Nw4gWTrHMqIQmQ+mswaCpTxjvR4AQOdhhi7DYkI9qD1 WC6kxO4sdjl3eCxa3KzFrRTVkWw4z8Ah1aPJLWgPEKisTtxC8u4eVjKgMDyOs84Q24Mn javOWiJ/wb6T34RDlg+b7H84/PsVAeeF11VDtJZLpdscx1RO/Q1no+lp3r0VVBqdgjao Qdq5lphGxNQ13atzsZbk4nayyLcy0YCcCzczGaYN3D0jynbj/zwUj1LKhPapZ+IdpYAC s0jw== X-Gm-Message-State: AFuF++lepxZeM1YX8+bTzpNWs5ioIB9KEIm1YCu2Nf9UXzc40rXRJc1a 7GIGf8F1tyv/7dNGvUkiXbMa4srYum05zwQ8aYdztuy8xeV8WH71mE84J666/g== X-Gm-Gg: AR+sD10foyJwJRlXK1fHldeYWikMks8VJmYfBAj6dlXrBaXfMW1YiANEsDoa4/krvi4 EbvKtM2mRfdno7tHKIFVp3UChGt6+oNSq0/YYw1rMRfiJs9znwTyr4CtSIzWsSZmAtKN2wIZobo 3eioP58X7sRdkdHUkNtWYIck0rTZofJfSen8iEFQbv67obf/12skPiUEoeakiyajotmA8fowcrC 6xRKoSE+EcgWEMtXpMT5jXoWOD4FaCD8bu9Eb3bMzBx5vTJFS0ldsVhE8ydMWPRzGwBsyaeGUpE 9Cfbu7FNwel39tvCmOW71AAc0osqq+BF7DqqKWQ8u+S1gKrleYV3GiZ5EPtDf6qD7tnh8dB0lO6 5gmSSyg/1Lj1es/PSbQ0nr/Sgc3xN3DBnsJBwI+ReSNBLhW+bceOxr1c5IEJA4O0RrO0y2Cqm9O rYr/UPOqTwAEQ5Kq9QPGeNJsa8PIe3lPGP2+hyrF26YbJeEiGqEtnUFr8I+wxXsv/owydi5VTbG XnHNXSpjS8SwBkF X-Received: by 2002:a17:90b:520c:b0:37f:ed7e:7e42 with SMTP id 98e67ed59e1d1-395c3867ac5mr44826268a91.14.1787550629724; Sun, 23 Aug 2026 22:50:29 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 42/96] disas/riscv: Set dec->opcode_data in decode function Date: Mon, 24 Aug 2026 15:47:12 +1000 Message-ID: <20260824054806.2790041-43-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1030; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1030.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550737327158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson This allows each opcode table to be private to the decode file. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-10-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv-xlrbr.h | 2 -- disas/riscv-xthead.h | 2 -- disas/riscv-xventana.h | 2 -- disas/riscv-xlrbr.c | 4 +++- disas/riscv-xthead.c | 13 ++++++++++++- disas/riscv-xventana.c | 3 ++- disas/riscv.c | 34 +++++++++++++++++----------------- 7 files changed, 34 insertions(+), 26 deletions(-) diff --git a/disas/riscv-xlrbr.h b/disas/riscv-xlrbr.h index 939a69ea6d..ebf3d4c133 100644 --- a/disas/riscv-xlrbr.h +++ b/disas/riscv-xlrbr.h @@ -12,8 +12,6 @@ =20 #include "disas/riscv.h" =20 -extern const rv_opcode_data rv_xlrbr_opcode_data[]; - void decode_xlrbr(rv_decode *, rv_isa); =20 #endif /* DISAS_RISCV_XLRBR_H */ diff --git a/disas/riscv-xthead.h b/disas/riscv-xthead.h index fcd42746e7..0c65c8e0af 100644 --- a/disas/riscv-xthead.h +++ b/disas/riscv-xthead.h @@ -11,8 +11,6 @@ =20 #include "disas/riscv.h" =20 -extern const rv_opcode_data xthead_opcode_data[]; - void decode_xtheadba(rv_decode *, rv_isa); void decode_xtheadbb(rv_decode *, rv_isa); void decode_xtheadbs(rv_decode *, rv_isa); diff --git a/disas/riscv-xventana.h b/disas/riscv-xventana.h index 72be9ffa16..1006c3be00 100644 --- a/disas/riscv-xventana.h +++ b/disas/riscv-xventana.h @@ -11,8 +11,6 @@ =20 #include "disas/riscv.h" =20 -extern const rv_opcode_data ventana_opcode_data[]; - void decode_xventanacondops(rv_decode*, rv_isa); =20 #endif /* DISAS_RISCV_XVENTANA_H */ diff --git a/disas/riscv-xlrbr.c b/disas/riscv-xlrbr.c index 57cb434523..f61028fce9 100644 --- a/disas/riscv-xlrbr.c +++ b/disas/riscv-xlrbr.c @@ -24,7 +24,7 @@ typedef enum { rv_op_crc32c_d =3D 8, } rv_xlrbr_op; =20 -const rv_opcode_data rv_xlrbr_opcode_data[] =3D { +static const rv_opcode_data xlrbr_opcode_data[] =3D { { "illegal", rv_codec_illegal, rv_fmt_none, NULL, 0, 0, 0 }, { "crc32.b", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, { "crc32.h", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, @@ -75,5 +75,7 @@ void decode_xlrbr(rv_decode *dec, rv_isa isa) } break; } + + dec->opcode_data =3D xlrbr_opcode_data; dec->op =3D op; } diff --git a/disas/riscv-xthead.c b/disas/riscv-xthead.c index 2f2ddb8dd9..96f80bc8e5 100644 --- a/disas/riscv-xthead.c +++ b/disas/riscv-xthead.c @@ -127,7 +127,7 @@ typedef enum { rv_op_th_sync_s, } rv_xthead_op; =20 -const rv_opcode_data xthead_opcode_data[] =3D { +static const rv_opcode_data xthead_opcode_data[] =3D { { "th.illegal", rv_codec_illegal, rv_fmt_none, NULL, 0, 0, 0 }, /* XTheadBa */ { "th.addsl", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, @@ -272,6 +272,7 @@ void decode_xtheadba(rv_decode *dec, rv_isa isa) break; } =20 + dec->opcode_data =3D xthead_opcode_data; dec->op =3D op; } =20 @@ -330,6 +331,7 @@ void decode_xtheadbb(rv_decode *dec, rv_isa isa) break; } =20 + dec->opcode_data =3D xthead_opcode_data; dec->op =3D op; } =20 @@ -356,6 +358,7 @@ void decode_xtheadbs(rv_decode *dec, rv_isa isa) break; } =20 + dec->opcode_data =3D xthead_opcode_data; dec->op =3D op; } =20 @@ -434,6 +437,7 @@ void decode_xtheadcmo(rv_decode *dec, rv_isa isa) break; } =20 + dec->opcode_data =3D xthead_opcode_data; dec->op =3D op; } =20 @@ -461,6 +465,7 @@ void decode_xtheadcondmov(rv_decode *dec, rv_isa isa) break; } =20 + dec->opcode_data =3D xthead_opcode_data; dec->op =3D op; } =20 @@ -498,6 +503,7 @@ void decode_xtheadfmemidx(rv_decode *dec, rv_isa isa) break; } =20 + dec->opcode_data =3D xthead_opcode_data; dec->op =3D op; } =20 @@ -533,6 +539,7 @@ void decode_xtheadfmv(rv_decode *dec, rv_isa isa) break; } =20 + dec->opcode_data =3D xthead_opcode_data; dec->op =3D op; } =20 @@ -564,6 +571,7 @@ void decode_xtheadmac(rv_decode *dec, rv_isa isa) break; } =20 + dec->opcode_data =3D xthead_opcode_data; dec->op =3D op; } =20 @@ -638,6 +646,7 @@ void decode_xtheadmemidx(rv_decode *dec, rv_isa isa) break; } =20 + dec->opcode_data =3D xthead_opcode_data; dec->op =3D op; } =20 @@ -672,6 +681,7 @@ void decode_xtheadmempair(rv_decode *dec, rv_isa isa) break; } =20 + dec->opcode_data =3D xthead_opcode_data; dec->op =3D op; } =20 @@ -706,5 +716,6 @@ void decode_xtheadsync(rv_decode *dec, rv_isa isa) break; } =20 + dec->opcode_data =3D xthead_opcode_data; dec->op =3D op; } diff --git a/disas/riscv-xventana.c b/disas/riscv-xventana.c index cd694f15f3..4539173d95 100644 --- a/disas/riscv-xventana.c +++ b/disas/riscv-xventana.c @@ -14,7 +14,7 @@ typedef enum { ventana_op_vt_maskcn =3D 2, } rv_ventana_op; =20 -const rv_opcode_data ventana_opcode_data[] =3D { +static const rv_opcode_data ventana_opcode_data[] =3D { { "vt.illegal", rv_codec_illegal, rv_fmt_none, NULL, 0, 0, 0 }, { "vt.maskc", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, { "vt.maskcn", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, @@ -38,5 +38,6 @@ void decode_xventanacondops(rv_decode *dec, rv_isa isa) break; } =20 + dec->opcode_data =3D ventana_opcode_data; dec->op =3D op; } diff --git a/disas/riscv.c b/disas/riscv.c index 9880b8de20..eb6d132a2c 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1656,7 +1656,7 @@ static uint32_t operand_lpl(rv_inst inst) =20 /* instruction metadata */ =20 -const rv_opcode_data rvi_opcode_data[] =3D { +static const rv_opcode_data rvi_opcode_data[] =3D { { "illegal", rv_codec_illegal, rv_fmt_none, NULL, 0, 0, 0 }, { "lui", rv_codec_u, rv_fmt_rd_uimm, NULL, 0, 0, 0 }, { "auipc", rv_codec_u, rv_fmt_rd_uoffset, NULL, 0, 0, 0 }, @@ -2948,6 +2948,7 @@ static void decode_inst_opcode(rv_decode *dec, rv_isa= isa) { rv_inst inst =3D dec->inst; rv_opcode op =3D rv_op_illegal; + switch ((inst >> 0) & 0b11) { case 0: switch ((inst >> 13) & 0b111) { @@ -4590,6 +4591,8 @@ static void decode_inst_opcode(rv_decode *dec, rv_isa= isa) } break; } + + dec->opcode_data =3D rvi_opcode_data; dec->op =3D op; } =20 @@ -5421,33 +5424,30 @@ static GString *disasm_inst(rv_isa isa, uint64_t pc= , rv_inst inst, }; const rv_opcode_data *op; =20 - dec.opcode_data =3D rvi_opcode_data; decode_inst_opcode(&dec, isa); =20 if (dec.op =3D=3D rv_op_illegal && cfg) { static const struct { bool (*guard_func)(const RISCVCPUConfig *); - const rv_opcode_data *opcode_data; void (*decode_func)(rv_decode *, rv_isa); } decoders[] =3D { - { has_xtheadba_p, xthead_opcode_data, decode_xtheadba }, - { has_xtheadbb_p, xthead_opcode_data, decode_xtheadbb }, - { has_xtheadbs_p, xthead_opcode_data, decode_xtheadbs }, - { has_xtheadcmo_p, xthead_opcode_data, decode_xtheadcmo }, - { has_xtheadcondmov_p, xthead_opcode_data, decode_xtheadcondmo= v }, - { has_xtheadfmemidx_p, xthead_opcode_data, decode_xtheadfmemid= x }, - { has_xtheadfmv_p, xthead_opcode_data, decode_xtheadfmv }, - { has_xtheadmac_p, xthead_opcode_data, decode_xtheadmac }, - { has_xtheadmemidx_p, xthead_opcode_data, decode_xtheadmemidx = }, - { has_xtheadmempair_p, xthead_opcode_data, decode_xtheadmempai= r }, - { has_xtheadsync_p, xthead_opcode_data, decode_xtheadsync }, - { has_XVentanaCondOps_p, ventana_opcode_data, decode_xventanac= ondops }, - { has_xlrbr_p, rv_xlrbr_opcode_data, decode_xlrbr }, + { has_xtheadba_p, decode_xtheadba }, + { has_xtheadbb_p, decode_xtheadbb }, + { has_xtheadbs_p, decode_xtheadbs }, + { has_xtheadcmo_p, decode_xtheadcmo }, + { has_xtheadcondmov_p, decode_xtheadcondmov }, + { has_xtheadfmemidx_p, decode_xtheadfmemidx }, + { has_xtheadfmv_p, decode_xtheadfmv }, + { has_xtheadmac_p, decode_xtheadmac }, + { has_xtheadmemidx_p, decode_xtheadmemidx }, + { has_xtheadmempair_p, decode_xtheadmempair }, + { has_xtheadsync_p, decode_xtheadsync }, + { has_XVentanaCondOps_p, decode_xventanacondops }, + { has_xlrbr_p, decode_xlrbr }, }; =20 for (size_t i =3D 0; i < ARRAY_SIZE(decoders); i++) { if (decoders[i].guard_func(cfg)) { - dec.opcode_data =3D decoders[i].opcode_data; decoders[i].decode_func(&dec, isa); if (dec.op !=3D rv_op_illegal) { break; --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551296; cv=none; d=zohomail.com; s=zohoarc; b=HCfDbEx/UQmQMqbntgIkyMpl2dzbgmqKwhERjUyDAnOlS16I79lHIi99+Lq8t2sUjdVGYPPhXpFlprASt4gFqShScYCODLQTPxmKBrqyFukdU7QFzAd3Y4+dmyeK7cXzGbLCNSbLEtfV/6sWOicRJKtlvYXyTYulq2bSFjcIGso= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551296; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=KzYlE6NRpHzxIO5tp2LGbdAwVUy14ecn+rwbu6SIIug=; b=JP/OCWzxKFYGGphtWsbOVs40lYBTRQHFw6BVPiMzonb73YiAcjeBqIY8ov62NfgdkuYw2jVxOQzd7pa8LW7uzqpkzbEG8hqI2CVnyfB7VcnMzeN7rSb6ddhMoVbOI2RU9RCPZYbT5GSErWyJsKFC2FLf3OeFqovE6CElr+mS8zE= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551296140234.3761647987683; Sun, 23 Aug 2026 23:01:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbO-0005DN-CO; Mon, 24 Aug 2026 01:52:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNZy-0003SA-AS for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:43 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNZs-0002Ts-Vh for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:42 -0400 Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-2caed617615so30703755ad.3 for ; Sun, 23 Aug 2026 22:50:36 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550635; x=1788155435; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=KzYlE6NRpHzxIO5tp2LGbdAwVUy14ecn+rwbu6SIIug=; b=HGfZiZqlaUDG4KBIls9nDYNGGSco5A/MJUqM1AgD8J6wV0HieB6l2nrt2l31Xg2rHW 8e70Il8RRzWvCvCvxn5+yTFvl7pnh0wvDMrOhrRp7+NgC33i1kJOI7qXb7+B1FsxIXFB 3ozu54xlytbYQuUrBVnUg4Oj1xYbEfvvtPr6t1xjmOEDtTmXEIDxZHxOJjBJWGvyRamX jiGCtgwwNqluF0FoVzWdsHomyCRj1NN+e1wUd2n+I/4KTZpvWj1upoleWphrqjztAoGu icqwQTCRSxkIvw09Vpd3M4KawDwh+4MGI54YVbFXQsjWkLx6PHctx9roKX34dZ8ERfo3 KLmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550635; x=1788155435; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=KzYlE6NRpHzxIO5tp2LGbdAwVUy14ecn+rwbu6SIIug=; b=l1cEUZBBIzeYxSvgbKPVk7MhcPniO9T/sXcQ9oPAO8KB68yIZqTCoomRcCxqYyhbQC 5HEiV7blIw1CGr2u98dn7p37I1wViZRxuZ/x11dFGCYtXLrE6S31a2vlftMVAIoeytg2 p9B+mORmSewwhdTKfRKwB37bGzgqGSiLfjCC8k+7ShItxC65LR7moBrWXKabKBXqkWlG oaooVbTECZwkwEw3tTXfdx0HCT/e+kvMYOQWFdK15nJjoaoiDgGrjgrh9qKdmgEmB1IR YQsacaJb+0Tpx+jj9E2AY++GAUR5d6CZyI9hbJtcTFl78YRnVvfeM7ddvyyq4NGC8rM4 9mJg== X-Gm-Message-State: AFuF++lIBQnAC+6sDNKb39RMIKFUjmLnezoChWSpIlvAUsD4PNQi7gMX NfFdw3oCQQAfTpLGJAoflQQlz6C6OPiqil8hgajRvhXAOcF+l79fWM4lGFn0Tg== X-Gm-Gg: AR+sD13X+UAaaUNf/o8FDI1yoQAHsdtN7cxg4IhX8yH19dWEyqjXCom7p7skntxhC+V POW02JN3uAYqyabki6OSRjhKNMiJ+YG1T/mTJCSNUUdYerophBXaWLE2+5ixbvsFotgT73FhRGw zbiWpfn34dZEJiIgsdqzqs4u5MtZ6KRQT4et2BS0LB9cJhlcz1MN+uYEUfIlUzlzFKqptCDg8CT eM5+tEr6BBOGpAlwePHl7f2GXEnNnJfCUMrE44+i9T6TG5pq1eVy544YwrsVS9VH7Yx4ETSL5Jf /cyvCyH0ckzhpGC3+Y8Ur3QDfazegpKGJL8A+ZhnP1yFS/iFx+ZKAg4KUBhdk3RavXK9LNRyA/c 4hKvOdv9aud4x7ip82zgTIj6qFaJOALFnjFIqKhbBkz0q4KZnKI+KQCUB8BMqBsHT4c7PkOY3XD ACR13ymDWiSiMj//ku/r0Qnzxp+GtCO+YQJXIhPpHUhIpumIJkRWxFbhSWLSiu5OUsy+lZbFZ25 Gr8CQ== X-Received: by 2002:a17:90b:3fc5:b0:38d:eaec:4396 with SMTP id 98e67ed59e1d1-395df5ec7a7mr27896605a91.11.1787550634056; Sun, 23 Aug 2026 22:50:34 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 43/96] disas/riscv: Drop explicit zero of rv_opcode_data fields Date: Mon, 24 Aug 2026 15:47:13 +1000 Message-ID: <20260824054806.2790041-44-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::634; envelope-from=alistair23@gmail.com; helo=mail-pl1-x634.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551297837158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Mechanical s/, NULL, 0, 0, 0 }/ }/ s/, 0, 0, 0 }/ }/ s/, NULL, 0, 0 }/ }/ s/, NULL, 0 }/ }/ Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-11-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv-xlrbr.c | 18 +- disas/riscv-xthead.c | 210 ++--- disas/riscv-xventana.c | 6 +- disas/riscv.c | 1826 ++++++++++++++++++++-------------------- 4 files changed, 1030 insertions(+), 1030 deletions(-) diff --git a/disas/riscv-xlrbr.c b/disas/riscv-xlrbr.c index f61028fce9..d0092e9edd 100644 --- a/disas/riscv-xlrbr.c +++ b/disas/riscv-xlrbr.c @@ -25,15 +25,15 @@ typedef enum { } rv_xlrbr_op; =20 static const rv_opcode_data xlrbr_opcode_data[] =3D { - { "illegal", rv_codec_illegal, rv_fmt_none, NULL, 0, 0, 0 }, - { "crc32.b", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "crc32.h", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "crc32.w", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "crc32.d", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "crc32c.b", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "crc32c.h", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "crc32c.w", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "crc32c.d", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, + { "illegal", rv_codec_illegal, rv_fmt_none }, + { "crc32.b", rv_codec_r, rv_fmt_rd_rs1 }, + { "crc32.h", rv_codec_r, rv_fmt_rd_rs1 }, + { "crc32.w", rv_codec_r, rv_fmt_rd_rs1 }, + { "crc32.d", rv_codec_r, rv_fmt_rd_rs1 }, + { "crc32c.b", rv_codec_r, rv_fmt_rd_rs1 }, + { "crc32c.h", rv_codec_r, rv_fmt_rd_rs1 }, + { "crc32c.w", rv_codec_r, rv_fmt_rd_rs1 }, + { "crc32c.d", rv_codec_r, rv_fmt_rd_rs1 }, }; =20 void decode_xlrbr(rv_decode *dec, rv_isa isa) diff --git a/disas/riscv-xthead.c b/disas/riscv-xthead.c index 96f80bc8e5..757d6ff39f 100644 --- a/disas/riscv-xthead.c +++ b/disas/riscv-xthead.c @@ -128,122 +128,122 @@ typedef enum { } rv_xthead_op; =20 static const rv_opcode_data xthead_opcode_data[] =3D { - { "th.illegal", rv_codec_illegal, rv_fmt_none, NULL, 0, 0, 0 }, + { "th.illegal", rv_codec_illegal, rv_fmt_none }, /* XTheadBa */ - { "th.addsl", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, + { "th.addsl", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, /* XTheadBb */ - { "th.srri", rv_codec_r2_imm6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "th.srriw", rv_codec_r2_imm5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "th.ext", rv_codec_r2_immhl, rv_fmt_rd_rs1_immh_imml, NULL, 0, 0, 0 = }, - { "th.extu", rv_codec_r2_immhl, rv_fmt_rd_rs1_immh_imml, NULL, 0, 0, 0= }, - { "th.ff0", rv_codec_r2, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "th.ff1", rv_codec_r2, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "th.rev", rv_codec_r2, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "th.revw", rv_codec_r2, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "th.tstnbz", rv_codec_r2, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, + { "th.srri", rv_codec_r2_imm6, rv_fmt_rd_rs1_imm }, + { "th.srriw", rv_codec_r2_imm5, rv_fmt_rd_rs1_imm }, + { "th.ext", rv_codec_r2_immhl, rv_fmt_rd_rs1_immh_imml }, + { "th.extu", rv_codec_r2_immhl, rv_fmt_rd_rs1_immh_imml }, + { "th.ff0", rv_codec_r2, rv_fmt_rd_rs1 }, + { "th.ff1", rv_codec_r2, rv_fmt_rd_rs1 }, + { "th.rev", rv_codec_r2, rv_fmt_rd_rs1 }, + { "th.revw", rv_codec_r2, rv_fmt_rd_rs1 }, + { "th.tstnbz", rv_codec_r2, rv_fmt_rd_rs1 }, /* XTheadBs */ - { "th.tst", rv_codec_r2_imm6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, + { "th.tst", rv_codec_r2_imm6, rv_fmt_rd_rs1_imm }, /* XTheadCmo */ - { "th.dcache.call", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "th.dcache.ciall", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "th.dcache.iall", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "th.dcache.cpa", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, - { "th.dcache.cipa", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, - { "th.dcache.ipa", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, - { "th.dcache.cva", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, - { "th.dcache.civa", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, - { "th.dcache.iva", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, - { "th.dcache.csw", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, - { "th.dcache.cisw", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, - { "th.dcache.isw", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, - { "th.dcache.cpal1", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, - { "th.dcache.cval1", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, - { "th.icache.iall", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "th.icache.ialls", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "th.icache.ipa", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, - { "th.icache.iva", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, - { "th.l2cache.call", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "th.l2cache.ciall", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "th.l2cache.iall", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, + { "th.dcache.call", rv_codec_none, rv_fmt_none }, + { "th.dcache.ciall", rv_codec_none, rv_fmt_none }, + { "th.dcache.iall", rv_codec_none, rv_fmt_none }, + { "th.dcache.cpa", rv_codec_r, rv_fmt_rs1 }, + { "th.dcache.cipa", rv_codec_r, rv_fmt_rs1 }, + { "th.dcache.ipa", rv_codec_r, rv_fmt_rs1 }, + { "th.dcache.cva", rv_codec_r, rv_fmt_rs1 }, + { "th.dcache.civa", rv_codec_r, rv_fmt_rs1 }, + { "th.dcache.iva", rv_codec_r, rv_fmt_rs1 }, + { "th.dcache.csw", rv_codec_r, rv_fmt_rs1 }, + { "th.dcache.cisw", rv_codec_r, rv_fmt_rs1 }, + { "th.dcache.isw", rv_codec_r, rv_fmt_rs1 }, + { "th.dcache.cpal1", rv_codec_r, rv_fmt_rs1 }, + { "th.dcache.cval1", rv_codec_r, rv_fmt_rs1 }, + { "th.icache.iall", rv_codec_none, rv_fmt_none }, + { "th.icache.ialls", rv_codec_none, rv_fmt_none }, + { "th.icache.ipa", rv_codec_r, rv_fmt_rs1 }, + { "th.icache.iva", rv_codec_r, rv_fmt_rs1 }, + { "th.l2cache.call", rv_codec_none, rv_fmt_none }, + { "th.l2cache.ciall", rv_codec_none, rv_fmt_none }, + { "th.l2cache.iall", rv_codec_none, rv_fmt_none }, /* XTheadCondMov */ - { "th.mveqz", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "th.mvnez", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, + { "th.mveqz", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "th.mvnez", rv_codec_r, rv_fmt_rd_rs1_rs2 }, /* XTheadFMemIdx */ - { "th.flrd", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.flrw", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.flurd", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.flurw", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.fsrd", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.fsrw", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.fsurd", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.fsurw", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm, NULL, 0, 0, 0 }, + { "th.flrd", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm }, + { "th.flrw", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm }, + { "th.flurd", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm }, + { "th.flurw", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm }, + { "th.fsrd", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm }, + { "th.fsrw", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm }, + { "th.fsurd", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm }, + { "th.fsurw", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm }, /* XTheadFmv */ - { "th.fmv.hw.x", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, - { "th.fmv.x.hw", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, + { "th.fmv.hw.x", rv_codec_r, rv_fmt_rd_frs1 }, + { "th.fmv.x.hw", rv_codec_r, rv_fmt_rd_frs1 }, /* XTheadMac */ - { "th.mula", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "th.mulaw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "th.mulah", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "th.muls", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "th.mulsw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "th.mulsh", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, + { "th.mula", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "th.mulaw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "th.mulah", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "th.muls", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "th.mulsw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "th.mulsh", rv_codec_r, rv_fmt_rd_rs1_rs2 }, /* XTheadMemIdx */ - { "th.lbia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NULL= , 0, 0, 0 }, - { "th.lbib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml, NULL, 0, = 0, 0 }, - { "th.lbuia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NUL= L, 0, 0, 0 }, - { "th.lbuib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NUL= L, 0, 0, 0 }, - { "th.lhia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NULL= , 0, 0, 0 }, - { "th.lhib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NULL= , 0, 0, 0 }, - { "th.lhuia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NUL= L, 0, 0, 0 }, - { "th.lhuib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NUL= L, 0, 0, 0 }, - { "th.lwia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NULL= , 0, 0, 0 }, - { "th.lwib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NULL= , 0, 0, 0 }, - { "th.lwuia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NUL= L, 0, 0, 0 }, - { "th.lwuib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NUL= L, 0, 0, 0 }, - { "th.ldia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NULL= , 0, 0, 0 }, - { "th.ldib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NULL= , 0, 0, 0 }, - { "th.sbia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NULL= , 0, 0, 0 }, - { "th.sbib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NULL= , 0, 0, 0 }, - { "th.shia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NULL= , 0, 0, 0 }, - { "th.shib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NULL= , 0, 0, 0 }, - { "th.swia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NULL= , 0, 0, 0 }, - { "th.swib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NULL= , 0, 0, 0 }, - { "th.sdia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NULL= , 0, 0, 0 }, - { "th.sdib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr, NULL= , 0, 0, 0 }, - { "th.lrb", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.lrbu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.lrh", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.lrhu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.lrw", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.lrwu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.lrd", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.srb", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.srh", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.srw", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.srd", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.lurb", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.lurbu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.lurh", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.lurhu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.lurw", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.lurwu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.lurd", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.surb", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.surh", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.surw", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, - { "th.surd", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm, NULL, 0, 0, 0 }, + { "th.lbia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.lbib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml }, + { "th.lbuia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.lbuib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.lhia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.lhib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.lhuia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.lhuib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.lwia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.lwib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.lwuia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.lwuib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.ldia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.ldib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.sbia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.sbib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.shia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.shib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.swia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.swib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.sdia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.sdib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, + { "th.lrb", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.lrbu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.lrh", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.lrhu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.lrw", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.lrwu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.lrd", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.srb", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.srh", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.srw", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.srd", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.lurb", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.lurbu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.lurh", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.lurhu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.lurw", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.lurwu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.lurd", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.surb", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.surh", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.surw", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, + { "th.surd", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, /* XTheadMemPair */ - { "th.ldd", rv_codec_r_imm2, rv_fmt_rd2_imm, NULL, 0, 0, 0 }, - { "th.lwd", rv_codec_r_imm2, rv_fmt_rd2_imm, NULL, 0, 0, 0 }, - { "th.lwud", rv_codec_r_imm2, rv_fmt_rd2_imm, NULL, 0, 0, 0 }, - { "th.sdd", rv_codec_r_imm2, rv_fmt_rd2_imm, NULL, 0, 0, 0 }, - { "th.swd", rv_codec_r_imm2, rv_fmt_rd2_imm, NULL, 0, 0, 0 }, + { "th.ldd", rv_codec_r_imm2, rv_fmt_rd2_imm }, + { "th.lwd", rv_codec_r_imm2, rv_fmt_rd2_imm }, + { "th.lwud", rv_codec_r_imm2, rv_fmt_rd2_imm }, + { "th.sdd", rv_codec_r_imm2, rv_fmt_rd2_imm }, + { "th.swd", rv_codec_r_imm2, rv_fmt_rd2_imm }, /* XTheadSync */ - { "th.sfence.vmas", rv_codec_r, rv_fmt_rs1_rs2, NULL, 0, 0, 0 }, - { "th.sync", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "th.sync.i", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "th.sync.is", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "th.sync.s", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, + { "th.sfence.vmas", rv_codec_r, rv_fmt_rs1_rs2 }, + { "th.sync", rv_codec_none, rv_fmt_none }, + { "th.sync.i", rv_codec_none, rv_fmt_none }, + { "th.sync.is", rv_codec_none, rv_fmt_none }, + { "th.sync.s", rv_codec_none, rv_fmt_none }, }; =20 void decode_xtheadba(rv_decode *dec, rv_isa isa) diff --git a/disas/riscv-xventana.c b/disas/riscv-xventana.c index 4539173d95..4fb9a29d0b 100644 --- a/disas/riscv-xventana.c +++ b/disas/riscv-xventana.c @@ -15,9 +15,9 @@ typedef enum { } rv_ventana_op; =20 static const rv_opcode_data ventana_opcode_data[] =3D { - { "vt.illegal", rv_codec_illegal, rv_fmt_none, NULL, 0, 0, 0 }, - { "vt.maskc", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "vt.maskcn", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, + { "vt.illegal", rv_codec_illegal, rv_fmt_none }, + { "vt.maskc", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "vt.maskcn", rv_codec_r, rv_fmt_rd_rs1_rs2 }, }; =20 void decode_xventanacondops(rv_decode *dec, rv_isa isa) diff --git a/disas/riscv.c b/disas/riscv.c index eb6d132a2c..ec40abb618 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1657,233 +1657,233 @@ static uint32_t operand_lpl(rv_inst inst) /* instruction metadata */ =20 static const rv_opcode_data rvi_opcode_data[] =3D { - { "illegal", rv_codec_illegal, rv_fmt_none, NULL, 0, 0, 0 }, - { "lui", rv_codec_u, rv_fmt_rd_uimm, NULL, 0, 0, 0 }, - { "auipc", rv_codec_u, rv_fmt_rd_uoffset, NULL, 0, 0, 0 }, - { "jal", rv_codec_uj, rv_fmt_rd_offset, rvcp_jal, 0, 0, 0 }, - { "jalr", rv_codec_i, rv_fmt_rd_rs1_offset, rvcp_jalr, 0, 0, 0 }, - { "beq", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_beq, 0, 0, 0 }, - { "bne", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bne, 0, 0, 0 }, - { "blt", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_blt, 0, 0, 0 }, - { "bge", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bge, 0, 0, 0 }, - { "bltu", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bltu, 0, 0, 0 }, - { "bgeu", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bgeu, 0, 0, 0 }, - { "lb", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, - { "lh", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, - { "lw", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, - { "lbu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, - { "lhu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, - { "sb", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 }, - { "sh", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 }, - { "sw", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 }, - { "addi", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addi, 0, 0, 0 }, - { "slti", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "sltiu", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_sltiu, 0, 0, 0 }, - { "xori", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_xori, 0, 0, 0 }, - { "ori", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "andi", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "slli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "srli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "srai", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "sub", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sub, 0, 0, 0 }, - { "sll", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "slt", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_slt, 0, 0, 0 }, - { "sltu", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sltu, 0, 0, 0 }, - { "xor", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "srl", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "sra", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "or", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "and", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "fence", rv_codec_r_f, rv_fmt_pred_succ, NULL, 0, 0, 0 }, - { "fence.i", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "lwu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, - { "ld", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, - { "sd", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 }, - { "addiw", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addiw, 0, 0, 0 }, - { "slliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "srliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "sraiw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "addw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "subw", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_subw, 0, 0, 0 }, - { "sllw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "srlw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "sraw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "ldu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, - { "lq", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, - { "sq", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 }, - { "addid", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "sllid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "srlid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "sraid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "addd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "subd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "slld", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "srld", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "srad", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "mul", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "mulh", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "mulhsu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "mulhu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "div", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "divu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "rem", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "remu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "mulw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "divw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "divuw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "remw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "remuw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "muld", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "divd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "divud", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "remd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "remud", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "lr.w", rv_codec_r_l, rv_fmt_aqrl_rd_rs1, NULL, 0, 0, 0 }, - { "sc.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoadd.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoxor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoand.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amomin.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amomax.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amominu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amomaxu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "lr.d", rv_codec_r_l, rv_fmt_aqrl_rd_rs1, NULL, 0, 0, 0 }, - { "sc.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoadd.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoxor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoand.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amomin.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amomax.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amominu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amomaxu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "lr.q", rv_codec_r_l, rv_fmt_aqrl_rd_rs1, NULL, 0, 0, 0 }, - { "sc.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoswap.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoadd.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoxor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoand.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amomin.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amomax.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amominu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amomaxu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "ecall", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "ebreak", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "uret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "sret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "hret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "mret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "dret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "sfence.vm", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, - { "sfence.vma", rv_codec_r, rv_fmt_rs1_rs2, NULL, 0, 0, 0 }, - { "wfi", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "csrrw", rv_codec_i_csr, rv_fmt_rd_csr_rs1, rvcp_csrrw, 0, 0, 0 }, - { "csrrs", rv_codec_i_csr, rv_fmt_rd_csr_rs1, rvcp_csrrs, 0, 0, 0 }, - { "csrrc", rv_codec_i_csr, rv_fmt_rd_csr_rs1, NULL, 0, 0, 0 }, - { "csrrwi", rv_codec_i_csr, rv_fmt_rd_csr_zimm, rvcp_csrrwi, 0, 0, 0 }, - { "csrrsi", rv_codec_i_csr, rv_fmt_rd_csr_zimm, NULL, 0, 0, 0 }, - { "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 }, - { "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 }, - { "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 }, - { "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 }, - { "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 }, - { "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 }, - { "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 }, - { "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 }, - { "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 }, - { "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 }, - { "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 }, - { "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 }, - { "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 }, - { "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 }, + { "illegal", rv_codec_illegal, rv_fmt_none }, + { "lui", rv_codec_u, rv_fmt_rd_uimm }, + { "auipc", rv_codec_u, rv_fmt_rd_uoffset }, + { "jal", rv_codec_uj, rv_fmt_rd_offset, rvcp_jal }, + { "jalr", rv_codec_i, rv_fmt_rd_rs1_offset, rvcp_jalr }, + { "beq", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_beq }, + { "bne", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bne }, + { "blt", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_blt }, + { "bge", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bge }, + { "bltu", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bltu }, + { "bgeu", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bgeu }, + { "lb", rv_codec_i, rv_fmt_rd_offset_rs1 }, + { "lh", rv_codec_i, rv_fmt_rd_offset_rs1 }, + { "lw", rv_codec_i, rv_fmt_rd_offset_rs1 }, + { "lbu", rv_codec_i, rv_fmt_rd_offset_rs1 }, + { "lhu", rv_codec_i, rv_fmt_rd_offset_rs1 }, + { "sb", rv_codec_s, rv_fmt_rs2_offset_rs1 }, + { "sh", rv_codec_s, rv_fmt_rs2_offset_rs1 }, + { "sw", rv_codec_s, rv_fmt_rs2_offset_rs1 }, + { "addi", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addi }, + { "slti", rv_codec_i, rv_fmt_rd_rs1_imm }, + { "sltiu", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_sltiu }, + { "xori", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_xori }, + { "ori", rv_codec_i, rv_fmt_rd_rs1_imm }, + { "andi", rv_codec_i, rv_fmt_rd_rs1_imm }, + { "slli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm }, + { "srli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm }, + { "srai", rv_codec_i_sh7, rv_fmt_rd_rs1_imm }, + { "add", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "sub", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sub }, + { "sll", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "slt", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_slt }, + { "sltu", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sltu }, + { "xor", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "srl", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "sra", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "or", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "and", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "fence", rv_codec_r_f, rv_fmt_pred_succ }, + { "fence.i", rv_codec_none, rv_fmt_none }, + { "lwu", rv_codec_i, rv_fmt_rd_offset_rs1 }, + { "ld", rv_codec_i, rv_fmt_rd_offset_rs1 }, + { "sd", rv_codec_s, rv_fmt_rs2_offset_rs1 }, + { "addiw", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addiw }, + { "slliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm }, + { "srliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm }, + { "sraiw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm }, + { "addw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "subw", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_subw }, + { "sllw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "srlw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "sraw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "ldu", rv_codec_i, rv_fmt_rd_offset_rs1 }, + { "lq", rv_codec_i, rv_fmt_rd_offset_rs1 }, + { "sq", rv_codec_s, rv_fmt_rs2_offset_rs1 }, + { "addid", rv_codec_i, rv_fmt_rd_rs1_imm }, + { "sllid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm }, + { "srlid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm }, + { "sraid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm }, + { "addd", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "subd", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "slld", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "srld", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "srad", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "mul", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "mulh", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "mulhsu", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "mulhu", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "div", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "divu", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "rem", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "remu", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "mulw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "divw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "divuw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "remw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "remuw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "muld", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "divd", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "divud", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "remd", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "remud", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "lr.w", rv_codec_r_l, rv_fmt_aqrl_rd_rs1 }, + { "sc.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoadd.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoxor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoand.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amomin.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amomax.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amominu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amomaxu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "lr.d", rv_codec_r_l, rv_fmt_aqrl_rd_rs1 }, + { "sc.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoadd.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoxor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoand.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amomin.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amomax.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amominu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amomaxu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "lr.q", rv_codec_r_l, rv_fmt_aqrl_rd_rs1 }, + { "sc.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoswap.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoadd.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoxor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoand.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amomin.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amomax.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amominu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amomaxu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "ecall", rv_codec_none, rv_fmt_none }, + { "ebreak", rv_codec_none, rv_fmt_none }, + { "uret", rv_codec_none, rv_fmt_none }, + { "sret", rv_codec_none, rv_fmt_none }, + { "hret", rv_codec_none, rv_fmt_none }, + { "mret", rv_codec_none, rv_fmt_none }, + { "dret", rv_codec_none, rv_fmt_none }, + { "sfence.vm", rv_codec_r, rv_fmt_rs1 }, + { "sfence.vma", rv_codec_r, rv_fmt_rs1_rs2 }, + { "wfi", rv_codec_none, rv_fmt_none }, + { "csrrw", rv_codec_i_csr, rv_fmt_rd_csr_rs1, rvcp_csrrw }, + { "csrrs", rv_codec_i_csr, rv_fmt_rd_csr_rs1, rvcp_csrrs }, + { "csrrc", rv_codec_i_csr, rv_fmt_rd_csr_rs1 }, + { "csrrwi", rv_codec_i_csr, rv_fmt_rd_csr_zimm, rvcp_csrrwi }, + { "csrrsi", rv_codec_i_csr, rv_fmt_rd_csr_zimm }, + { "csrrci", rv_codec_i_csr, rv_fmt_rd_csr_zimm }, + { "flw", rv_codec_i, rv_fmt_frd_offset_rs1 }, + { "fsw", rv_codec_s, rv_fmt_frs2_offset_rs1 }, + { "fmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, + { "fmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, + { "fnmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, + { "fnmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, + { "fadd.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, + { "fsub.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, + { "fmul.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, + { "fdiv.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, + { "fsgnj.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_s }, + { "fsgnjn.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_s }, + { "fsgnjx.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_s }, + { "fmin.s", rv_codec_r, rv_fmt_frd_frs1_frs2 }, + { "fmax.s", rv_codec_r, rv_fmt_frd_frs1_frs2 }, + { "fsqrt.s", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, + { "fle.s", rv_codec_r, rv_fmt_rd_frs1_frs2 }, + { "flt.s", rv_codec_r, rv_fmt_rd_frs1_frs2 }, + { "feq.s", rv_codec_r, rv_fmt_rd_frs1_frs2 }, + { "fcvt.w.s", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, + { "fcvt.wu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, + { "fcvt.s.w", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, + { "fcvt.s.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, + { "fmv.x.s", rv_codec_r, rv_fmt_rd_frs1 }, + { "fclass.s", rv_codec_r, rv_fmt_rd_frs1 }, + { "fmv.s.x", rv_codec_r, rv_fmt_frd_rs1 }, + { "fcvt.l.s", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, + { "fcvt.lu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, + { "fcvt.s.l", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, + { "fcvt.s.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, + { "fld", rv_codec_i, rv_fmt_frd_offset_rs1 }, + { "fsd", rv_codec_s, rv_fmt_frs2_offset_rs1 }, + { "fmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, + { "fmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, + { "fnmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, + { "fnmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, + { "fadd.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, + { "fsub.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, + { "fmul.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, + { "fdiv.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, + { "fsgnj.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_d }, + { "fsgnjn.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_d }, + { "fsgnjx.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_d }, + { "fmin.d", rv_codec_r, rv_fmt_frd_frs1_frs2 }, + { "fmax.d", rv_codec_r, rv_fmt_frd_frs1_frs2 }, + { "fcvt.s.d", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, + { "fcvt.d.s", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, + { "fsqrt.d", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, + { "fle.d", rv_codec_r, rv_fmt_rd_frs1_frs2 }, + { "flt.d", rv_codec_r, rv_fmt_rd_frs1_frs2 }, + { "feq.d", rv_codec_r, rv_fmt_rd_frs1_frs2 }, + { "fcvt.w.d", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, + { "fcvt.wu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, + { "fcvt.d.w", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, + { "fcvt.d.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, + { "fclass.d", rv_codec_r, rv_fmt_rd_frs1 }, + { "fcvt.l.d", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, + { "fcvt.lu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, + { "fmv.x.d", rv_codec_r, rv_fmt_rd_frs1 }, + { "fcvt.d.l", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, + { "fcvt.d.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, + { "fmv.d.x", rv_codec_r, rv_fmt_frd_rs1 }, + { "flq", rv_codec_i, rv_fmt_frd_offset_rs1 }, + { "fsq", rv_codec_s, rv_fmt_frs2_offset_rs1 }, + { "fmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, + { "fmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, + { "fnmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, + { "fnmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, + { "fadd.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, + { "fsub.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, + { "fmul.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, + { "fdiv.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, + { "fsgnj.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_q }, + { "fsgnjn.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_q }, + { "fsgnjx.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_q }, + { "fmin.q", rv_codec_r, rv_fmt_frd_frs1_frs2 }, + { "fmax.q", rv_codec_r, rv_fmt_frd_frs1_frs2 }, + { "fcvt.s.q", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, + { "fcvt.q.s", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, + { "fcvt.d.q", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, + { "fcvt.q.d", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, + { "fsqrt.q", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, + { "fle.q", rv_codec_r, rv_fmt_rd_frs1_frs2 }, + { "flt.q", rv_codec_r, rv_fmt_rd_frs1_frs2 }, + { "feq.q", rv_codec_r, rv_fmt_rd_frs1_frs2 }, + { "fcvt.w.q", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, + { "fcvt.wu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, + { "fcvt.q.w", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, + { "fcvt.q.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, + { "fclass.q", rv_codec_r, rv_fmt_rd_frs1 }, + { "fcvt.l.q", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, + { "fcvt.lu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, + { "fcvt.q.l", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, + { "fcvt.q.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, + { "fmv.x.q", rv_codec_r, rv_fmt_rd_frs1 }, + { "fmv.q.x", rv_codec_r, rv_fmt_frd_rs1 }, { "c.addi4spn", rv_codec_ciw_4spn, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, rv_op_addi, rv_op_addi, rvcd_imm_nz }, { "c.fld", rv_codec_cl_ld, rv_fmt_frd_offset_rs1, NULL, rv_op_fld, @@ -1970,696 +1970,696 @@ static const rv_opcode_data rvi_opcode_data[] =3D= { { "c.lqsp", rv_codec_ci_lqsp, rv_fmt_rd_offset_rs1, NULL, 0, 0, rv_op_= lq }, { "c.sqsp", rv_codec_css_sqsp, rv_fmt_rs2_offset_rs1, NULL, 0, 0, rv_op_sq }, - { "nop", rv_codec_i, rv_fmt_none, NULL, 0, 0, 0 }, - { "mv", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "not", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "neg", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, - { "negw", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, - { "sext.w", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "seqz", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "snez", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, - { "sltz", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "sgtz", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, - { "fmv.s", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, - { "fabs.s", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, - { "fneg.s", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, - { "fmv.d", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, - { "fabs.d", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, - { "fneg.d", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, - { "fmv.q", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, - { "fabs.q", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, - { "fneg.q", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, - { "beqz", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 }, - { "bnez", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 }, - { "blez", rv_codec_sb, rv_fmt_rs2_offset, NULL, 0, 0, 0 }, - { "bgez", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 }, - { "bltz", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 }, - { "bgtz", rv_codec_sb, rv_fmt_rs2_offset, NULL, 0, 0, 0 }, - { "ble", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 }, - { "bleu", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 }, - { "bgt", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 }, - { "bgtu", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 }, - { "j", rv_codec_uj, rv_fmt_offset, NULL, 0, 0, 0 }, - { "ret", rv_codec_i, rv_fmt_none, NULL, 0, 0, 0 }, - { "jr", rv_codec_i, rv_fmt_rs1, NULL, 0, 0, 0 }, - { "rdcycle", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, - { "rdtime", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, - { "rdinstret", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, - { "rdcycleh", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, - { "rdtimeh", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, - { "rdinstreth", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, - { "frcsr", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, - { "frrm", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, - { "frflags", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, - { "fscsr", rv_codec_i_csr, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "fsrm", rv_codec_i_csr, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "fsflags", rv_codec_i_csr, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "fsrmi", rv_codec_i_csr, rv_fmt_rd_zimm, NULL, 0, 0, 0 }, - { "fsflagsi", rv_codec_i_csr, rv_fmt_rd_zimm, NULL, 0, 0, 0 }, - { "bseti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "bclri", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "binvi", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "bexti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "rori", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "clz", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "ctz", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "cpop", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "sext.h", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "sext.b", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "xnor", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "orn", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "andn", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "rol", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "ror", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "sh1add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "sh2add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "sh3add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "sh1add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "sh2add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "sh3add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "clmul", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "clmulr", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "clmulh", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "min", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "minu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "max", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "maxu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "clzw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "ctzw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "cpopw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "slli.uw", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "rolw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "rorw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "rev8", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "zext.h", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "roriw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, - { "orc.b", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "bset", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "bclr", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "binv", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "bext", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "aes32esmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, - { "aes32esi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, - { "aes32dsmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, - { "aes32dsi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, - { "aes64ks1i", rv_codec_k_rnum, rv_fmt_rd_rs1_rnum, NULL, 0, 0, 0 }, - { "aes64ks2", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "aes64im", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "aes64esm", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "aes64es", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "aes64dsm", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "aes64ds", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "sha256sig0", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "sha256sig1", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "sha256sum0", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "sha256sum1", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "sha512sig0", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "sha512sig1", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "sha512sum0", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "sha512sum1", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "sha512sum0r", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "sha512sum1r", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "sha512sig0l", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "sha512sig0h", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "sha512sig1l", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "sha512sig1h", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "sm3p0", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "sm3p1", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "sm4ed", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, - { "sm4ks", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, - { "brev8", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "pack", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "packh", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "packw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "unzip", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "zip", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "xperm4", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "xperm8", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, - { "vle8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vle16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vle32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vle64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vse8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vse16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vse32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vse64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vlm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vsm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vlse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 }, - { "vlse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 }, - { "vlse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 }, - { "vlse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 }, - { "vsse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 }, - { "vsse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 }, - { "vsse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 }, - { "vsse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 }, - { "vluxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 = }, - { "vluxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0= }, - { "vluxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0= }, - { "vluxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0= }, - { "vloxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 = }, - { "vloxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0= }, - { "vloxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0= }, - { "vloxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0= }, - { "vsuxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 = }, - { "vsuxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0= }, - { "vsuxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0= }, - { "vsuxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0= }, - { "vsoxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 = }, - { "vsoxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0= }, - { "vsoxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0= }, - { "vsoxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0= }, - { "vle8ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vle16ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vle32ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vle64ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vl1re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vl1re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vl1re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vl1re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vl2re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vl2re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vl2re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vl2re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vl4re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vl4re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vl4re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vl4re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vl8re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vl8re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vl8re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vl8re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vs1r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vs2r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vs4r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vs8r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, - { "vadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, - { "vsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vrsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vrsub.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, - { "vwaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vwaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vwadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vwsubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vwsubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vwsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vwaddu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vwaddu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vwadd.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vwsubu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vwsubu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vwsub.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, 0, 0, 0 }, - { "vadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, 0, 0, 0 }, - { "vadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl, NULL, 0, 0, 0 }, - { "vmadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, 0, 0, 0 }, - { "vmadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, 0, 0, 0 }, - { "vmadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl, NULL, 0, 0, 0 }, - { "vsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, 0, 0, 0 }, - { "vsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, 0, 0, 0 }, - { "vmsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, 0, 0, 0 }, - { "vmsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, 0, 0, 0 }, - { "vand.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vand.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vand.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, - { "vor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, - { "vxor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vxor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vxor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, - { "vsll.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vsll.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vsll.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, - { "vsrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vsrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vsrl.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, - { "vsra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vsra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vsra.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, - { "vnsrl.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vnsrl.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vnsrl.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, - { "vnsra.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vnsra.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vnsra.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, - { "vmseq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmseq.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vmseq.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, - { "vmsne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmsne.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vmsne.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, - { "vmsltu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmsltu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vmslt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmslt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vmsleu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmsleu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vmsleu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, - { "vmsle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmsle.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vmsle.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, - { "vmsgtu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vmsgtu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, - { "vmsgt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vmsgt.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, - { "vminu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vminu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmin.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vmaxu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmaxu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmax.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vmulh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmulh.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vmulhu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmulhu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vmulhsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmulhsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vdivu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vdivu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vdiv.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vremu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vremu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vrem.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vrem.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vwmulu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vwmulu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vwmulsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vwmulsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vwmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, - { "vmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, - { "vnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, - { "vnmsac.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, - { "vmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, - { "vmadd.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, - { "vnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, - { "vnmsub.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, - { "vwmaccu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, - { "vwmaccu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, - { "vwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, - { "vwmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, - { "vwmaccsu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, - { "vwmaccsu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, - { "vwmaccus.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, - { "vmv.v.v", rv_codec_v_r, rv_fmt_vd_vs1, NULL, 0, 0, 0 }, - { "vmv.v.x", rv_codec_v_r, rv_fmt_vd_rs1, NULL, 0, 0, 0 }, - { "vmv.v.i", rv_codec_v_i, rv_fmt_vd_imm, NULL, 0, 0, 0 }, - { "vmerge.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, 0, 0, 0 }, - { "vmerge.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, 0, 0, 0 }, - { "vmerge.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl, NULL, 0, 0, 0 }, - { "vsaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vsaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vsaddu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, - { "vsadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vsadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vsadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, - { "vssubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vssubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vssub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vssub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vaadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vaadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vaaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vaaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vasub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vasub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vasubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vasubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vsmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vsmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vssrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vssrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vssrl.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, - { "vssra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vssra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vssra.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, - { "vnclipu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vnclipu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vnclipu.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, - { "vnclip.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vnclip.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vnclip.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, - { "vfadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vfadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vfsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vfsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vfrsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vfwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vfwadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vfwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vfwadd.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vfwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vfwsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vfwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vfwsub.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vfmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vfmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vfdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vfdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vfrdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vfwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vfwmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vfmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfnmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfnmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfnmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfwmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfwnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfwnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfwmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfwmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfwnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfwnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, - { "vfsqrt.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, - { "vfrsqrt7.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, - { "vfrec7.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, - { "vfmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vfmin.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vfmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vfmax.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vfsgnj.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vfsgnj.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vfsgnjn.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vfsgnjn.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vfsgnjx.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vfsgnjx.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vfslide1up.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vfslide1down.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0= }, - { "vmfeq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmfeq.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vmfne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmfne.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vmflt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmflt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vmfle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmfle.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vmfgt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vmfge.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, - { "vfclass.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfmerge.vfm", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vl, NULL, 0, 0, 0 }, - { "vfmv.v.f", rv_codec_v_r, rv_fmt_vd_fs1, NULL, 0, 0, 0 }, - { "vfcvt.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfcvt.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfcvt.f.xu.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfcvt.f.x.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfcvt.rtz.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfcvt.rtz.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfwcvt.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfwcvt.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfwcvt.f.xu.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfwcvt.f.x.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfwcvt.f.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfwcvt.rtz.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfwcvt.rtz.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfncvt.xu.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfncvt.x.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfncvt.f.xu.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfncvt.f.x.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfncvt.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfncvt.rod.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfncvt.rtz.xu.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vfncvt.rtz.x.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vredand.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vredor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vredxor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vredminu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vredmaxu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vwredsumu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vwredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vfredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vfredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vfredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vfredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vfwredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vfwredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmnand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmandn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmxor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmorn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vmxnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vcpop.m", rv_codec_v_r, rv_fmt_rd_vs2_vm, NULL, 0, 0, 0 }, - { "vfirst.m", rv_codec_v_r, rv_fmt_rd_vs2_vm, NULL, 0, 0, 0 }, - { "vmsbf.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vmsif.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vmsof.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "viota.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vid.v", rv_codec_v_r, rv_fmt_vd_vm, NULL, 0, 0, 0 }, - { "vmv.x.s", rv_codec_v_r, rv_fmt_rd_vs2, NULL, 0, 0, 0 }, - { "vmv.s.x", rv_codec_v_r, rv_fmt_vd_rs1, NULL, 0, 0, 0 }, - { "vfmv.f.s", rv_codec_v_r, rv_fmt_fd_vs2, NULL, 0, 0, 0 }, - { "vfmv.s.f", rv_codec_v_r, rv_fmt_vd_fs1, NULL, 0, 0, 0 }, - { "vslideup.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vslideup.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 = }, - { "vslide1up.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vslidedown.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vslidedown.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, = 0 }, - { "vslide1down.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 = }, - { "vrgather.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vrgatherei16.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0= }, - { "vrgather.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vrgather.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 = }, - { "vcompress.vm", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, 0, 0, 0 }, - { "vmv1r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, - { "vmv2r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, - { "vmv4r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, - { "vmv8r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, - { "vzext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vzext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vzext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vsext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vsext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vsext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vsetvli", rv_codec_vsetvli, rv_fmt_vsetvli, NULL, 0, 0, 0 }, - { "vsetivli", rv_codec_vsetivli, rv_fmt_vsetivli, NULL, 0, 0, 0 }, - { "vsetvl", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "c.zext.b", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 }, - { "c.sext.b", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 }, - { "c.zext.h", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 }, - { "c.sext.h", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 }, - { "c.zext.w", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 }, - { "c.not", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 }, - { "c.mul", rv_codec_zcb_mul, rv_fmt_rd_rs2, NULL, 0, 0 }, - { "c.lbu", rv_codec_zcb_lb, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 }, - { "c.lhu", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 }, - { "c.lh", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 }, - { "c.sb", rv_codec_zcb_lb, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 }, - { "c.sh", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 }, - { "cm.push", rv_codec_zcmp_cm_pushpop, rv_fmt_push_rlist, NULL, 0, 0 }, - { "cm.pop", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist, NULL, 0, 0 }, - { "cm.popret", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist, NULL, 0, 0,= 0 }, - { "cm.popretz", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist, NULL, 0, 0= }, - { "cm.mva01s", rv_codec_zcmp_cm_mv, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, - { "cm.mvsa01", rv_codec_zcmp_cm_mv, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, - { "cm.jt", rv_codec_zcmt_jt, rv_fmt_zcmt_index, NULL, 0 }, - { "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 }, - { "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 = }, - { "vfwmaccbf16.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 = }, - { "flh", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 }, - { "fsh", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 }, - { "fmv.h.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 }, - { "fmv.x.h", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, - { "fli.s", rv_codec_fli, rv_fmt_fli, NULL, 0, 0, 0 }, - { "fli.d", rv_codec_fli, rv_fmt_fli, NULL, 0, 0, 0 }, - { "fli.q", rv_codec_fli, rv_fmt_fli, NULL, 0, 0, 0 }, - { "fli.h", rv_codec_fli, rv_fmt_fli, NULL, 0, 0, 0 }, - { "fminm.s", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, - { "fmaxm.s", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, - { "fminm.d", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, - { "fmaxm.d", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, - { "fminm.q", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, - { "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 }, - { "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 }, - { "fmvp.q.x", rv_codec_r, rv_fmt_frd_rs1_rs2, NULL, 0, 0, 0 }, - { "fleq.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, - { "fltq.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, - { "fleq.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, - { "fltq.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, - { "fleq.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, - { "fltq.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, - { "fleq.h", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, - { "fltq.h", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, - { "vaesdf.vv", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, - { "vaesdf.vs", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, - { "vaesdm.vv", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, - { "vaesdm.vs", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, - { "vaesef.vv", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, - { "vaesef.vs", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, - { "vaesem.vv", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, - { "vaesem.vs", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, - { "vaeskf1.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm, NULL, 0, 0, 0 }, - { "vaeskf2.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm, NULL, 0, 0, 0 }, - { "vaesz.vs", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, - { "vandn.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vandn.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vbrev.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vbrev8.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vclmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vclmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vclmulh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vclmulh.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vclz.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vcpop.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vctz.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vghsh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, 0, 0, 0 }, - { "vgmul.vv", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, - { "vrev8.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, - { "vrol.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vrol.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vror.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vror.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vror.vi", rv_codec_vror_vi, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, - { "vsha2ch.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, 0, 0, 0 }, - { "vsha2cl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, 0, 0, 0 }, - { "vsha2ms.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, 0, 0, 0 }, - { "vsm3c.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm, NULL, 0, 0, 0 }, - { "vsm3me.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, 0, 0, 0 }, - { "vsm4k.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm, NULL, 0, 0, 0 }, - { "vsm4r.vv", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, - { "vsm4r.vs", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, - { "vwsll.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, - { "vwsll.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, - { "vwsll.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, - { "amocas.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amocas.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amocas.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "mop.r.0", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.1", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.2", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.3", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.4", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.5", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.6", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.7", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.8", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.9", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.10", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.11", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.12", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.13", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.14", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.15", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.16", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.17", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.18", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.19", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.20", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.21", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.22", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.23", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.24", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.25", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.26", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.27", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.28", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.29", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.30", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.r.31", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, - { "mop.rr.0", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "mop.rr.1", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "mop.rr.2", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "mop.rr.3", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "mop.rr.4", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "mop.rr.5", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "mop.rr.6", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "mop.rr.7", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, - { "c.mop.1", rv_codec_ci_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "c.mop.3", rv_codec_ci_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "c.mop.5", rv_codec_ci_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "c.mop.7", rv_codec_ci_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "c.mop.9", rv_codec_ci_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "c.mop.11", rv_codec_ci_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "c.mop.13", rv_codec_ci_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "c.mop.15", rv_codec_ci_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "amoswap.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoadd.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoxor.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoor.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoand.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amomin.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amomax.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amominu.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amomaxu.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoswap.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoadd.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoxor.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoor.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amoand.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amomin.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amomax.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amominu.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amomaxu.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amocas.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "amocas.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "wrs.sto", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "wrs.nto", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, - { "lpad", rv_codec_lp, rv_fmt_imm, NULL, 0, 0, 0 }, - { "sspush", rv_codec_r, rv_fmt_rs2, NULL, 0, 0, 0 }, - { "sspopchk", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, - { "ssrdp", rv_codec_r, rv_fmt_rd, NULL, 0, 0, 0 }, - { "ssamoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, - { "ssamoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, + { "nop", rv_codec_i, rv_fmt_none }, + { "mv", rv_codec_i, rv_fmt_rd_rs1 }, + { "not", rv_codec_i, rv_fmt_rd_rs1 }, + { "neg", rv_codec_r, rv_fmt_rd_rs2 }, + { "negw", rv_codec_r, rv_fmt_rd_rs2 }, + { "sext.w", rv_codec_i, rv_fmt_rd_rs1 }, + { "seqz", rv_codec_i, rv_fmt_rd_rs1 }, + { "snez", rv_codec_r, rv_fmt_rd_rs2 }, + { "sltz", rv_codec_r, rv_fmt_rd_rs1 }, + { "sgtz", rv_codec_r, rv_fmt_rd_rs2 }, + { "fmv.s", rv_codec_r, rv_fmt_frd_frs1 }, + { "fabs.s", rv_codec_r, rv_fmt_frd_frs1 }, + { "fneg.s", rv_codec_r, rv_fmt_frd_frs1 }, + { "fmv.d", rv_codec_r, rv_fmt_frd_frs1 }, + { "fabs.d", rv_codec_r, rv_fmt_frd_frs1 }, + { "fneg.d", rv_codec_r, rv_fmt_frd_frs1 }, + { "fmv.q", rv_codec_r, rv_fmt_frd_frs1 }, + { "fabs.q", rv_codec_r, rv_fmt_frd_frs1 }, + { "fneg.q", rv_codec_r, rv_fmt_frd_frs1 }, + { "beqz", rv_codec_sb, rv_fmt_rs1_offset }, + { "bnez", rv_codec_sb, rv_fmt_rs1_offset }, + { "blez", rv_codec_sb, rv_fmt_rs2_offset }, + { "bgez", rv_codec_sb, rv_fmt_rs1_offset }, + { "bltz", rv_codec_sb, rv_fmt_rs1_offset }, + { "bgtz", rv_codec_sb, rv_fmt_rs2_offset }, + { "ble", rv_codec_sb, rv_fmt_rs2_rs1_offset }, + { "bleu", rv_codec_sb, rv_fmt_rs2_rs1_offset }, + { "bgt", rv_codec_sb, rv_fmt_rs2_rs1_offset }, + { "bgtu", rv_codec_sb, rv_fmt_rs2_rs1_offset }, + { "j", rv_codec_uj, rv_fmt_offset }, + { "ret", rv_codec_i, rv_fmt_none }, + { "jr", rv_codec_i, rv_fmt_rs1 }, + { "rdcycle", rv_codec_i_csr, rv_fmt_rd }, + { "rdtime", rv_codec_i_csr, rv_fmt_rd }, + { "rdinstret", rv_codec_i_csr, rv_fmt_rd }, + { "rdcycleh", rv_codec_i_csr, rv_fmt_rd }, + { "rdtimeh", rv_codec_i_csr, rv_fmt_rd }, + { "rdinstreth", rv_codec_i_csr, rv_fmt_rd }, + { "frcsr", rv_codec_i_csr, rv_fmt_rd }, + { "frrm", rv_codec_i_csr, rv_fmt_rd }, + { "frflags", rv_codec_i_csr, rv_fmt_rd }, + { "fscsr", rv_codec_i_csr, rv_fmt_rd_rs1 }, + { "fsrm", rv_codec_i_csr, rv_fmt_rd_rs1 }, + { "fsflags", rv_codec_i_csr, rv_fmt_rd_rs1 }, + { "fsrmi", rv_codec_i_csr, rv_fmt_rd_zimm }, + { "fsflagsi", rv_codec_i_csr, rv_fmt_rd_zimm }, + { "bseti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm }, + { "bclri", rv_codec_i_sh7, rv_fmt_rd_rs1_imm }, + { "binvi", rv_codec_i_sh7, rv_fmt_rd_rs1_imm }, + { "bexti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm }, + { "rori", rv_codec_i_sh7, rv_fmt_rd_rs1_imm }, + { "clz", rv_codec_r, rv_fmt_rd_rs1 }, + { "ctz", rv_codec_r, rv_fmt_rd_rs1 }, + { "cpop", rv_codec_r, rv_fmt_rd_rs1 }, + { "sext.h", rv_codec_r, rv_fmt_rd_rs1 }, + { "sext.b", rv_codec_r, rv_fmt_rd_rs1 }, + { "xnor", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "orn", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "andn", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "rol", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "ror", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "sh1add", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "sh2add", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "sh3add", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "sh1add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "sh2add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "sh3add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "clmul", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "clmulr", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "clmulh", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "min", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "minu", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "max", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "maxu", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "clzw", rv_codec_r, rv_fmt_rd_rs1 }, + { "ctzw", rv_codec_r, rv_fmt_rd_rs1 }, + { "cpopw", rv_codec_r, rv_fmt_rd_rs1 }, + { "slli.uw", rv_codec_i_sh6, rv_fmt_rd_rs1_imm }, + { "add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "rolw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "rorw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "rev8", rv_codec_r, rv_fmt_rd_rs1 }, + { "zext.h", rv_codec_r, rv_fmt_rd_rs1 }, + { "roriw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm }, + { "orc.b", rv_codec_r, rv_fmt_rd_rs1 }, + { "bset", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "bclr", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "binv", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "bext", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "aes32esmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs }, + { "aes32esi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs }, + { "aes32dsmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs }, + { "aes32dsi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs }, + { "aes64ks1i", rv_codec_k_rnum, rv_fmt_rd_rs1_rnum }, + { "aes64ks2", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "aes64im", rv_codec_r, rv_fmt_rd_rs1 }, + { "aes64esm", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "aes64es", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "aes64dsm", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "aes64ds", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "sha256sig0", rv_codec_r, rv_fmt_rd_rs1 }, + { "sha256sig1", rv_codec_r, rv_fmt_rd_rs1 }, + { "sha256sum0", rv_codec_r, rv_fmt_rd_rs1 }, + { "sha256sum1", rv_codec_r, rv_fmt_rd_rs1 }, + { "sha512sig0", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "sha512sig1", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "sha512sum0", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "sha512sum1", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "sha512sum0r", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "sha512sum1r", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "sha512sig0l", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "sha512sig0h", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "sha512sig1l", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "sha512sig1h", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "sm3p0", rv_codec_r, rv_fmt_rd_rs1 }, + { "sm3p1", rv_codec_r, rv_fmt_rd_rs1 }, + { "sm4ed", rv_codec_k_bs, rv_fmt_rs1_rs2_bs }, + { "sm4ks", rv_codec_k_bs, rv_fmt_rs1_rs2_bs }, + { "brev8", rv_codec_r, rv_fmt_rd_rs1 }, + { "pack", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "packh", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "packw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "unzip", rv_codec_r, rv_fmt_rd_rs1 }, + { "zip", rv_codec_r, rv_fmt_rd_rs1 }, + { "xperm4", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "xperm8", rv_codec_r, rv_fmt_rd_rs1 }, + { "vle8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vle16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vle32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vle64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vse8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vse16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vse32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vse64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vlm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vsm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vlse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm }, + { "vlse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm }, + { "vlse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm }, + { "vlse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm }, + { "vsse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm }, + { "vsse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm }, + { "vsse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm }, + { "vsse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm }, + { "vluxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, + { "vluxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, + { "vluxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, + { "vluxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, + { "vloxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, + { "vloxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, + { "vloxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, + { "vloxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, + { "vsuxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, + { "vsuxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, + { "vsuxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, + { "vsuxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, + { "vsoxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, + { "vsoxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, + { "vsoxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, + { "vsoxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, + { "vle8ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vle16ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vle32ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vle64ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vl1re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vl1re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vl1re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vl1re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vl2re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vl2re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vl2re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vl2re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vl4re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vl4re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vl4re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vl4re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vl8re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vl8re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vl8re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vl8re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vs1r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vs2r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vs4r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vs8r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, + { "vadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, + { "vsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vrsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vrsub.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, + { "vwaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vwaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vwadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vwsubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vwsubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vwsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vwaddu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vwaddu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vwadd.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vwsubu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vwsubu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vwsub.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl }, + { "vadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl }, + { "vadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl }, + { "vmadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl }, + { "vmadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl }, + { "vmadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl }, + { "vsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl }, + { "vsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl }, + { "vmsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl }, + { "vmsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl }, + { "vand.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vand.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vand.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, + { "vor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, + { "vxor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vxor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vxor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, + { "vsll.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vsll.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vsll.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, + { "vsrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vsrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vsrl.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, + { "vsra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vsra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vsra.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, + { "vnsrl.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vnsrl.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vnsrl.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, + { "vnsra.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vnsra.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vnsra.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, + { "vmseq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmseq.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vmseq.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, + { "vmsne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmsne.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vmsne.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, + { "vmsltu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmsltu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vmslt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmslt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vmsleu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmsleu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vmsleu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, + { "vmsle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmsle.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vmsle.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, + { "vmsgtu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vmsgtu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, + { "vmsgt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vmsgt.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, + { "vminu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vminu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmin.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vmaxu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmaxu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmax.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vmulh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmulh.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vmulhu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmulhu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vmulhsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmulhsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vdivu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vdivu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vdiv.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vremu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vremu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vrem.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vrem.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vwmulu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vwmulu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vwmulsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vwmulsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vwmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, + { "vmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm }, + { "vnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, + { "vnmsac.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm }, + { "vmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, + { "vmadd.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm }, + { "vnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, + { "vnmsub.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm }, + { "vwmaccu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, + { "vwmaccu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm }, + { "vwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, + { "vwmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm }, + { "vwmaccsu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, + { "vwmaccsu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm }, + { "vwmaccus.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm }, + { "vmv.v.v", rv_codec_v_r, rv_fmt_vd_vs1 }, + { "vmv.v.x", rv_codec_v_r, rv_fmt_vd_rs1 }, + { "vmv.v.i", rv_codec_v_i, rv_fmt_vd_imm }, + { "vmerge.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl }, + { "vmerge.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl }, + { "vmerge.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl }, + { "vsaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vsaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vsaddu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, + { "vsadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vsadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vsadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, + { "vssubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vssubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vssub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vssub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vaadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vaadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vaaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vaaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vasub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vasub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vasubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vasubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vsmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vsmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vssrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vssrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vssrl.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, + { "vssra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vssra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vssra.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, + { "vnclipu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vnclipu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vnclipu.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, + { "vnclip.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vnclip.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vnclip.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, + { "vfadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vfadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vfsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vfsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vfrsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vfwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vfwadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vfwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vfwadd.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vfwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vfwsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vfwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vfwsub.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vfmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vfmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vfdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vfdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vfrdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vfwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vfwmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vfmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, + { "vfmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, + { "vfnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, + { "vfnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, + { "vfmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, + { "vfmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, + { "vfnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, + { "vfnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, + { "vfmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, + { "vfmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, + { "vfnmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, + { "vfnmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, + { "vfmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, + { "vfmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, + { "vfnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, + { "vfnmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, + { "vfwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, + { "vfwmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, + { "vfwnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, + { "vfwnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, + { "vfwmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, + { "vfwmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, + { "vfwnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, + { "vfwnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, + { "vfsqrt.v", rv_codec_v_r, rv_fmt_vd_vs2 }, + { "vfrsqrt7.v", rv_codec_v_r, rv_fmt_vd_vs2 }, + { "vfrec7.v", rv_codec_v_r, rv_fmt_vd_vs2 }, + { "vfmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vfmin.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vfmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vfmax.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vfsgnj.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vfsgnj.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vfsgnjn.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vfsgnjn.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vfsgnjx.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vfsgnjx.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vfslide1up.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vfslide1down.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vmfeq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmfeq.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vmfne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmfne.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vmflt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmflt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vmfle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmfle.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vmfgt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vmfge.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, + { "vfclass.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfmerge.vfm", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vl }, + { "vfmv.v.f", rv_codec_v_r, rv_fmt_vd_fs1 }, + { "vfcvt.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfcvt.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfcvt.f.xu.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfcvt.f.x.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfcvt.rtz.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfcvt.rtz.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfwcvt.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfwcvt.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfwcvt.f.xu.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfwcvt.f.x.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfwcvt.f.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfwcvt.rtz.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfwcvt.rtz.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfncvt.xu.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfncvt.x.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfncvt.f.xu.w", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfncvt.f.x.w", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfncvt.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfncvt.rod.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfncvt.rtz.xu.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfncvt.rtz.x.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vredand.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vredor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vredxor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vredminu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vredmaxu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vwredsumu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vwredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vfredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vfredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vfredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vfredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vfwredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vfwredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmnand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmandn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmxor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmorn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vmxnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vcpop.m", rv_codec_v_r, rv_fmt_rd_vs2_vm }, + { "vfirst.m", rv_codec_v_r, rv_fmt_rd_vs2_vm }, + { "vmsbf.m", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vmsif.m", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vmsof.m", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "viota.m", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vid.v", rv_codec_v_r, rv_fmt_vd_vm }, + { "vmv.x.s", rv_codec_v_r, rv_fmt_rd_vs2 }, + { "vmv.s.x", rv_codec_v_r, rv_fmt_vd_rs1 }, + { "vfmv.f.s", rv_codec_v_r, rv_fmt_fd_vs2 }, + { "vfmv.s.f", rv_codec_v_r, rv_fmt_vd_fs1 }, + { "vslideup.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vslideup.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, + { "vslide1up.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vslidedown.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vslidedown.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, + { "vslide1down.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vrgather.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vrgatherei16.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vrgather.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vrgather.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, + { "vcompress.vm", rv_codec_v_r, rv_fmt_vd_vs2_vs1 }, + { "vmv1r.v", rv_codec_v_r, rv_fmt_vd_vs2 }, + { "vmv2r.v", rv_codec_v_r, rv_fmt_vd_vs2 }, + { "vmv4r.v", rv_codec_v_r, rv_fmt_vd_vs2 }, + { "vmv8r.v", rv_codec_v_r, rv_fmt_vd_vs2 }, + { "vzext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vzext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vzext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vsext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vsext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vsext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vsetvli", rv_codec_vsetvli, rv_fmt_vsetvli }, + { "vsetivli", rv_codec_vsetivli, rv_fmt_vsetivli }, + { "vsetvl", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "c.zext.b", rv_codec_zcb_ext, rv_fmt_rd }, + { "c.sext.b", rv_codec_zcb_ext, rv_fmt_rd }, + { "c.zext.h", rv_codec_zcb_ext, rv_fmt_rd }, + { "c.sext.h", rv_codec_zcb_ext, rv_fmt_rd }, + { "c.zext.w", rv_codec_zcb_ext, rv_fmt_rd }, + { "c.not", rv_codec_zcb_ext, rv_fmt_rd }, + { "c.mul", rv_codec_zcb_mul, rv_fmt_rd_rs2 }, + { "c.lbu", rv_codec_zcb_lb, rv_fmt_rs1_rs2_zce_ldst }, + { "c.lhu", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst }, + { "c.lh", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst }, + { "c.sb", rv_codec_zcb_lb, rv_fmt_rs1_rs2_zce_ldst }, + { "c.sh", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst }, + { "cm.push", rv_codec_zcmp_cm_pushpop, rv_fmt_push_rlist }, + { "cm.pop", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist }, + { "cm.popret", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist }, + { "cm.popretz", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist }, + { "cm.mva01s", rv_codec_zcmp_cm_mv, rv_fmt_rd_rs2 }, + { "cm.mvsa01", rv_codec_zcmp_cm_mv, rv_fmt_rd_rs2 }, + { "cm.jt", rv_codec_zcmt_jt, rv_fmt_zcmt_index }, + { "cm.jalt", rv_codec_zcmt_jt, rv_fmt_zcmt_index }, + { "czero.eqz", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "czero.nez", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "fcvt.bf16.s", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, + { "fcvt.s.bf16", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, + { "vfncvtbf16.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfwcvtbf16.f.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vfwmaccbf16.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, + { "vfwmaccbf16.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, + { "flh", rv_codec_i, rv_fmt_frd_offset_rs1 }, + { "fsh", rv_codec_s, rv_fmt_frs2_offset_rs1 }, + { "fmv.h.x", rv_codec_r, rv_fmt_frd_rs1 }, + { "fmv.x.h", rv_codec_r, rv_fmt_rd_frs1 }, + { "fli.s", rv_codec_fli, rv_fmt_fli }, + { "fli.d", rv_codec_fli, rv_fmt_fli }, + { "fli.q", rv_codec_fli, rv_fmt_fli }, + { "fli.h", rv_codec_fli, rv_fmt_fli }, + { "fminm.s", rv_codec_r, rv_fmt_frd_frs1_frs2 }, + { "fmaxm.s", rv_codec_r, rv_fmt_frd_frs1_frs2 }, + { "fminm.d", rv_codec_r, rv_fmt_frd_frs1_frs2 }, + { "fmaxm.d", rv_codec_r, rv_fmt_frd_frs1_frs2 }, + { "fminm.q", rv_codec_r, rv_fmt_frd_frs1_frs2 }, + { "fmaxm.q", rv_codec_r, rv_fmt_frd_frs1_frs2 }, + { "fminm.h", rv_codec_r, rv_fmt_frd_frs1_frs2 }, + { "fmaxm.h", rv_codec_r, rv_fmt_frd_frs1_frs2 }, + { "fround.s", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, + { "froundnx.s", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, + { "fround.d", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, + { "froundnx.d", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, + { "fround.q", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, + { "froundnx.q", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, + { "fround.h", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, + { "froundnx.h", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, + { "fcvtmod.w.d", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, + { "fmvh.x.d", rv_codec_r, rv_fmt_rd_frs1 }, + { "fmvp.d.x", rv_codec_r, rv_fmt_frd_rs1_rs2 }, + { "fmvh.x.q", rv_codec_r, rv_fmt_rd_frs1 }, + { "fmvp.q.x", rv_codec_r, rv_fmt_frd_rs1_rs2 }, + { "fleq.s", rv_codec_r, rv_fmt_rd_frs1_frs2 }, + { "fltq.s", rv_codec_r, rv_fmt_rd_frs1_frs2 }, + { "fleq.d", rv_codec_r, rv_fmt_rd_frs1_frs2 }, + { "fltq.d", rv_codec_r, rv_fmt_rd_frs1_frs2 }, + { "fleq.q", rv_codec_r, rv_fmt_rd_frs1_frs2 }, + { "fltq.q", rv_codec_r, rv_fmt_rd_frs1_frs2 }, + { "fleq.h", rv_codec_r, rv_fmt_rd_frs1_frs2 }, + { "fltq.h", rv_codec_r, rv_fmt_rd_frs1_frs2 }, + { "vaesdf.vv", rv_codec_v_r, rv_fmt_vd_vs2 }, + { "vaesdf.vs", rv_codec_v_r, rv_fmt_vd_vs2 }, + { "vaesdm.vv", rv_codec_v_r, rv_fmt_vd_vs2 }, + { "vaesdm.vs", rv_codec_v_r, rv_fmt_vd_vs2 }, + { "vaesef.vv", rv_codec_v_r, rv_fmt_vd_vs2 }, + { "vaesef.vs", rv_codec_v_r, rv_fmt_vd_vs2 }, + { "vaesem.vv", rv_codec_v_r, rv_fmt_vd_vs2 }, + { "vaesem.vs", rv_codec_v_r, rv_fmt_vd_vs2 }, + { "vaeskf1.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm }, + { "vaeskf2.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm }, + { "vaesz.vs", rv_codec_v_r, rv_fmt_vd_vs2 }, + { "vandn.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vandn.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vbrev.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vbrev8.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vclmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vclmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vclmulh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vclmulh.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vclz.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vcpop.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vctz.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vghsh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1 }, + { "vgmul.vv", rv_codec_v_r, rv_fmt_vd_vs2 }, + { "vrev8.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, + { "vrol.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vrol.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vror.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vror.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vror.vi", rv_codec_vror_vi, rv_fmt_vd_vs2_uimm_vm }, + { "vsha2ch.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1 }, + { "vsha2cl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1 }, + { "vsha2ms.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1 }, + { "vsm3c.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm }, + { "vsm3me.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1 }, + { "vsm4k.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm }, + { "vsm4r.vv", rv_codec_v_r, rv_fmt_vd_vs2 }, + { "vsm4r.vs", rv_codec_v_r, rv_fmt_vd_vs2 }, + { "vwsll.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, + { "vwsll.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, + { "vwsll.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, + { "amocas.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amocas.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amocas.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "mop.r.0", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.1", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.2", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.3", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.4", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.5", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.6", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.7", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.8", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.9", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.10", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.11", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.12", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.13", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.14", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.15", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.16", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.17", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.18", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.19", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.20", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.21", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.22", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.23", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.24", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.25", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.26", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.27", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.28", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.29", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.30", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.r.31", rv_codec_r, rv_fmt_rd_rs1 }, + { "mop.rr.0", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "mop.rr.1", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "mop.rr.2", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "mop.rr.3", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "mop.rr.4", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "mop.rr.5", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "mop.rr.6", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "mop.rr.7", rv_codec_r, rv_fmt_rd_rs1_rs2 }, + { "c.mop.1", rv_codec_ci_none, rv_fmt_none }, + { "c.mop.3", rv_codec_ci_none, rv_fmt_none }, + { "c.mop.5", rv_codec_ci_none, rv_fmt_none }, + { "c.mop.7", rv_codec_ci_none, rv_fmt_none }, + { "c.mop.9", rv_codec_ci_none, rv_fmt_none }, + { "c.mop.11", rv_codec_ci_none, rv_fmt_none }, + { "c.mop.13", rv_codec_ci_none, rv_fmt_none }, + { "c.mop.15", rv_codec_ci_none, rv_fmt_none }, + { "amoswap.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoadd.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoxor.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoor.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoand.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amomin.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amomax.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amominu.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amomaxu.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoswap.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoadd.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoxor.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoor.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amoand.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amomin.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amomax.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amominu.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amomaxu.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amocas.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "amocas.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "wrs.sto", rv_codec_none, rv_fmt_none }, + { "wrs.nto", rv_codec_none, rv_fmt_none }, + { "lpad", rv_codec_lp, rv_fmt_imm }, + { "sspush", rv_codec_r, rv_fmt_rs2 }, + { "sspopchk", rv_codec_r, rv_fmt_rs1 }, + { "ssrdp", rv_codec_r, rv_fmt_rd }, + { "ssamoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, + { "ssamoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, { "c.sspush", rv_codec_cmop_ss, rv_fmt_rs2, NULL, rv_op_sspush, rv_op_sspush, 0 }, { "c.sspopchk", rv_codec_cmop_ss, rv_fmt_rs1, NULL, rv_op_sspopchk, rv_op_sspopchk, 0 }, - { "cbo.inval", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, - { "cbo.clean", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, - { "cbo.flush", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, - { "cbo.zero", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, - { "mnret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, + { "cbo.inval", rv_codec_r, rv_fmt_rs1 }, + { "cbo.clean", rv_codec_r, rv_fmt_rs1 }, + { "cbo.flush", rv_codec_r, rv_fmt_rs1 }, + { "cbo.zero", rv_codec_r, rv_fmt_rs1 }, + { "mnret", rv_codec_none, rv_fmt_none }, }; =20 /* CSR names */ --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550751; cv=none; d=zohomail.com; s=zohoarc; b=LtX7d6turlj1+Fp4KaHRLlpYM53gLvXiNbfKwUGcxkl5llW41KyiN5Ein2lRoM1llyAN4y1iV4HHTNDdteYkQrhMw6evJuR64R6FhxRwiLAotFG6h17CUeNhR5ywz98PSGZ30+6KPUpcSdfECwykkD6D1/tzZmFm/3AzSpbK0ZQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550751; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ZVsDsTudT9XSJrI4vG0rDBo8u+xmKSjOUGQovOsJcVY=; b=HVUymJgELsr8wQ9MN7n/pWKIxA4Iy+SIfiuPyIgQV0ylMv6XwdClK8OdLVn0uau7ZQ3FO8SltPzTJxf/A5VyjCFUCOjrpg4bsSNLbn/s22fwhdaCGWcY6cPRqhfOUEFmER6cJnzLkiQNtzgWQ9nEMSTRDnR0xTSP9Uoi35yVjug= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550751120963.1506698939073; Sun, 23 Aug 2026 22:52:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbB-0004qS-Vv; Mon, 24 Aug 2026 01:51:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNZx-0003QT-AC for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:42 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNZu-0002UH-EH for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:40 -0400 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-38f620399a0so2591115a91.2 for ; Sun, 23 Aug 2026 22:50:38 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550637; x=1788155437; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=ZVsDsTudT9XSJrI4vG0rDBo8u+xmKSjOUGQovOsJcVY=; b=XNiv7DOhxhmofmkHQ1/m20PdA1d/pIZwfReBkIoHShXh9sbvJnJcYRlkc5L9B/6Etl cy4xdBe7lROXM3kciYvPkr3r6abwgzAVhP/V14he8giW6qUPjalIiJZX5AH/1hwf2Fm2 RX8ly3aBtXdPOJ5a27nOP8Ilt5bo08mug4ksDY52JNWmd276Dg5MyKu+eI3jvU8eoi+g SCR8LRDUsrsCUr3W+Ox7dak4ufXyiKWqXa0Ncd4qZyg9X7rZimkdyH5/fTCG2h7Dj5dH QP7inpH4aklYXHrnQGPZuiNOmgb6AkS5uzSDm3mEFNDh8EeqcycmFctUcFr+EuAFJ8GX uriw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550637; x=1788155437; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ZVsDsTudT9XSJrI4vG0rDBo8u+xmKSjOUGQovOsJcVY=; b=P3AEmC3dcxj6/tBbbvksDRk7UEh1MmJFScCkhqeiGFrpy8pz9mmaM6HACxo66QihbZ HtZIxuSHISCtWEazUIAwajRLBvbaIBCMHeJMpQv3YIP8+q6+62Ihg2jgMLmLtuNi6dOc JkaNAGqgFRagyTrozGpKik/SUHV3LARlTIOHqevMlv/XzhHM7fGBX+xPa30EMsuKLZLZ ZMrNQI5zWUQlRJ2/cztqiqK+Opafs0XMkfes8R8UHEaBu47boItb+6dO4aDN95ruRcbK OWwoppu/wD3t1F40kg6G6AjjJaDQ4zWWIobsK1ZX1bAHbiCqptisEBq1HaDJNUHON2Bl Nqbw== X-Gm-Message-State: AFuF++k3/8SMA+C8Ti5Ep7n94/FNOy/rp3NJ5qHUPrMWzWPWlcHdpPN2 u3BYBRoFLoYDS01xrmhy9ylw2mJaUOzMHPym7n7LZ/GrpDfXSRlbcKMcaiEd9w== X-Gm-Gg: AR+sD12ZtbbJhjutsK/h1/sTwKymCWhObHVH+g3xe26wGOqF14ByBKHLyg4zaqTeplH ogx9VpnesFOrgFT0f7GJi35YdYr5CB3Uizi+93TF/s5d6haBI8htNg6PF32eZH49CD7G3JqnW43 0a6aWjDMlI2OOV6Gb77F0Sbrr+yJIYrU92zSJzm1pijVnNXpwsgrgAfrg6ync1WXXKex1Bj5efx xZoq9CvylyJL7/V/zMavDpk+uKoBGBscMs4qRrdNTYRePoKliUDKHt4XwRIBvQcS+zHvrj8hCCT B4r8+vAb3u7GGYLBysIrZngT/Uyfnex5bjY7ZUQFhrMKNG7pYPGgUYzJxrA1EkUQVoOm1EGOxmZ tB6UvFAC119OQMZ1A8cTSmmPbdFIuTW3yQWGvo6nSFXvqCpOTH5/3Cfj/6l34i9SPBbUtJwJkY6 qdRi15pB2mi8PK2Zi9Zcfc40OArKcblTAqURaQaj9uMYqzfPjlH7VOqVJDmssnXATYc0ameP3T4 zKK1w== X-Received: by 2002:a17:90b:1b04:b0:38d:dfd1:7c1 with SMTP id 98e67ed59e1d1-395c33406e0mr40078621a91.2.1787550637168; Sun, 23 Aug 2026 22:50:37 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL v2 44/96] disas/riscv: Drop useless const in structures Date: Mon, 24 Aug 2026 15:47:14 +1000 Message-ID: <20260824054806.2790041-45-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1034; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1034.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550753176158500 From: Richard Henderson Individual fields should not be const, only full structures. Reviewed-by: Alistair Francis Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-12-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/disas/riscv.h b/disas/riscv.h index eabe193b4f..3325b7b4ef 100644 --- a/disas/riscv.h +++ b/disas/riscv.h @@ -174,19 +174,19 @@ typedef enum { /* structures */ =20 typedef struct { - const int op; + int op; const rvc_constraint *constraints; } rv_comp_data; =20 typedef struct { - const char * const name; - const rv_codec codec; - const char * const format; + const char *name; + rv_codec codec; + const char *format; const rv_comp_data *pseudo; - const short decomp_rv32; - const short decomp_rv64; - const short decomp_rv128; - const short decomp_data; + short decomp_rv32; + short decomp_rv64; + short decomp_rv128; + short decomp_data; } rv_opcode_data; =20 typedef struct { --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551164; cv=none; d=zohomail.com; s=zohoarc; b=NNAUPnMfcPMr2ark9m0NxAbeM4/1QHjW1K8nANeD4+PeXL3QbYBkPEZp0wPHeW4TDLBXiMV6Vvci4xBP0E2S4adMjivOIe/yURvDmbwvV7oDG7sQp27tEX0pku0Vnl4VWslsQSrL8WIOuSdHhRfP57Q9H3XzsaO7DEwCdAYnX8U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551164; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=p2ERpv2R5tDGDX/CspojpX8vl9OuHWWYGhdlr3yYFXI=; b=IIgBCeWhIQ5JAAA97/AT0KAxPfYw/P5VrLCMPTErmrAut3O9Fn/SyIN9+B7UOm8MGf2U3Ga4gt7iEKzwWs5t6+obkATUQV4tOORHrh/JQ36pu8TNl+Eq8xljEyrFKqKJrLgLhSrY/FmCZt2Z3QARNtVm/g5DCN73l06W4B8Mc2c= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551164722376.5981015718544; Sun, 23 Aug 2026 22:59:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNap-0004UW-Nb; Mon, 24 Aug 2026 01:51:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNZy-0003Tt-Ou for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:43 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNZx-0002Uu-8G for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:42 -0400 Received: by mail-pj1-x1036.google.com with SMTP id 98e67ed59e1d1-3856d6fbcb3so2516640a91.2 for ; Sun, 23 Aug 2026 22:50:40 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550640; x=1788155440; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=p2ERpv2R5tDGDX/CspojpX8vl9OuHWWYGhdlr3yYFXI=; b=ii9ZKtTZNzKfFKsMGCgW1+ty7gPRsyoLv5W2E8sAp0KWmUqqBQ0WF4W6nJulpIr+hj EUtEn3l4Riv5zuoBcPRldKNySWKF07nrhoiYle4fxDNSBJLSy3zgETj8vsPPt4orGlJN 1DPUlNjZyqJq60b+gR8AnZIvEwrg+78SRsXlexOdPOfsourdPTWJK8zEt4QgVtX3dUw6 Y6hgOB1poZYYQzbFJpPe85lNc2Ysgm2axe380s4xZMrQHe6+dSt54najXJE+3O7qapRe 7sYqYVCpRNjtcoWeLy17cdqZldMlZc5cQx9JpcvKn0pf1CmiSqmhiPshq7/II754+eSs 6uaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550640; x=1788155440; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=p2ERpv2R5tDGDX/CspojpX8vl9OuHWWYGhdlr3yYFXI=; b=PWpQH1ViGucUpJ2wQ6Z9i/AOC7Av+YXNGv7GMR6sejqLOyfLZV1/FPV6TvnffbCtr2 ZED8HEXECaohpiqFdesnTMPNBho/8tRVJVAXv6eN5Isdy3RDPPBQ74Nuy5OEFnRRD1HJ Z+TBtD+U3Nw+4aX7lytsYYESET1U9pUJFsdm+oo6l5M67qVYJ17M1X9FE6ZF1Rws7Sro 0yeS3e6UFjbwSRo89FManSlO8FwMYnug/nWlAvgaLBiEeL7nrOuQohz3GYLIkBztPlQf wR7Wg6K29XM/dotlu2d3ODJACfWaPcuFeRrmzrPelnicF7cIuL3zcrbcfeZyEh2Q1Chh 57DA== X-Gm-Message-State: AFuF++k0Cdl+rmV2h3f4kVFAR+u02zy5jkmt+JldAxhqe+l4Tzt7ouzP x9T9AilfsWPR5vU6wohoflxvwTLcfMHmQTWF0BbOQuF2ZpROv0THfCXKRGghoA== X-Gm-Gg: AR+sD12v+SHXv5a/OS59JwF2PnfOtP49NecRxK/y2hpyHwIR55iTsZ0rOFo63uEgmdU rrYr+hFYKlqFbfpiSN8fRTgOkMhTlaq62bbMLUsC9K9gqimy15yoPQp5vuS4uqqfJ0GUaGfbxx5 VDM4/wHBimmZ0RozrxEfAAqDgVLLKki2JtymF7qDnknQ8/JTaROL9EYEeU9E15AVW5/52UiofHx ZkyEqwTvhBRPUFxYDTPMHwL9H/AOsi7R+4l7eb4hi15DOlH3gS8e1vhqhKKwIJRPtHvkFenz5vO WbqEW1SM29mKT15Eyn35t481GWQWF7A94ceUC4P730q6ifOJOC/kmWuJeqrmLoPxuy1yyE9WBfi Zj1tVP+U/dwc/5+45Jbh9E4CcqXWjtX2G6Y7d5HEQCiHUeP91PB/PQDz4j9MmNGNQKx0ZBiYum2 x5JHhTXFL+l8hqZyya2YBGqcWIa2qoQ7CrbRyL7Z5dwtf0R7LgOy1pOXJxW8q3X/SW4F+ewAYVi zc5yw== X-Received: by 2002:a17:90b:4c11:b0:38e:7168:281 with SMTP id 98e67ed59e1d1-395c3878304mr38373287a91.10.1787550639904; Sun, 23 Aug 2026 22:50:39 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 45/96] disas/riscv: Drop codec from rv_decode Date: Mon, 24 Aug 2026 15:47:15 +1000 Message-ID: <20260824054806.2790041-46-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1036; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1036.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551167066158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson This is mostly write-only, only used in one place; other updates are ignored. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-13-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.h | 1 - disas/riscv.c | 7 +++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/disas/riscv.h b/disas/riscv.h index 3325b7b4ef..31bb0db86c 100644 --- a/disas/riscv.h +++ b/disas/riscv.h @@ -197,7 +197,6 @@ typedef struct { int32_t imm; int32_t imm1; uint16_t op; - uint8_t codec; uint8_t rd; uint8_t rs1; uint8_t rs2; diff --git a/disas/riscv.c b/disas/riscv.c index ec40abb618..9813d75feb 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -4603,8 +4603,9 @@ static void decode_inst_operands(rv_decode *dec, rv_i= sa isa, { rv_inst inst =3D dec->inst; =20 - dec->codec =3D op->codec; - switch (dec->codec) { + switch (op->codec) { + case rv_codec_illegal: + break; case rv_codec_none: dec->rd =3D dec->rs1 =3D dec->rs2 =3D rv_ireg_zero; dec->imm =3D 0; @@ -5369,7 +5370,6 @@ static const rv_opcode_data *decode_inst_lift_pseudo(= rv_decode *dec, if (check_constraints(dec, comp_data->constraints)) { dec->op =3D comp_data->op; op =3D &dec->opcode_data[dec->op]; - dec->codec =3D op->codec; break; } comp_data++; @@ -5407,7 +5407,6 @@ static const rv_opcode_data *decode_inst_decompress(r= v_decode *dec, rv_isa isa, dec->op =3D decomp_op; } op =3D &dec->opcode_data[decomp_op]; - dec->codec =3D op->codec; } return op; } --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551151; cv=none; d=zohomail.com; s=zohoarc; b=gfmEt1RIl8KTGpYX4Ohq4gxa7MKoIDHRYsQWO1HeTrgBylsG67Av8X7MOM129lK95LD5avPOkuXrrgJHAsV4HE5rPv8QRTXRS8CLgtWRwGWYk8D9zon4iKeus7UtUfv6c6o60e9OUBtx5d8h+qnDS2pHnjmTfh1kBljheK1vj8A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551151; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=/dfTpCPKeINTMs5DuO+JXEx9y5VLl487hSHIWrRqxGo=; b=DJlsuIR7EI1Ow1dOkI1Rr2+LlwmXrEDTw89HcOIin02Kk61/puqXQXGAj89H+HvCoTnjIcZ3DITUVw1MwPrnkLPWRrXzdl8G6ZT7UPNmiYtEDUEZBSDxO/3qYTmZmW68hohVca9SciuqZha6GNTH3W7J12hUurbHv8FNSsr9EK0= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551151964531.1395829706458; Sun, 23 Aug 2026 22:59:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbE-0004yl-5s; Mon, 24 Aug 2026 01:52:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNa1-0003cd-Kl for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:47 -0400 Received: from mail-pg1-x52d.google.com ([2607:f8b0:4864:20::52d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNa0-0002Va-4E for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:45 -0400 Received: by mail-pg1-x52d.google.com with SMTP id 41be03b00d2f7-c9cf07d2df6so1890605a12.2 for ; Sun, 23 Aug 2026 22:50:43 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550643; x=1788155443; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=/dfTpCPKeINTMs5DuO+JXEx9y5VLl487hSHIWrRqxGo=; b=FJMYfNN6J7xELWqqiYBZGho6bOYQ1OuSfYTtx6WtoVVsxxg1pUj0QkLMBwJRmJ0jfX WCJk/I+qnoMa3Wk8YBmUJyvD7XbKO/LXOgrN3qvZG4cIiEMtTwyyE/bwLPDjwDJYpsKu OHg0woGPjWbUb/Vxlc0m1BH5z07u6jtjj5eiWuGI+WdEwyYKlb7UGgsmAkoauEab6QJz LNxE8KvHuOARrwPaknQWCyhouipk/qXm03W3YLt8mQWCWuW0wLjAl6u8umeZjD1MebA7 +MQJczbWblq1JHsNrUbmpgjuHeq+SjzA2dMv/zLEv+vvE6TlbpM0INYljRMds2w5SMYc o7UQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550643; x=1788155443; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=/dfTpCPKeINTMs5DuO+JXEx9y5VLl487hSHIWrRqxGo=; b=UBLcLlzqRUzcc1npgDb5K3IXjhLpRMS1m0OSUZ40zYdHGhZB0lG2s3Vwl50EdzyzkI v/UjaGyWGCBaqmVLi3MqteTmaGVgaXEtVu1u8qJctQ0pRyjuvCZvic2moHjO6mdKkUPY zWdsqw64krb9oOEo3MDbSLk0oS/kmwzq8+nc03ABr+f+ycbxN+I0BIsANztBFdHYfKIv HQNaVjQJ4SjsC8PMqDDP1vvDONsDBMItnSn5yU9LiE2ULRNqDfuIadS6HBqoUm7TNurr OIOgHKmCsx/gLcaksr15tq4ew8bxxaAS9b2mbe5lKy3LVDavzKR0ROqkFciheIz6ckRB D7Bw== X-Gm-Message-State: AFuF++kBy5vRfWG6/mt5zWBSrqorFClbdYX+dRjFSj4FzDSWwsS4SXzr IQ4jClggJevcO29PqneoRnR6UBovsbSnGYXLopG5zz9OB+3oRcWfuScF3IS4hQ== X-Gm-Gg: AR+sD13QebW9WsbQ/HFQUTqa8dDGkdJTgJTo3lcbj+3IocGBBEeI3sKbepI8Y1/dD/j N6IFqIfAS/xOJXKAuHwYZsxQf2aed5epDTDf1yzNNZycj7b/weI7lgQOb5T7AfusBSV+zdlIXQ0 IvhCgdTDQ1/49DHCi1REHQoDrpckKRaomMXHy1983x+L3wElen4eUh/Lao0Wa6uuCwOZrraC4+Q hXoaTxg1xJxjAPkd3PGQsLSVxhY2M1/4VLILfLZHdNn5hl2YdFCv+oFagVatwhoU3/9FtHAEbWT EaSmxgj8blP0ipNYPKadezo0UwGE37eSWjdgr33qXkiA8dDUIlf4EvhXVsNnDKokT7J4xxIMKk/ 8rOybSP99Y3mUbOPXsRUAcia9IRXj8vQHFbtkJYe+VWTv9QvLfAb0jO0tv7l1qpjypfUtrE0yIV 0atQ49G+8n6bNJ9yizEGeKW3G7JLsoqMDRQ3KKKs44uVBZO5JpBd7wzpRX1l0t2qqpYUJOrSoP/ E5/iA== X-Received: by 2002:a17:90b:4986:b0:38e:e9b:ffa4 with SMTP id 98e67ed59e1d1-395c33cf295mr43122397a91.6.1787550642796; Sun, 23 Aug 2026 22:50:42 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 46/96] disas/riscv: Handle c.addi4spn imm != 0 during decode Date: Mon, 24 Aug 2026 15:47:16 +1000 Message-ID: <20260824054806.2790041-47-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52d; envelope-from=alistair23@gmail.com; helo=mail-pg1-x52d.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551153210158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-14-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index 9813d75feb..8a957e6a1e 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1885,7 +1885,7 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { "fmv.x.q", rv_codec_r, rv_fmt_rd_frs1 }, { "fmv.q.x", rv_codec_r, rv_fmt_frd_rs1 }, { "c.addi4spn", rv_codec_ciw_4spn, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, - rv_op_addi, rv_op_addi, rvcd_imm_nz }, + rv_op_addi, rv_op_addi }, { "c.fld", rv_codec_cl_ld, rv_fmt_frd_offset_rs1, NULL, rv_op_fld, rv_op_fld, 0 }, { "c.lw", rv_codec_cl_lw, rv_fmt_rd_offset_rs1, NULL, rv_op_lw, rv_op_= lw, @@ -2952,7 +2952,11 @@ static void decode_inst_opcode(rv_decode *dec, rv_is= a isa) switch ((inst >> 0) & 0b11) { case 0: switch ((inst >> 13) & 0b111) { - case 0: op =3D rv_op_c_addi4spn; break; + case 0: + if ((inst >> 5) & 0xff) { + op =3D rv_op_c_addi4spn; + } + break; case 1: if (isa =3D=3D rv128) { op =3D rv_op_c_lq; --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550821; cv=none; d=zohomail.com; s=zohoarc; b=Nn3IeHkMmPF8MKgt0AfGBjWiP8iZs7K2bpJQd3jDpghfIkUWt+XP+KudvceiHIeSzBtTGTlApEZ03sH9phF9wjUztR1iMmiC72NpWOZ/IGzWJHkg+RPg7VXyK9A7voLwTsnbk1cG/NPihwgIKardJ4JPL6isy65soQLTuc32HAE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550821; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qht+Lyy6ya77fhoK8407K/BbvZSE066z6kEHDiB1ixw=; b=m9QVz4EluVu/Mmm+ZdJyd6UXN5zeTN4IPrNJAQFh6aQ7Py7Lp6Ik1JihWR6LeQuIGLzgwC/Cn40T/KfU2mXDYYdIfVDsYV+xzQ7v//RgvzJHcJAT5Irg6J4aK4w3BXKQwfWYsxra8JzPsW4Kqw5lE21lwzQEKMIJg1rsR97MC5s= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550821703248.47622740250256; Sun, 23 Aug 2026 22:53:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbD-0004xf-8O; Mon, 24 Aug 2026 01:51:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNa4-0003kh-KC for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:50 -0400 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNa2-0002W8-Te for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:48 -0400 Received: by mail-pg1-x530.google.com with SMTP id 41be03b00d2f7-ca80d708489so1947767a12.1 for ; Sun, 23 Aug 2026 22:50:46 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550646; x=1788155446; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=qht+Lyy6ya77fhoK8407K/BbvZSE066z6kEHDiB1ixw=; b=IuLNFWP461TRhz3AtQsSBFCOB+RniDoZ0vnIGp6aMdo6+49+/C0pH+h9J//1lyU+ls Tpw1O+J53NFbO9ppyETbblGvdLmnNSPUm+fsTq5nMQANX7pR9fEySDZQGN1UkRhHk8k1 6ehvGzqWm5AqhX5rzrWx33LJdGF8vuAQUb1hJ6pjMhQ0xE/mTEAt3SKvk7eaqEIuG73d gkt2upET9Rm26ev+HNKrAoDln3Zc9BAXIzyEbJ/ohvU69NIbK6yLkMhrtjaT9d/rIdNL 2m1JSbB/amPVq21rAQeKsLb2E75+JCxIzhF8ez4Ny31QDCGXl5/WoXM/iiAVU9rQBs/S 2geg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550646; x=1788155446; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=qht+Lyy6ya77fhoK8407K/BbvZSE066z6kEHDiB1ixw=; b=cX8+z+aPSFqa/qyvY7qPvhtS6Yq+oNqy6AlzF/of7ZXZU4zlSn6pAbr+N2AStCv6FM qsnCD+FwkHljqOlmjpshND+j25rB15uF2wKakiiC+sQQ9eqLX+P6eEBnNbuz83J+okt3 BT6NlnEx/IJbHfns6Er7Q3kP49x3lZZ5ZaxyZzElSWmhSs5+juUFr9u75H/KlQwzInHy RTTers7Xcm+7Dop7qfhl1MFrmECO0h2tZMsQeMITjRPComHMnlpEixfTIos013NHE2iW UtFaH2JPOcWQUJap8Ks13PPQGryz3NFp7lBslQAsFUfyRv5HMwdorLkh0TAoT6XkiZX1 2RrQ== X-Gm-Message-State: AFuF++m8mmepB+qMbjS82n2qHbgbfuQhPTSSbbozonM6OWc4WDhkijka 5okhHthheG0yzkfdNaPjdIstm6f1Sr6oWS+2o6YuFBC8ZXgoxnfboj7y89QsEw== X-Gm-Gg: AR+sD103CVYs5828Vi68MjCilpo2eaREJJPDjGKu2Wjsar/rc6h8VBkx7HlGbIF1oCT zfIFpYarQMuGZM0ormId2zzbHGYDUNcC3eTEVpghUyougFq+weMKnZ1xrxYw5N8wVGiNdLoVEWs v6BM/lyhTBsudEjfK8VMnSP0t0X8cLPH8B4ktxklZ8YLz9JIjMYNxTSzOoaAmY+hkPp+j+nWRQb ohVLwMcv0SsxgfY1xIv1PdJz//eK+aJtzvg4DfjiQbdh/1i4OHoI/uIjytmLGXNiBuYbKxQ14G3 ObGZTcNg0x/hkxbJvP+dR6+UXFvOSpOiVbt0T/O7dZUVkM+kVl47dXW/3jAgEriwggV1qQWP5cO ioIDGyTM0I5xgRO9OAas5k84XUfOMiFrxF3BzhdSw2do6JFi7kZzGKWdK43bmFIMDUMYtAxA9p/ x9xYtfEkdLf2B3coAk2ecEUqCXyhc3mYr20fuz3zwIK+s9sd5PkSvYKi/8v9c+Dt8r3wA0vuVR1 OjSLQ== X-Received: by 2002:a17:90b:2dc2:b0:38e:4f31:8412 with SMTP id 98e67ed59e1d1-395a062e5a0mr39035123a91.11.1787550645534; Sun, 23 Aug 2026 22:50:45 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 47/96] disas/riscv: Simplify c.addi Date: Mon, 24 Aug 2026 15:47:17 +1000 Message-ID: <20260824054806.2790041-48-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::530; envelope-from=alistair23@gmail.com; helo=mail-pg1-x530.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550823607158501 Content-Type: text/plain; charset="utf-8" From: Richard Henderson While c.addi with imm =3D=3D 0 and rd =3D=3D 0 is c.nop, other c.addi with imm =3D=3D 0 and rd !=3D 0 are not illegal, but are reserved as HINTs. Go ahead and disassemble as c.addi rather than falling back to invalid. Further, there's no reason to differentiate c.nop, since we have c.addi -> addi -> nop vs c.nop -> addi -> nop via decompress and pseudo translation steps. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-15-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index 8a957e6a1e..7978ffb378 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -263,7 +263,6 @@ typedef enum { rv_op_c_fsd =3D 231, rv_op_c_sw =3D 232, rv_op_c_fsw =3D 233, - rv_op_c_nop =3D 234, rv_op_c_addi =3D 235, rv_op_c_jal =3D 236, rv_op_c_li =3D 237, @@ -1896,10 +1895,9 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { "c.sw", rv_codec_cs_sw, rv_fmt_rs2_offset_rs1, NULL, rv_op_sw, rv_op= _sw, rv_op_sw }, { "c.fsw", rv_codec_cs_sw, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsw, 0,= 0 }, - { "c.nop", rv_codec_ci_none, rv_fmt_none, NULL, rv_op_addi, rv_op_addi, - rv_op_addi }, + { }, { "c.addi", rv_codec_ci, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, rv_op_ad= di, - rv_op_addi, rvcd_imm_nz }, + rv_op_addi }, { "c.jal", rv_codec_cj_jal, rv_fmt_rd_offset, NULL, rv_op_jal, 0, 0 }, { "c.li", rv_codec_ci_li, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, rv_op_a= ddi, rv_op_addi }, @@ -3010,10 +3008,7 @@ static void decode_inst_opcode(rv_decode *dec, rv_is= a isa) case 1: switch ((inst >> 13) & 0b111) { case 0: - switch ((inst >> 2) & 0b11111111111) { - case 0: op =3D rv_op_c_nop; break; - default: op =3D rv_op_c_addi; break; - } + op =3D rv_op_c_addi; /* or unspecified HINT */ break; case 1: if (isa =3D=3D rv32) { --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551013; cv=none; d=zohomail.com; s=zohoarc; b=SUMSEXeRL9GBkbKYfzus1vWtNI5paQEl0GsDENuaHhik2tPecU6TuIeZuVAahWw1mNXahf94qLzrHpmChBr6zyqByD4kq0Hf/+bTmr7mgIPTsyStM0dPLKiAUdPs73AOJdLIxHUf4FalTEqi9rxjVblzFGUWB0ygKbaco1SXPHw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551013; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=y3jYg6CN2EN6XbjmWcdyGyDrijaVSsDsBzbN2Vh61c0=; b=gYOZvOcUyGJei5RJ4a1P8aLIDkBvU57UvvttYw8r8tC75Ezn84yvAfREJn+0eYl07B87OhGD8rnmPx1zyss24h5fzPO8oflHcbsZMmGHuHm01LF21X2EDNErIPTcE1LkgBGL/OsldQeK095PrhPZN/IH9gar9bNwUw4SgfCXuW4= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551013524727.0996167496962; Sun, 23 Aug 2026 22:56:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNar-0004X7-S7; Mon, 24 Aug 2026 01:51:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNa7-0003oj-5F for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:52 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNa5-0002Wc-JS for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:50 -0400 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2d01663d816so24337225ad.1 for ; Sun, 23 Aug 2026 22:50:49 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550648; x=1788155448; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=y3jYg6CN2EN6XbjmWcdyGyDrijaVSsDsBzbN2Vh61c0=; b=Spp+XgfBsz170yt1HAV+2o7vfQg/rYQhY3vKrtCEetPDWTw5l6x2+efqy5DrKnfUJo /X3uznRigwfBEG9ERgT22j4CiwFnxzrLWoztTPmPPtr2in9hunJGI0lH5CTETdDDt8u/ jI4XqXbv3KUlUNlST838aB1TtSRBBPY/bDRakLP3RPPEpUzX4r82sibnZ/nTyypTBjBa cY1RSZvwxTB8wOESDQLxSMoU6ouUr/rvQX5uNosItipJWmHYErIzZFr3xH92+roG7m/6 dAKud9qKhyTd2TdEH4u0Uph+0hTLO8mjKE/dOaxkFzI0s6KuN2LgozNoD6MsBtz2QziY gBAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550648; x=1788155448; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=y3jYg6CN2EN6XbjmWcdyGyDrijaVSsDsBzbN2Vh61c0=; b=ne3VXyeNhBKeJtSj7ax+O2B/+KRSLZmEjHxygoF0PFB1Yc8FEJIDAGp5G8DsvqPTNp 1FAcQN+atbSFGXpfwr5OxveLgC5iEF++C3HdUo0px1bjYNG37zDYQFLyysgukyEBuojl aNxiYOXXqr7qB96vRebKmMML/4h50GveSroy33Vhpl3MM1SQYlbK26sLfc8Z+/y8jj3s 6tKeL5Ez75XDy3a45rzca0UXl4w5wu4qVIkFIpccEKgveBNo8+Jw00d9v36i1t6Te8Fd 8XiYMPwXWPIQ+0si91c1ehebljLIQlxNyzJj5XHwi+eyjWWC/lgbvgZriT0ddkJaRTuW WQgQ== X-Gm-Message-State: AFuF++kTmaZsGoEKukjIPjdJxz/ivRuQO4LJGEjCDVZ7thy9LCCfEyZ9 E8xZ3lPa8tcYBgjFMWm8qgFVzyCgHPHOj1yWILB0/DQHKDF34jdKS9jK69CS+w== X-Gm-Gg: AR+sD10y9ioMtyeNd45YBWniGb4mj2BoQJu/ll7zDxoWgPSsRJ+G5wLPghkKShG6d0V dSAps8LEmyMtvu1h/LMzLJ5GcMUwd+oqwUNtVbWVLunck4ugaR5VqkdbZ+JaYrqRF0bX5x/geAa xfHmEdUMi4Ps3EwLKgqVCh/zh0jFiHxtEV++Rb8GOBpNTUAebyA7pL/jJtTKMxX121r3KOfPlom yaYA/I4hKi9a/FeFkZ9sNi2KToz3Re5FW/I8Mnl12gar1Ro+rivyR2hpWqkiMzyuIdL5wMvB1T2 1JEw8HESmwGXvGr8h1P8wbFCnKPMgXtEW9XCGN3qOvw4VmwnJ2oVu1MeSFim+sBd9X3T+Btiyba FQL8tNJqZw1FLxK+D0YmcA86LP6ftdqZUI6h6ILcz9yMc8xV7s+KqHk2Dz+a60pcw2cF6UXmn8y RmQn8kKAncOdaBXvMjuwODl4Eh7QjCqNRToHC2y+2aQLZxHvZJSWHcRGw94T1c5UN53Vh8a2Wqi 93XWw== X-Received: by 2002:a17:90b:3902:b0:38f:240d:b857 with SMTP id 98e67ed59e1d1-395c3377f59mr36448181a91.2.1787550648267; Sun, 23 Aug 2026 22:50:48 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 48/96] disas/riscv: Handle c.lui imm != 0 during decode Date: Mon, 24 Aug 2026 15:47:18 +1000 Message-ID: <20260824054806.2790041-49-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=alistair23@gmail.com; helo=mail-pl1-x629.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551014295158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-16-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index 7978ffb378..d6fbb3bca6 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1902,9 +1902,9 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { "c.li", rv_codec_ci_li, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, rv_op_a= ddi, rv_op_addi }, { "c.addi16sp", rv_codec_ci_16sp, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, - rv_op_addi, rv_op_addi, rvcd_imm_nz }, + rv_op_addi, rv_op_addi }, { "c.lui", rv_codec_ci_lui, rv_fmt_rd_uimm, NULL, rv_op_lui, rv_op_lui, - rv_op_lui, rvcd_imm_nz }, + rv_op_lui }, { "c.srli", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srli, rv_op_srli, rv_op_srli, rvcd_imm_nz }, { "c.srai", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srai, @@ -3032,9 +3032,11 @@ static void decode_inst_opcode(rv_decode *dec, rv_is= a isa) break; } } - switch ((inst >> 7) & 0b11111) { - case 2: op =3D rv_op_c_addi16sp; break; - default: op =3D rv_op_c_lui; break; + if (inst & ((1 << 12) | (0x1f << 2))) { + switch ((inst >> 7) & 0b11111) { + case 2: op =3D rv_op_c_addi16sp; break; + default: op =3D rv_op_c_lui; break; + } } break; case 4: --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550797; cv=none; d=zohomail.com; s=zohoarc; b=XXMko4X706vyZkB0VimQ6Vd8DnyguDdYXHR7MIoLGSkdXEfE02RCcvxoxvNbXSTyBwhiwTRGT727bdMMockKBnfDTHFDsF2kSu+Rdi+Tw4nHRwSTZPYx8+iYtITKIKmD7B1DeLxm21KdGHQB8LmGa4Tg2Ruil6B4pegvL1Wrr0Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550797; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=wqpgx19U+U0hdUaAa6qWGdcaekLx063/m+xN5qlHCgk=; b=BtLkYh5zL5+9DJRDl3hfPmGQPvL2TDbspE/tcy+XdXBiap0LJB5TSXaVxCDuyzKrxwMw/Qwyp7CQnxtjDfC5y/L0R06ELe624buYhD341Rfgc1BRp/EgGtUkJB+7/OMEr4g4Ax9VYJTbgWhHZbw5UX2EI7+1SWNvkqVp4EeKSSA= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550797911966.7523695356664; Sun, 23 Aug 2026 22:53:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbJ-00055A-H3; Mon, 24 Aug 2026 01:52:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNaA-0003uY-3f for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:54 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNa8-0002XB-Cd for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:53 -0400 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-3900e39d935so3060676a91.0 for ; Sun, 23 Aug 2026 22:50:52 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550651; x=1788155451; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=wqpgx19U+U0hdUaAa6qWGdcaekLx063/m+xN5qlHCgk=; b=ftq42FviER8PzNfgBjMCNtbMpN2DL8/efCpHnsE2KtLCaNbIIyD/I77l4IeHnS96X1 sQZiQeSdef/ajFIzmOBVSkZyuKDoHlfYHaFPulz/wq3KH+n+/93zdTrh0nRwBUYyyyNt Z660Gbu+Yn6VzHdoOmdxr+LW5N5qK64Rn/VUkG/anXKwye19V+t9SaJtdi6x2WqMWa7j sTthZqe0CTgeGhez0ZjVhOwvFa7WYnzCnbVLGazeMO/HbTpkoSYf/54uEGcoyjtOY0nv dTTLtsWpJ7igCQ+fZ9eW272zlqzE73EEIqlbmU0B3SDCt04mb+PLuCpr45jYswcnbjT4 S/gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550651; x=1788155451; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=wqpgx19U+U0hdUaAa6qWGdcaekLx063/m+xN5qlHCgk=; b=GS2ozq0YnZTlsBLEYO5zEAZ8TND+mX6SySwNg30/L/YYJ1Jtp9GoXP9ssv7b+kXrp7 j5XwQZa6IY1rIxvcr3qj1XKjahvtKqRrKr93CBpwJZ22d4CaYLxPkKOz2VaZZxJO7ZyW jfA6wjkEIkX5ROeX9E16KgptQa5zZvec7oFLx1jiwsGwxAKbrVV0JiDRheF//uV8KcFw /afAsM6rVnxgCnWJcVm0uIundYcwWG/NEkQpkmFgynHdTsq+2FI/gFzpXHSgwd49QFJ2 rOAKeggcT4qLE31KchgzPUrR0FHM6dVF0yqzkpfBlNzyZw8kO0XVGM928hUDd75rOaM/ Lfgw== X-Gm-Message-State: AFuF++lRuSd40AyeA2/jE6e6oGR153rnlc7iUt4+Wd0Qxlg5/v+TJD0d 1BMrNcAiu0kWNDig/87OZ0AQI2VixRXhhKCJSLyWBjpSaPPNlBFV92iwTCjaFw== X-Gm-Gg: AR+sD13B5umnafpB34i9+5/vROUl14qiXjHbJ2IkWNBk+nGuF5ep/3kT8TkBz6S99SX js1t1QtttSjxRMArRo0xP62sVkGtI9hHuXZVE7UbeMeSoxCpmM/to1FCjYCQ1nIdVK22QbP79Qa bD4iYsg9nU9I6lfwFNo9oBt9rg7u73EqEf5FDLyxFCF86xG3utki88TiqkFvjtIvvxXwrq9kUOR isztFR/hhMS8iiRQNxXT4zdgHd4/AGgnOBQ5u7YwFHh1RyzRdJ+FfCbkrtfJjR8VymtR3CRrXa+ 5r211pyeu6N/Zcn+oEDFF1TGzlYE+pp6l0y4wHri61AVT4Cnr9m0zvHrs5HJIerg3OJ353KxDZ8 FGmMQbV0T44yoaa3zLNWTlF+k1IrEAjY9+pbYpnQvjffBHSPBV+K3gOdXAU26vD14IFZBd6VabZ pGaD/5ilPTrbrkvsGACtU50Zipavs+wcnFmTrwm8WufWYBIDg4fIZUBVrxC/YhckbbVQ27x8W6B 7gLiQ== X-Received: by 2002:a17:90b:1b0e:b0:381:a766:efc9 with SMTP id 98e67ed59e1d1-395deec7930mr27341374a91.7.1787550651049; Sun, 23 Aug 2026 22:50:51 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 49/96] disas/riscv: Handle c.{srli,srai} imm during decode Date: Mon, 24 Aug 2026 15:47:19 +1000 Message-ID: <20260824054806.2790041-50-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102d; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102d.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550799450158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Zero shift immediate to c.srli and c.srai are not illegal, but are reserved as HINTs. Go ahead and disassemble as shifts rather than falling back to invalid. On the other hand, shift immediate >=3D 32 with RV32 is reserved for custom extensions, and we need to reject those early so that the extension disassemblers get a look in. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-17-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index d6fbb3bca6..a8fbefb9bd 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1906,9 +1906,9 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { "c.lui", rv_codec_ci_lui, rv_fmt_rd_uimm, NULL, rv_op_lui, rv_op_lui, rv_op_lui }, { "c.srli", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srli, - rv_op_srli, rv_op_srli, rvcd_imm_nz }, + rv_op_srli, rv_op_srli }, { "c.srai", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srai, - rv_op_srai, rv_op_srai, rvcd_imm_nz }, + rv_op_srai, rv_op_srai }, { "c.andi", rv_codec_cb_imm, rv_fmt_rd_rs1_imm, NULL, rv_op_andi, rv_op_andi, rv_op_andi }, { "c.sub", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_sub, rv_op_sub, @@ -3042,10 +3042,16 @@ static void decode_inst_opcode(rv_decode *dec, rv_i= sa isa) case 4: switch ((inst >> 10) & 0b11) { case 0: - op =3D rv_op_c_srli; + /* For rv32, shamt[5]=3D1 is designated for custom extensi= ons. */ + if (isa !=3D rv32 || (inst & 0x1000) =3D=3D 0) { + op =3D rv_op_c_srli; /* or unspecified HINT */ + } break; case 1: - op =3D rv_op_c_srai; + /* For rv32, shamt[5]=3D1 is designated for custom extensi= ons. */ + if (isa !=3D rv32 || (inst & 0x1000) =3D=3D 0) { + op =3D rv_op_c_srai; /* or unspecified HINT */ + } break; case 2: op =3D rv_op_c_andi; break; case 3: --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551009; cv=none; d=zohomail.com; s=zohoarc; b=QNQ/+2dIqosUiJZ4DD4E6Cg4ago5pyBup5vsJUjqU8tA6jHcFwuyhKdNSu0kgbkfw2+c1wJvYmjh2b8nxKSyJrqs0Cv2AzF++bepnDu/tBSi4TxyPKJCthKqNOVaN9FDCjtIUdbi9jwCMahjBHKk/MQdgqtLwyGZMoSxr3fzAk0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551009; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=IIaVZ5Le07IarJEOt1XE2S2+XTMommd1hEXZNLsmCmI=; b=WcfeaN2mYCvuylQSY/Bo+7NFYIRH/6iWceQuwOYnP+p2/GxBKhewku0XVWc6WXtn60UpaqqtcQwuEGLwzWLdMBiKHUkuDgHUMQvwXyfOdFnlxAb1Tgou2/Vy5LXx5DFUWEoljgAuMpX4rCMRUkNOidfF/lREzEXgq59iB8vvgFg= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551009177761.8377292938125; Sun, 23 Aug 2026 22:56:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNat-0004aN-N9; Mon, 24 Aug 2026 01:51:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNaC-00042s-QS for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:57 -0400 Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNaB-0002Xo-86 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:56 -0400 Received: by mail-pg1-x535.google.com with SMTP id 41be03b00d2f7-cbee3777e1cso1794841a12.3 for ; Sun, 23 Aug 2026 22:50:54 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550654; x=1788155454; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=IIaVZ5Le07IarJEOt1XE2S2+XTMommd1hEXZNLsmCmI=; b=K8P+UreK3AL4gGmzFxq3U6jo8PJ9Pu/vYTUulzA3jw6p9UFrm8jNH9mdYy9VVJdsiN tzUqvju87SPlkqhmQLRLmVgQ91kvgoqGN0pa1j91ZDH3Wk9Vb7n1CTB8OSHLvpW3OhKQ nkiClJPTauc50ogDnvmFKzUiGnwShIgZWvQ+f6fIy4mwgQH/cc/G44BMxcm23+W+febQ L58aEXfZveB2oCBvrOJcE6x5Ca0SgbZe6BmeqXu6fKlEU/iw9ajRn7RYQ+tYH8fNnzaY fT1racMTFBUFSa1MUEIhCfwxsvhTrLppdXjdrVyYeiNuL9eWuN2vmY1Vtr+EeTFTizlz Ncag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550654; x=1788155454; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=IIaVZ5Le07IarJEOt1XE2S2+XTMommd1hEXZNLsmCmI=; b=jts1Qs5Ix4FYTb/G6yLdouH/Rt+hn/9auPve1WA/X0AthQR5v7IytpoXrP/NWjuZqh AIXK7GxZ1SF77ZAZdku6fyuSZKrvD5x+qadPclh17LNyN0dalno9SjHM1WO95dN9BYNj u7fCEVkBFX3nHN0PquB+lcD58Jm1gYDLpoDNGMYq1LLVAHPiIdiGIiMJ+E4Hy7oKpS8h 4zu2ZSPOz+9iHz2n09HeoO+mQdTHHVfLpf73qrv1EyLKQ8auPqTcUIOBj25h7YkkK9TH sXxRqDzYbSfO4teGjZ46Vg2Dj5U1n/XZzJ6TOgyPEn2A1L1U0WcDNfRBfGWTyUQChhrI uR9w== X-Gm-Message-State: AFuF++k13xq0SccDpwHfUWefKlbTaEpS86t6ESn2VVY0xxcnwQEgC1CI Wrkph5vNzlv8qP1py2vZnZXUzvpuZLD+v25+ggt7MAC6tHipoS++FSh8lOGKLQ== X-Gm-Gg: AR+sD12NbArF6uD9pCaz4+pDkLOIqlV8LQ9Q35/Mn8+Y7Rl+zzKy3q81xirTXaKAVT/ pWY4vi9730okh+tJAPKVKbO7wsn7h31SXdKjvD8Yute7rY3FRJJErdrBn7wVfRfJ0BmBktOkGS4 bCcJ6EQJLm/3/gNdRIh77bpI57r+1DNq1X+FRm3UHJG7oMIL00myBPilfQXQ+J6J1uVa4qut16d AzcC+VjIhP3ZMGEjV3fYJLLGL3DLYTIApLR+hWmKxh4ezRnBw/E8m7ku+mKnqj9H4pmiTMVY2KW X8Fx3sKsbgcOTAebcZRf5D/BOBV29/b7C4yeeZ2rbvBuc9cUb8y52UalEj87uMsCTHwidMqsJUT tztajB3Wud6OwlR/bOLSUpOZwiS5P9BF7kLxMvS4Eo7HXxKxpepeR+QERUQtqbeTmN321jLEunN bQ3AbH6SznqX+SxOYwMxuDi2t5cG+nUEemleEf/7T7igGu8NnSIjh54yuucbnY9bukrdnad/epR XZTtZvorgYi4eB2 X-Received: by 2002:a17:90b:53c3:b0:38e:5c6:4db9 with SMTP id 98e67ed59e1d1-395c39cbc42mr43635485a91.11.1787550653842; Sun, 23 Aug 2026 22:50:53 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 50/96] disas/riscv: Handle c.slli imm != 0 during decode Date: Mon, 24 Aug 2026 15:47:20 +1000 Message-ID: <20260824054806.2790041-51-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::535; envelope-from=alistair23@gmail.com; helo=mail-pg1-x535.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551010311158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-18-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index a8fbefb9bd..77347b557d 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1930,7 +1930,7 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { "c.bnez", rv_codec_cb, rv_fmt_rs1_rs2_offset, NULL, rv_op_bne, rv_op= _bne, rv_op_bne }, { "c.slli", rv_codec_ci_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_slli, - rv_op_slli, rv_op_slli, rvcd_imm_nz }, + rv_op_slli, rv_op_slli }, { "c.fldsp", rv_codec_ci_ldsp, rv_fmt_frd_offset_rs1, NULL, rv_op_fld, rv_op_fld, rv_op_fld }, { "c.lwsp", rv_codec_ci_lwsp, rv_fmt_rd_offset_rs1, NULL, rv_op_lw, @@ -3085,7 +3085,9 @@ static void decode_inst_opcode(rv_decode *dec, rv_isa= isa) case 2: switch ((inst >> 13) & 0b111) { case 0: - op =3D rv_op_c_slli; + if (isa !=3D rv32 || (inst & 0x1000) =3D=3D 0) { + op =3D rv_op_c_slli; /* or unspecified HINT */ + } break; case 1: if (isa =3D=3D rv128) { --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551112; cv=none; d=zohomail.com; s=zohoarc; b=Bck6iwtiMDz4xBDX4WOG8mL2WxEyfutV0VRM1JFrOFxywHxokqnQmaIPwNTogLDJoqmm+TDvjOQLnmq/SAswp+GTzkfyqIiGNGETa6VjHdi3l1K/nEviw106cbfhexsNsx17gYOjwrHdHyPcTuzImYXYi8g2VS1qvoXsaxVWxAg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551112; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=3+CQdeS4ZDd2cPsyFQmittENkduVaoRgr67sy9mGB6w=; b=R0ocdigeLV+OxnPKzwUq0U484cKBQh2yOFQpxe2vML7W3laXzvZk1M+0Y1V0DJ9xxyefvEJ2AuVr/pRtEymg4EvjpQdrezmRp7kOwEIbjnYlQDn+VcjMtjh6PR00l5Ja5lXdxLH7ELgPmgQsMxZuErVtU0sQGHPcw9oFUi54w64= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551112464706.3728514572706; Sun, 23 Aug 2026 22:58:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNaq-0004WL-W7; Mon, 24 Aug 2026 01:51:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNaF-00048W-W6 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:02 -0400 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNaE-0002YR-0V for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:50:59 -0400 Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-2d560775ca2so24630725ad.1 for ; Sun, 23 Aug 2026 22:50:57 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550656; x=1788155456; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=3+CQdeS4ZDd2cPsyFQmittENkduVaoRgr67sy9mGB6w=; b=mNwyBWXKfF8yREt1GxwpTuTfakK2RarG+nwqHKC5noqTYJpnt3z45s4fjZcktCC/Bp E17jWGg70IxhSc3nixVw3cn3hnA/XJbKTsrz6ZC4N1IGjs4EkQ8FaSBNmJCj2Wcy+JX+ hd0C7pqALYAGFGQac0Jf/YrlpT2WaHLRX62QKKDGk8hdve/RdBhzbWlrsFi3oZ3lrTBW yRwzOJ8l6CR92/yo3s/JILmnvVEBiR3HcdY6Hg7jnyoTG3sh7sxNNyfWpyaieyN09nhe V/r+F8WhVhoEKdbDHMqTSxQvjcwHR3iHwmEz+7SyXrVrq+e8pYm2w9SDSaiyHnMudDFS AICA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550656; x=1788155456; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=3+CQdeS4ZDd2cPsyFQmittENkduVaoRgr67sy9mGB6w=; b=PZpU9g7nHSHp5cxvo9pyTV36ZqU8TretTEJFSpTL5qGZ4cPOqfMYKrk2emaB8vWNn8 8pbasmsHDiyN3sjngc7w3XECQcpPz+zWE/YDsxZPNAc/JYh4krESV5NieXgQ+TxYZior P8xJ2IehtDNsDbEvYerD0VMrV4fv4yjF4JycgqsnjowuApLIVkt9lnesDiCRzHH6fOWQ yuJuIvecgLq+9QAfFu66sQH/KOx7gL+ywgEq0wIJIwOSdsj8+4mIJs+RZ/W42ffs+lTA pgeTUNlA8xJjyZhqNjKhkvKFtAGJedgXm7XE2Xy1zXXK6YtVWQOAaTYtYeIHm1flIwNA GGYg== X-Gm-Message-State: AFuF++lrKtddfCqljBtGPU+GWqvdInVq/Qpow1gwVRUrpgFdKtYj4miy yahwcfo8ryFP1sYSp4e0JhT4oE2+6lx9FDo6JYFADf+b1PuVzrCwBRiP8cRgYA== X-Gm-Gg: AR+sD13NYWToUuCCvaHFMiMXQzZjb8aWm+eIBgGtW3mL/hIExOpx/OXuOdD8l+RvrTE E+O0OdIZFGcBTLsVJXq8JzNjGdzuPohiPqZxI17L/oPkl1gb0zB0ei9So6IK0EwasLNkiHeh1Qo zvA+WSrm0mMykpRSNRQGKsp/atx7j4+kqydo4f4kWR2PbujtiDuAbosx22fZuE76otP2xIqbUqb RuJe53NgWdL8au1YyBVHYEGWHxRIFcHMrWdKXuY6iDch8bEbosiOK7RUWWMmdUGkvOT1b33Noo5 xOubORBDmmSzYZWFwr/YBSIpe/7vmAyr79RvMiKbEUC+PzKTsvAeDO1qYr82P3VcEtBGIvEsq63 uN1PNAqvj9oeg6nxpfODq/rttyLgV6J8RocxaHn+ig7yA3O20GvpPYKCmu6kQ/OX1ABqh5d5bR2 Gw1Y077iE4pA5RKBwA2RP8Vsd3VfqFLIK+32GZKb2c3nYbc0prtr+leQFhr26Lf9I5kcFkmfxZu Ukx2A== X-Received: by 2002:a17:90b:524b:b0:38f:7f60:ba35 with SMTP id 98e67ed59e1d1-395deec4953mr30451578a91.5.1787550656544; Sun, 23 Aug 2026 22:50:56 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 51/96] disas/riscv: Do not recognize c.{addw, subw} with rv32 Date: Mon, 24 Aug 2026 15:47:21 +1000 Message-ID: <20260824054806.2790041-52-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62b; envelope-from=alistair23@gmail.com; helo=mail-pl1-x62b.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551112803158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson These code points are reserved with RV32. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-19-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index 77347b557d..ddc2f73eae 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -3060,8 +3060,16 @@ static void decode_inst_opcode(rv_decode *dec, rv_is= a isa) case 1: op =3D rv_op_c_xor; break; case 2: op =3D rv_op_c_or; break; case 3: op =3D rv_op_c_and; break; - case 4: op =3D rv_op_c_subw; break; - case 5: op =3D rv_op_c_addw; break; + case 4: + if (isa !=3D rv32) { + op =3D rv_op_c_subw; + } + break; + case 5: + if (isa !=3D rv32) { + op =3D rv_op_c_addw; + } + break; case 6: op =3D rv_op_c_mul; break; case 7: switch ((inst >> 2) & 0b111) { --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550927; cv=none; d=zohomail.com; s=zohoarc; b=goI/JPehxbgC6DeyChHeg3q+oo2ELQERuQC2cfktCd393W3ulXtfJTkMZKIN5JDdXPlV2W3DuWds1AzePt0azrlKhdADB8r/mlItmeh1K2VmpkBfNSkfHZ9+bmIaqdwmo/2Pgh1t+YF3rGMFqPORcGi+H/x8SgmVveEUcBOCp5k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550927; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=toVDeATvXKbZsEV6lrO/6YOhYfdtzoWUhVqQYDrEcNA=; b=Cd1q296DLk+iSUbBdV3kBmLCb9UFTIBuQG5T6gKWkdHS6GWmSnMHZlr3ZMTiOcuIRK/2abyIOqTfKUnn7Mf1f5sqOiWjoCNOjmswlsjxzoDC2OLnELRqp9tr5PGLZMHLeiy0OitJV9JWkCtdzDFiEj96WbREESOf/GppMLel2hs= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550927925865.8702949305199; Sun, 23 Aug 2026 22:55:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNc2-0007Ll-An; Mon, 24 Aug 2026 01:52:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNaI-0004Ao-7V for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:03 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNaG-0002Yq-HN for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:01 -0400 Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-381c51fde6bso3589467a91.2 for ; Sun, 23 Aug 2026 22:51:00 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:50:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550659; x=1788155459; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=toVDeATvXKbZsEV6lrO/6YOhYfdtzoWUhVqQYDrEcNA=; b=lOamquYfd8gxJd5fjA9IpfkfbcyY8KUfw11tz2NvwbvTKFfRtXR15ShzjfHZau61PE P82reVlv3+SwTavN0cDNlObVrKJA1bWczDzW6LuHkcdqgg6XIyqIUrBtvajhw1sZdpKd /IYvh/wgastcMmH1SHshkFGFfAP2xVElIZ7uHvaBB7t4AF12jz79IDCLbBrnik7ehE2B 2xihZNtvRJKlhPcyWEIFSQJV1LYU2e/b/nrJr3dUVUT40FZIpp/1BPy04RDRaZ/h5rfH Y5jXEgt2VSWdVgNMVGl684yUi4yaJcIIDn+5ZlB7DelqrqUcJ8u17BrlE91dnKBN/A43 tQfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550659; x=1788155459; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=toVDeATvXKbZsEV6lrO/6YOhYfdtzoWUhVqQYDrEcNA=; b=giIkCMLx3BgJQz+zKbtwBzJorW00I3KfRwIBxpujHBlwNp4xY6tibDk4yPUDe1R8XR 5pMDd0wWik+czCPlUmqHlsjt4eZ0JNeKSxZC24Ek+AzhOEnscESvO49yDZ6K6MqtXHnT sFOb4Szrsn/LNYOPml6EAeJhFoXQf4Bhjv3JHP3OD3SctzwBzRk6+2i1bKGB5i+M6vUz TLWhX/ua9DEWKVl56tm9z9uJqpFbuBW/8+EzP+olkCKMZUF4pvv9PkQ09LkJn8/XYUJW hQzhH8ufpQVbClc+PHr8W1XRjsd8m0LCorE5PVGMBshN83/mmDyRDEfaLdzX7ihS1Fxk 6psQ== X-Gm-Message-State: AFuF++mQIIy7Rj2mgbEziboEAuxI94r/5VOgjIjh9g/MiErmaj69Mdgi cQuJehvsBuAXznOXdtMLs+CFTVhmLfeotBFcCruvj1K9E2VO9BSf5uQHz4SVTA== X-Gm-Gg: AR+sD13EfzY/Y/ao0zeDMduCnJuiCYy3Zo8r9YdjHPu2KNokWqB5Q/2XPuaRN6XqQCU W1uK7ntN5SgyQmKi4JbSlNMQzDvaKfXSu9m9WiHAtbp8mzoYDgpy+5BSVf+FhHqGle5JGtyJfap M4PglR89zFMSp8en9v73sS6sKbPhXrrLKjCzcosiMkr8wdgvskyF6B26PANeVszxSX29bVTBQJF BvlCh57KlbFit6hlyojTGBmUdqIecYeKrEAYD+IWu7AW5Vqs5C/tJqlIbD0abceaIYKtmJbIkGj LsQY4la2CotkJt5ZUtCPyaUWvLeF3blj48MYlXI9q7/s9Dp+IjNzFMvuMywVxnFgqG4/XA7jeSM kUpA5G5ASj2Ln2QhDOjtvwjoGgis1LBdSt/NpnyS9Fb9A7ZQ74zBaf/hWjIPlkiscswf1ZRtYzw Ko5a9Yd2xb2O9egcKM+Hi0Atly24N/dW/z+h0viv13Ul+Uiocqg92An4dq4/lO62W4iMgg15giA 79EOQ== X-Received: by 2002:a17:90a:e70f:b0:381:a766:efcc with SMTP id 98e67ed59e1d1-395df3c6026mr30902862a91.14.1787550659205; Sun, 23 Aug 2026 22:50:59 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 52/96] disas/riscv: Remove rvcd_imm_nz Date: Mon, 24 Aug 2026 15:47:22 +1000 Message-ID: <20260824054806.2790041-53-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1032; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1032.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550929958158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Remove rvcd_imm_nz and rv_opcode_data.decomp_data as unused. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-20-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.h | 5 ----- disas/riscv.c | 7 +------ 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/disas/riscv.h b/disas/riscv.h index 31bb0db86c..3909d73dd0 100644 --- a/disas/riscv.h +++ b/disas/riscv.h @@ -186,7 +186,6 @@ typedef struct { short decomp_rv32; short decomp_rv64; short decomp_rv128; - short decomp_data; } rv_opcode_data; =20 typedef struct { @@ -217,10 +216,6 @@ enum { rv_op_illegal =3D 0 }; =20 -enum { - rvcd_imm_nz =3D 0x1 -}; - /* instruction formats */ =20 #define rv_fmt_none "O\t" diff --git a/disas/riscv.c b/disas/riscv.c index ddc2f73eae..95957506bd 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -5417,12 +5417,7 @@ static const rv_opcode_data *decode_inst_decompress(= rv_decode *dec, rv_isa isa, } =20 if (decomp_op !=3D rv_op_illegal) { - if ((op->decomp_data & rvcd_imm_nz) && dec->imm =3D=3D 0) { - dec->opcode_data =3D rvi_opcode_data; - dec->op =3D rv_op_illegal; - } else { - dec->op =3D decomp_op; - } + dec->op =3D decomp_op; op =3D &dec->opcode_data[decomp_op]; } return op; --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550994; cv=none; d=zohomail.com; s=zohoarc; b=dsASSVyaJpN7uOTibzKOIcoVb1JR2ZTOgunqKNXqSsRGSTDFBWLQU3dYfbhabgjcYQBY0WCce9vkjb57cw5QD4+jDJqTrEndOAor85K1Xt61uWHyAllSxzWWLe59XR8/NCT6ch/rCJl1OYTFsbGgaKEg0cDmD2DFAu6aXhis5+U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550994; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ipYCW2mTSZ2QTquJO9XqJRNLADtTowCNrowX6E/BVG0=; b=Vtzo815+a577em/LM4g9bifoVNnvgTsaI5av9soWxMphA0PHaNmGnf+KMSkOk7SvxuswpY0VRaLc9ocy+vmKKfMvr+jXwdd5ggWXdiWA3QqiYYnyHwJa1JUPcPU/tg/jyZqrzNX2+vVvc+ZwQpd1LY9zfxr699U3pYatasGhLIA= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550994858823.8807150070149; Sun, 23 Aug 2026 22:56:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbL-00057S-21; Mon, 24 Aug 2026 01:52:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNaM-0004Ew-6F for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:12 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNaJ-0002ZU-TK for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:05 -0400 Received: by mail-pj1-x102f.google.com with SMTP id 98e67ed59e1d1-38e07ebd263so1941811a91.1 for ; Sun, 23 Aug 2026 22:51:02 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.50.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550662; x=1788155462; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ipYCW2mTSZ2QTquJO9XqJRNLADtTowCNrowX6E/BVG0=; b=fp7hhCWt39JWzDc93L1EsLM9Z1gVOL18Y5bQke0Z1lA58X98Pn3GlDEiCTU5pvW0f+ /eRmBuP0TEMFdw2ED95PglGhMMydQ+nQcV4Z7sYDAc9SDXUtHdwMNRzzNQMMEt7ZTdo+ rASkqc/HGC0+61qjhdsYoEztTYeE3wwxtkbaPWBcG9jfZ/rAqQ4zKkmEfPSmCh9Crjzv jHnvBQimLw0/zoyVzX3lptP65MgJ1i2Nhblp8QgHxhngAUGo638Puq85SbmcYorFq6kR YX7MowD8wWOv5Xdya34Yjt4nZsqVB+D6oZPTBWMm2/iYCwsxtpDW2t8YSDeT9Lif7uIw /0ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550662; x=1788155462; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=ipYCW2mTSZ2QTquJO9XqJRNLADtTowCNrowX6E/BVG0=; b=FfbVw6fflVJYFbe5HZPn9VKlfQ9b3EnwsCc1vzipK8rwsY18TWzL17Ukm/ZW+cAY/S 959lurE+BvgQyRyeUf7iDL2liLhhlU57LeTYT/LfDQIsgvB+hxQ4yMRrgGQM1Sj0OiXF zxBEJlq/rsQTjfg/OyKSLxArKyE4DWYFJDg+Vm1vWfcaVVhJmjXdmPZGcayxszIs20GQ dKunxs6+ehol6Rx4fHhfkUQMhG1JFcMrj8gJ2b78Vwhf41hXmpYLzJK5pGz4V4drCl1j nFJuydV/LNABfY6Lkh98mvHU7HwuhgnpwBgAONhKn0Dxg5h0Xx1xMrxtHscc2aJPFtg1 e36w== X-Gm-Message-State: AFuF++nthZ5KQoqIZlSmgx5sfna/CY0wdXaFgaPs0MYSpO9QuIMyXGFq uI2LxUbkGq4PH/AC6ktWiXO596Pe+JxFrXJiEJhxGAnsZrfOTbAHwfDJI3GC5Q== X-Gm-Gg: AR+sD11U4SR3aB1VbOlvttXwWwvrCBIHRxsHmor/2hkWBhbJw/gNoYF9xBIJsz/wr3M Y8CicqTpURav1TlSeKENSpssbaA+6HysBT2hSJFgvHD5PxCLohjcacAztDCgpqfOXhFboWxIwJb OOd2vyxSiN8XdT7l4mAa8SNVj5+VA3ncXa2Fiw+6i7opTjQSE/zNGU1PoO/ERgWTvWZxvYAc3I+ qKeARPHAP4qXVsdW+fmB7u8NrrE3SptTL2Fe0ZLA9iZ8ARfv1mYXO6AHpxjQvLNkbDtnjdesPbd JQt0w7YRFmwDUI6dtEKehtbpGJgObHy8JhIKugKLLLl5ZWooOhXVr0CGYIa0s/nFdNPstuW4UKG jhSGRiEWSnLCNBzwmxTI15Oep9KumsqqPaBdpbTLpLnjKJ9web8/lgsW6Kwwyn5UGvA9xmXgtU2 xwGUAdNc0tHMc+1unsq6EpUHgFe6MOnppn3vlrsjBXutkH005qqTnNyE4TgP8598YY6KYAWvhpE yItJw== X-Received: by 2002:a17:90b:580f:b0:380:f389:447b with SMTP id 98e67ed59e1d1-395c386d163mr47830413a91.11.1787550661905; Sun, 23 Aug 2026 22:51:01 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 53/96] disas/riscv: Unify decomp_rv{32,64,128} Date: Mon, 24 Aug 2026 15:47:23 +1000 Message-ID: <20260824054806.2790041-54-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102f; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102f.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550996254158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson We now distinguish compressed opcodes by isa during decode. Therefore we don't need 3 copies of decomp_*. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-21-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.h | 4 +- disas/riscv.c | 155 ++++++++++++++++---------------------------------- 2 files changed, 51 insertions(+), 108 deletions(-) diff --git a/disas/riscv.h b/disas/riscv.h index 3909d73dd0..900363c603 100644 --- a/disas/riscv.h +++ b/disas/riscv.h @@ -183,9 +183,7 @@ typedef struct { rv_codec codec; const char *format; const rv_comp_data *pseudo; - short decomp_rv32; - short decomp_rv64; - short decomp_rv128; + rv_opcode decomp; } rv_opcode_data; =20 typedef struct { diff --git a/disas/riscv.c b/disas/riscv.c index 95957506bd..2e891f509e 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1883,91 +1883,52 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { "fcvt.q.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, { "fmv.x.q", rv_codec_r, rv_fmt_rd_frs1 }, { "fmv.q.x", rv_codec_r, rv_fmt_frd_rs1 }, - { "c.addi4spn", rv_codec_ciw_4spn, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, - rv_op_addi, rv_op_addi }, - { "c.fld", rv_codec_cl_ld, rv_fmt_frd_offset_rs1, NULL, rv_op_fld, - rv_op_fld, 0 }, - { "c.lw", rv_codec_cl_lw, rv_fmt_rd_offset_rs1, NULL, rv_op_lw, rv_op_= lw, - rv_op_lw }, - { "c.flw", rv_codec_cl_lw, rv_fmt_frd_offset_rs1, NULL, rv_op_flw, 0, = 0 }, - { "c.fsd", rv_codec_cs_sd, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsd, - rv_op_fsd, 0 }, - { "c.sw", rv_codec_cs_sw, rv_fmt_rs2_offset_rs1, NULL, rv_op_sw, rv_op= _sw, - rv_op_sw }, - { "c.fsw", rv_codec_cs_sw, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsw, 0,= 0 }, + { "c.addi4spn", rv_codec_ciw_4spn, rv_fmt_rd_rs1_imm, NULL, rv_op_addi= }, + { "c.fld", rv_codec_cl_ld, rv_fmt_frd_offset_rs1, NULL, rv_op_fld }, + { "c.lw", rv_codec_cl_lw, rv_fmt_rd_offset_rs1, NULL, rv_op_lw }, + { "c.flw", rv_codec_cl_lw, rv_fmt_frd_offset_rs1, NULL, rv_op_flw }, + { "c.fsd", rv_codec_cs_sd, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsd }, + { "c.sw", rv_codec_cs_sw, rv_fmt_rs2_offset_rs1, NULL, rv_op_sw }, + { "c.fsw", rv_codec_cs_sw, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsw }, { }, - { "c.addi", rv_codec_ci, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, rv_op_ad= di, - rv_op_addi }, - { "c.jal", rv_codec_cj_jal, rv_fmt_rd_offset, NULL, rv_op_jal, 0, 0 }, - { "c.li", rv_codec_ci_li, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, rv_op_a= ddi, - rv_op_addi }, - { "c.addi16sp", rv_codec_ci_16sp, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, - rv_op_addi, rv_op_addi }, - { "c.lui", rv_codec_ci_lui, rv_fmt_rd_uimm, NULL, rv_op_lui, rv_op_lui, - rv_op_lui }, - { "c.srli", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srli, - rv_op_srli, rv_op_srli }, - { "c.srai", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srai, - rv_op_srai, rv_op_srai }, - { "c.andi", rv_codec_cb_imm, rv_fmt_rd_rs1_imm, NULL, rv_op_andi, - rv_op_andi, rv_op_andi }, - { "c.sub", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_sub, rv_op_sub, - rv_op_sub }, - { "c.xor", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_xor, rv_op_xor, - rv_op_xor }, - { "c.or", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_or, rv_op_or, - rv_op_or }, - { "c.and", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_and, rv_op_and, - rv_op_and }, - { "c.subw", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_subw, rv_op_su= bw, - rv_op_subw }, - { "c.addw", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_addw, rv_op_ad= dw, - rv_op_addw }, - { "c.j", rv_codec_cj, rv_fmt_rd_offset, NULL, rv_op_jal, rv_op_jal, - rv_op_jal }, - { "c.beqz", rv_codec_cb, rv_fmt_rs1_rs2_offset, NULL, rv_op_beq, rv_op= _beq, - rv_op_beq }, - { "c.bnez", rv_codec_cb, rv_fmt_rs1_rs2_offset, NULL, rv_op_bne, rv_op= _bne, - rv_op_bne }, - { "c.slli", rv_codec_ci_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_slli, - rv_op_slli, rv_op_slli }, - { "c.fldsp", rv_codec_ci_ldsp, rv_fmt_frd_offset_rs1, NULL, rv_op_fld, - rv_op_fld, rv_op_fld }, - { "c.lwsp", rv_codec_ci_lwsp, rv_fmt_rd_offset_rs1, NULL, rv_op_lw, - rv_op_lw, rv_op_lw }, - { "c.flwsp", rv_codec_ci_lwsp, rv_fmt_frd_offset_rs1, NULL, rv_op_flw,= 0, - 0 }, - { "c.jr", rv_codec_cr_jr, rv_fmt_rd_rs1_offset, NULL, rv_op_jalr, - rv_op_jalr, rv_op_jalr }, - { "c.mv", rv_codec_cr_mv, rv_fmt_rd_rs1_rs2, NULL, rv_op_addi, rv_op_a= ddi, - rv_op_addi }, - { "c.ebreak", rv_codec_ci_none, rv_fmt_none, NULL, rv_op_ebreak, - rv_op_ebreak, rv_op_ebreak }, - { "c.jalr", rv_codec_cr_jalr, rv_fmt_rd_rs1_offset, NULL, rv_op_jalr, - rv_op_jalr, rv_op_jalr }, - { "c.add", rv_codec_cr, rv_fmt_rd_rs1_rs2, NULL, rv_op_add, rv_op_add, - rv_op_add }, - { "c.fsdsp", rv_codec_css_sdsp, rv_fmt_frs2_offset_rs1, NULL, rv_op_fs= d, - rv_op_fsd, rv_op_fsd }, - { "c.swsp", rv_codec_css_swsp, rv_fmt_rs2_offset_rs1, NULL, rv_op_sw, - rv_op_sw, rv_op_sw }, - { "c.fswsp", rv_codec_css_swsp, rv_fmt_frs2_offset_rs1, NULL, rv_op_fs= w, 0, - 0 }, - { "c.ld", rv_codec_cl_ld, rv_fmt_rd_offset_rs1, NULL, 0, rv_op_ld, - rv_op_ld }, - { "c.sd", rv_codec_cs_sd, rv_fmt_rs2_offset_rs1, NULL, 0, rv_op_sd, - rv_op_sd }, - { "c.addiw", rv_codec_ci, rv_fmt_rd_rs1_imm, NULL, 0, rv_op_addiw, - rv_op_addiw }, - { "c.ldsp", rv_codec_ci_ldsp, rv_fmt_rd_offset_rs1, NULL, 0, rv_op_ld, - rv_op_ld }, - { "c.sdsp", rv_codec_css_sdsp, rv_fmt_rs2_offset_rs1, NULL, 0, rv_op_s= d, - rv_op_sd }, - { "c.lq", rv_codec_cl_lq, rv_fmt_rd_offset_rs1, NULL, 0, 0, rv_op_lq }, - { "c.sq", rv_codec_cs_sq, rv_fmt_rs2_offset_rs1, NULL, 0, 0, rv_op_sq = }, - { "c.lqsp", rv_codec_ci_lqsp, rv_fmt_rd_offset_rs1, NULL, 0, 0, rv_op_= lq }, - { "c.sqsp", rv_codec_css_sqsp, rv_fmt_rs2_offset_rs1, NULL, 0, 0, - rv_op_sq }, + { "c.addi", rv_codec_ci, rv_fmt_rd_rs1_imm, NULL, rv_op_addi }, + { "c.jal", rv_codec_cj_jal, rv_fmt_rd_offset, NULL, rv_op_jal }, + { "c.li", rv_codec_ci_li, rv_fmt_rd_rs1_imm, NULL, rv_op_addi }, + { "c.addi16sp", rv_codec_ci_16sp, rv_fmt_rd_rs1_imm, NULL, rv_op_addi = }, + { "c.lui", rv_codec_ci_lui, rv_fmt_rd_uimm, NULL, rv_op_lui }, + { "c.srli", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srli }, + { "c.srai", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srai }, + { "c.andi", rv_codec_cb_imm, rv_fmt_rd_rs1_imm, NULL, rv_op_andi }, + { "c.sub", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_sub }, + { "c.xor", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_xor }, + { "c.or", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_or }, + { "c.and", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_and }, + { "c.subw", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_subw }, + { "c.addw", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_addw }, + { "c.j", rv_codec_cj, rv_fmt_rd_offset, NULL, rv_op_jal }, + { "c.beqz", rv_codec_cb, rv_fmt_rs1_rs2_offset, NULL, rv_op_beq }, + { "c.bnez", rv_codec_cb, rv_fmt_rs1_rs2_offset, NULL, rv_op_bne }, + { "c.slli", rv_codec_ci_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_slli }, + { "c.fldsp", rv_codec_ci_ldsp, rv_fmt_frd_offset_rs1, NULL, rv_op_fld = }, + { "c.lwsp", rv_codec_ci_lwsp, rv_fmt_rd_offset_rs1, NULL, rv_op_lw }, + { "c.flwsp", rv_codec_ci_lwsp, rv_fmt_frd_offset_rs1, NULL, rv_op_flw = }, + { "c.jr", rv_codec_cr_jr, rv_fmt_rd_rs1_offset, NULL, rv_op_jalr }, + { "c.mv", rv_codec_cr_mv, rv_fmt_rd_rs1_rs2, NULL, rv_op_addi }, + { "c.ebreak", rv_codec_ci_none, rv_fmt_none, NULL, rv_op_ebreak }, + { "c.jalr", rv_codec_cr_jalr, rv_fmt_rd_rs1_offset, NULL, rv_op_jalr }, + { "c.add", rv_codec_cr, rv_fmt_rd_rs1_rs2, NULL, rv_op_add }, + { "c.fsdsp", rv_codec_css_sdsp, rv_fmt_frs2_offset_rs1, NULL, rv_op_fs= d }, + { "c.swsp", rv_codec_css_swsp, rv_fmt_rs2_offset_rs1, NULL, rv_op_sw }, + { "c.fswsp", rv_codec_css_swsp, rv_fmt_frs2_offset_rs1, NULL, rv_op_fs= w }, + { "c.ld", rv_codec_cl_ld, rv_fmt_rd_offset_rs1, NULL, rv_op_ld }, + { "c.sd", rv_codec_cs_sd, rv_fmt_rs2_offset_rs1, NULL, rv_op_sd }, + { "c.addiw", rv_codec_ci, rv_fmt_rd_rs1_imm, NULL, rv_op_addiw }, + { "c.ldsp", rv_codec_ci_ldsp, rv_fmt_rd_offset_rs1, NULL, rv_op_ld }, + { "c.sdsp", rv_codec_css_sdsp, rv_fmt_rs2_offset_rs1, NULL, rv_op_sd }, + { "c.lq", rv_codec_cl_lq, rv_fmt_rd_offset_rs1, NULL, rv_op_lq }, + { "c.sq", rv_codec_cs_sq, rv_fmt_rs2_offset_rs1, NULL, rv_op_sq }, + { "c.lqsp", rv_codec_ci_lqsp, rv_fmt_rd_offset_rs1, NULL, rv_op_lq }, + { "c.sqsp", rv_codec_css_sqsp, rv_fmt_rs2_offset_rs1, NULL, rv_op_sq }, { "nop", rv_codec_i, rv_fmt_none }, { "mv", rv_codec_i, rv_fmt_rd_rs1 }, { "not", rv_codec_i, rv_fmt_rd_rs1 }, @@ -2649,10 +2610,8 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { "ssrdp", rv_codec_r, rv_fmt_rd }, { "ssamoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, { "ssamoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "c.sspush", rv_codec_cmop_ss, rv_fmt_rs2, NULL, rv_op_sspush, - rv_op_sspush, 0 }, - { "c.sspopchk", rv_codec_cmop_ss, rv_fmt_rs1, NULL, rv_op_sspopchk, - rv_op_sspopchk, 0 }, + { "c.sspush", rv_codec_cmop_ss, rv_fmt_rs2, NULL, rv_op_sspush }, + { "c.sspopchk", rv_codec_cmop_ss, rv_fmt_rs1, NULL, rv_op_sspopchk }, { "cbo.inval", rv_codec_r, rv_fmt_rs1 }, { "cbo.clean", rv_codec_r, rv_fmt_rs1 }, { "cbo.flush", rv_codec_r, rv_fmt_rs1 }, @@ -5397,24 +5356,10 @@ static const rv_opcode_data *decode_inst_lift_pseud= o(rv_decode *dec, =20 /* decompress instruction */ =20 -static const rv_opcode_data *decode_inst_decompress(rv_decode *dec, rv_isa= isa, +static const rv_opcode_data *decode_inst_decompress(rv_decode *dec, const rv_opcode_data *= op) { - int decomp_op; - - switch (isa) { - case rv32: - decomp_op =3D op->decomp_rv32; - break; - case rv64: - decomp_op =3D op->decomp_rv64; - break; - case rv128: - decomp_op =3D op->decomp_rv128; - break; - default: - g_assert_not_reached(); - } + int decomp_op =3D op->decomp; =20 if (decomp_op !=3D rv_op_illegal) { dec->op =3D decomp_op; @@ -5473,7 +5418,7 @@ static GString *disasm_inst(rv_isa isa, uint64_t pc, = rv_inst inst, =20 op =3D &dec.opcode_data[dec.op]; decode_inst_operands(&dec, isa, op); - op =3D decode_inst_decompress(&dec, isa, op); + op =3D decode_inst_decompress(&dec, op); op =3D decode_inst_lift_pseudo(&dec, op); return format_inst(24, &dec, op); } --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551267; cv=none; d=zohomail.com; s=zohoarc; b=nFAUxlx4+Ml0Le01J+j9TY/RIoXo69YJ3STTT4uf0dDeWrUvLlvU2eyYc2uqO1E4skVUrQBbnv4DL3OCj/SkbxEQmrPM6fv8gUu+7Agq6VjlMseqfQdFjJEuoeqp7eyVKTwUexQix/pomHxnxp74IxzQZ4zi62Li7zvE8fs0xeA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551267; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=7JzAABpt44ci1D0IHFkbgQn/cNbaYvxZwjC8pfV0xrY=; b=hhciysKm5Id6TXmh4gGsmTzTN/KjC9Snz5EGsFIOt9/d0T7fiSMD87/2qbASuEbOSTYTOwcPR4sYIQPxT9shQCcWRQLKlANqACmLpUL58xHuPx/gPf63fFJOcTOnbasdBU3ZeBLItx4mJtBHWZl4UXUBWQizqRjHXU1XhkV6Y3w= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551267189498.7648915938844; Sun, 23 Aug 2026 23:01:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbN-000599-03; Mon, 24 Aug 2026 01:52:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNaR-0004N6-KQ for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:18 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNaM-0002aA-9V for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:07 -0400 Received: by mail-pj1-x102b.google.com with SMTP id 98e67ed59e1d1-38125cebfdaso4594965a91.1 for ; Sun, 23 Aug 2026 22:51:05 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550665; x=1788155465; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=7JzAABpt44ci1D0IHFkbgQn/cNbaYvxZwjC8pfV0xrY=; b=p69+/jacK3sRcDguQQ3WVRZYY80u1Q/pOHpCkmfZQkY0K48kluF5eLyG+ooyO6HIs8 KCqqOlWmAKiEgm5+3Uj8lMbasGl+ed0323b89hhqYyl/3qKTHb6eyw5oG2YE2RNrdYql AnGmh8rsYqlERrWHc4MNs/XHJ86AerP8yJKCmNLrfj/RNIP0X6tpQQGEh65FSI2mnl5Y cv6gb+/8faD4AMFNPkYNLPr0OFAvZZgYGIhHhevmKJeMo+MlFfYU2j8dUI/9s6EGuXAF 5nA5TLvKvg+dECPChqr4O4s90VpAjBUmUbCOtf1267Uzbvd2MjfaS3RBs9OBje/5TR7a nkSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550665; x=1788155465; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=7JzAABpt44ci1D0IHFkbgQn/cNbaYvxZwjC8pfV0xrY=; b=pLIyu6Q7LTdDdnVbUcAP/2rB4P1kTGObXjzIH9qkaf1Wwg3RCcqLrFzif4k9GSCGSo q1JcY8pOtqf/MoaBblUpf1R/3zTvAuwPj7BT5Bs27+l2uiVWG3U6xmNAoJgGPihodlKI jwtlWYT3OKwd2nSDRkMD5oFlY7C400jGJ1RL9vWwOJDRqdW7krcrG4U9UdtzAVWGpdGT Eo21CQqq+DbBXmAbVXdeLjHRWbAf+yxHJYUtaskj9wi//jyJpOqR7rnL2YcNpxVYRmzX dgbjQrURjh5KZromiKqzFERmZljkPFDfESkqU7rKbp2dsvuVHSTTJH8EMjEfeguxSwth id4Q== X-Gm-Message-State: AFuF++nvYUMt3MHFhKMdsp6Bji83vfOBocz25U9De5QL9JbSNORsyqhD Bt+EMdSUC3IYImfEdNHh25TZ97lfXycFlzmfYQ5OMoGgft4S0b7ft886Ze/nvw== X-Gm-Gg: AR+sD13KRFbDAqmPT/MKRlPaFtj1YjkUPdAG2PZosTeb2kvHfb5BUl6zR2mem8c5b1X 77A8vVjf/yPGchRsQ5EIW1Fml688EcGCgBXPOYFtaUdaCs9EQb+qiXx8tE9e1+c1Tk23TU5VINx 5kCD829e6NXwZCV92FR8y3ckKRP8HPzCWBAKeQYAAXCWFxNxcOJjuWAkTY1eOUqFqF8nREfdcXx McIRkFbTF2oySEaN2nqICkd0McmMzIM1lcF3rCVyKQqOKg1yDs+Uat2zE2vjlB+C+N/jsUddj9v ChTfxoh1Z3EdGOB42trGyuCXgNhBLzFrKcHInwWyiNU0zVacKSLnIDnCjnE71XMyYduzVg9i+ql eHiAMXzSjfg8N7ECpC5wsmoGPqwDsJeXoI64YNPehOCrAtI2c0l1+OSRC0v9ZIsP7UFCp3BPMJJ w8jgp4Aldfe6dZSDvn0pIL+EoWIL9mzzcstA9Chfeqqo2yWFXTATT2BI+/0B964Ea23xojkB6Rs gQshBTkVUb2dGAl X-Received: by 2002:a17:90b:50c3:b0:395:5eec:b932 with SMTP id 98e67ed59e1d1-395c39e6433mr46678797a91.11.1787550664956; Sun, 23 Aug 2026 22:51:04 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL v2 54/96] disas/riscv: Drop always true branch pseudos Date: Mon, 24 Aug 2026 15:47:24 +1000 Message-ID: <20260824054806.2790041-55-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102b; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102b.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551269654158500 From: Richard Henderson The real insns are blt, bge, bltu, bgeu. Do not include pseudos that unconditionally swap operands. That's fine for an assembler but not a disassembler. Reviewed-by: Alistair Francis Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-22-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 32 ++++++-------------------------- 1 file changed, 6 insertions(+), 26 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index 2e891f509e..bde1cc6e62 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -326,10 +326,6 @@ typedef enum { rv_op_bgez =3D 295, rv_op_bltz =3D 296, rv_op_bgtz =3D 297, - rv_op_ble =3D 298, - rv_op_bleu =3D 299, - rv_op_bgt =3D 300, - rv_op_bgtu =3D 301, rv_op_j =3D 302, rv_op_ret =3D 303, rv_op_jr =3D 304, @@ -1062,10 +1058,6 @@ static const rvc_constraint rvcc_blez[] =3D { rvc_rs= 1_eq_x0, rvc_end }; static const rvc_constraint rvcc_bgez[] =3D { rvc_rs2_eq_x0, rvc_end }; static const rvc_constraint rvcc_bltz[] =3D { rvc_rs2_eq_x0, rvc_end }; static const rvc_constraint rvcc_bgtz[] =3D { rvc_rs1_eq_x0, rvc_end }; -static const rvc_constraint rvcc_ble[] =3D { rvc_end }; -static const rvc_constraint rvcc_bleu[] =3D { rvc_end }; -static const rvc_constraint rvcc_bgt[] =3D { rvc_end }; -static const rvc_constraint rvcc_bgtu[] =3D { rvc_end }; static const rvc_constraint rvcc_j[] =3D { rvc_rd_eq_x0, rvc_end }; static const rvc_constraint rvcc_ret[] =3D { rvc_rd_eq_x0, rvc_rs1_eq_ra, rvc_end }; @@ -1123,24 +1115,12 @@ static const rv_comp_data rvcp_bne[] =3D { static const rv_comp_data rvcp_blt[] =3D { { rv_op_bltz, rvcc_bltz }, { rv_op_bgtz, rvcc_bgtz }, - { rv_op_bgt, rvcc_bgt }, { rv_op_illegal, NULL } }; =20 static const rv_comp_data rvcp_bge[] =3D { { rv_op_blez, rvcc_blez }, { rv_op_bgez, rvcc_bgez }, - { rv_op_ble, rvcc_ble }, - { rv_op_illegal, NULL } -}; - -static const rv_comp_data rvcp_bltu[] =3D { - { rv_op_bgtu, rvcc_bgtu }, - { rv_op_illegal, NULL } -}; - -static const rv_comp_data rvcp_bgeu[] =3D { - { rv_op_bleu, rvcc_bleu }, { rv_op_illegal, NULL } }; =20 @@ -1665,8 +1645,8 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { "bne", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bne }, { "blt", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_blt }, { "bge", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bge }, - { "bltu", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bltu }, - { "bgeu", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bgeu }, + { "bltu", rv_codec_sb, rv_fmt_rs1_rs2_offset }, + { "bgeu", rv_codec_sb, rv_fmt_rs1_rs2_offset }, { "lb", rv_codec_i, rv_fmt_rd_offset_rs1 }, { "lh", rv_codec_i, rv_fmt_rd_offset_rs1 }, { "lw", rv_codec_i, rv_fmt_rd_offset_rs1 }, @@ -1954,10 +1934,10 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { "bgez", rv_codec_sb, rv_fmt_rs1_offset }, { "bltz", rv_codec_sb, rv_fmt_rs1_offset }, { "bgtz", rv_codec_sb, rv_fmt_rs2_offset }, - { "ble", rv_codec_sb, rv_fmt_rs2_rs1_offset }, - { "bleu", rv_codec_sb, rv_fmt_rs2_rs1_offset }, - { "bgt", rv_codec_sb, rv_fmt_rs2_rs1_offset }, - { "bgtu", rv_codec_sb, rv_fmt_rs2_rs1_offset }, + { }, + { }, + { }, + { }, { "j", rv_codec_uj, rv_fmt_offset }, { "ret", rv_codec_i, rv_fmt_none }, { "jr", rv_codec_i, rv_fmt_rs1 }, --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551054; cv=none; d=zohomail.com; s=zohoarc; b=XHWspt+ChsiHuU3GeH1b4qNUW/Oskj1R2Y5zIf33aBsVulyFRzvMk9l7kajtRirbZLmcYYFki7/gH669zMjoTQticu4ujyEfhTR7vqMoCnfrlTKbUEdlXnS0+BEnrD9F+qW4+wQhH/PCvzZlom2rfOA7zgNJf8FqddTsGmDYjrk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551054; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=YtA6CjFYKwQR207w18iiKRkmLC1dp+/klVeKoHfdRLU=; b=aOt6o4Afyp5TkO1MAvhmoSQ4EriMwCMKgkS+ut+Q7CAU2QQ8OPusa/o01DiDrucucY40hYjk2AfIMXfrDg6kD5s96oJd0H+7lCYY98i/QVKQ9lsXwjItM9UHuQoaa6KW5AKQuGMJZvLF459Vlye98xCj0sOGy6QUjh5w5QpOn4c= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551054223304.35459175020446; Sun, 23 Aug 2026 22:57:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbY-0005TP-9v; Mon, 24 Aug 2026 01:52:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNak-0004S9-1O for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:30 -0400 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNaS-0002ai-PP for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:16 -0400 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-2ceaf8a1265so34609825ad.2 for ; Sun, 23 Aug 2026 22:51:08 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550668; x=1788155468; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=YtA6CjFYKwQR207w18iiKRkmLC1dp+/klVeKoHfdRLU=; b=lmZatTgMJRBCD9ulVgXD6iIh783WHR55THQUX01xkGvXd+cpu8sAoCLV2pQA9DxaSx qpy3TdNI9ln61tZxfa4jbL1yFwYRjxxVUru7pUT/QHnfmIFFKJET2e+X3nZaXmwMtLW9 ziP00h1nX3upsQIEKpJsnu9pUwEE06GNzS/+IYMjqg9PVXAh4ROegIpgazDmYREfQyDO s1zO/e3+8duiHGQSLHq4Ki3Gbigynu6Ovg8Q+1eTnyf1CVSeWfVK0dLBcQ0vAsDp9PMl NGt4P9BxIdEV8Ir3VMdi2vvamaFWHA+q35Tv74KlTELjG0zl9X+iiXlJ05zO2M4idhBM DxhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550668; x=1788155468; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=YtA6CjFYKwQR207w18iiKRkmLC1dp+/klVeKoHfdRLU=; b=dd4IQOkKz1Ay/sBnzpySCMTJwZAqHI/CuB+v6cBMz92W1UwCEjivheWm40bW0IrV9z pbtA4JppA5Nhsdl13XjpS8pPJ17JaF0Gx/eNrN73A8kZ9kCY1Iztd4Y2O29ltl1yVtUC tNzNmfb/XYGT7Hz+IRvQPAQJ2hLGFxFtGGJ1GT2SOEtFMsA3ngvB9Knzghvoj8sXbFTN 7NLMPtoSaPj1YCHOp7PgPIc5dxASBdEBqWq0YSGZEqgAlZbGgBuZci2Ho+pgfWuhQ+zJ 7ke73sGP7E9pEDrks7L0kh04K5X/iOnSkqcL1qm7nk9PYZfa7InfbNPuH05axfeIUPwV abLA== X-Gm-Message-State: AFuF++lg/kxOaL0xndAVnynkHYcGyWINv7/+kmaH2TmUFaRVqtDDCVKQ 8eL0NR6mUa7srfU5XWvFUeD6vBlsSSF+SdMpuTwMeGdP/YyE6FBYFJcB73WhuQ== X-Gm-Gg: AR+sD13/6gyqr6p2iQX6WBxNv69Bfqhixxi1QvuaizziWSUGJOwq+Ad4cjEPqpXocyY vcwRdZOyR9bRhdcNZT9+Qb0GZjRL5xzt4GCVTVjJYlqU6uvTU/ZfZP+CdILv9pPjEL7SvMQwPZ0 4oPjJx680238UWMCoEw5YlyA74mptpG9wUKCTEEJ/GZF272t/g13cz0VqErUDWCJMgwiHDBwn4L ruHPQgUz5uyZGXo+XWg7fNIk6hJk83sCGJHch9bpDVHFGtYwnUmYHDmBuh5EdoSg/BVCuqgnGkM vMV/CE8YWcjjNXGXajILHe33MUZwYNxAPfFlrouxZ6hWTq0/icu44siExy3KN9U52MSfJqKMlqa W9CO7ou1t+yfj5KPay+Nca0CT5HwfcrMt9IsvSaaBV5Y3YUGc5tnLeiriJkwYxsAhneROENLjrx gdKexx8FWy5RjIg84cpSNsPivki0xSJDyjz3t+Q6FVaTbnXtNgdbhOz/xq9fad9VFSvKq2xLxMb E0TTQ== X-Received: by 2002:a17:90b:33c8:b0:38f:57f0:1f5d with SMTP id 98e67ed59e1d1-395c397f4ecmr38569031a91.15.1787550667581; Sun, 23 Aug 2026 22:51:07 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 55/96] disas/riscv: Handle aliases of csrrw during decode Date: Mon, 24 Aug 2026 15:47:25 +1000 Message-ID: <20260824054806.2790041-56-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::631; envelope-from=alistair23@gmail.com; helo=mail-pl1-x631.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551054438158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-23-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index bde1cc6e62..e464b8b075 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1081,9 +1081,6 @@ static const rvc_constraint rvcc_frrm[] =3D { rvc_rs1= _eq_x0, rvc_csr_eq_0x002, rvc_end }; static const rvc_constraint rvcc_frflags[] =3D { rvc_rs1_eq_x0, rvc_csr_eq= _0x001, rvc_end }; -static const rvc_constraint rvcc_fscsr[] =3D { rvc_csr_eq_0x003, rvc_end }; -static const rvc_constraint rvcc_fsrm[] =3D { rvc_csr_eq_0x002, rvc_end }; -static const rvc_constraint rvcc_fsflags[] =3D { rvc_csr_eq_0x001, rvc_end= }; static const rvc_constraint rvcc_fsrmi[] =3D { rvc_csr_eq_0x002, rvc_end }; static const rvc_constraint rvcc_fsflagsi[] =3D { rvc_csr_eq_0x001, rvc_en= d }; =20 @@ -1166,14 +1163,6 @@ static const rv_comp_data rvcp_subw[] =3D { { rv_op_illegal, NULL } }; =20 -static const rv_comp_data rvcp_csrrw[] =3D { - { rv_op_fscsr, rvcc_fscsr }, - { rv_op_fsrm, rvcc_fsrm }, - { rv_op_fsflags, rvcc_fsflags }, - { rv_op_illegal, NULL } -}; - - static const rv_comp_data rvcp_csrrs[] =3D { { rv_op_rdcycle, rvcc_rdcycle }, { rv_op_rdtime, rvcc_rdtime }, @@ -1761,7 +1750,7 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { "sfence.vm", rv_codec_r, rv_fmt_rs1 }, { "sfence.vma", rv_codec_r, rv_fmt_rs1_rs2 }, { "wfi", rv_codec_none, rv_fmt_none }, - { "csrrw", rv_codec_i_csr, rv_fmt_rd_csr_rs1, rvcp_csrrw }, + { "csrrw", rv_codec_i_csr, rv_fmt_rd_csr_rs1 }, { "csrrs", rv_codec_i_csr, rv_fmt_rd_csr_rs1, rvcp_csrrs }, { "csrrc", rv_codec_i_csr, rv_fmt_rd_csr_rs1 }, { "csrrwi", rv_codec_i_csr, rv_fmt_rd_csr_zimm, rvcp_csrrwi }, @@ -4443,7 +4432,14 @@ static void decode_inst_opcode(rv_decode *dec, rv_is= a isa) break; } break; - case 1: op =3D rv_op_csrrw; break; + case 1: + switch (operand_csr12(inst)) { + case 1: op =3D rv_op_fsflags; break; + case 2: op =3D rv_op_fsrm; break; + case 3: op =3D rv_op_fscsr; break; + default: op =3D rv_op_csrrw; break; + } + break; case 2: op =3D rv_op_csrrs; break; case 3: op =3D rv_op_csrrc; break; case 4: --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550814; cv=none; d=zohomail.com; s=zohoarc; b=mOjrBPMRRbFtsIajB3UvX1OWbAWX6i2LfS8CQOig4onfRrUlhhzBLfX7LKbypolr0ao6Ljhc6Eo8SnzWIZnvOv2mYXUvoW4rM67nRqhheSmu5dUZ1gJoPd2sEkGN16B7PVYmLSf+VBSbRM8hBeuyNPEupqz/S5qbbNmKswdyukI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550814; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=pELMg+WaaGuMaoeRzO7z5uC1+w1HHOpZNmw21D6h9tQ=; b=EtoheAsmR8MlTnRaaBwaFAk7/wYEsB7kmcCMWQrgYi9YfY0eCeXqBokaMSrRk0ncwQB6P2Jnv7kp/Yw8cUfmlbE7uAnnLHaDE5EgF+kyr/9kfDjXt49esPZqttfKhcn4QhLWUISWa3tVyOAviTDpBL+DSXy+orzYgmF4bw74bTg= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550814397709.8239952827105; Sun, 23 Aug 2026 22:53:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbJ-00055b-Q9; Mon, 24 Aug 2026 01:52:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNap-0004UX-5B for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:35 -0400 Received: from mail-pg1-x534.google.com ([2607:f8b0:4864:20::534]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNaV-0002bH-90 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:19 -0400 Received: by mail-pg1-x534.google.com with SMTP id 41be03b00d2f7-cbe6295f05bso2724769a12.1 for ; Sun, 23 Aug 2026 22:51:11 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550670; x=1788155470; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=pELMg+WaaGuMaoeRzO7z5uC1+w1HHOpZNmw21D6h9tQ=; b=oNHkTZSlhFmmGpupC/F80E8ONHlc/LUTULR33J4TR5jPQ8FzGnNmGuwPehUQ5aHg0z grQqkFDFaUXo96p7QN1htJsGAKAj69kLwCQimwhPC5BcECirIDGKcpWIehjJmAkfq76Y 9DL1L23pslnvdWgU47IIsBPCrQuHWK4sEuxXhf4nXwQIczs0s6GPSL4LsJMGVElrzg8Q ThZFQ+LDnddLDdum96UyKBqn1VUpuV3GH3BjBDqhyjiVth6OrGa+LjTFqacZkiD/Mj5F KgTydb59E3l6ktm5ff/pfodLls/AFdHaEgBJ73SWnGXOTcRkcMAifWV5uQXRm/rXXB7V dC3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550670; x=1788155470; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=pELMg+WaaGuMaoeRzO7z5uC1+w1HHOpZNmw21D6h9tQ=; b=MAG57Sa8EvCN/haWgv9MfQoZcY3xJXO5I4TIsQgtiPu6c/qT/FFHEQupLUXk3lF/yF QAwj24ZFXFjI9CC31hMw/1RSk2o3A0hQXbWX1e+iI8E7EyWiWTD7nlvTnKsdlnbATDej WfWBek2aJNRHXniBdxXzBHps9Y1bShG23okKgVOpmCgy9lWXAmBVZf7lLHWaWWlWv7Ro 1Zq2UhXqd38EBNUUVWbJTrL4cofqvm9tp/cDj8JoMSQdgr1hnOy4OY/DZX9Y1gfGSHbL spsPCwPFSe2lgoJWyzJz9NlFxm5NWdV+DQ8nfhWbFP3WmecYso//tez8o7y0JH5Pc7zH wAwA== X-Gm-Message-State: AFuF++nxZVJgMMiw/hE2L+mIUC0U+ir0FbdtyfqY0TQLUNNt8RPUUS2v E0Ve6r0vgTdcaDYrBY9GFxF/EaJNsWzn/G9tfvJS+XIFPm3d2uH+A0q3jHX9Ew== X-Gm-Gg: AR+sD11igShTI3q9TSMEZI5gI4S5q7E9odKe9OVK4Gv6GlWS/0jvmKXur9rW3tEOcrn Q2t5qbSu8OBH/MfOLCf/1NjTJK5oLW76i3t74MMDc5tSk8GZZLo4t/oDBhidW61iKQvhrl1Tsxa xMs5i85E3WOl+SKbR+Ziou8OWk+aS2CDS/H+jhEf89Qk9tseT8tGLmbn9A/TVUHCLMkGbSO4lcT IrUJhJeJk7Jav7wpqkhs1AOuLcbqREmYscgDmIyf0qMEbUZtEbB8j2+DmMOhyHoBdXVEWZ4QEZ7 oDvyiwDd/x59tjARNLTxM8yu/GVGJpnDWCSumQBO8MYcfYIZ1QmMSYh9J0hWTWYNjKmbcAczE8Z aF2G7pGIvwmSDWBjQHxBhA6LVn0IWr2ezgNh/DxyvOgVPL/9whYUAG9mkDQrOXLpFVtBzD21uMw UrDevUzrFuzmAZAdorZ/cfKfUGMJHNWeQeRo4Q8jS6Es9/qm0rHb9wPH6qbiqi2l1OzIeDRVJus tH67A== X-Received: by 2002:a17:90b:57c3:b0:395:8124:ac53 with SMTP id 98e67ed59e1d1-395c4fa443fmr21220759a91.6.1787550670296; Sun, 23 Aug 2026 22:51:10 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 56/96] disas/riscv: Handle aliases of csrrs during decode Date: Mon, 24 Aug 2026 15:47:26 +1000 Message-ID: <20260824054806.2790041-57-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::534; envelope-from=alistair23@gmail.com; helo=mail-pg1-x534.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550815514158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-24-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.h | 7 ----- disas/riscv.c | 85 +++++++++++---------------------------------------- 2 files changed, 17 insertions(+), 75 deletions(-) diff --git a/disas/riscv.h b/disas/riscv.h index 900363c603..d8c5acd969 100644 --- a/disas/riscv.h +++ b/disas/riscv.h @@ -86,13 +86,6 @@ typedef enum { rvc_imm_eq_p1, rvc_csr_eq_0x001, rvc_csr_eq_0x002, - rvc_csr_eq_0x003, - rvc_csr_eq_0xc00, - rvc_csr_eq_0xc01, - rvc_csr_eq_0xc02, - rvc_csr_eq_0xc80, - rvc_csr_eq_0xc81, - rvc_csr_eq_0xc82, } rvc_constraint; =20 typedef enum { diff --git a/disas/riscv.c b/disas/riscv.c index e464b8b075..9ec79baf4d 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1063,24 +1063,6 @@ static const rvc_constraint rvcc_ret[] =3D { rvc_rd_= eq_x0, rvc_rs1_eq_ra, rvc_end }; static const rvc_constraint rvcc_jr[] =3D { rvc_rd_eq_x0, rvc_imm_eq_zero, rvc_end }; -static const rvc_constraint rvcc_rdcycle[] =3D { rvc_rs1_eq_x0, rvc_csr_eq= _0xc00, - rvc_end }; -static const rvc_constraint rvcc_rdtime[] =3D { rvc_rs1_eq_x0, rvc_csr_eq_= 0xc01, - rvc_end }; -static const rvc_constraint rvcc_rdinstret[] =3D { rvc_rs1_eq_x0, - rvc_csr_eq_0xc02, rvc_end= }; -static const rvc_constraint rvcc_rdcycleh[] =3D { rvc_rs1_eq_x0, - rvc_csr_eq_0xc80, rvc_end = }; -static const rvc_constraint rvcc_rdtimeh[] =3D { rvc_rs1_eq_x0, rvc_csr_eq= _0xc81, - rvc_end }; -static const rvc_constraint rvcc_rdinstreth[] =3D { rvc_rs1_eq_x0, - rvc_csr_eq_0xc82, rvc_en= d }; -static const rvc_constraint rvcc_frcsr[] =3D { rvc_rs1_eq_x0, rvc_csr_eq_0= x003, - rvc_end }; -static const rvc_constraint rvcc_frrm[] =3D { rvc_rs1_eq_x0, rvc_csr_eq_0x= 002, - rvc_end }; -static const rvc_constraint rvcc_frflags[] =3D { rvc_rs1_eq_x0, rvc_csr_eq= _0x001, - rvc_end }; static const rvc_constraint rvcc_fsrmi[] =3D { rvc_csr_eq_0x002, rvc_end }; static const rvc_constraint rvcc_fsflagsi[] =3D { rvc_csr_eq_0x001, rvc_en= d }; =20 @@ -1163,19 +1145,6 @@ static const rv_comp_data rvcp_subw[] =3D { { rv_op_illegal, NULL } }; =20 -static const rv_comp_data rvcp_csrrs[] =3D { - { rv_op_rdcycle, rvcc_rdcycle }, - { rv_op_rdtime, rvcc_rdtime }, - { rv_op_rdinstret, rvcc_rdinstret }, - { rv_op_rdcycleh, rvcc_rdcycleh }, - { rv_op_rdtimeh, rvcc_rdtimeh }, - { rv_op_rdinstreth, rvcc_rdinstreth }, - { rv_op_frcsr, rvcc_frcsr }, - { rv_op_frrm, rvcc_frrm }, - { rv_op_frflags, rvcc_frflags }, - { rv_op_illegal, NULL } -}; - static const rv_comp_data rvcp_csrrwi[] =3D { { rv_op_fsrmi, rvcc_fsrmi }, { rv_op_fsflagsi, rvcc_fsflagsi }, @@ -1751,7 +1720,7 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { "sfence.vma", rv_codec_r, rv_fmt_rs1_rs2 }, { "wfi", rv_codec_none, rv_fmt_none }, { "csrrw", rv_codec_i_csr, rv_fmt_rd_csr_rs1 }, - { "csrrs", rv_codec_i_csr, rv_fmt_rd_csr_rs1, rvcp_csrrs }, + { "csrrs", rv_codec_i_csr, rv_fmt_rd_csr_rs1 }, { "csrrc", rv_codec_i_csr, rv_fmt_rd_csr_rs1 }, { "csrrwi", rv_codec_i_csr, rv_fmt_rd_csr_zimm, rvcp_csrrwi }, { "csrrsi", rv_codec_i_csr, rv_fmt_rd_csr_zimm }, @@ -4440,7 +4409,22 @@ static void decode_inst_opcode(rv_decode *dec, rv_is= a isa) default: op =3D rv_op_csrrw; break; } break; - case 2: op =3D rv_op_csrrs; break; + case 2: + op =3D rv_op_csrrs; + if (operand_rs1(inst) =3D=3D 0) { + switch (operand_csr12(inst)) { + case 0x001: op =3D rv_op_frflags; break; + case 0x002: op =3D rv_op_frrm; break; + case 0x003: op =3D rv_op_frcsr; break; + case 0xc00: op =3D rv_op_rdcycle; break; + case 0xc01: op =3D rv_op_rdtime; break; + case 0xc02: op =3D rv_op_rdinstret; break; + case 0xc80: op =3D rv_op_rdcycleh; break; + case 0xc81: op =3D rv_op_rdtimeh; break; + case 0xc82: op =3D rv_op_rdinstreth; break; + } + } + break; case 3: op =3D rv_op_csrrc; break; case 4: if (dec->cfg && dec->cfg->ext_zimop) { @@ -5017,41 +5001,6 @@ static bool check_constraints(rv_decode *dec, const = rvc_constraint *c) return false; } break; - case rvc_csr_eq_0x003: - if (!(imm =3D=3D 0x003)) { - return false; - } - break; - case rvc_csr_eq_0xc00: - if (!(imm =3D=3D 0xc00)) { - return false; - } - break; - case rvc_csr_eq_0xc01: - if (!(imm =3D=3D 0xc01)) { - return false; - } - break; - case rvc_csr_eq_0xc02: - if (!(imm =3D=3D 0xc02)) { - return false; - } - break; - case rvc_csr_eq_0xc80: - if (!(imm =3D=3D 0xc80)) { - return false; - } - break; - case rvc_csr_eq_0xc81: - if (!(imm =3D=3D 0xc81)) { - return false; - } - break; - case rvc_csr_eq_0xc82: - if (!(imm =3D=3D 0xc82)) { - return false; - } - break; default: break; } c++; --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550820; cv=none; d=zohomail.com; s=zohoarc; b=I9JBTtJt0t9m82kga8j5VxsAfz/4c8a75J8XXrvyAc/N/bwtsWci4kMZGQfs6LQHpYyG4kdfmLvu5/JvP37yF8FxUZtCQLEzWQn7TcDMqaMbVgyXl4oFek8zWRFBgxMixbEKtOmFtCsSQh3ULCAmmB9SBsPFjYDk0Iyve7iG1F0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550820; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=IJUxA2gEgVqA7Wq69py4RBGAGJf+JNTEdoMwMM1C2vc=; b=nqAKQqS/WELeEEdReU0ASfCZsKl04DcyXRs2bbhd6qWTnyYNkQbU32htyFrMK3ZlFs8N82NoVLt2sI2hB0QJxchkidvmLDQtRK0K9jTPX2CuiAPwiAjz1e1FYRSR9zOq5xZWju/Yu+QAuz3A/EdNJKZZKYTU90cfk1AVI3ho8P4= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550820967636.3769634144212; Sun, 23 Aug 2026 22:53:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbT-0005MO-RV; Mon, 24 Aug 2026 01:52:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNal-0004Si-Gx for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:31 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNaV-0002bo-8o for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:18 -0400 Received: by mail-pj1-x102b.google.com with SMTP id 98e67ed59e1d1-38deea72eebso3423244a91.1 for ; Sun, 23 Aug 2026 22:51:13 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550673; x=1788155473; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=IJUxA2gEgVqA7Wq69py4RBGAGJf+JNTEdoMwMM1C2vc=; b=XABIN8yeZzpJi4Q/kCkBLTlalD/7J8jE6KPbEQOyjOoIPD2pkf8OSeD9/iBKRbdnrA /PNSvvzkjRLO5XP/RmV0PYealAmIiZTbtl16mRhUuCis/7mZzDrYHL4FLPICKPK9+AUA pxxql8CWemYKWrsTfRHNzgfePOdV6Mi9qIUveIG3hyLcjrTkf27EYuUdkeYB3VhKumc7 ZGeSM/o2b8n7Bc1/vps91tQaVd8Hu/B09vjv+JJ8usfcGU3d0H8yATNqAFLGz2SELt1r O1XIXNq5pVhvbQ3jCVd8RfdiYAlQynbmQhZLRS4XlP90YaV5oAs2UZf+01+Znk56wkOD BVFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550673; x=1788155473; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=IJUxA2gEgVqA7Wq69py4RBGAGJf+JNTEdoMwMM1C2vc=; b=slEOOBDo1DxXZOWkjadHYAqVP1ncTncZSFWYWQ8QuOfKEzki2Y9W5hwpWe8TqvspOQ jnzpnSrigTQBf0j4jKtl8PUg+XH/UNwrdtAqk7Pd8iqUGWobPpDlOf9X80R2zzAQviZV DTHLbx0BUP+odxOrqcFeO9BzTmJUf6XniASiPOohJp1sJyQovocQQ/AuDJY5JpY0QdQR 7Pk7O22pMlVclylE6Uh0aWz7LFxtpMDpH83rAi20KW77xFS1VWszdqObYtGbrH+LTtgP 2+i0j5YTwoJaHPTXbP5lPlvkkeFDKySrHsj5JzBpz0dvyJ6UMQAx7dILAojixNXYX+EC JmFw== X-Gm-Message-State: AFuF++nqgaDfmWWVTjaq902rOU4at+3VWIJq0HwIpNfcVhUKUnUSVfIY D3fbWEEzWUyXnVcNiIHpTT+hqMDua7qXm5baBdEKGQgxWPX3cLFn1h0T5WAcig== X-Gm-Gg: AR+sD11Ibp2dMkonzmgQfMUayqY4eRlgHoSvcWlF0QFeyfK2EJj0UOK1lY0VmcuVfTw vp0l90hTeYHTOSaGV+ontilpDPsY7islgS+tgXHZXafCgRRc/VNpTllRUKioch57IR1mfMEL/yB iPmJgy8hrOjti7zQ6pK0CRnEGHyRDjxTtMgUwZI5vf1nXdSDZOFczwA/i51SWFAwaW0C/9iEoiV ASYI6BXSTjbepxPfdmXy7WspdMhERNUUIvvCkyG5WHRDoszi+EbsoOyc1RYr/7ZY1AzzHC8Dn8P mLdr6dgYGVVHvohbkUKJAKosJYPQTfHAVA6PoYg1/Z9U4HhPjnvHt+PlKbjHUCZuEA388KAELbz yyx8ZNiq7IXkrnjKMu8FWZSQ0EBGTiY1voFHn981wFh1M3ZmpxLbrUEcnf9lQ0OZxr1//zpFO8I pTb/QdprfNX4FA1LFe5N/KPZEEMvSSDeYdD7z1o9T98rX8pOQb24l44UlbtXVJqRqgyzHz4FLUn o8MOA== X-Received: by 2002:a17:90b:538f:b0:38e:b400:a860 with SMTP id 98e67ed59e1d1-395df29e128mr30334481a91.13.1787550672942; Sun, 23 Aug 2026 22:51:12 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 57/96] disas/riscv: Handle aliases of csrrwi during decode Date: Mon, 24 Aug 2026 15:47:27 +1000 Message-ID: <20260824054806.2790041-58-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102b; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102b.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550821524158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-25-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.h | 2 -- disas/riscv.c | 28 ++++++++-------------------- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/disas/riscv.h b/disas/riscv.h index d8c5acd969..3bbcbf10fb 100644 --- a/disas/riscv.h +++ b/disas/riscv.h @@ -84,8 +84,6 @@ typedef enum { rvc_imm_eq_zero, rvc_imm_eq_n1, rvc_imm_eq_p1, - rvc_csr_eq_0x001, - rvc_csr_eq_0x002, } rvc_constraint; =20 typedef enum { diff --git a/disas/riscv.c b/disas/riscv.c index 9ec79baf4d..d3cbfb86ac 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1063,8 +1063,6 @@ static const rvc_constraint rvcc_ret[] =3D { rvc_rd_e= q_x0, rvc_rs1_eq_ra, rvc_end }; static const rvc_constraint rvcc_jr[] =3D { rvc_rd_eq_x0, rvc_imm_eq_zero, rvc_end }; -static const rvc_constraint rvcc_fsrmi[] =3D { rvc_csr_eq_0x002, rvc_end }; -static const rvc_constraint rvcc_fsflagsi[] =3D { rvc_csr_eq_0x001, rvc_en= d }; =20 /* pseudo-instruction metadata */ =20 @@ -1145,12 +1143,6 @@ static const rv_comp_data rvcp_subw[] =3D { { rv_op_illegal, NULL } }; =20 -static const rv_comp_data rvcp_csrrwi[] =3D { - { rv_op_fsrmi, rvcc_fsrmi }, - { rv_op_fsflagsi, rvcc_fsflagsi }, - { rv_op_illegal, NULL } -}; - static const rv_comp_data rvcp_fsgnj_s[] =3D { { rv_op_fmv_s, rvcc_fmv_s }, { rv_op_illegal, NULL } @@ -1722,7 +1714,7 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { "csrrw", rv_codec_i_csr, rv_fmt_rd_csr_rs1 }, { "csrrs", rv_codec_i_csr, rv_fmt_rd_csr_rs1 }, { "csrrc", rv_codec_i_csr, rv_fmt_rd_csr_rs1 }, - { "csrrwi", rv_codec_i_csr, rv_fmt_rd_csr_zimm, rvcp_csrrwi }, + { "csrrwi", rv_codec_i_csr, rv_fmt_rd_csr_zimm }, { "csrrsi", rv_codec_i_csr, rv_fmt_rd_csr_zimm }, { "csrrci", rv_codec_i_csr, rv_fmt_rd_csr_zimm }, { "flw", rv_codec_i, rv_fmt_frd_offset_rs1 }, @@ -4469,7 +4461,13 @@ static void decode_inst_opcode(rv_decode *dec, rv_is= a isa) } } break; - case 5: op =3D rv_op_csrrwi; break; + case 5: + switch (operand_csr12(inst)) { + case 1: op =3D rv_op_fsflagsi; break; + case 2: op =3D rv_op_fsrmi; break; + default: op =3D rv_op_csrrwi; break; + } + break; case 6: op =3D rv_op_csrrsi; break; case 7: op =3D rv_op_csrrci; break; } @@ -4991,16 +4989,6 @@ static bool check_constraints(rv_decode *dec, const = rvc_constraint *c) return false; } break; - case rvc_csr_eq_0x001: - if (!(imm =3D=3D 0x001)) { - return false; - } - break; - case rvc_csr_eq_0x002: - if (!(imm =3D=3D 0x002)) { - return false; - } - break; default: break; } c++; --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550774; cv=none; d=zohomail.com; s=zohoarc; b=eJvQYHjFrRRHIh49XWOCAIsJjDSJjayY/2nbi6BujWi9rLjqCeVon+MVeLR5GXGnBvafVowwpOqWz5+ODTvmeNSEqegrY1+MejoQwVR7WjNIrIzYBIyW2GtFaunzI8o5Q8K/4nICNyzxurYNWOeoDsVJTjJU8ahdBvCH3WaP/1M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550774; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=9sf58UgizOO2O3vOdLTpSVW7MW2OkpGmmaGS8aJxPcE=; b=IFSkgxVyVD8DNDjTajEKO3QaZObjyM8gHgyi4lRSTRSJSYn4ofoCdQ2S9jnMeCGEcksCzVe0OMndl9fDnDQjNkAfUUD+1KQ+LhxcjeDkjrsJdJbZOKf4kGmPXzbZwFQHgsnljtg8dxXUegNJhX1SCexB3+9Ugdy35KJO1TNzONU= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550774681327.551738682336; Sun, 23 Aug 2026 22:52:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbQ-0005IS-VE; Mon, 24 Aug 2026 01:52:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNan-0004TY-5L for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:33 -0400 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNaX-0002ch-6H for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:20 -0400 Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-3900e39d935so3060981a91.0 for ; Sun, 23 Aug 2026 22:51:16 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550676; x=1788155476; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=9sf58UgizOO2O3vOdLTpSVW7MW2OkpGmmaGS8aJxPcE=; b=m9ZMGNpWGm+QR7wq8Ij9FVdGfDuugLS7/qmYNjWEEropk0jrH4wOL+7BaG0dtwSjXK VCba4MNOWvAWSruXyJtslh18WT9CypWTumqpzFKISs7KztiOYuyq2Pc1Asl65tTggRCZ /bnJv5Ek3iW0gZVpxZvNLzRMZeJg92/0300XwgUP3XCsmOt1bilOzWuiUy1Ifl5OpS/j X2Snfjzx/S/wpqcXJDcTOeJ34yveIPsQR6xdeNLms7TPrdBrgJZaG/Fk7/R8b88BwhY9 KK3zb9Vzdl1PhUOYlavnz0eJXRYIWp301hPyDpo8hNm/vf2t9wAA720oLL7DWTGdet/y 1CzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550676; x=1788155476; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=9sf58UgizOO2O3vOdLTpSVW7MW2OkpGmmaGS8aJxPcE=; b=ejcdGpavT2ioJyZH6GTdx/6KnXdR+peuOJ7m2KEI9fwgPJjs2JJBHPycDdBz2Y/ZOF /gQ0syJ0DXODX3AGBQXi2RlNXovW1agcIvc65pKWPcdDWJ/xsWHUnzk0H65KFZxg8VMI A0JiuZ7dsCMzXCJf/BUvCorTEEoTWY6o7s1s9TxtK4rr2kxMs5IHzqrlXsYxSYqYbBSP qhpSOKZXLKnAERVfaPK2dXkgwYIG1oQGMpZBUjqEndNVFGN2JCwg/lisML/sGDVv7Tji RinCFeKKrqG8PpxPdt0I0IYzg3PqaJJeQZt0cMsHTLa9CGUymezTdZPVdQvPbEFeeD1x aizw== X-Gm-Message-State: AFuF++lTbPWSD+y+lsukdXuXT1QVTFzd7Dql9aZQXuejCAFAhrETpKgp 91r8A3bnGbhjo0Uihf58W9UmQ1qAMbDh2cNS7r0TckMjWYyzxq8dgxrOCeKkgw== X-Gm-Gg: AR+sD13EK0Cm/ZA+AJNaTC2YlV+PbkXRJd2T6eqK6+WPDXiMLWljP+GGF5rcJX4sKWS 2/H6LkxZfl0Ew3vC6Pm3PvdRbVCRhjZptwKgOzQpiAtgNBRWf8Q1ofQri/UciMnRbNcKi8NkZyM B19ZRHAgPmvr+yg5msMsAz2ug5JXPfaIBgyWcmI6kextEkqzQf4PH9SdCbwFA86ohgqhKft/ZVD qWLirXlN36KTXG8brUjVCJmLQlqGYIEUNZncpuCUvNqQCZnZ9hsMOZ9FJHNQ1fVd+G9udB7JA7l YsqSAbLrntPDCAUUgDCHBkAprPPmYKtc/YlzOgU5232aY/cphs55gSoI0h2FYxy3fDgVNLBTyio b9zvxZa0OGW+1Gdq3k3MH0BBa+EbmxeIGZE8zTSD8juas6kETZ5qS9BJhOBxMoocYy5qP/a1oYq KuOLnYxj/tIcxJOwBEmrPzwZYQaSxYK3RtWBlG5iiCZaQv7PxbWI+bAw++3QLs3k3ctbkdbS7eR mbM1qHVMdh5GKAq X-Received: by 2002:a17:90a:d404:b0:38e:ad9d:1161 with SMTP id 98e67ed59e1d1-395decde369mr29797690a91.0.1787550675673; Sun, 23 Aug 2026 22:51:15 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 58/96] disas/riscv: Break pseudo loop for jal and jalr Date: Mon, 24 Aug 2026 15:47:28 +1000 Message-ID: <20260824054806.2790041-59-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1032; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1032.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550775465158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson These were clearly intending to simplify jal ra, foo to jal foo and similarly for jalr, but the pseudo expansion looped back to the original jal/jalr with the full format. Add new opcode expansions dropping the implied ra. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-26-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index d3cbfb86ac..fe503b6cae 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -326,6 +326,8 @@ typedef enum { rv_op_bgez =3D 295, rv_op_bltz =3D 296, rv_op_bgtz =3D 297, + rv_op_jal_ra =3D 298, + rv_op_jalr_ra =3D 299, rv_op_j =3D 302, rv_op_ret =3D 303, rv_op_jr =3D 304, @@ -1029,9 +1031,9 @@ static const char rv_fli_name_const[32][9] =3D =20 /* pseudo-instruction constraints */ =20 -static const rvc_constraint rvcc_jal[] =3D { rvc_rd_eq_ra, rvc_end }; -static const rvc_constraint rvcc_jalr[] =3D { rvc_rd_eq_ra, rvc_imm_eq_zer= o, - rvc_end }; +static const rvc_constraint rvcc_jal_ra[] =3D { rvc_rd_eq_ra, rvc_end }; +static const rvc_constraint rvcc_jalr_ra[] =3D { rvc_rd_eq_ra, rvc_imm_eq_= zero, + rvc_end }; static const rvc_constraint rvcc_nop[] =3D { rvc_rd_eq_x0, rvc_rs1_eq_x0, rvc_imm_eq_zero, rvc_end }; static const rvc_constraint rvcc_mv[] =3D { rvc_imm_eq_zero, rvc_end }; @@ -1068,14 +1070,14 @@ static const rvc_constraint rvcc_jr[] =3D { rvc_rd_= eq_x0, rvc_imm_eq_zero, =20 static const rv_comp_data rvcp_jal[] =3D { { rv_op_j, rvcc_j }, - { rv_op_jal, rvcc_jal }, + { rv_op_jal_ra, rvcc_jal_ra }, { rv_op_illegal, NULL } }; =20 static const rv_comp_data rvcp_jalr[] =3D { { rv_op_ret, rvcc_ret }, { rv_op_jr, rvcc_jr }, - { rv_op_jalr, rvcc_jalr }, + { rv_op_jalr_ra, rvcc_jalr_ra }, { rv_op_illegal, NULL } }; =20 @@ -1884,8 +1886,8 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { "bgez", rv_codec_sb, rv_fmt_rs1_offset }, { "bltz", rv_codec_sb, rv_fmt_rs1_offset }, { "bgtz", rv_codec_sb, rv_fmt_rs2_offset }, - { }, - { }, + { "jal", rv_codec_none, rv_fmt_offset }, /* rv_op_jal_ra */ + { "jalr", rv_codec_none, rv_fmt_rs1 }, /* rv_op_jalr_ra */ { }, { }, { "j", rv_codec_uj, rv_fmt_offset }, --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551124; cv=none; d=zohomail.com; s=zohoarc; b=R8HUufakEn65gG4FLYM2gXfQCfbKv1M4QbAcBVcC2hVH3cFLLDvfyMI3Avxr7lBSqwi14k+8xyK/Pk9oziX6/l4K8FkflGjppzkG8STYdz+pBlGN6lA3Ra1/zWn0TONUnvSxrX4bIdFcIMzBZkq3m+/g8UE0IZXa4IGbOShCb70= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551124; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=1iq/zZquDTsNMfYQjuptbKKoh31S0HQU5QbrfhrMH/8=; b=Q/zHa1qe6CK2U2Mx7LDCq5B1SbGSr0Rz0ys7qEf8+1mr/V5i85TXAYiciZXmCGsbms8pxAAt0OOSyiv43MBAzCAiNSlwDb8LnJN1GtgoMkG+ig2HUf/Vsa7T1Bvr9pGkO7W4n68c+mCSIWYltwaO4+zMm0f2mdT5c1wde8qIp1Q= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551123799649.2885688150194; Sun, 23 Aug 2026 22:58:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbI-00054K-DB; Mon, 24 Aug 2026 01:52:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNaq-0004VO-9s for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:36 -0400 Received: from mail-pg1-x52a.google.com ([2607:f8b0:4864:20::52a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNae-0002eH-11 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:30 -0400 Received: by mail-pg1-x52a.google.com with SMTP id 41be03b00d2f7-c9e607d81fcso1804838a12.2 for ; Sun, 23 Aug 2026 22:51:19 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550678; x=1788155478; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=1iq/zZquDTsNMfYQjuptbKKoh31S0HQU5QbrfhrMH/8=; b=eT3IFxVsCBTIpKDQF8jU7cAZMeyIyL++0fBDYeylh9pVZBKpoOcdtf8axRWpJFl6+M PsEICl77pvSrti45Ww3YiNoRXOEeCJ6V68v4dhIscY3FF3dOhemTMEGzrS40OEObZ17A Gq5QU0aGHXiuv5GnUGbpm7UhqgTjihSMn54z5tbnIeDodilSj8DkCU5MfIW4RnbZK27u Imdy03/oSSwA+8ABB2eIobKfhJ5BfOXY5nr7OEkpk+0EHbpjMw8WIGI0MURnLg7II7fD lxJSHqKBXzTlBOOf2V+ovV2HG38TInlhSw6dkCc+o7tSXKaONl3jz6wRBv2tgYvo3LcJ a1zQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550678; x=1788155478; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=1iq/zZquDTsNMfYQjuptbKKoh31S0HQU5QbrfhrMH/8=; b=lq9NbBc0kg/q0++sGwK5cbF5X9aMQ8lVLYxC+/t1dUc6IGXOZZOlkd+yDcrsZJPY/5 SUcBoJwUVqasc1YUQXOjdlaWHdGExkf6IoCwMVXBlGNeimWTo4EZywM820FUYhaI2jrl r94+3OFrAyBvO1c0yVr4DMBenlgjCVmz9sQHvCMWDcC6D8rpdcwMcl55yJmhx1JZz1AH BSdwt63GXAcni+cNz8dlEOYuST3pO17f/ObxGkxovs52B80BV6CbBqOND6tb6QNkEpjF ot2oS/shb4kSjMHrfkEga371DVab5srHzATFF3fmyN0Iz7CGsFKr4Bq5rtaP6LgKgmFt 3GzQ== X-Gm-Message-State: AFuF++nnA6CDFB0odAIZF5zC6dk34J1PEpy5/6ejBhARqq3wVVU5f7YN QB1LrcmzqTZbqAPPv3mx8tIb/60fg+6CqPw2ztPFNBqqgbnvtsQXb7wHqUOsfg== X-Gm-Gg: AR+sD10zjIY4aU68sX3eGHR4d/ZKsQ8PoHaWxeojXYCrXbECoiH1CQ8fXAAH99O+KSX Yq9xk1DKsNoBZyICePCjdt6ePUbFVuDnsdAPOJsbEMKobZTSzQfi+OZ+qnzxXNrr6CHJrR/dF5K zJRsyCy97BMN0G9MKGFUBKFnclCdVQRbLw1HizNMYUeBk1K9SAVvtZsS59KMS6261rL18Rw2rfD mqbYGdAdor0jQ481rYGAH1Q9AIK31bhXegts7+b7U+6NdlAe+5UmJtobjWjizH0veWMGNYMxL/Y GgJ2PfDPzDfcyGAre9JUJA+nXcw0NNlApypUso+fVQim68jgaHrqe1GuplfpN2KJdYmsEgabBfl THFP9YGVADZXwGl7HR60MX0U/bZXFYBH36kVuduvnMQlhj6+Zddr6NoKyiFqjy9M0W2qqaaSCIa Zwbx+pA31IpMESv2D3OiJk4h8HhT2eedqnZUqgjTaQDAVYkoBJonCyklEIBbORThU39ibmdyQ2e iXarg== X-Received: by 2002:a17:90b:2c87:b0:392:7f74:58c9 with SMTP id 98e67ed59e1d1-395c3a43766mr48571826a91.15.1787550678356; Sun, 23 Aug 2026 22:51:18 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 59/96] disas/riscv: Allow decode_inst_lift_pseudo to loop Date: Mon, 24 Aug 2026 15:47:29 +1000 Message-ID: <20260824054806.2790041-60-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52a; envelope-from=alistair23@gmail.com; helo=mail-pg1-x52a.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551124723158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Allow pseudo expansion to proceed in multiple steps. Assert that we don't have simple loops. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-27-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index fe503b6cae..b8e5b124a5 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -5259,9 +5259,9 @@ static const rv_opcode_data *decode_inst_lift_pseudo(= rv_decode *dec, if (comp_data) { while (comp_data->constraints) { if (check_constraints(dec, comp_data->constraints)) { - dec->op =3D comp_data->op; - op =3D &dec->opcode_data[dec->op]; - break; + const rv_opcode_data *new_op =3D &dec->opcode_data[comp_da= ta->op]; + assert(new_op !=3D op); + return decode_inst_lift_pseudo(dec, new_op); } comp_data++; } --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550814; cv=none; d=zohomail.com; s=zohoarc; b=J1ZYp3JtQgAfVhHqzydXZ7lkH3BkAe+B2DoAclWGEtDwAkDLVWeJAdn/6GJjU2EJkkY49iE9NEB/Bpc4Lkv59GHgxypQqe52BgPx4jUWmblCjLDKaaXskwi8lsnPC4Xvx4ZF7bJriM8f6k+2hyDeEEL4svJDFiZAZG2rIaH4h7Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550814; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=GPJ/EM8CC6R9rZqKxgsloXc62/KmmIxRWgCKFfWrSo8=; b=S9Bg8LdBQgWZi8GGfG4l+zPTnCTKpy5aD4uPD/PBaJJJSmaokdL3bB0qtQayUgWHlfBn1/4H1x2I2LQcLbMH3jH33rz7ffUuu149WGgvTVDmneWvHt2Re51KgnutKgKOh8rvtpqRRYjXVdPesF88cE+S2KC8pbEqb3P4MGVJ320= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550814787354.26329657711335; Sun, 23 Aug 2026 22:53:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbR-0005JZ-9z; Mon, 24 Aug 2026 01:52:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNap-0004Uz-IM for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:35 -0400 Received: from mail-pg1-x534.google.com ([2607:f8b0:4864:20::534]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNad-0002fb-Vi for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:29 -0400 Received: by mail-pg1-x534.google.com with SMTP id 41be03b00d2f7-c9eefcf9175so3167532a12.3 for ; Sun, 23 Aug 2026 22:51:21 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550681; x=1788155481; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=GPJ/EM8CC6R9rZqKxgsloXc62/KmmIxRWgCKFfWrSo8=; b=IJa5jxYDuabNuozeQ88hb2+ROQ85O/aYWmTdhZu8RRsOnIqoGm0kQ8zUqw1Jd9cSKC irnPzuRRr4SzxZy2dxfLvWhb+xJyz5O2ubE5l7mr6b6DmOcqQWyM640lV0uYA8mLMiCm seabXmHI9B0t3SgutMeAetcZoTXW+8J8qyaVJMObdNWY4QRNHArG18WYuHGslKqO6W84 hCMGByywbX/XIkeUiY8cjGGeuEOUEbXcITsZQZZDnl0hB8fRZK7gXnPFWrzMTOYiYtJ3 jhpSJEfiuQ/HPFM6q6AoMQKacWhbJQyoYqgRgzt27Z9C/MPNIVAAS6uuIs+6xwVaW0mH FklQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550681; x=1788155481; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=GPJ/EM8CC6R9rZqKxgsloXc62/KmmIxRWgCKFfWrSo8=; b=CjpgUcjyqsOGLGddzNjAbPCLW11YuL8dHExDZiy9Yihd9ukYe1TdqsS3jg9OwNRmmR sWU2r9uQR1FmdmNb6bZCEYjYpznIO/66ufpQ4SWpytLSsCZFwQWi8Wn5VIgimdvK/osT tv85W/Rd9/j7AVxE0vKGnEBCQDY3bPYuZ6kO93SiSmjh3nuhFsUx2cArHLUJQvKBnNDr hle5U3sZo6/uVnC7BFopV0XrPbBWJERYco3rCAgg6/GPhCgH2AFCqURB++1HM/W6qVFj lPvJ8BrA2kb7/lPMfoy4uikq6l98zJKGjhMmGIS/q1YGOmz4V+W8Bn/VzHB0DiaVrc/5 y2EQ== X-Gm-Message-State: AFuF++lFcheVvFdusRnxTlqSeNTJi0I51DBNsL2fpnhrP5WlDBl6NwsV CTcjWJTIYK/zHGK5dT97NAp8D5P8m62xmrvOjLUtESaSfQJPWquqmkoPSN4k5A== X-Gm-Gg: AR+sD11gg8asSOOMJytg+QoySMPInhZKXVo8zFB///9EFeeFttFz22wkEy6VP4dSgrV /Pk9HiH+SGnDsPDUYnSCmsfQdTcaVAhaza4lAFlSqN3tO0/4LawqksUoq3YIxm/YRaOi0iTYwQU 2ZRcLFiS4QnVtDVA2wpawMbVfut0iNWNESbD0lWi1SN2e40MiSAJTy+QO2XiRLjcSatVpKgUhrk 783pm6asxjIqimQV9FwUu+O31xSlLm4xdiiwuQ9D9r5dldBU2b2GebgXV62J7uckVGf5LuBkezN DyGoHpTGrdkvsVnjd16RbaEEp2MuwkkSola6823F4oC23VDdSt4yMuyW8UZhmO4GiUwQaY5rHcr e6Ieo9eGI2Ptkw/I9+ipYVofmg5OI4DOIdPnPkfOfMGlntvbEPLkTEFcQT57japUeVd/DYvKshV QVXQoTZY2TmqlPpxwFxSopyl4NoOFvfoBJo+IHYBvW1UB0hjEhy5fqgHNJlKM6SuHmpKavpLzlQ z8mg3DOUoqKmnsB X-Received: by 2002:a17:90b:4a81:b0:38e:6f90:eabd with SMTP id 98e67ed59e1d1-395c355c570mr41056478a91.5.1787550681012; Sun, 23 Aug 2026 22:51:21 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 60/96] disas/riscv: Handle decompression via decode_inst_lift_pseudo Date: Mon, 24 Aug 2026 15:47:30 +1000 Message-ID: <20260824054806.2790041-61-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::534; envelope-from=alistair23@gmail.com; helo=mail-pg1-x534.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550815499158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Introduce a DECOMP macro that expands an rv_comp_data that always succeeds. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-28-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.h | 1 - disas/riscv.c | 113 +++++++++++++++++++++++--------------------------- 2 files changed, 51 insertions(+), 63 deletions(-) diff --git a/disas/riscv.h b/disas/riscv.h index 3bbcbf10fb..ea7141d3b5 100644 --- a/disas/riscv.h +++ b/disas/riscv.h @@ -174,7 +174,6 @@ typedef struct { rv_codec codec; const char *format; const rv_comp_data *pseudo; - rv_opcode decomp; } rv_opcode_data; =20 typedef struct { diff --git a/disas/riscv.c b/disas/riscv.c index b8e5b124a5..a359badab5 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1065,6 +1065,7 @@ static const rvc_constraint rvcc_ret[] =3D { rvc_rd_e= q_x0, rvc_rs1_eq_ra, rvc_end }; static const rvc_constraint rvcc_jr[] =3D { rvc_rd_eq_x0, rvc_imm_eq_zero, rvc_end }; +static const rvc_constraint rvcc_true[] =3D { rvc_end }; =20 /* pseudo-instruction metadata */ =20 @@ -1190,6 +1191,9 @@ static const rv_comp_data rvcp_fsgnjx_q[] =3D { { rv_op_illegal, NULL } }; =20 +/* Convert compressed insns into normal insns via pseudo expansion. */ +#define DECOMP(X) &(const rv_comp_data){ X, rvcc_true } + /* operand extractors */ =20 static uint32_t operand_rd(rv_inst inst) @@ -1815,52 +1819,52 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { "fcvt.q.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, { "fmv.x.q", rv_codec_r, rv_fmt_rd_frs1 }, { "fmv.q.x", rv_codec_r, rv_fmt_frd_rs1 }, - { "c.addi4spn", rv_codec_ciw_4spn, rv_fmt_rd_rs1_imm, NULL, rv_op_addi= }, - { "c.fld", rv_codec_cl_ld, rv_fmt_frd_offset_rs1, NULL, rv_op_fld }, - { "c.lw", rv_codec_cl_lw, rv_fmt_rd_offset_rs1, NULL, rv_op_lw }, - { "c.flw", rv_codec_cl_lw, rv_fmt_frd_offset_rs1, NULL, rv_op_flw }, - { "c.fsd", rv_codec_cs_sd, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsd }, - { "c.sw", rv_codec_cs_sw, rv_fmt_rs2_offset_rs1, NULL, rv_op_sw }, - { "c.fsw", rv_codec_cs_sw, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsw }, + { "c.addi4spn", rv_codec_ciw_4spn, rv_fmt_rd_rs1_imm, DECOMP(rv_op_add= i) }, + { "c.fld", rv_codec_cl_ld, rv_fmt_frd_offset_rs1, DECOMP(rv_op_fld) }, + { "c.lw", rv_codec_cl_lw, rv_fmt_rd_offset_rs1, DECOMP(rv_op_lw) }, + { "c.flw", rv_codec_cl_lw, rv_fmt_frd_offset_rs1, DECOMP(rv_op_flw) }, + { "c.fsd", rv_codec_cs_sd, rv_fmt_frs2_offset_rs1, DECOMP(rv_op_fsd) }, + { "c.sw", rv_codec_cs_sw, rv_fmt_rs2_offset_rs1, DECOMP(rv_op_sw) }, + { "c.fsw", rv_codec_cs_sw, rv_fmt_frs2_offset_rs1, DECOMP(rv_op_fsw) }, { }, - { "c.addi", rv_codec_ci, rv_fmt_rd_rs1_imm, NULL, rv_op_addi }, - { "c.jal", rv_codec_cj_jal, rv_fmt_rd_offset, NULL, rv_op_jal }, - { "c.li", rv_codec_ci_li, rv_fmt_rd_rs1_imm, NULL, rv_op_addi }, - { "c.addi16sp", rv_codec_ci_16sp, rv_fmt_rd_rs1_imm, NULL, rv_op_addi = }, - { "c.lui", rv_codec_ci_lui, rv_fmt_rd_uimm, NULL, rv_op_lui }, - { "c.srli", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srli }, - { "c.srai", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srai }, - { "c.andi", rv_codec_cb_imm, rv_fmt_rd_rs1_imm, NULL, rv_op_andi }, - { "c.sub", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_sub }, - { "c.xor", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_xor }, - { "c.or", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_or }, - { "c.and", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_and }, - { "c.subw", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_subw }, - { "c.addw", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_addw }, - { "c.j", rv_codec_cj, rv_fmt_rd_offset, NULL, rv_op_jal }, - { "c.beqz", rv_codec_cb, rv_fmt_rs1_rs2_offset, NULL, rv_op_beq }, - { "c.bnez", rv_codec_cb, rv_fmt_rs1_rs2_offset, NULL, rv_op_bne }, - { "c.slli", rv_codec_ci_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_slli }, - { "c.fldsp", rv_codec_ci_ldsp, rv_fmt_frd_offset_rs1, NULL, rv_op_fld = }, - { "c.lwsp", rv_codec_ci_lwsp, rv_fmt_rd_offset_rs1, NULL, rv_op_lw }, - { "c.flwsp", rv_codec_ci_lwsp, rv_fmt_frd_offset_rs1, NULL, rv_op_flw = }, - { "c.jr", rv_codec_cr_jr, rv_fmt_rd_rs1_offset, NULL, rv_op_jalr }, - { "c.mv", rv_codec_cr_mv, rv_fmt_rd_rs1_rs2, NULL, rv_op_addi }, - { "c.ebreak", rv_codec_ci_none, rv_fmt_none, NULL, rv_op_ebreak }, - { "c.jalr", rv_codec_cr_jalr, rv_fmt_rd_rs1_offset, NULL, rv_op_jalr }, - { "c.add", rv_codec_cr, rv_fmt_rd_rs1_rs2, NULL, rv_op_add }, - { "c.fsdsp", rv_codec_css_sdsp, rv_fmt_frs2_offset_rs1, NULL, rv_op_fs= d }, - { "c.swsp", rv_codec_css_swsp, rv_fmt_rs2_offset_rs1, NULL, rv_op_sw }, - { "c.fswsp", rv_codec_css_swsp, rv_fmt_frs2_offset_rs1, NULL, rv_op_fs= w }, - { "c.ld", rv_codec_cl_ld, rv_fmt_rd_offset_rs1, NULL, rv_op_ld }, - { "c.sd", rv_codec_cs_sd, rv_fmt_rs2_offset_rs1, NULL, rv_op_sd }, - { "c.addiw", rv_codec_ci, rv_fmt_rd_rs1_imm, NULL, rv_op_addiw }, - { "c.ldsp", rv_codec_ci_ldsp, rv_fmt_rd_offset_rs1, NULL, rv_op_ld }, - { "c.sdsp", rv_codec_css_sdsp, rv_fmt_rs2_offset_rs1, NULL, rv_op_sd }, - { "c.lq", rv_codec_cl_lq, rv_fmt_rd_offset_rs1, NULL, rv_op_lq }, - { "c.sq", rv_codec_cs_sq, rv_fmt_rs2_offset_rs1, NULL, rv_op_sq }, - { "c.lqsp", rv_codec_ci_lqsp, rv_fmt_rd_offset_rs1, NULL, rv_op_lq }, - { "c.sqsp", rv_codec_css_sqsp, rv_fmt_rs2_offset_rs1, NULL, rv_op_sq }, + { "c.addi", rv_codec_ci, rv_fmt_rd_rs1_imm, DECOMP(rv_op_addi) }, + { "c.jal", rv_codec_cj_jal, rv_fmt_rd_offset, DECOMP(rv_op_jal) }, + { "c.li", rv_codec_ci_li, rv_fmt_rd_rs1_imm, DECOMP(rv_op_addi) }, + { "c.addi16sp", rv_codec_ci_16sp, rv_fmt_rd_rs1_imm, DECOMP(rv_op_addi= ) }, + { "c.lui", rv_codec_ci_lui, rv_fmt_rd_uimm, DECOMP(rv_op_lui) }, + { "c.srli", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, DECOMP(rv_op_srli) }, + { "c.srai", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, DECOMP(rv_op_srai) }, + { "c.andi", rv_codec_cb_imm, rv_fmt_rd_rs1_imm, DECOMP(rv_op_andi) }, + { "c.sub", rv_codec_cs, rv_fmt_rd_rs1_rs2, DECOMP(rv_op_sub) }, + { "c.xor", rv_codec_cs, rv_fmt_rd_rs1_rs2, DECOMP(rv_op_xor) }, + { "c.or", rv_codec_cs, rv_fmt_rd_rs1_rs2, DECOMP(rv_op_or) }, + { "c.and", rv_codec_cs, rv_fmt_rd_rs1_rs2, DECOMP(rv_op_and) }, + { "c.subw", rv_codec_cs, rv_fmt_rd_rs1_rs2, DECOMP(rv_op_subw) }, + { "c.addw", rv_codec_cs, rv_fmt_rd_rs1_rs2, DECOMP(rv_op_addw) }, + { "c.j", rv_codec_cj, rv_fmt_rd_offset, DECOMP(rv_op_jal) }, + { "c.beqz", rv_codec_cb, rv_fmt_rs1_rs2_offset, DECOMP(rv_op_beq) }, + { "c.bnez", rv_codec_cb, rv_fmt_rs1_rs2_offset, DECOMP(rv_op_bne) }, + { "c.slli", rv_codec_ci_sh6, rv_fmt_rd_rs1_imm, DECOMP(rv_op_slli) }, + { "c.fldsp", rv_codec_ci_ldsp, rv_fmt_frd_offset_rs1, DECOMP(rv_op_fld= ) }, + { "c.lwsp", rv_codec_ci_lwsp, rv_fmt_rd_offset_rs1, DECOMP(rv_op_lw) }, + { "c.flwsp", rv_codec_ci_lwsp, rv_fmt_frd_offset_rs1, DECOMP(rv_op_flw= ) }, + { "c.jr", rv_codec_cr_jr, rv_fmt_rd_rs1_offset, DECOMP(rv_op_jalr) }, + { "c.mv", rv_codec_cr_mv, rv_fmt_rd_rs1_rs2, DECOMP(rv_op_addi) }, + { "c.ebreak", rv_codec_ci_none, rv_fmt_none, DECOMP(rv_op_ebreak) }, + { "c.jalr", rv_codec_cr_jalr, rv_fmt_rd_rs1_offset, DECOMP(rv_op_jalr)= }, + { "c.add", rv_codec_cr, rv_fmt_rd_rs1_rs2, DECOMP(rv_op_add) }, + { "c.fsdsp", rv_codec_css_sdsp, rv_fmt_frs2_offset_rs1, DECOMP(rv_op_f= sd) }, + { "c.swsp", rv_codec_css_swsp, rv_fmt_rs2_offset_rs1, DECOMP(rv_op_sw)= }, + { "c.fswsp", rv_codec_css_swsp, rv_fmt_frs2_offset_rs1, DECOMP(rv_op_f= sw) }, + { "c.ld", rv_codec_cl_ld, rv_fmt_rd_offset_rs1, DECOMP(rv_op_ld) }, + { "c.sd", rv_codec_cs_sd, rv_fmt_rs2_offset_rs1, DECOMP(rv_op_sd) }, + { "c.addiw", rv_codec_ci, rv_fmt_rd_rs1_imm, DECOMP(rv_op_addiw) }, + { "c.ldsp", rv_codec_ci_ldsp, rv_fmt_rd_offset_rs1, DECOMP(rv_op_ld) }, + { "c.sdsp", rv_codec_css_sdsp, rv_fmt_rs2_offset_rs1, DECOMP(rv_op_sd)= }, + { "c.lq", rv_codec_cl_lq, rv_fmt_rd_offset_rs1, DECOMP(rv_op_lq) }, + { "c.sq", rv_codec_cs_sq, rv_fmt_rs2_offset_rs1, DECOMP(rv_op_sq) }, + { "c.lqsp", rv_codec_ci_lqsp, rv_fmt_rd_offset_rs1, DECOMP(rv_op_lq) }, + { "c.sqsp", rv_codec_css_sqsp, rv_fmt_rs2_offset_rs1, DECOMP(rv_op_sq)= }, { "nop", rv_codec_i, rv_fmt_none }, { "mv", rv_codec_i, rv_fmt_rd_rs1 }, { "not", rv_codec_i, rv_fmt_rd_rs1 }, @@ -2542,8 +2546,8 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { "ssrdp", rv_codec_r, rv_fmt_rd }, { "ssamoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, { "ssamoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "c.sspush", rv_codec_cmop_ss, rv_fmt_rs2, NULL, rv_op_sspush }, - { "c.sspopchk", rv_codec_cmop_ss, rv_fmt_rs1, NULL, rv_op_sspopchk }, + { "c.sspush", rv_codec_cmop_ss, rv_fmt_rs2, DECOMP(rv_op_sspush) }, + { "c.sspopchk", rv_codec_cmop_ss, rv_fmt_rs1, DECOMP(rv_op_sspopchk) }, { "cbo.inval", rv_codec_r, rv_fmt_rs1 }, { "cbo.clean", rv_codec_r, rv_fmt_rs1 }, { "cbo.flush", rv_codec_r, rv_fmt_rs1 }, @@ -5269,20 +5273,6 @@ static const rv_opcode_data *decode_inst_lift_pseudo= (rv_decode *dec, return op; } =20 -/* decompress instruction */ - -static const rv_opcode_data *decode_inst_decompress(rv_decode *dec, - const rv_opcode_data *= op) -{ - int decomp_op =3D op->decomp; - - if (decomp_op !=3D rv_op_illegal) { - dec->op =3D decomp_op; - op =3D &dec->opcode_data[decomp_op]; - } - return op; -} - /* disassemble instruction */ =20 static GString *disasm_inst(rv_isa isa, uint64_t pc, rv_inst inst, @@ -5333,7 +5323,6 @@ static GString *disasm_inst(rv_isa isa, uint64_t pc, = rv_inst inst, =20 op =3D &dec.opcode_data[dec.op]; decode_inst_operands(&dec, isa, op); - op =3D decode_inst_decompress(&dec, op); op =3D decode_inst_lift_pseudo(&dec, op); return format_inst(24, &dec, op); } --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551198; cv=none; d=zohomail.com; s=zohoarc; b=hbOaG7jJaiwOel8tCtSNIgY/Do+cT2rqtcuKqeh/ZD/s99wAyzHIqnFvvUiKxNkXyrVneR5nHka54vkC83sfNtwxnf6h7Ooxbx9EW86HuL5sZjsPrVEIlsyy/5WxhAgNCgKJ8bwxGDoQGidCfY8tQOiLZ0NlHSWEonz2keXNqCk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551198; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=NfDNN58R8WheefjeRqGFB5HT4nt99gbZjt03X7sKOYA=; b=a7fbJ86mms8dK6M+T/N2RBEri7fRGwFcb4o3GW3agB1yo2LAXWV8nDWl7QvxH8tyIBeeRN3gXXzY4uhJuK+y7HLAYisda794YF9c6g4+Ksr9GrcixB0BVzDCax7Hl9QnOBBknvgHZwJ63XOudJpOY9fRcTFINzMjsuoHXIMSsnQ= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551198368293.7557584628771; Sun, 23 Aug 2026 22:59:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbN-00059G-6w; Mon, 24 Aug 2026 01:52:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNar-0004Wc-2Q for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:37 -0400 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNaf-0002hO-15 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:34 -0400 Received: by mail-pj1-x1030.google.com with SMTP id 98e67ed59e1d1-3811f512167so4220428a91.3 for ; Sun, 23 Aug 2026 22:51:24 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550684; x=1788155484; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=NfDNN58R8WheefjeRqGFB5HT4nt99gbZjt03X7sKOYA=; b=OcQhlkTqMP56c5fTz23UDlhydLsS+P0yW8TjJHig1dQyeM2Pa4VJu5STvuKs43928P HZB1WgkFLYtig8/DNc83krVJOJQOgHSvcvC3zgoYNcRke2HKzLJCWVend1qh+C72282O z7qKGzh7GOh4pNAJKL22nCMApsLa+O53ix7tvwjLF4SGVqpWT/cH645JPZA69jr/Z+Bp 19JzQOTZVljeMtjwXpASJ9Zq+4mm24SO4L21nwTw1YaUiS2+RqrQdnZjN5r0bxGYITj0 Wib6+q0iuio/qxA7XFZUttmleQiEtSDJ6XfBOtj2MPW0ODcQHpZ1ZosVDFKS4UzdYFe6 2vhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550684; x=1788155484; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=NfDNN58R8WheefjeRqGFB5HT4nt99gbZjt03X7sKOYA=; b=ci7u6r39mg3JEv9/CNjQ8bqNfKF+rswSPm5zMogI6/LxtMU1RmFzXYwYygiWJNXrCd AVIdbWAGfsaWGkM+0C1IBmwgyZZs8Uv0i4FWMZ3hUkhNtepmN0BY2M452MnKd29l2F0h tpECymnjdfPINUojIt13nRseDHBYBvB0hY2oQ9BNcRuVGXR98D0HsRyF/zlRP3sAu4tQ e4UAphfVLmCqTzYrqzKqsFRjJJjQa6HMKerA6y3Hb4WHM4GgUYraALDGgUR9I52miisg TcO+9LzkBXigBgrvLP8bkvFfmFO+gQTxXvbDrnd41FnHrodg4keNnzFq/UnDqHu80pmX XQuw== X-Gm-Message-State: AFuF++lQYQbnPAkk6BM89JTiK9+4j1SJ1Wgh6njttOu7q+SPisNOcOh+ VkmfYYYW+VuHXYMMPiWEVdllhdpRkZA31uOcIKC9udHytImrkgFu6hQ1dSDBOg== X-Gm-Gg: AR+sD10nR04gBLRsx999kuBDEemffuJRbcL6ELtkN80EaYxVINlCCzcWmpdeRwN6kSH +HOal9gj1U6LbcNaV7RRR4IePVRWHovkkRhYnFlXfP28htm8T/dA/pMD3rX+VaoMRx3Fw8eCUXS wp87Bnx1j9Gfmm4SQM1T+8QDjlollNlEMrcdRz1JvGc02DgoK6vBMt14iRk4TITEOMNfZdax8Sh x1wYJbE5pHZwvMNmsSCPslgUwraL4Jj5UBCbXwHkT819zF22I4xyU802Gut0exZeTu3zzIJ64nr og/R5MaHUybtlD+h+keNKrYZanjf2fE5WryPgc6+D/zkljwWEG5XC8G//jjlK98urzAm8OLF1i6 5LnOOJ+5lFX8DJjuYdAfANBnKycrip06oGFw8FQDy23Mzo+cHfqCNpnyyr8aN0AF7Pzbd3wPmED MvVqYqrA1g0SjZeLQmAFotEbSg4bjDnWOrNOTaA2e3jhciFshu6EVyfmkkEzYz6uUiz29L6kVYy IwRLw== X-Received: by 2002:a17:90b:3142:b0:37f:e177:f58 with SMTP id 98e67ed59e1d1-395c35e27c2mr40772256a91.9.1787550683725; Sun, 23 Aug 2026 22:51:23 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 61/96] disas/riscv: Drop format from DECOMP insns Date: Mon, 24 Aug 2026 15:47:31 +1000 Message-ID: <20260824054806.2790041-62-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1030; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1030.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551199117158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson The format for these will never be used -- we will use the format from the decompressed insn. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-29-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 94 +++++++++++++++++++++++++-------------------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index a359badab5..e0b3d22031 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1819,52 +1819,52 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { "fcvt.q.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, { "fmv.x.q", rv_codec_r, rv_fmt_rd_frs1 }, { "fmv.q.x", rv_codec_r, rv_fmt_frd_rs1 }, - { "c.addi4spn", rv_codec_ciw_4spn, rv_fmt_rd_rs1_imm, DECOMP(rv_op_add= i) }, - { "c.fld", rv_codec_cl_ld, rv_fmt_frd_offset_rs1, DECOMP(rv_op_fld) }, - { "c.lw", rv_codec_cl_lw, rv_fmt_rd_offset_rs1, DECOMP(rv_op_lw) }, - { "c.flw", rv_codec_cl_lw, rv_fmt_frd_offset_rs1, DECOMP(rv_op_flw) }, - { "c.fsd", rv_codec_cs_sd, rv_fmt_frs2_offset_rs1, DECOMP(rv_op_fsd) }, - { "c.sw", rv_codec_cs_sw, rv_fmt_rs2_offset_rs1, DECOMP(rv_op_sw) }, - { "c.fsw", rv_codec_cs_sw, rv_fmt_frs2_offset_rs1, DECOMP(rv_op_fsw) }, + { "c.addi4spn", rv_codec_ciw_4spn, NULL, DECOMP(rv_op_addi) }, + { "c.fld", rv_codec_cl_ld, NULL, DECOMP(rv_op_fld) }, + { "c.lw", rv_codec_cl_lw, NULL, DECOMP(rv_op_lw) }, + { "c.flw", rv_codec_cl_lw, NULL, DECOMP(rv_op_flw) }, + { "c.fsd", rv_codec_cs_sd, NULL, DECOMP(rv_op_fsd) }, + { "c.sw", rv_codec_cs_sw, NULL, DECOMP(rv_op_sw) }, + { "c.fsw", rv_codec_cs_sw, NULL, DECOMP(rv_op_fsw) }, { }, - { "c.addi", rv_codec_ci, rv_fmt_rd_rs1_imm, DECOMP(rv_op_addi) }, - { "c.jal", rv_codec_cj_jal, rv_fmt_rd_offset, DECOMP(rv_op_jal) }, - { "c.li", rv_codec_ci_li, rv_fmt_rd_rs1_imm, DECOMP(rv_op_addi) }, - { "c.addi16sp", rv_codec_ci_16sp, rv_fmt_rd_rs1_imm, DECOMP(rv_op_addi= ) }, - { "c.lui", rv_codec_ci_lui, rv_fmt_rd_uimm, DECOMP(rv_op_lui) }, - { "c.srli", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, DECOMP(rv_op_srli) }, - { "c.srai", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, DECOMP(rv_op_srai) }, - { "c.andi", rv_codec_cb_imm, rv_fmt_rd_rs1_imm, DECOMP(rv_op_andi) }, - { "c.sub", rv_codec_cs, rv_fmt_rd_rs1_rs2, DECOMP(rv_op_sub) }, - { "c.xor", rv_codec_cs, rv_fmt_rd_rs1_rs2, DECOMP(rv_op_xor) }, - { "c.or", rv_codec_cs, rv_fmt_rd_rs1_rs2, DECOMP(rv_op_or) }, - { "c.and", rv_codec_cs, rv_fmt_rd_rs1_rs2, DECOMP(rv_op_and) }, - { "c.subw", rv_codec_cs, rv_fmt_rd_rs1_rs2, DECOMP(rv_op_subw) }, - { "c.addw", rv_codec_cs, rv_fmt_rd_rs1_rs2, DECOMP(rv_op_addw) }, - { "c.j", rv_codec_cj, rv_fmt_rd_offset, DECOMP(rv_op_jal) }, - { "c.beqz", rv_codec_cb, rv_fmt_rs1_rs2_offset, DECOMP(rv_op_beq) }, - { "c.bnez", rv_codec_cb, rv_fmt_rs1_rs2_offset, DECOMP(rv_op_bne) }, - { "c.slli", rv_codec_ci_sh6, rv_fmt_rd_rs1_imm, DECOMP(rv_op_slli) }, - { "c.fldsp", rv_codec_ci_ldsp, rv_fmt_frd_offset_rs1, DECOMP(rv_op_fld= ) }, - { "c.lwsp", rv_codec_ci_lwsp, rv_fmt_rd_offset_rs1, DECOMP(rv_op_lw) }, - { "c.flwsp", rv_codec_ci_lwsp, rv_fmt_frd_offset_rs1, DECOMP(rv_op_flw= ) }, - { "c.jr", rv_codec_cr_jr, rv_fmt_rd_rs1_offset, DECOMP(rv_op_jalr) }, - { "c.mv", rv_codec_cr_mv, rv_fmt_rd_rs1_rs2, DECOMP(rv_op_addi) }, - { "c.ebreak", rv_codec_ci_none, rv_fmt_none, DECOMP(rv_op_ebreak) }, - { "c.jalr", rv_codec_cr_jalr, rv_fmt_rd_rs1_offset, DECOMP(rv_op_jalr)= }, - { "c.add", rv_codec_cr, rv_fmt_rd_rs1_rs2, DECOMP(rv_op_add) }, - { "c.fsdsp", rv_codec_css_sdsp, rv_fmt_frs2_offset_rs1, DECOMP(rv_op_f= sd) }, - { "c.swsp", rv_codec_css_swsp, rv_fmt_rs2_offset_rs1, DECOMP(rv_op_sw)= }, - { "c.fswsp", rv_codec_css_swsp, rv_fmt_frs2_offset_rs1, DECOMP(rv_op_f= sw) }, - { "c.ld", rv_codec_cl_ld, rv_fmt_rd_offset_rs1, DECOMP(rv_op_ld) }, - { "c.sd", rv_codec_cs_sd, rv_fmt_rs2_offset_rs1, DECOMP(rv_op_sd) }, - { "c.addiw", rv_codec_ci, rv_fmt_rd_rs1_imm, DECOMP(rv_op_addiw) }, - { "c.ldsp", rv_codec_ci_ldsp, rv_fmt_rd_offset_rs1, DECOMP(rv_op_ld) }, - { "c.sdsp", rv_codec_css_sdsp, rv_fmt_rs2_offset_rs1, DECOMP(rv_op_sd)= }, - { "c.lq", rv_codec_cl_lq, rv_fmt_rd_offset_rs1, DECOMP(rv_op_lq) }, - { "c.sq", rv_codec_cs_sq, rv_fmt_rs2_offset_rs1, DECOMP(rv_op_sq) }, - { "c.lqsp", rv_codec_ci_lqsp, rv_fmt_rd_offset_rs1, DECOMP(rv_op_lq) }, - { "c.sqsp", rv_codec_css_sqsp, rv_fmt_rs2_offset_rs1, DECOMP(rv_op_sq)= }, + { "c.addi", rv_codec_ci, NULL, DECOMP(rv_op_addi) }, + { "c.jal", rv_codec_cj_jal, NULL, DECOMP(rv_op_jal) }, + { "c.li", rv_codec_ci_li, NULL, DECOMP(rv_op_addi) }, + { "c.addi16sp", rv_codec_ci_16sp, NULL, DECOMP(rv_op_addi) }, + { "c.lui", rv_codec_ci_lui, NULL, DECOMP(rv_op_lui) }, + { "c.srli", rv_codec_cb_sh6, NULL, DECOMP(rv_op_srli) }, + { "c.srai", rv_codec_cb_sh6, NULL, DECOMP(rv_op_srai) }, + { "c.andi", rv_codec_cb_imm, NULL, DECOMP(rv_op_andi) }, + { "c.sub", rv_codec_cs, NULL, DECOMP(rv_op_sub) }, + { "c.xor", rv_codec_cs, NULL, DECOMP(rv_op_xor) }, + { "c.or", rv_codec_cs, NULL, DECOMP(rv_op_or) }, + { "c.and", rv_codec_cs, NULL, DECOMP(rv_op_and) }, + { "c.subw", rv_codec_cs, NULL, DECOMP(rv_op_subw) }, + { "c.addw", rv_codec_cs, NULL, DECOMP(rv_op_addw) }, + { "c.j", rv_codec_cj, NULL, DECOMP(rv_op_jal) }, + { "c.beqz", rv_codec_cb, NULL, DECOMP(rv_op_beq) }, + { "c.bnez", rv_codec_cb, NULL, DECOMP(rv_op_bne) }, + { "c.slli", rv_codec_ci_sh6, NULL, DECOMP(rv_op_slli) }, + { "c.fldsp", rv_codec_ci_ldsp, NULL, DECOMP(rv_op_fld) }, + { "c.lwsp", rv_codec_ci_lwsp, NULL, DECOMP(rv_op_lw) }, + { "c.flwsp", rv_codec_ci_lwsp, NULL, DECOMP(rv_op_flw) }, + { "c.jr", rv_codec_cr_jr, NULL, DECOMP(rv_op_jalr) }, + { "c.mv", rv_codec_cr_mv, NULL, DECOMP(rv_op_addi) }, + { "c.ebreak", rv_codec_ci_none, NULL, DECOMP(rv_op_ebreak) }, + { "c.jalr", rv_codec_cr_jalr, NULL, DECOMP(rv_op_jalr) }, + { "c.add", rv_codec_cr, NULL, DECOMP(rv_op_add) }, + { "c.fsdsp", rv_codec_css_sdsp, NULL, DECOMP(rv_op_fsd) }, + { "c.swsp", rv_codec_css_swsp, NULL, DECOMP(rv_op_sw) }, + { "c.fswsp", rv_codec_css_swsp, NULL, DECOMP(rv_op_fsw) }, + { "c.ld", rv_codec_cl_ld, NULL, DECOMP(rv_op_ld) }, + { "c.sd", rv_codec_cs_sd, NULL, DECOMP(rv_op_sd) }, + { "c.addiw", rv_codec_ci, NULL, DECOMP(rv_op_addiw) }, + { "c.ldsp", rv_codec_ci_ldsp, NULL, DECOMP(rv_op_ld) }, + { "c.sdsp", rv_codec_css_sdsp, NULL, DECOMP(rv_op_sd) }, + { "c.lq", rv_codec_cl_lq, NULL, DECOMP(rv_op_lq) }, + { "c.sq", rv_codec_cs_sq, NULL, DECOMP(rv_op_sq) }, + { "c.lqsp", rv_codec_ci_lqsp, NULL, DECOMP(rv_op_lq) }, + { "c.sqsp", rv_codec_css_sqsp, NULL, DECOMP(rv_op_sq) }, { "nop", rv_codec_i, rv_fmt_none }, { "mv", rv_codec_i, rv_fmt_rd_rs1 }, { "not", rv_codec_i, rv_fmt_rd_rs1 }, @@ -2546,8 +2546,8 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { "ssrdp", rv_codec_r, rv_fmt_rd }, { "ssamoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, { "ssamoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "c.sspush", rv_codec_cmop_ss, rv_fmt_rs2, DECOMP(rv_op_sspush) }, - { "c.sspopchk", rv_codec_cmop_ss, rv_fmt_rs1, DECOMP(rv_op_sspopchk) }, + { "c.sspush", rv_codec_cmop_ss, NULL, DECOMP(rv_op_sspush) }, + { "c.sspopchk", rv_codec_cmop_ss, NULL, DECOMP(rv_op_sspopchk) }, { "cbo.inval", rv_codec_r, rv_fmt_rs1 }, { "cbo.clean", rv_codec_r, rv_fmt_rs1 }, { "cbo.flush", rv_codec_r, rv_fmt_rs1 }, --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551269; cv=none; d=zohomail.com; s=zohoarc; b=f7XrxokXI76vbHoZdRlHLKEbTsbN5TMV7ZNKZ3rW3v48VVAhho6mtJKs2iRG9hddm3/tLoCpnafmjtdd8Zfq6GOWu5ecSr6rm3BrDHumKLOuKZGyiO7umdeiEc5W/0NC3PkqP2sFmPqqxYIYgMJDdi2BSiGbg6A7b8crsPhapds= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551269; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=msTYxKrfEGozy/cQf2TaV3I4p9p1A05eh8KT3o9m9rM=; b=KEWYvsw8J7Gj/MD+Oi3q0GH1kMCCw68t4jACxLK0fX4fD5CeXRPkhBF0GaOP4RJiLJTc2zdcPdLC4FO/Jor5luPrpC1ZVoMfjF24XKtjRch7IAog5y4UTcix1iF5ShVFKH4TJPP1dqBbCMuonRPQCxrPmflUdHVw0wla9FgtdQo= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551269296738.1056758316463; Sun, 23 Aug 2026 23:01:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbO-0005Ep-TJ; Mon, 24 Aug 2026 01:52:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNar-0004Xv-A4 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:37 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNah-0002iN-TF for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:37 -0400 Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-38dcbade417so3536427a91.1 for ; Sun, 23 Aug 2026 22:51:27 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550686; x=1788155486; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=msTYxKrfEGozy/cQf2TaV3I4p9p1A05eh8KT3o9m9rM=; b=CEPTsFhGEppk16B4QPjEguA6jNDDQQ2EgBdyGv4MN/RYBD1AzYm28UJZQ3giLlF1+A IeD3CENF+FuIRNd9RYzgssdgfYr1Lzwoy5ruvgo8ZHindU3Aniy/hkWNqEsZvPDWKU2y YIsTKIY1XoavS2KWb76R6EWeI+ACUcfgZ8Tw+pIMcPnDladNroSpsfPoPoEhyiCZvpin TG637TrZ9GxfFzZmK4SL6QA55Z0O4lF7CRgVlzyP0yK9UnEfUcbuXdzHOHCZcDC/lAXL zRTOMcS5JGZodcb71LVd13934ga+IHecQPW7fwXFYt8Y65dK7KDYeiPht2JcdmwFxJB7 3C1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550686; x=1788155486; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=msTYxKrfEGozy/cQf2TaV3I4p9p1A05eh8KT3o9m9rM=; b=IczGXWmHhxFVasWYAwC1fW9h5Ixxs3PI30W9NvnbREgv2x79T32mg9XnAmlGq0Dkpw z4hBIih+e8myjvjo0Ewy3jBBsdAdhoU6UYQX4zfNg1mS2xXhjzSVqVhxNQBOfL64X/V8 AT41l+UT0vIEqoiVaI/abRw8ohy4OrNyz1Ci7rtlEcussESrtP8D5kOVFgGDDyHFHw+8 vUhqHoWUUP1ZcYJvwIv/AkqMOKZMeO/AIMHZhQU/KJRCAecPExg8t0n7XzgC/LlTktPm 3RyrPiJ4cKnK5YwNynJ06mO1XF8rUUAM6hTs3wqcQnKYgLjkIVnmlLvA99Q5KYWLpNEw cHmw== X-Gm-Message-State: AFuF++nH7thvGvTkwdxZQ75L29eJLOq1HD+Hm1TH6d94bKVRPhT6yqCG DIT2SuSLC7Vkg9AkQBCiVgsUgAXJqU0hT5iyrJQ5QyBPWf/MYg/H4KMew5OTEA== X-Gm-Gg: AR+sD13SwSXg0a8uosEEnrTPx1hvLpLvpKOIcfq8nlqn8BffEfyX2RfwzMaGTCxJiDC C4Sdfao0VchqkMe9TmNXVYKJ52fDVnJHje13SxhFrcautZaI0dGPUF8hAIVXp6VREbJI8qUcICR kFTBB3COK0B37e+uxmGGvbdbDd02Zge770/mSV7XvC1ZtUtNtqdoQfrggqQhSoiOHAhkONqeFUW 2AtWoXw41SD2RteAEYBlftFUr4ieHzGpb0soi/9SHpMKY+QrPplkopj/F907WZ422jF2EiyRM6P h5l9UC1PP682oawxsTVYyNcflcyHxnc+YdHmsuuYQYTRRYPyfh4emiBh5iQ2LrbNsh7HvlveHNx fe1ZG2LbB+zQ3lEqox/NgmF9gRmDOq/cSBf6FFoOyquoolMLFNBME+taTtnjyn+aXs9LUCScive pVhIFQINDSQuFzFN/ZD8TiGzUNa0mInDyiwyT1JEBYQ4LP4BmzU+WcOzmLdq1/1ExVbVFPTaSdS 27+qfFWp594Ntsb X-Received: by 2002:a17:90b:1b04:b0:38d:dfd1:7c1 with SMTP id 98e67ed59e1d1-395c33406e0mr40085082a91.2.1787550686434; Sun, 23 Aug 2026 22:51:26 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 62/96] disas/riscv: Tidy rv_comp_data terminators Date: Mon, 24 Aug 2026 15:47:32 +1000 Message-ID: <20260824054806.2790041-63-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102e; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102e.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551271490158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Use { } instead of two zeros. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-30-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index e0b3d22031..f3c9213fd1 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1072,123 +1072,123 @@ static const rvc_constraint rvcc_true[] =3D { rvc= _end }; static const rv_comp_data rvcp_jal[] =3D { { rv_op_j, rvcc_j }, { rv_op_jal_ra, rvcc_jal_ra }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_jalr[] =3D { { rv_op_ret, rvcc_ret }, { rv_op_jr, rvcc_jr }, { rv_op_jalr_ra, rvcc_jalr_ra }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_beq[] =3D { { rv_op_beqz, rvcc_beqz }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_bne[] =3D { { rv_op_bnez, rvcc_bnez }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_blt[] =3D { { rv_op_bltz, rvcc_bltz }, { rv_op_bgtz, rvcc_bgtz }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_bge[] =3D { { rv_op_blez, rvcc_blez }, { rv_op_bgez, rvcc_bgez }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_addi[] =3D { { rv_op_nop, rvcc_nop }, { rv_op_mv, rvcc_mv }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_sltiu[] =3D { { rv_op_seqz, rvcc_seqz }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_xori[] =3D { { rv_op_not, rvcc_not }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_sub[] =3D { { rv_op_neg, rvcc_neg }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_slt[] =3D { { rv_op_sltz, rvcc_sltz }, { rv_op_sgtz, rvcc_sgtz }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_sltu[] =3D { { rv_op_snez, rvcc_snez }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_addiw[] =3D { { rv_op_sext_w, rvcc_sext_w }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_subw[] =3D { { rv_op_negw, rvcc_negw }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_fsgnj_s[] =3D { { rv_op_fmv_s, rvcc_fmv_s }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_fsgnjn_s[] =3D { { rv_op_fneg_s, rvcc_fneg_s }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_fsgnjx_s[] =3D { { rv_op_fabs_s, rvcc_fabs_s }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_fsgnj_d[] =3D { { rv_op_fmv_d, rvcc_fmv_d }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_fsgnjn_d[] =3D { { rv_op_fneg_d, rvcc_fneg_d }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_fsgnjx_d[] =3D { { rv_op_fabs_d, rvcc_fabs_d }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_fsgnj_q[] =3D { { rv_op_fmv_q, rvcc_fmv_q }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_fsgnjn_q[] =3D { { rv_op_fneg_q, rvcc_fneg_q }, - { rv_op_illegal, NULL } + { }, }; =20 static const rv_comp_data rvcp_fsgnjx_q[] =3D { { rv_op_fabs_q, rvcc_fabs_q }, - { rv_op_illegal, NULL } + { }, }; =20 /* Convert compressed insns into normal insns via pseudo expansion. */ --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550783; cv=none; d=zohomail.com; s=zohoarc; b=KP9DHk2tUqyhiFoLZzrQOX4wOTS7kqySfJ2dDgP6weV/jxHmGcRHZElKEqoa1124sUprQ+srjcPMjFvWwfiY+tC1pRuiFADWFs9YvayNzV0e/26LEFroNOcwVPP6zTo3fts1ZN5IePQ1god5GHwvEzYj1vcPzJHxpoHM5QDVDRY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550783; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=1FqkdWKLgfc+vRbBEL6zlKNDsJP//dgcnuZl45GUXZM=; b=aD2LAsilhLsUJmMhiz+tOgJsbbzvXaqRTDmkfn8QXA+wvTBP+Psn5BIi/zRcqtNVNClxunUFI+SPt9cliGJhIV+SASQriszxx6yn8IG0+eHIv/sVJ2AMlTqYSUyDI0yqysb7KU0os67ddNRF12t6USiZ9htrbtvBTuOfS9GhwvE= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550783285678.3772795720703; Sun, 23 Aug 2026 22:53:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbJ-00055F-H4; Mon, 24 Aug 2026 01:52:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNat-0004b6-AH for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:39 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNak-0002jw-R7 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:38 -0400 Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-38e7109321dso2069017a91.3 for ; Sun, 23 Aug 2026 22:51:30 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550689; x=1788155489; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=1FqkdWKLgfc+vRbBEL6zlKNDsJP//dgcnuZl45GUXZM=; b=HOmgf2IIAV4HZRxuAdY/qpuJ+h3qoQxoRFwvFNUXLxrpGoY4CRdd52F4NBmwWDQPpY wxrQLvFOVCIQOQ+mbs0E1c8KK9FtdI0uao+XFs+622mBGbMKpo8a/SHhokOViwG6I512 oi3vMMj8BHnRdw/fk5dycWbX8wg9TBWzKr0+wkQz7LMlz2j0xYxA4vIxSl4ilDtWrNXd Y84vXdPON+zNNOJ9iKb5NmoyhA67iIvitm18v5ZXU7IBI2TnrrFEu3lLXxbNbs2h2BNr vD7e9uSjuUPSQ3b1WPOq5r+orNSpX/dQ8u5UULsqz2wnzvI2qhByq7lkEAgIPS73YRYL YfZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550689; x=1788155489; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=1FqkdWKLgfc+vRbBEL6zlKNDsJP//dgcnuZl45GUXZM=; b=Cxtfa39osD+/inUvEDjLcN424zFD4FudJQ3MIEX5yVHEKND54aft1cRUOYKbdfwjVp zESiYyaJwl9HFC2LRFj77uw/K1eN8U9ZGFurgB8YSap004BklpcHeLVKMl9OjyYcHpBs NqPqTnxQu0ri+jhdiSVXFx//p2fSdsu7FqfZg/9xbAkvvixl2W+CRyc8aJ5awH9dGfug kUbwJl7OuCmzE+Pw7bEEHfln3+78hHCfXBSJn/u/ivaZaR23tJSCQ4xIK99oz1hFICmk hbRzbErqVQ4D8gXs6W0pjkHtc6W3VVqwQ2nHfRcNv2PpPju+DLMhnHNYV28FB+9FezPb rKOA== X-Gm-Message-State: AFuF++lS7W3tak4QBqa6sn5cZTm7m5lpX36KwxQJ+wrZXlNEBx3EGQoK FehgWIcrwR1HemVjzP3tBqL7/APYcPn0hlufJZY+aeK/T7QSiATa+ZuhuvDuoQ== X-Gm-Gg: AR+sD11AzVCeugi5Khhah04prQgrpy7NkzO7Wp3CaIP5pDwcAiUEpGmcDIQMnLVCGDJ Hwa1w2qVMxZ3ScHeTxbY1YjCODyv4FgbHEbC4qFke8jaif56C9xglOhg0yhrkd7IPD9fPt/5u/G dygJBQlg5mEmnPkV5KA7hKdGJAovFwchkCDNPRoG8y+3OfNplvf77WCl3eiyVCmncREExh7/iLg gkXivbU+nZ2CSL0GJm/6fE+G5jJkxs96imwy8POtKt369UkXsd45CRObuOS6aGNi7GWQVPcooSN M4uFsSY7dmBCScg+I51PYrmxd1tM+S2cZs2YIqwe+at+XxYN0IQ78iEMrzu0goGRfzNSnKlP8pl JAxyIX+dPgAPwzqzpt7x6twdFTAwoQJqFIyn77gnE2Z+EOWLwPO1OjHbRJKg4Dd33OuVxIeison 24rdv3Rd2R4EhESWIkU8VHTvXt+rDb+FoBJ6gGaHX8QaZms+BglBgfgwdg8Xv0pRZCrAbxX2NFp m8pug== X-Received: by 2002:a17:90b:1b42:b0:37f:fd1f:d30f with SMTP id 98e67ed59e1d1-395c3a06ffcmr39932225a91.12.1787550689280; Sun, 23 Aug 2026 22:51:29 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 63/96] disas/riscv: Chain "ret" pseudo off "jr" pseudo Date: Mon, 24 Aug 2026 15:47:33 +1000 Message-ID: <20260824054806.2790041-64-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102e; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102e.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550785376158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson "jr" has already checked two conditions that apply to "ret". Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-31-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index f3c9213fd1..91f6d9e4af 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1061,8 +1061,7 @@ static const rvc_constraint rvcc_bgez[] =3D { rvc_rs2= _eq_x0, rvc_end }; static const rvc_constraint rvcc_bltz[] =3D { rvc_rs2_eq_x0, rvc_end }; static const rvc_constraint rvcc_bgtz[] =3D { rvc_rs1_eq_x0, rvc_end }; static const rvc_constraint rvcc_j[] =3D { rvc_rd_eq_x0, rvc_end }; -static const rvc_constraint rvcc_ret[] =3D { rvc_rd_eq_x0, rvc_rs1_eq_ra, - rvc_end }; +static const rvc_constraint rvcc_ret[] =3D { rvc_rs1_eq_ra, rvc_end }; static const rvc_constraint rvcc_jr[] =3D { rvc_rd_eq_x0, rvc_imm_eq_zero, rvc_end }; static const rvc_constraint rvcc_true[] =3D { rvc_end }; @@ -1076,12 +1075,16 @@ static const rv_comp_data rvcp_jal[] =3D { }; =20 static const rv_comp_data rvcp_jalr[] =3D { - { rv_op_ret, rvcc_ret }, { rv_op_jr, rvcc_jr }, { rv_op_jalr_ra, rvcc_jalr_ra }, { }, }; =20 +static const rv_comp_data rvcp_jr[] =3D { + { rv_op_ret, rvcc_ret }, + { }, +}; + static const rv_comp_data rvcp_beq[] =3D { { rv_op_beqz, rvcc_beqz }, { }, @@ -1896,7 +1899,7 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { }, { "j", rv_codec_uj, rv_fmt_offset }, { "ret", rv_codec_i, rv_fmt_none }, - { "jr", rv_codec_i, rv_fmt_rs1 }, + { "jr", rv_codec_i, rv_fmt_rs1, rvcp_jr }, { "rdcycle", rv_codec_i_csr, rv_fmt_rd }, { "rdtime", rv_codec_i_csr, rv_fmt_rd }, { "rdinstret", rv_codec_i_csr, rv_fmt_rd }, --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550978; cv=none; d=zohomail.com; s=zohoarc; b=b4ZzSqYfk7HA6HY17p0tw6I0kZLHFGBYVnmX61vJyHK1MGZxOuQ+XE/Fr3LT5HLleG+TxyWM71yEv/T6ItxONN/lBQqvSyJJnI5n6l+3CE5q15oQxBXDpB7PeR112FTZzI7jdy3NQKKdERrEpjvHsn/9Q91eEdJ3WtvjqdO6nT8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550978; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Hk5GZbBPE9k/cD83hwQyRHgA+R2YMqa9HODNXp3uV+Q=; b=WysoQ8IqsY7R0QErmDuhk8wLoS2+Y4pc2RVZODBoS+MkMXyaHt5XdX8cld0g4FiK1svRNrT5EshN0cPAeoA5j5fQ2u76Kp75cAZ3qFFINS0aeyrd8+0zvRvvF/jk3FQHSEVj+KvUNUvR3QSVTqNqtaBchVhQXYjgIGvgBnfA8H8= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550978241896.356562129318; Sun, 23 Aug 2026 22:56:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbL-00057N-2A; Mon, 24 Aug 2026 01:52:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNav-0004f2-A6 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:41 -0400 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNan-0002mK-Ta for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:40 -0400 Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-2ccf2360620so25835025ad.3 for ; Sun, 23 Aug 2026 22:51:33 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550692; x=1788155492; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Hk5GZbBPE9k/cD83hwQyRHgA+R2YMqa9HODNXp3uV+Q=; b=dumTJJtbPLBFzjT9jPyQcOJkxxtuv0a4xeMeTEgmsN+e2vMcL6qRyc0DhqapoiFoaR xTasldIctSHgwN7EUAes8QsU5zlp42zQZC9dGdIlCZDB1Q3NjItr8uPraGIzl7c3qEis pJXOhKo4EqPsJ1iI23M+fx4qdMlznZ0hd2/9xIk7E59OWc3JxDah8YWSO4a8px1UUwnn Ma6uKsATrUMsewaobSec8d5l7Xoogn/m4/EFPFg0jTuFkqrk+qmiFQV8ohMRwhYV7FGH sRlSMPpA615XX+l6MjHnsfjHHAHmY8J9ZYwQWd4nkt6ixxDL8xMaKbBd/pVfyhnp+TyI O7vQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550692; x=1788155492; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Hk5GZbBPE9k/cD83hwQyRHgA+R2YMqa9HODNXp3uV+Q=; b=eA0T8V8dsaWGHmWUt4GP9suWCAF4tdnt2OUuPBwsHAw9pG6ozq2Zvc8bf85uiNr5Hm ZaVqnzR6g3rvbBmJFsPKzaJ45mOm6Qrz5qIPbctvHQL4BkGx87Sv4nSqM7kwMeddsWrO t+dLEZMNmRN9n4TwUz/rJKfgBQ6h8jA1A6cR6mcz7+zBLkAb/PpRL7GyCp/T1oSqvLrb O0xytkkaeHm05onJpM+DdVMs9rlJrVqKl1mQkkDTsjBB27JKlYArBIaiwjXRikLFuYkA ghTcvkpjayN61KzQyRrVas4QuR8eOduCS+OjSvuzjZQYppop+VBpAhQgUSqUeZtVZ/DK +w7A== X-Gm-Message-State: AFuF++mn7SGpv03mwdklfT5QBxdyqYLSJ5GnRal1JK6A5GWfIrs0LfNo BuhDpfNk3OVIARlyVqlRZPiUvJ5o0Iu8a7AucVl1W8Qd7UreWqTCGaJ67VMtRg== X-Gm-Gg: AR+sD115aeL2sVEDzupchc33uYv0kan3Sa/Fk+NoHUmEVqz1GiaodhO/SGeTuOdRUi9 MdIww3lZJumW+uHIVheCqumPDkpzj28kDvqUHEC1yXmiknK2wt3LG9uYP/fssHORw2qUtoBQQGe GseVFbWk9hXAXu4j1LwBYWL0c9M5gwcXdxgU32YKDIeEE0tXMx9ZbZGaTMFyhKbasxQxJnFHEvo qTEBj4qgtC2YZxvtfcCVosTwrO0JZrHQSKHly0XzXNMVrOohgXyh74e0LG3ZWn3OiJ3Xq/LYWwG T/0OqvdDhlbW4zIP4FNr3JjLzPQx80ymYacNFv5yU/C0SiIh+a8rMhMG82qaKk1DlTln/vOEYBt yGulx6jmHuYD6K3TvPo6nPlLyXsm9KclC6okkGPRW+DSnrMKyomH0LY46q40jvOEAI36XyM7C01 b3uRiG5jg51u8gLO4klcHTIUT25U7v9+bzEm1fIv6BcNRWyC2T/8/189Nsbl5CidMbfTiHkK+ZO xoXwQ== X-Received: by 2002:a17:90b:1b03:b0:38e:524:8797 with SMTP id 98e67ed59e1d1-395c39cb2damr37511368a91.13.1787550692315; Sun, 23 Aug 2026 22:51:32 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 64/96] disas/riscv: Chain "nop" pseudo off "mv" pseudo Date: Mon, 24 Aug 2026 15:47:34 +1000 Message-ID: <20260824054806.2790041-65-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::635; envelope-from=alistair23@gmail.com; helo=mail-pl1-x635.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550980170158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson "mv" has already checked a condition that applies to "nop". Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-32-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index 91f6d9e4af..7fa76b2d15 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1035,7 +1035,7 @@ static const rvc_constraint rvcc_jal_ra[] =3D { rvc_r= d_eq_ra, rvc_end }; static const rvc_constraint rvcc_jalr_ra[] =3D { rvc_rd_eq_ra, rvc_imm_eq_= zero, rvc_end }; static const rvc_constraint rvcc_nop[] =3D { rvc_rd_eq_x0, rvc_rs1_eq_x0, - rvc_imm_eq_zero, rvc_end }; + rvc_end }; static const rvc_constraint rvcc_mv[] =3D { rvc_imm_eq_zero, rvc_end }; static const rvc_constraint rvcc_not[] =3D { rvc_imm_eq_n1, rvc_end }; static const rvc_constraint rvcc_neg[] =3D { rvc_rs1_eq_x0, rvc_end }; @@ -1108,11 +1108,15 @@ static const rv_comp_data rvcp_bge[] =3D { }; =20 static const rv_comp_data rvcp_addi[] =3D { - { rv_op_nop, rvcc_nop }, { rv_op_mv, rvcc_mv }, { }, }; =20 +static const rv_comp_data rvcp_mv[] =3D { + { rv_op_nop, rvcc_nop }, + { }, +}; + static const rv_comp_data rvcp_sltiu[] =3D { { rv_op_seqz, rvcc_seqz }, { }, @@ -1869,7 +1873,7 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { "c.lqsp", rv_codec_ci_lqsp, NULL, DECOMP(rv_op_lq) }, { "c.sqsp", rv_codec_css_sqsp, NULL, DECOMP(rv_op_sq) }, { "nop", rv_codec_i, rv_fmt_none }, - { "mv", rv_codec_i, rv_fmt_rd_rs1 }, + { "mv", rv_codec_i, rv_fmt_rd_rs1, rvcp_mv }, { "not", rv_codec_i, rv_fmt_rd_rs1 }, { "neg", rv_codec_r, rv_fmt_rd_rs2 }, { "negw", rv_codec_r, rv_fmt_rd_rs2 }, --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551201; cv=none; d=zohomail.com; s=zohoarc; b=ZvqQVfsL5mINNE6uZZx/1ZjTOe4VW4eh2o1V8mg4Tba7oE9N9f1ngCzQJ0oD9TJfMFx5VGP5xGYGuJ4orhpkaEY4X4IrCIK5xYSaNtRtyGAS+XbLT6ZEU54k4CD0wP9F7yk/6atn0pPTWZDFunfFLv9xBg3atUN0sWZHDoCqaDs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551201; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=jbYaKFBvGXXY2CnicUYZq7lQqnHJQFU/m+HVMKAtotE=; b=nFhTcYv0EjEzMnT3XLtqEEBPwyJ8iV+6fxyLQ8ueYP4O0v+iDDXUbMgedM9aiRO8lOqSyggK0faq+uarVN5uF2WcH3cb0gOn2IywRu3Mrz6fZoICdrUbKD5gc9pcEAmorxm6EjFa7WoZS9rWqy3MeiVDzZhzzCzxW7mBLttW4gs= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551201640370.411272775277; Sun, 23 Aug 2026 23:00:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbU-0005Om-3w; Mon, 24 Aug 2026 01:52:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNav-0004hh-SN for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:42 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNaq-0002o4-Hu for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:41 -0400 Received: by mail-pj1-x102f.google.com with SMTP id 98e67ed59e1d1-381c51fde6bso3590006a91.2 for ; Sun, 23 Aug 2026 22:51:36 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550695; x=1788155495; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=jbYaKFBvGXXY2CnicUYZq7lQqnHJQFU/m+HVMKAtotE=; b=lYCiS3E6HE8L2tjjF8vpFtuDq6qgDmWbpUfym552t4vak4GsOIRFK8l6fLNGaJPHdr 4RQCr7xe7mnepG9g01Kzgu4L2cf4vPmOla74ZxgrDhvgB3oI5t8DXY37Cn3rw9tpUatt +a0nBZtt9r0YNCBoZ08s1IO4J/oLU5IUB0MGeT2hNZC8EyiKBEAIbUPlQraXA/CW6IPy H9ycBDaIxfFGu3ts2FGhB2quu3TLlyyTdWM/2aQ6UHgoZ6yR+vl5zK9lQubFLZUt2N58 d1Isb7kjmNKeiHFCN0jKt6pgY7wISn0afJ621KggAazDnqB26iPYgc4SbNSJI5IJqBPs XaCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550695; x=1788155495; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=jbYaKFBvGXXY2CnicUYZq7lQqnHJQFU/m+HVMKAtotE=; b=rXL7bcH/U5y2qzoGkTDAymdOPpo2uHEkrULOQ7JQsKk7Yex2sKTc1hO7aG5ayN7Osd lXT0bfCLyyBj+yR7lGapT3rHqKp3OGXhlgMJ1pMnsvBvyhrC8gPRMO1IbB2pSAO9Rfjp YI448pLqmo/zupg2u7+JuqDZ/5bNLQCVyo/xc1QSyCkefwpB0rtxJcZwW5xOFINxpDqc scB6o8ef6GmfJLlBzLqGBWnVnhrXubTe5xVag94wyTluRG2bmXWJWM/JbUAV55D+B6wX Pes/vZk1DDWfJNRryWxhnRepfs7TNpudrkvE+nSkUR5fXImuxdqtg/KW3SNFHUxnOdxh YdPg== X-Gm-Message-State: AFuF++mq7pIundFMJnG+Xvh8gJSH8+2BR/Ps7TXi/JCwEgCWBcSeijoi Y/xQznic6Ubt6+AslokHFA26a2gZIX04Bouz3NvtN0EKGYygaR/KBiqjDW2TcA== X-Gm-Gg: AR+sD12WR2giwHK3iHFm0k1Au7n3W1yt/2VRXGp4euzRgUBcEoBMFy4CHIVhWGn/4U0 eisbvcPMJqcxvLJTQ/VNp5TABRME1qSx+LJLV84+G8LJ1aM47DhSa7roye5RzgfrI6tU9XtzDxx 3N+cD4ZgAe241yZNYdnzSOdNK83xNSuwXIlsasWLAwQlxzBzXZkpCzdGh+WKR5Ul94ucRf9LUFL 2wbk5F8DC87QS+J/GQZRDlGapa4OUC8rDYkO2nWyEay6VuBRo095p4Nq4rGzGm9/O8J6msGnJtQ sKYJJTOHCnDlCDZ6xZhBzCLnd9SWMrvchExiCFtZ74TcxN4kus20FTC4Vc0aa2Jr8EYyb+63DaT gza60yMcVPglbqsstKUMmGcgbmJ1e77z+9GyjU3CIYELBnFsROdlg1HJIZU/unpyu0KCBIRt3N2 Z5KM6JlJE8QHVOtiP2NDRDLTDJhSRU7HphMhaofPDXLe04XaG+wtBe4RKnr/wRR01QV93XaAMs+ Akiew== X-Received: by 2002:a17:90b:560d:b0:38e:9045:bac0 with SMTP id 98e67ed59e1d1-395deea6acbmr31183483a91.5.1787550695108; Sun, 23 Aug 2026 22:51:35 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 65/96] disas/riscv: Use rv_codec_illegal for pseudos Date: Mon, 24 Aug 2026 15:47:35 +1000 Message-ID: <20260824054806.2790041-66-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102f; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102f.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551203432158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson The codec is never used, since we arrive into pseudos from a decoding of another opcode. Assert that rv_codec_illegal is never decoded. Use rv_codec_none for rv_op_illegal. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-33-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 68 +++++++++++++++++++++++++-------------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index 7fa76b2d15..dedd925077 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1599,7 +1599,7 @@ static uint32_t operand_lpl(rv_inst inst) /* instruction metadata */ =20 static const rv_opcode_data rvi_opcode_data[] =3D { - { "illegal", rv_codec_illegal, rv_fmt_none }, + { "illegal", rv_codec_none, rv_fmt_none }, { "lui", rv_codec_u, rv_fmt_rd_uimm }, { "auipc", rv_codec_u, rv_fmt_rd_uoffset }, { "jal", rv_codec_uj, rv_fmt_rd_offset, rvcp_jal }, @@ -1872,38 +1872,38 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { "c.sq", rv_codec_cs_sq, NULL, DECOMP(rv_op_sq) }, { "c.lqsp", rv_codec_ci_lqsp, NULL, DECOMP(rv_op_lq) }, { "c.sqsp", rv_codec_css_sqsp, NULL, DECOMP(rv_op_sq) }, - { "nop", rv_codec_i, rv_fmt_none }, - { "mv", rv_codec_i, rv_fmt_rd_rs1, rvcp_mv }, - { "not", rv_codec_i, rv_fmt_rd_rs1 }, - { "neg", rv_codec_r, rv_fmt_rd_rs2 }, - { "negw", rv_codec_r, rv_fmt_rd_rs2 }, - { "sext.w", rv_codec_i, rv_fmt_rd_rs1 }, - { "seqz", rv_codec_i, rv_fmt_rd_rs1 }, - { "snez", rv_codec_r, rv_fmt_rd_rs2 }, - { "sltz", rv_codec_r, rv_fmt_rd_rs1 }, - { "sgtz", rv_codec_r, rv_fmt_rd_rs2 }, - { "fmv.s", rv_codec_r, rv_fmt_frd_frs1 }, - { "fabs.s", rv_codec_r, rv_fmt_frd_frs1 }, - { "fneg.s", rv_codec_r, rv_fmt_frd_frs1 }, - { "fmv.d", rv_codec_r, rv_fmt_frd_frs1 }, - { "fabs.d", rv_codec_r, rv_fmt_frd_frs1 }, - { "fneg.d", rv_codec_r, rv_fmt_frd_frs1 }, - { "fmv.q", rv_codec_r, rv_fmt_frd_frs1 }, - { "fabs.q", rv_codec_r, rv_fmt_frd_frs1 }, - { "fneg.q", rv_codec_r, rv_fmt_frd_frs1 }, - { "beqz", rv_codec_sb, rv_fmt_rs1_offset }, - { "bnez", rv_codec_sb, rv_fmt_rs1_offset }, - { "blez", rv_codec_sb, rv_fmt_rs2_offset }, - { "bgez", rv_codec_sb, rv_fmt_rs1_offset }, - { "bltz", rv_codec_sb, rv_fmt_rs1_offset }, - { "bgtz", rv_codec_sb, rv_fmt_rs2_offset }, - { "jal", rv_codec_none, rv_fmt_offset }, /* rv_op_jal_ra */ - { "jalr", rv_codec_none, rv_fmt_rs1 }, /* rv_op_jalr_ra */ + { "nop", rv_codec_illegal, rv_fmt_none }, + { "mv", rv_codec_illegal, rv_fmt_rd_rs1, rvcp_mv }, + { "not", rv_codec_illegal, rv_fmt_rd_rs1 }, + { "neg", rv_codec_illegal, rv_fmt_rd_rs2 }, + { "negw", rv_codec_illegal, rv_fmt_rd_rs2 }, + { "sext.w", rv_codec_illegal, rv_fmt_rd_rs1 }, + { "seqz", rv_codec_illegal, rv_fmt_rd_rs1 }, + { "snez", rv_codec_illegal, rv_fmt_rd_rs2 }, + { "sltz", rv_codec_illegal, rv_fmt_rd_rs1 }, + { "sgtz", rv_codec_illegal, rv_fmt_rd_rs2 }, + { "fmv.s", rv_codec_illegal, rv_fmt_frd_frs1 }, + { "fabs.s", rv_codec_illegal, rv_fmt_frd_frs1 }, + { "fneg.s", rv_codec_illegal, rv_fmt_frd_frs1 }, + { "fmv.d", rv_codec_illegal, rv_fmt_frd_frs1 }, + { "fabs.d", rv_codec_illegal, rv_fmt_frd_frs1 }, + { "fneg.d", rv_codec_illegal, rv_fmt_frd_frs1 }, + { "fmv.q", rv_codec_illegal, rv_fmt_frd_frs1 }, + { "fabs.q", rv_codec_illegal, rv_fmt_frd_frs1 }, + { "fneg.q", rv_codec_illegal, rv_fmt_frd_frs1 }, + { "beqz", rv_codec_illegal, rv_fmt_rs1_offset }, + { "bnez", rv_codec_illegal, rv_fmt_rs1_offset }, + { "blez", rv_codec_illegal, rv_fmt_rs2_offset }, + { "bgez", rv_codec_illegal, rv_fmt_rs1_offset }, + { "bltz", rv_codec_illegal, rv_fmt_rs1_offset }, + { "bgtz", rv_codec_illegal, rv_fmt_rs2_offset }, + { "jal", rv_codec_illegal, rv_fmt_offset }, /* rv_op_jal_ra */ + { "jalr", rv_codec_illegal, rv_fmt_rs1 }, /* rv_op_jalr_ra */ { }, { }, - { "j", rv_codec_uj, rv_fmt_offset }, - { "ret", rv_codec_i, rv_fmt_none }, - { "jr", rv_codec_i, rv_fmt_rs1, rvcp_jr }, + { "j", rv_codec_illegal, rv_fmt_offset }, + { "ret", rv_codec_illegal, rv_fmt_none }, + { "jr", rv_codec_illegal, rv_fmt_rs1, rvcp_jr }, { "rdcycle", rv_codec_i_csr, rv_fmt_rd }, { "rdtime", rv_codec_i_csr, rv_fmt_rd }, { "rdinstret", rv_codec_i_csr, rv_fmt_rd }, @@ -4551,8 +4551,6 @@ static void decode_inst_operands(rv_decode *dec, rv_i= sa isa, rv_inst inst =3D dec->inst; =20 switch (op->codec) { - case rv_codec_illegal: - break; case rv_codec_none: dec->rd =3D dec->rs1 =3D dec->rs2 =3D rv_ireg_zero; dec->imm =3D 0; @@ -4946,7 +4944,9 @@ static void decode_inst_operands(rv_decode *dec, rv_i= sa isa, dec->rs1 =3D dec->rs2 =3D operand_crs1(inst); dec->imm =3D 0; break; - }; + default: + g_assert_not_reached(); + } } =20 /* check constraint */ --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550950; cv=none; d=zohomail.com; s=zohoarc; b=ImNpAhusOKUxzd03F8iIRyNslrjhfrnTWmhFP+nEpe79OPqNYANMs0t8mVIvpp2sCZQJ1hBym6OSGBxxC37OmMt77gSpebg5yQSrqkuMqYXwniHJpQp+uvMk9ESxRLREShSfweDLtEtxQ6K+2OkfHA1y7QUv5iYk7t/9bgX7RbY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550950; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=QT+NqtS29Jb8B76mVXI/GmUgsUgPIu04DUnpKcaegjs=; b=nnba8CtpqB3Y9MDbAMepPlVBWszLF26gthZFZRPNlGmXvCrat1SjXqxEIeqdL2AsxuCxFptw16qFQEnCKnipolKrsBAzVROuFQoTt8t6EJVsT3cHG2/ec6WUJzOthIrRb6ibY99JCYb83XSiuEQ04VWt67pduU89SSi8y6xrwFY= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178755095025296.77607515499096; Sun, 23 Aug 2026 22:55:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbm-0006S6-1h; Mon, 24 Aug 2026 01:52:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNaw-0004ie-8T for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:45 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNat-0002po-IF for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:41 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-3811f512167so4220660a91.3 for ; Sun, 23 Aug 2026 22:51:39 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550698; x=1788155498; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=QT+NqtS29Jb8B76mVXI/GmUgsUgPIu04DUnpKcaegjs=; b=NDlozhiGiFuC9erk2egGsqI19NsGp8cStC8teG7/5wTUsA/KiRKvOgKAPBYXjY+/k5 JRCrqTJcY6X7bSuOu3DiWk2aohjs+CC/trTYWypAO1epplAg+QGEOMhrc5nD7T4uV9LY Jlwc96MMlS7GJ4LTyZBBDYgSxoQTbbBgkcuwsiWx7Ib+B44FCAhQkiqBzX4ZOWiUZJpp xXC7st4FxXNhXxFZSDYtscwRppPiBUFk90PUTnyV5nvA4BGU2ee/t3snIWeDWRE/1Bix 85d4iZLpBTTmZYZ1soXN4epq+X4Az8aE9SSbLy/+I36ioAug21qxhDMS2w95WQeKpi0E FXCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550698; x=1788155498; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=QT+NqtS29Jb8B76mVXI/GmUgsUgPIu04DUnpKcaegjs=; b=E86bgH0quNcaaLcvUyBxpaf0+6GRxfZXJwGTIJfG6xHnQZEidvwYw5olqbUcWI/Ydd nyixFxOKKLRK4yXeXSkRXjd+qmJ9m8ZqHRVWq0uVIoGhSHLNdCZUP5jePFJaCSCkFVwX O7zSahWQot8hRFjHn8lIGigGaiE/YovMmnuxlKU+RMrymPnpB4otPKXfP4XRry3zA2An pcLDLnWupftFaSa3VFauvtn6H4sRH2I6t5tT43GT6FNbiQ19cmoU4lXYVqd1MhYFD55p NPq4jV/qZjqUs+BAgbMbVfcLG+233gRlrgp9G6FTGa5jKyjjIlC03OfUujnRrd5qsQCq lo8g== X-Gm-Message-State: AFuF++mvzeBplKc3zxDo6iQFhy/aJPTSl36q2kg+NI7fdjybXk+KYdsO S9DygmzW3zHRITbsq2hw1w227GOl2YlrIF5ZW+47qaksMuB/tieX35TeziAFJg== X-Gm-Gg: AR+sD13YF/mUZ2IQLxMheKVq6nYojTvrh6DezctVENmgNTJEos746COhtcMWPs5U+xT Pl1nbBEfKfbnWiKoCR+wRPRh1OaChp2p3ohGqZ3F+Gdq5BNZo0GQP8LmiMOAtAMCSxUiXijG5LS iZIlPs11Y+wUYR+ODLJIx4vyDiySizqKoHdoUgrq1srYu4jUceEFFrYFdOYlEj6aUoSAmuCHC0Q xkuyNyiDsOqfYjkHHe4fjdZLXkGi0aDVjDZAlL1GbXQVDMea9UJ1nzTaJot7z/oaVQUJCmdm8Q0 uyPLG2dNwSZEYLbza5cVhDUOgX6A7kjvR8EJm/jTCPWEyPGAM3BnPwTjCd9ciFjvxswXQF6af4U xD5QJaiikG0dfAsOOVIE4oiFjYUmOBpwCUu91w1i94U2clBTCxZYqQNRqVsLPlVlmgjrGg77M1c rnN+UNaLKWlbKyDPOtFvlww9m2z7WtxOnPKeItRiFMT747tzYB4FE1H3RKL7ZzIGhzC15qNGfAx hOVgTDB47KXDq/V X-Received: by 2002:a17:90b:530c:b0:381:152b:d596 with SMTP id 98e67ed59e1d1-395c35e25e2mr39267267a91.11.1787550697976; Sun, 23 Aug 2026 22:51:37 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 66/96] disas/riscv: Simplify some insn decompressions Date: Mon, 24 Aug 2026 15:47:36 +1000 Message-ID: <20260824054806.2790041-67-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102a; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102a.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550952032158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Route "c.j" to "j" instead of "jal", etc. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-34-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index dedd925077..342e2db3cc 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1848,15 +1848,15 @@ static const rv_opcode_data rvi_opcode_data[] =3D { { "c.and", rv_codec_cs, NULL, DECOMP(rv_op_and) }, { "c.subw", rv_codec_cs, NULL, DECOMP(rv_op_subw) }, { "c.addw", rv_codec_cs, NULL, DECOMP(rv_op_addw) }, - { "c.j", rv_codec_cj, NULL, DECOMP(rv_op_jal) }, - { "c.beqz", rv_codec_cb, NULL, DECOMP(rv_op_beq) }, - { "c.bnez", rv_codec_cb, NULL, DECOMP(rv_op_bne) }, + { "c.j", rv_codec_cj, NULL, DECOMP(rv_op_j) }, + { "c.beqz", rv_codec_cb, NULL, DECOMP(rv_op_beqz) }, + { "c.bnez", rv_codec_cb, NULL, DECOMP(rv_op_bnez) }, { "c.slli", rv_codec_ci_sh6, NULL, DECOMP(rv_op_slli) }, { "c.fldsp", rv_codec_ci_ldsp, NULL, DECOMP(rv_op_fld) }, { "c.lwsp", rv_codec_ci_lwsp, NULL, DECOMP(rv_op_lw) }, { "c.flwsp", rv_codec_ci_lwsp, NULL, DECOMP(rv_op_flw) }, - { "c.jr", rv_codec_cr_jr, NULL, DECOMP(rv_op_jalr) }, - { "c.mv", rv_codec_cr_mv, NULL, DECOMP(rv_op_addi) }, + { "c.jr", rv_codec_cr_jr, NULL, DECOMP(rv_op_jr) }, + { "c.mv", rv_codec_cr_mv, NULL, DECOMP(rv_op_mv) }, { "c.ebreak", rv_codec_ci_none, NULL, DECOMP(rv_op_ebreak) }, { "c.jalr", rv_codec_cr_jalr, NULL, DECOMP(rv_op_jalr) }, { "c.add", rv_codec_cr, NULL, DECOMP(rv_op_add) }, --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550755; cv=none; d=zohomail.com; s=zohoarc; b=kmQjojDHoTBc9LhA2TRmq+yioHW/rkKChs+Zx/p2TGub4nPvHiYXmxRRKaw8PotUWOISb/CC+eUgP0UWKIJrWi9XveT2TPsU3prv5fMkJq3nQRKc8KAPq8KDKa+MZnQrSlELz9rPU+NtYanPT/1lUMJnPd6ToykAdTL6pQWwRCA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550755; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=mS5lH+O6u6AC0cF1efiMr/IZgg9QvygUsI4yMDEJpC0=; b=BL/0aoTvHZ+6djm+3yQPf1/CPQLSvBhAOQh4WWJbXnVbexekctHOwxYwOLNt1CSh9FdgZmtw+3YtdVFdUb0sgQWLGZVOGz2kP8WmBfwGrsUns+WxVFHpZdxOTaqntggt6+4GA+PVUkYe7kYnigYDT2l47XE3TMZHWkvAB76inx0= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550755579313.2709591698157; Sun, 23 Aug 2026 22:52:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbc-0005cC-8V; Mon, 24 Aug 2026 01:52:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNb4-0004nh-2K for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:51 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNaz-0002rn-3I for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:49 -0400 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-38e08baf860so3374156a91.2 for ; Sun, 23 Aug 2026 22:51:41 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550701; x=1788155501; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=mS5lH+O6u6AC0cF1efiMr/IZgg9QvygUsI4yMDEJpC0=; b=S9lpARbPDQYfFcybVEA6ne8jCApLejZFWufkg35JFHMy9Ago+9BaLAnjJTjY+97orI vbgX+J6Rtz5T3jXWUf2PoSaniE08ERPbQ+kAdmNRDPuC5zuVpbnCsXz2eEDGE6hrGDEi 8IVsO+D93EClCmHNnaVXnXg0Xp6iX/CDXcFVQjL/mc1edNrCO0OPWrc0Gf2oG4/bgKfe 94dLFO+qMZIAl7XjUXiWENkzoeK3GXEmxyilxGXrRAT+J44zilRAhVtQxJnvCfR7iolm BKVzlAX3bYQOv863MknoIqVTZVZTZcnknSeLm8xawlWC5pRNYmTEE8Mj2IjXDyEe2J8T B6Ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550701; x=1788155501; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=mS5lH+O6u6AC0cF1efiMr/IZgg9QvygUsI4yMDEJpC0=; b=DIEDcz0IWJGPlNplnLufAhS2Kg698fdoNAxyCJWZkZFOjTPPIXhKRbR+WNsly7d01R gA1lK0V5mUKS44hszaflP+EeVIMJYH9huZohsy0zOUHKlbQ9lfmM86Oel9DGltP9cD2/ S6jXBPkRkTRDdf/WFUGsBHj98aoI/Gre9OU56QXDYV0CKq1aadubaOyfOkv3QqQAT55n klpa09bVLQqQDQ4wK556yXQZqVwhULMx8SLtIe3HSKbR2I3L4sZynw3j7foOx4oEJ2Ym 1P7eXvWCGINsW+vMMM0ln9oNyjBLgNYsVXUyPNvaAbRA2HuVXWUob92oqrJMlzligCoy Rrcw== X-Gm-Message-State: AFuF++mj3CEXexvJcG7NInSXazdZmoDbqZGjc5a4+KR7dmLV0nh2cPHt AcnxhSpKVsp7279ExiKYhUGhnxMOYuiZJhzAzrjaOXOKiG3gHUqX6OHmCGkZtg== X-Gm-Gg: AR+sD103H2qvqdjcGhnVGqgpgtf1yIbYwcXlj0gNuiBhMJgRTsx1LROtsVfc3IWQ4j2 31otWG4+zoKcFR34ZoqJahamphhVhYHP+p5OFAQa3dlqU/y+UFPZD3gI5l8zy9cJoAJZoOTR0/C eRiASGcDDRN96UebJletUuKbAMsPceNpnxBPVIvctwWu6g7owisdXRukTe0pT61xPxkZbG+fRAc cB9ypMrPMnLVrBIX0+0v4SDnttCglfFpt3LbisRWDofHa/Ltj14O2l39VWe+mybmROslAIR3xXf 1U5Zu54F9jspiLbfIGf5WMRCjfM1b8KwpZlS9U8KIRRb7d+0PH92JbhGj4tEbdKaWOcBHZBlnjh forcNlW5VajTeh+DdParOV8NIVodEQhGylYTCLkWm+67LV42RXl7lp0jCKtgNJv1KdeX+WHJdCj msCzWrPWSWlA+n22JnO0xSidQplmBZUOHJEmsbpn/yaIIzx5NT7GMblaxLd5Lw2837kVbYzPj3m M+FlA== X-Received: by 2002:a17:90a:d605:b0:38e:5964:97a8 with SMTP id 98e67ed59e1d1-395df5e8fefmr29846249a91.16.1787550700850; Sun, 23 Aug 2026 22:51:40 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 67/96] disas/riscv: Store op pointer in rv_comp_data Date: Mon, 24 Aug 2026 15:47:37 +1000 Message-ID: <20260824054806.2790041-68-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102d; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102d.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550757210158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Store a pointer instead of an array index. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-35-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.h | 8 +++--- disas/riscv.c | 69 ++++++++++++++++++++++++++------------------------- 2 files changed, 40 insertions(+), 37 deletions(-) diff --git a/disas/riscv.h b/disas/riscv.h index ea7141d3b5..ab62c0db94 100644 --- a/disas/riscv.h +++ b/disas/riscv.h @@ -164,17 +164,19 @@ typedef enum { =20 /* structures */ =20 +typedef struct rv_opcode_data rv_opcode_data; + typedef struct { - int op; + const rv_opcode_data *op; const rvc_constraint *constraints; } rv_comp_data; =20 -typedef struct { +struct rv_opcode_data { const char *name; rv_codec codec; const char *format; const rv_comp_data *pseudo; -} rv_opcode_data; +}; =20 typedef struct { const RISCVCPUConfig *cfg; diff --git a/disas/riscv.c b/disas/riscv.c index 342e2db3cc..9d05e86c09 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1068,138 +1068,140 @@ static const rvc_constraint rvcc_true[] =3D { rvc= _end }; =20 /* pseudo-instruction metadata */ =20 +static const rv_opcode_data rvi_opcode_data[]; + static const rv_comp_data rvcp_jal[] =3D { - { rv_op_j, rvcc_j }, - { rv_op_jal_ra, rvcc_jal_ra }, + { &rvi_opcode_data[rv_op_j], rvcc_j }, + { &rvi_opcode_data[rv_op_jal_ra], rvcc_jal_ra }, { }, }; =20 static const rv_comp_data rvcp_jalr[] =3D { - { rv_op_jr, rvcc_jr }, - { rv_op_jalr_ra, rvcc_jalr_ra }, + { &rvi_opcode_data[rv_op_jr], rvcc_jr }, + { &rvi_opcode_data[rv_op_jalr_ra], rvcc_jalr_ra }, { }, }; =20 static const rv_comp_data rvcp_jr[] =3D { - { rv_op_ret, rvcc_ret }, + { &rvi_opcode_data[rv_op_ret], rvcc_ret }, { }, }; =20 static const rv_comp_data rvcp_beq[] =3D { - { rv_op_beqz, rvcc_beqz }, + { &rvi_opcode_data[rv_op_beqz], rvcc_beqz }, { }, }; =20 static const rv_comp_data rvcp_bne[] =3D { - { rv_op_bnez, rvcc_bnez }, + { &rvi_opcode_data[rv_op_bnez], rvcc_bnez }, { }, }; =20 static const rv_comp_data rvcp_blt[] =3D { - { rv_op_bltz, rvcc_bltz }, - { rv_op_bgtz, rvcc_bgtz }, + { &rvi_opcode_data[rv_op_bltz], rvcc_bltz }, + { &rvi_opcode_data[rv_op_bgtz], rvcc_bgtz }, { }, }; =20 static const rv_comp_data rvcp_bge[] =3D { - { rv_op_blez, rvcc_blez }, - { rv_op_bgez, rvcc_bgez }, + { &rvi_opcode_data[rv_op_blez], rvcc_blez }, + { &rvi_opcode_data[rv_op_bgez], rvcc_bgez }, { }, }; =20 static const rv_comp_data rvcp_addi[] =3D { - { rv_op_mv, rvcc_mv }, + { &rvi_opcode_data[rv_op_mv], rvcc_mv }, { }, }; =20 static const rv_comp_data rvcp_mv[] =3D { - { rv_op_nop, rvcc_nop }, + { &rvi_opcode_data[rv_op_nop], rvcc_nop }, { }, }; =20 static const rv_comp_data rvcp_sltiu[] =3D { - { rv_op_seqz, rvcc_seqz }, + { &rvi_opcode_data[rv_op_seqz], rvcc_seqz }, { }, }; =20 static const rv_comp_data rvcp_xori[] =3D { - { rv_op_not, rvcc_not }, + { &rvi_opcode_data[rv_op_not], rvcc_not }, { }, }; =20 static const rv_comp_data rvcp_sub[] =3D { - { rv_op_neg, rvcc_neg }, + { &rvi_opcode_data[rv_op_neg], rvcc_neg }, { }, }; =20 static const rv_comp_data rvcp_slt[] =3D { - { rv_op_sltz, rvcc_sltz }, - { rv_op_sgtz, rvcc_sgtz }, + { &rvi_opcode_data[rv_op_sltz], rvcc_sltz }, + { &rvi_opcode_data[rv_op_sgtz], rvcc_sgtz }, { }, }; =20 static const rv_comp_data rvcp_sltu[] =3D { - { rv_op_snez, rvcc_snez }, + { &rvi_opcode_data[rv_op_snez], rvcc_snez }, { }, }; =20 static const rv_comp_data rvcp_addiw[] =3D { - { rv_op_sext_w, rvcc_sext_w }, + { &rvi_opcode_data[rv_op_sext_w], rvcc_sext_w }, { }, }; =20 static const rv_comp_data rvcp_subw[] =3D { - { rv_op_negw, rvcc_negw }, + { &rvi_opcode_data[rv_op_negw], rvcc_negw }, { }, }; =20 static const rv_comp_data rvcp_fsgnj_s[] =3D { - { rv_op_fmv_s, rvcc_fmv_s }, + { &rvi_opcode_data[rv_op_fmv_s], rvcc_fmv_s }, { }, }; =20 static const rv_comp_data rvcp_fsgnjn_s[] =3D { - { rv_op_fneg_s, rvcc_fneg_s }, + { &rvi_opcode_data[rv_op_fneg_s], rvcc_fneg_s }, { }, }; =20 static const rv_comp_data rvcp_fsgnjx_s[] =3D { - { rv_op_fabs_s, rvcc_fabs_s }, + { &rvi_opcode_data[rv_op_fabs_s], rvcc_fabs_s }, { }, }; =20 static const rv_comp_data rvcp_fsgnj_d[] =3D { - { rv_op_fmv_d, rvcc_fmv_d }, + { &rvi_opcode_data[rv_op_fmv_d], rvcc_fmv_d }, { }, }; =20 static const rv_comp_data rvcp_fsgnjn_d[] =3D { - { rv_op_fneg_d, rvcc_fneg_d }, + { &rvi_opcode_data[rv_op_fneg_d], rvcc_fneg_d }, { }, }; =20 static const rv_comp_data rvcp_fsgnjx_d[] =3D { - { rv_op_fabs_d, rvcc_fabs_d }, + { &rvi_opcode_data[rv_op_fabs_d], rvcc_fabs_d }, { }, }; =20 static const rv_comp_data rvcp_fsgnj_q[] =3D { - { rv_op_fmv_q, rvcc_fmv_q }, + { &rvi_opcode_data[rv_op_fmv_q], rvcc_fmv_q }, { }, }; =20 static const rv_comp_data rvcp_fsgnjn_q[] =3D { - { rv_op_fneg_q, rvcc_fneg_q }, + { &rvi_opcode_data[rv_op_fneg_q], rvcc_fneg_q }, { }, }; =20 static const rv_comp_data rvcp_fsgnjx_q[] =3D { - { rv_op_fabs_q, rvcc_fabs_q }, + { &rvi_opcode_data[rv_op_fabs_q], rvcc_fabs_q }, { }, }; =20 /* Convert compressed insns into normal insns via pseudo expansion. */ -#define DECOMP(X) &(const rv_comp_data){ X, rvcc_true } +#define DECOMP(X) &(const rv_comp_data){ &rvi_opcode_data[X], rvcc_true } =20 /* operand extractors */ =20 @@ -5270,9 +5272,8 @@ static const rv_opcode_data *decode_inst_lift_pseudo(= rv_decode *dec, if (comp_data) { while (comp_data->constraints) { if (check_constraints(dec, comp_data->constraints)) { - const rv_opcode_data *new_op =3D &dec->opcode_data[comp_da= ta->op]; - assert(new_op !=3D op); - return decode_inst_lift_pseudo(dec, new_op); + assert(op !=3D comp_data->op); + return decode_inst_lift_pseudo(dec, comp_data->op); } comp_data++; } --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551100; cv=none; d=zohomail.com; s=zohoarc; b=QQRvmmQ4uZtWYM6gAGHWL2vtMWYrPUtI8t9zFqqH3j7RXPOTX6ZBa5GmQUNY8pbUw6px4SBfPftCusjxhI1zD/bLMvjOyDl9a8/puE4BkpDzZ60uWWIoWi15jB4qQ1cgcrYW+x75suKddf1H7zERg71bUcyfAGAF1DVX8ll+tYg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551100; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=/WS1ThPg/b8x1LURw7MtOxUb9AQkwpijsnjQjcKpe2o=; b=kTpF3/gKrPr3CGyPhv189d8Jv+vNe0ws5yGw+XQhMaeKG5qhbhOFisoyXkzlkHI29e5+PksPI7imtiXXX8IphORVIsvDb9Y+l/igrcDY4wJ17H/ofbvMK99AyoUPhxGdb3/AFC6T5knwzQdRq0VG0Xi11xL6li1CeKkhvIDo6Xg= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178755110012747.14183693399866; Sun, 23 Aug 2026 22:58:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbL-00057L-0w; Mon, 24 Aug 2026 01:52:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNb8-0004pq-4U for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:55 -0400 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNb3-0002t1-HE for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:53 -0400 Received: by mail-pj1-x102b.google.com with SMTP id 98e67ed59e1d1-381c51fde6bso3590164a91.2 for ; Sun, 23 Aug 2026 22:51:44 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550704; x=1788155504; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=/WS1ThPg/b8x1LURw7MtOxUb9AQkwpijsnjQjcKpe2o=; b=DnVkpXJ/xHBlQuEfPTkgWzd3+0A/kAWm7cnHXN7RBSmJOMLXx4jLxndbnSLx2B5g0y lmUc9MB012KZGQVHJ7RXvIVBNa3+kWNMN+kkIt+3bzlcih6Kc2r7/WfeV0qWDufpcTFn 2MEQfoi9JoBp+QajTVHvSvWQGT09fa6YuJCz2X4H6PRhdcLJCtnffMxGdTsvrtDcWDlX hxJ4MUvNSNzoQ8gfLA/SQZ8WcO+i+HEhIosOWtWH+nKzsJgDZDCWH1o+r0xW0WTtGHXT eaNUagFrPSfTqjHNHASeYcwfzKB7aVM5umB3eGmuCuOdIa0bvP2CnTyWV2RMswhYGKct VMJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550704; x=1788155504; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=/WS1ThPg/b8x1LURw7MtOxUb9AQkwpijsnjQjcKpe2o=; b=lXtFHeKYJbKbTpp/l6A3aqS7waCy+pEkhSf835EmEZa+i/n4dCh5TDJSW+XT1m4Hhk eBpxZiIJZch7TxJVlK+bIylyKTcAHwUHOxcakZje3cXR1OHqInCVVOGf1Mcd2Lnxsq7C RYXAFOeJ1q3i8owUHlLLaUAQ9usVssIzqZhHRXtj6kguAObKso7xQqhLZq/N0+JUGLyP UOyB+KgBPjm8nkbZa4BD52XJ2Y3m0A4IQ3Ayiy7cjnyMQWajjE4qNwvK4qxuTR+AOesC L6BVdgNgyaO9en6wTtTvI463IC8UUHNZZRQHRdX5CffA1NsREjVQJa9tsSo9pQtbnrN4 vzOA== X-Gm-Message-State: AFuF++lY4r2d54iBgNRMpkLiBD6FtvrSomA+VzqSE5A+4f3uEg4Y/l5O sH/j9Lw8BKR06Q1hwSwlb5YxJMyjTC7AFzOaq4T71j8Hmeqx3dm4bAF2eV/AoQ== X-Gm-Gg: AR+sD122sVwk1y1BKnJsEQm7HEhQlfe5a/kQk8p8vpNc0EE5Emh2ZbahlRtg0ueiO0x sWGsu9wKbCG53RcoFoeX+tZhCzi4HACsM5OFqyEWEeznCeT+QZtshCeeypeMboAiCNVRSu2H7cd K0PQb7vuIijUPZiVUpdYyNLOE9eUt0iaTcL98/JbrfkIkxjKbF88HN+bkmC+pE5DrfchBJuaHQn TRmSKeKjPQ6nLw/sncUIC9SoPHlc+k/4fHCZ4t4JZb3Z4/PuVBSH0p9Q1QNhz0r10xc5oi7tsdV TgWj69OLpoACzPkJNz9R2tkAFLCj6KrmS3JYvBJno2DNxLrZsvbzkr0u9znocaWM3E6YAOMhexN pk4uq1D/C9LrNZ8XMJ9mQQZAEwCKjZRo3UVYiOipKAVoZWWu9z/NTW+ErcjJLJvrwPVjdLkLylo WuqU673H6IRKKpJ+DfEETrS04ckrRnZCmiOGecviFf+x+d8cHJt/lvbHeJ23CJJl1Cwt7cJRgbZ Qrx6kDDIplkFq7L X-Received: by 2002:a17:90b:4b02:b0:36b:bec8:94c5 with SMTP id 98e67ed59e1d1-395df2595femr25850835a91.10.1787550703861; Sun, 23 Aug 2026 22:51:43 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 68/96] disas/riscv: Return rv_opcode_data pointer from decoders Date: Mon, 24 Aug 2026 15:47:38 +1000 Message-ID: <20260824054806.2790041-69-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102b; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102b.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551100634158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Rather than putting array + index into rv_decode, return the pointer to the object directly. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-36-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv-xlrbr.h | 2 +- disas/riscv-xthead.h | 22 ++++++++--------- disas/riscv-xventana.h | 2 +- disas/riscv.h | 2 -- disas/riscv-xlrbr.c | 5 ++-- disas/riscv-xthead.c | 55 +++++++++++++++++------------------------- disas/riscv-xventana.c | 5 ++-- disas/riscv.c | 23 +++++++----------- 8 files changed, 48 insertions(+), 68 deletions(-) diff --git a/disas/riscv-xlrbr.h b/disas/riscv-xlrbr.h index ebf3d4c133..da14f1b340 100644 --- a/disas/riscv-xlrbr.h +++ b/disas/riscv-xlrbr.h @@ -12,6 +12,6 @@ =20 #include "disas/riscv.h" =20 -void decode_xlrbr(rv_decode *, rv_isa); +const rv_opcode_data *decode_xlrbr(rv_decode *, rv_isa); =20 #endif /* DISAS_RISCV_XLRBR_H */ diff --git a/disas/riscv-xthead.h b/disas/riscv-xthead.h index 0c65c8e0af..f2160be8a4 100644 --- a/disas/riscv-xthead.h +++ b/disas/riscv-xthead.h @@ -11,16 +11,16 @@ =20 #include "disas/riscv.h" =20 -void decode_xtheadba(rv_decode *, rv_isa); -void decode_xtheadbb(rv_decode *, rv_isa); -void decode_xtheadbs(rv_decode *, rv_isa); -void decode_xtheadcmo(rv_decode *, rv_isa); -void decode_xtheadcondmov(rv_decode *, rv_isa); -void decode_xtheadfmemidx(rv_decode *, rv_isa); -void decode_xtheadfmv(rv_decode *, rv_isa); -void decode_xtheadmac(rv_decode *, rv_isa); -void decode_xtheadmemidx(rv_decode *, rv_isa); -void decode_xtheadmempair(rv_decode *, rv_isa); -void decode_xtheadsync(rv_decode *, rv_isa); +const rv_opcode_data *decode_xtheadba(rv_decode *, rv_isa); +const rv_opcode_data *decode_xtheadbb(rv_decode *, rv_isa); +const rv_opcode_data *decode_xtheadbs(rv_decode *, rv_isa); +const rv_opcode_data *decode_xtheadcmo(rv_decode *, rv_isa); +const rv_opcode_data *decode_xtheadcondmov(rv_decode *, rv_isa); +const rv_opcode_data *decode_xtheadfmemidx(rv_decode *, rv_isa); +const rv_opcode_data *decode_xtheadfmv(rv_decode *, rv_isa); +const rv_opcode_data *decode_xtheadmac(rv_decode *, rv_isa); +const rv_opcode_data *decode_xtheadmemidx(rv_decode *, rv_isa); +const rv_opcode_data *decode_xtheadmempair(rv_decode *, rv_isa); +const rv_opcode_data *decode_xtheadsync(rv_decode *, rv_isa); =20 #endif /* DISAS_RISCV_XTHEAD_H */ diff --git a/disas/riscv-xventana.h b/disas/riscv-xventana.h index 1006c3be00..d28e84c7e4 100644 --- a/disas/riscv-xventana.h +++ b/disas/riscv-xventana.h @@ -11,6 +11,6 @@ =20 #include "disas/riscv.h" =20 -void decode_xventanacondops(rv_decode*, rv_isa); +const rv_opcode_data *decode_xventanacondops(rv_decode*, rv_isa); =20 #endif /* DISAS_RISCV_XVENTANA_H */ diff --git a/disas/riscv.h b/disas/riscv.h index ab62c0db94..241dd47d7f 100644 --- a/disas/riscv.h +++ b/disas/riscv.h @@ -182,10 +182,8 @@ typedef struct { const RISCVCPUConfig *cfg; uint64_t pc; uint64_t inst; - const rv_opcode_data *opcode_data; int32_t imm; int32_t imm1; - uint16_t op; uint8_t rd; uint8_t rs1; uint8_t rs2; diff --git a/disas/riscv-xlrbr.c b/disas/riscv-xlrbr.c index d0092e9edd..b12916c9da 100644 --- a/disas/riscv-xlrbr.c +++ b/disas/riscv-xlrbr.c @@ -36,7 +36,7 @@ static const rv_opcode_data xlrbr_opcode_data[] =3D { { "crc32c.d", rv_codec_r, rv_fmt_rd_rs1 }, }; =20 -void decode_xlrbr(rv_decode *dec, rv_isa isa) +const rv_opcode_data *decode_xlrbr(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; rv_opcode op =3D rv_op_illegal; @@ -76,6 +76,5 @@ void decode_xlrbr(rv_decode *dec, rv_isa isa) break; } =20 - dec->opcode_data =3D xlrbr_opcode_data; - dec->op =3D op; + return op =3D=3D rv_op_illegal ? NULL : &xlrbr_opcode_data[op]; } diff --git a/disas/riscv-xthead.c b/disas/riscv-xthead.c index 757d6ff39f..428a6380e9 100644 --- a/disas/riscv-xthead.c +++ b/disas/riscv-xthead.c @@ -246,7 +246,7 @@ static const rv_opcode_data xthead_opcode_data[] =3D { { "th.sync.s", rv_codec_none, rv_fmt_none }, }; =20 -void decode_xtheadba(rv_decode *dec, rv_isa isa) +const rv_opcode_data *decode_xtheadba(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; rv_opcode op =3D rv_op_illegal; @@ -272,11 +272,10 @@ void decode_xtheadba(rv_decode *dec, rv_isa isa) break; } =20 - dec->opcode_data =3D xthead_opcode_data; - dec->op =3D op; + return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; } =20 -void decode_xtheadbb(rv_decode *dec, rv_isa isa) +const rv_opcode_data *decode_xtheadbb(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; rv_opcode op =3D rv_op_illegal; @@ -331,11 +330,10 @@ void decode_xtheadbb(rv_decode *dec, rv_isa isa) break; } =20 - dec->opcode_data =3D xthead_opcode_data; - dec->op =3D op; + return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; } =20 -void decode_xtheadbs(rv_decode *dec, rv_isa isa) +const rv_opcode_data *decode_xtheadbs(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; rv_opcode op =3D rv_op_illegal; @@ -358,11 +356,10 @@ void decode_xtheadbs(rv_decode *dec, rv_isa isa) break; } =20 - dec->opcode_data =3D xthead_opcode_data; - dec->op =3D op; + return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; } =20 -void decode_xtheadcmo(rv_decode *dec, rv_isa isa) +const rv_opcode_data *decode_xtheadcmo(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; rv_opcode op =3D rv_op_illegal; @@ -437,11 +434,10 @@ void decode_xtheadcmo(rv_decode *dec, rv_isa isa) break; } =20 - dec->opcode_data =3D xthead_opcode_data; - dec->op =3D op; + return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; } =20 -void decode_xtheadcondmov(rv_decode *dec, rv_isa isa) +const rv_opcode_data *decode_xtheadcondmov(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; rv_opcode op =3D rv_op_illegal; @@ -465,11 +461,10 @@ void decode_xtheadcondmov(rv_decode *dec, rv_isa isa) break; } =20 - dec->opcode_data =3D xthead_opcode_data; - dec->op =3D op; + return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; } =20 -void decode_xtheadfmemidx(rv_decode *dec, rv_isa isa) +const rv_opcode_data *decode_xtheadfmemidx(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; rv_opcode op =3D rv_op_illegal; @@ -503,11 +498,10 @@ void decode_xtheadfmemidx(rv_decode *dec, rv_isa isa) break; } =20 - dec->opcode_data =3D xthead_opcode_data; - dec->op =3D op; + return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; } =20 -void decode_xtheadfmv(rv_decode *dec, rv_isa isa) +const rv_opcode_data *decode_xtheadfmv(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; rv_opcode op =3D rv_op_illegal; @@ -539,11 +533,10 @@ void decode_xtheadfmv(rv_decode *dec, rv_isa isa) break; } =20 - dec->opcode_data =3D xthead_opcode_data; - dec->op =3D op; + return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; } =20 -void decode_xtheadmac(rv_decode *dec, rv_isa isa) +const rv_opcode_data *decode_xtheadmac(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; rv_opcode op =3D rv_op_illegal; @@ -571,11 +564,10 @@ void decode_xtheadmac(rv_decode *dec, rv_isa isa) break; } =20 - dec->opcode_data =3D xthead_opcode_data; - dec->op =3D op; + return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; } =20 -void decode_xtheadmemidx(rv_decode *dec, rv_isa isa) +const rv_opcode_data *decode_xtheadmemidx(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; rv_opcode op =3D rv_op_illegal; @@ -646,11 +638,10 @@ void decode_xtheadmemidx(rv_decode *dec, rv_isa isa) break; } =20 - dec->opcode_data =3D xthead_opcode_data; - dec->op =3D op; + return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; } =20 -void decode_xtheadmempair(rv_decode *dec, rv_isa isa) +const rv_opcode_data *decode_xtheadmempair(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; rv_opcode op =3D rv_op_illegal; @@ -681,11 +672,10 @@ void decode_xtheadmempair(rv_decode *dec, rv_isa isa) break; } =20 - dec->opcode_data =3D xthead_opcode_data; - dec->op =3D op; + return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; } =20 -void decode_xtheadsync(rv_decode *dec, rv_isa isa) +const rv_opcode_data *decode_xtheadsync(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; rv_opcode op =3D rv_op_illegal; @@ -716,6 +706,5 @@ void decode_xtheadsync(rv_decode *dec, rv_isa isa) break; } =20 - dec->opcode_data =3D xthead_opcode_data; - dec->op =3D op; + return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; } diff --git a/disas/riscv-xventana.c b/disas/riscv-xventana.c index 4fb9a29d0b..a4e59312d0 100644 --- a/disas/riscv-xventana.c +++ b/disas/riscv-xventana.c @@ -20,7 +20,7 @@ static const rv_opcode_data ventana_opcode_data[] =3D { { "vt.maskcn", rv_codec_r, rv_fmt_rd_rs1_rs2 }, }; =20 -void decode_xventanacondops(rv_decode *dec, rv_isa isa) +const rv_opcode_data *decode_xventanacondops(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; rv_opcode op =3D rv_op_illegal; @@ -38,6 +38,5 @@ void decode_xventanacondops(rv_decode *dec, rv_isa isa) break; } =20 - dec->opcode_data =3D ventana_opcode_data; - dec->op =3D op; + return op =3D=3D rv_op_illegal ? NULL : &ventana_opcode_data[op]; } diff --git a/disas/riscv.c b/disas/riscv.c index 9d05e86c09..bc86cb866a 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -2846,7 +2846,7 @@ static const char *csr_name(int csrno) =20 /* decode opcode */ =20 -static void decode_inst_opcode(rv_decode *dec, rv_isa isa) +static const rv_opcode_data *decode_inst_opcode(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; rv_opcode op =3D rv_op_illegal; @@ -4541,8 +4541,7 @@ static void decode_inst_opcode(rv_decode *dec, rv_isa= isa) break; } =20 - dec->opcode_data =3D rvi_opcode_data; - dec->op =3D op; + return op =3D=3D rv_op_illegal ? NULL : &rvi_opcode_data[op]; } =20 /* decode operands */ @@ -5291,14 +5290,12 @@ static GString *disasm_inst(rv_isa isa, uint64_t pc= , rv_inst inst, .inst =3D inst, .cfg =3D cfg, }; - const rv_opcode_data *op; + const rv_opcode_data *op =3D decode_inst_opcode(&dec, isa); =20 - decode_inst_opcode(&dec, isa); - - if (dec.op =3D=3D rv_op_illegal && cfg) { + if (!op && cfg) { static const struct { bool (*guard_func)(const RISCVCPUConfig *); - void (*decode_func)(rv_decode *, rv_isa); + const rv_opcode_data *(*decode_func)(rv_decode *, rv_isa); } decoders[] =3D { { has_xtheadba_p, decode_xtheadba }, { has_xtheadbb_p, decode_xtheadbb }, @@ -5317,19 +5314,17 @@ static GString *disasm_inst(rv_isa isa, uint64_t pc= , rv_inst inst, =20 for (size_t i =3D 0; i < ARRAY_SIZE(decoders); i++) { if (decoders[i].guard_func(cfg)) { - decoders[i].decode_func(&dec, isa); - if (dec.op !=3D rv_op_illegal) { + op =3D decoders[i].decode_func(&dec, isa); + if (op) { break; } } } } - - if (dec.op =3D=3D rv_op_illegal) { - dec.opcode_data =3D rvi_opcode_data; + if (!op) { + op =3D &rvi_opcode_data[rv_op_illegal]; } =20 - op =3D &dec.opcode_data[dec.op]; decode_inst_operands(&dec, isa, op); op =3D decode_inst_lift_pseudo(&dec, op); return format_inst(24, &dec, op); --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551269; cv=none; d=zohomail.com; s=zohoarc; b=cmEmIvBePljC57La7EKLI4JYjvL4iUF/ySYem+rEPIskq5AdQyWJyyO73HWeuKkLeVA5iEujatwRl4oUSh0OttWUBfZAvWwJbKlGJc0vT3YJe9EaHAxMtwkvX1CGUm1nX9xzJbZ4JrQ4m4QDuQAUq86Erws+Slx+9/w2nJpzE/U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551269; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=0l5cwjyhUZo0Z534C5ltswqTKfVTVx+zXnHGvUMI3ho=; b=Uz8zLXdbOoLDj6Z8GnNvFamgKk33cTb6VKQ4HzMoj3EimnG++Esss6lWXjcAfQCzJwAAUsCMUzr2qyHhAvlhmzs/o7MmlFtJ0YgBKsBVPpXCrjrwu2WblfdpjT6Q67XV+3F3GBZv0EwDbu3VF+zE8Gg1hU6RphLJGxtSwOB12Sg= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551269595691.3662005247819; Sun, 23 Aug 2026 23:01:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNba-0005YZ-HT; Mon, 24 Aug 2026 01:52:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNb8-0004pr-5K for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:55 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNb3-0002tm-Gh for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:52 -0400 Received: by mail-pj1-x102f.google.com with SMTP id 98e67ed59e1d1-38dfe910e9dso3369815a91.3 for ; Sun, 23 Aug 2026 22:51:47 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550707; x=1788155507; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=0l5cwjyhUZo0Z534C5ltswqTKfVTVx+zXnHGvUMI3ho=; b=VfDSUP/vj8xQra5SqWWAlrMbaqryjos2IBL9QBqjDDW32f/rTyFvSkEMlRlwxYfJDC rA1//ZhaiMHC80mnWLItXSHKAWOwHhSmaCOdPKJlxRzn/EOx2VkeDszhjEg8QoxAlWW9 lVRabur6unB1CXi73hpSrAwQGjtD+VQP4KQ/iS4MnO9FBdGdeYaCkxE6SzGtSE2wzHuG QdAvsp9bnRKZ3tfltpbAHm6YRlmCwcMf34UOCfm4izuFgG3rXPlP3W8kho8lyD9LWz2t hkoa2FSgZnca97Cx3wdreBrJQUdHSFKhxW8RIzPBDtlDaM0sQuVIDdecZWFc3AmZ0EKR YjYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550707; x=1788155507; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=0l5cwjyhUZo0Z534C5ltswqTKfVTVx+zXnHGvUMI3ho=; b=YytRztTPYambkCdoja85gLUVWsXGxsGcMe/8K0LX2aVVN6wNnP/kzNdaOVNHebC6F/ q0IHL5UJRVQPsRaLTPu9iSsDuCVNVAWN+TzWQNBwxCeB0ZV9u1OpBOr4hW4/2T7j/MsP nZqn6JY8rDTtaEvlo24ag1zQzoNKIT24/sAxcy9g93OJivlA01I3QUDAGLp0p7VlSF3D jQBsY7w07MNxrzq1IYG8sS3zLeAufi1SynmfEw5/ieICL/4zdW1m6k/630Ty56lXdkqR BuKk1DudPGEoM8u/uCNf0b8RSrF+/VUvATdvAPmbZa2sanvTeZZ88C1HZIAtA0zcSJQq po1g== X-Gm-Message-State: AFuF++kHF8ugnUZe9k8rH/JfhLaDWF4xmyufXEeXKWeJDLylOYGQp/Gz 9LuFR2Gfmm18hYAMOT+sDQ4zCClxbqPKaD1wPHcG97CjGRm78961q0wa0d03VQ== X-Gm-Gg: AR+sD12lue9g6o84Zb0PhY6SqVrQCyiZWjpjY2L2FMpZSqyXTiNsFS4sj31F9AO7xJB +sWk3i++8J2285TgsY+0+GrIMPzybweRKGU8rMdmVtltAVb/ut/vMJm2MhBK0OSjYwMh9NlKuE0 QNE3y6zvQtRZDOdRP9RvUIPcEv987hL7X6edMMRUOkD7YH4bTsIZsyqadPwwPn0duOVcaIloMae krQUnr1Y5JOsJkaHn0r6TF8Ybc/d80jcrJEoOIG4O1cdP+GjqgxPJdImEt2lPBR7+y4MopGBwl4 DmQfp8ZNVorNpNa1tn654aDpTwV9bdOplIoGG1XldvC5OhXnnEopCQSJl320mfutYg5yK/MFg7Z 9it17vMkR17i6RUdbacUfp0DB1Y7HncYEmHWGbxV5dOfXcs+d0/8oPg4VjQx/vLKZoqm2aFxKOv IcL2FOoejlvqNeEhswU1bYaPg1a43z1tc6RVovK/iM7gZ/IqQ+ZlYXYB2w7BMP1VymLVejZBQ5Z WiUuw== X-Received: by 2002:a17:90b:1c0a:b0:395:4290:46e0 with SMTP id 98e67ed59e1d1-395c336c815mr38314728a91.5.1787550706816; Sun, 23 Aug 2026 22:51:46 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 69/96] disas/riscv: Skip post-processing of illegal insns Date: Mon, 24 Aug 2026 15:47:39 +1000 Message-ID: <20260824054806.2790041-70-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102f; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102f.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551271488158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Message-ID: <20260812223142.349142-37-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index bc86cb866a..75c2fa11e6 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -5321,12 +5321,14 @@ static GString *disasm_inst(rv_isa isa, uint64_t pc= , rv_inst inst, } } } - if (!op) { + + if (op) { + decode_inst_operands(&dec, isa, op); + op =3D decode_inst_lift_pseudo(&dec, op); + } else { op =3D &rvi_opcode_data[rv_op_illegal]; } =20 - decode_inst_operands(&dec, isa, op); - op =3D decode_inst_lift_pseudo(&dec, op); return format_inst(24, &dec, op); } =20 --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550797; cv=none; d=zohomail.com; s=zohoarc; b=GduPlaN7ywsejAC6QjOG7RZacQWDelH4P93DkQm7EiMwY7+ajHvwqJ6i7ZBwwT698pQWEYqkC74Wn2tRnhiliH87EzvZ/aANc6yNPqf1bVzzjXDKqc0BcCVnZat5TZCCPOCdM6R3YtrdAaupVFRnM6m8e6/hvjIKzkkIrR7hWKU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550797; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Yu4ELq3Ofd3UkpQaCSSE8x2tH1NrMj+tlGRK673tC1k=; b=Q/WJ8D0pFJBzKVS53pxHWYUOupg6ERWUZToyh+y3j3w4DkkxNV1UHkTwadkjFZ5BWydtau6FoRWScix2DdOjDr/4xolviNYo+O0vF6/fNPhwnR9CQw2RLf1BP5E2UCnFnRMNm2WUNrEFwNpYQmiVZAyy/gqSbKVJjewlhF85R7w= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178755079791596.34551053185987; Sun, 23 Aug 2026 22:53:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbd-0005jO-4g; Mon, 24 Aug 2026 01:52:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNb8-0004pp-49 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:55 -0400 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNb5-0002v6-M3 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:53 -0400 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-2caea3f742bso48175995ad.0 for ; Sun, 23 Aug 2026 22:51:50 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550709; x=1788155509; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Yu4ELq3Ofd3UkpQaCSSE8x2tH1NrMj+tlGRK673tC1k=; b=hcT9TyuXe2VvgDkSWi7t+pJUJY8EhZcrV+yRC77LOGm6qIa6Y/dnL2UOh9zMT8z0Sd ZAgsldOg/hPZaZ2/dU4x3JmFEm0fGirB3zesPCMjB+ScYW9Qbu3sFtVyQ7quThbi45iB qHPayj2BJm+Bt0BhP0mCDgfEKizVmCr9tvecF3mUM1XKyzjmSfKSlri+vKapIr4FjpGs Z2K2py/hW+yRKDMIQJghRZ3gyzDXcQVZSv/mHaIQb7LL54WqbXEyWBlD67kJ2GhRZSAv 99SehCFyK9toL+dT9dtXF79/nrc6yrx/u11QDymG8KaOnj3GInm2G1DEPqih8dQzyO3s pAaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550709; x=1788155509; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Yu4ELq3Ofd3UkpQaCSSE8x2tH1NrMj+tlGRK673tC1k=; b=rMA6HYVGhVZchxE+hlhWhMOCfA2bYw4hTPoBHu+PLuhE4WHT57gmdI63Z4TPdcTFfM lXTUttHItXhHboVCmvaxc8qYHuJeD6G3MYJ8Zk8k75VxbDivTFa0zdbvzQxCx+dUZBzp TGoa8CjsQ9RHXT8OpQ0i73HyrGRRbZs+6tivXPN6idEc0HU1LyNHV3PUFX9Q1+oYnNG5 ICqnuz/Cc459vgiZTpTnoWkzpHuEEUn1i7zbGjRKh+tTROiqjiMx4GSiORB/h8IbjjM8 xAHo5+fDdzU6I3MrKQxOJDaZRV+hKfeDsZiIfFiav8asu79d2YT/UtW7e5+51LhxQT16 Bcgw== X-Gm-Message-State: AFuF++kSvmWnxg3kLqAJmYp3E9BdiPNeG9yyAPuDP9cR2VkEUxoKT78R 0/TyqrDwLFeotYFx+kGLi1JTs95YAFogVI2+vOXd5WM0YMwpveY1zy3tM8OhAg== X-Gm-Gg: AR+sD126aShVLFGqY/rU/LNLhPdfuKGr1as2pdAdwUyA61+3FKEzu5w/2JHygrC2Rgj LIjytvHbtlx8YrlmB75RTQoTVhMXPONLTwoT0jnc3WSMQgMLUvUG1qxQwHDKqPReDbyW5eMQKFA aCoqHji7hUxROkkvrSHy6zwoB4uCBwS2o9U9OzqUip98W/cqA5ugi5kro7poj1tRMqr1P2VQvx0 xH9eck640VRlFSGmK5MFGCBBNs0moALJv4DiDnBv8dhJDL5vNuS0RYpmXqPGUe1taZa1yhdtXV3 +O03Y3ktBPzIlLYrwhiUhg5+DyNv8Q4QE2scI9hrpMOWBo3CM3O95EGzx29ieTbyxPzSIfQT425 xeUD4MsnpfST3+PYjvy3gT9/9fhOfM6FihL9V5rYMFvdXM3aQTIJPx8QE8LWH2Minnkqu2BNLp1 fqgom4yZFTFVe2rXO2QMa/XAdUUshImg5URzWoKN/Q7zh1W0Hp/4v6Ey3lI+47TNhmgEIzfb2gH 5cKmEkb8fI= X-Received: by 2002:a17:90b:3d8a:b0:38e:6d4c:14e6 with SMTP id 98e67ed59e1d1-395c33daf0fmr45452635a91.3.1787550709505; Sun, 23 Aug 2026 22:51:49 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 70/96] disas/riscv: Reject all of OP-32 and OP-IMM-32 for RV32 Date: Mon, 24 Aug 2026 15:47:40 +1000 Message-ID: <20260824054806.2790041-71-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62f; envelope-from=alistair23@gmail.com; helo=mail-pl1-x62f.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550799455158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson These entire base opcodes are RV64. Reject them all at once rather than one at a time. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-38-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/disas/riscv.c b/disas/riscv.c index 75c2fa11e6..e650ad7688 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -3311,6 +3311,10 @@ static const rv_opcode_data *decode_inst_opcode(rv_d= ecode *dec, rv_isa isa) } break; case 6: + /* OP-IMM-32 */ + if (isa =3D=3D rv32) { + break; + } switch ((inst >> 12) & 0b111) { case 0: op =3D rv_op_addiw; break; case 1: @@ -3557,6 +3561,10 @@ static const rv_opcode_data *decode_inst_opcode(rv_d= ecode *dec, rv_isa isa) break; case 13: op =3D rv_op_lui; break; case 14: + /* OP-32 */ + if (isa =3D=3D rv32) { + break; + } switch (((inst >> 22) & 0b1111111000) | ((inst >> 12) & 0b0000000111)) { case 0: op =3D rv_op_addw; break; --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550783; cv=none; d=zohomail.com; s=zohoarc; b=A7+JQZ0Fx7ejsMQbkP/EE1WCULiZd9ypUfor2G/d6ybhCa0nl3aFaCIB6mK0dprHetnnQyg1G9bFMgpHpP4RvPrm6L0gCGeRXb0bxUJ6Y007FfSCWPPG2VsI25+oBLrwwqj/xW8xzLM/AKRGHLs7P4aDvipczvUBu5BCXln2L6Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550783; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=b2F4kXj+XlomzI5ywD3BSgCQbVAV2xTdDpSTO+oa8Tk=; b=hGz449W+OSUiicba0z4tu7JkLlFrLdvoE8RdPjDenoP9zbpOSJQEQRji8f3gYMg9zLLtV8eWmu1BeWV0Yb+s/0n0YspWAj9pAppU73xx/MVnV9L2tPSJUSK135KNpQzpQZdqZ3kQpx4s/3q2V5FzYNKw11blT8casEPLoLiDceo= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550783795656.1268444038365; Sun, 23 Aug 2026 22:53:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbc-0005gw-Oo; Mon, 24 Aug 2026 01:52:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNbC-0004xc-Ra for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:58 -0400 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNb9-0002wQ-Ot for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:58 -0400 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-2cc61541f8cso42953385ad.0 for ; Sun, 23 Aug 2026 22:51:53 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550713; x=1788155513; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=b2F4kXj+XlomzI5ywD3BSgCQbVAV2xTdDpSTO+oa8Tk=; b=qn4oWTALeop4eARopPQziG62FbtppHV0eSXm0rrFOACj/gLGiPFd+1phCEO3HNWSNm kKMYlMfhJjCXSR86IXVUwuSbLOhVenc93weqUWGR899XGDlGfus2RKSLS9texUEe0ui8 yetUe5ChtCKbwFWfBSTNFjvVMq8ojFFr0XJtFYOCdFksbsnkY8t6iCcXdrcCtp02U5FK HSTKlGM6YkeFXt4ft237Xo7lvgEsEq9vOX3EGdIc5bI1GkRX1TgRbKLctRo9jMFZx5KC dTmBFTUraQLen4moc3HGv1VBR9vscepVX0IOHTNZCZKSLVWWBBfvf2M/b8ZP7m2IAlvk 8y4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550713; x=1788155513; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=b2F4kXj+XlomzI5ywD3BSgCQbVAV2xTdDpSTO+oa8Tk=; b=BlsWz79kYgCE+bTrYDqtRT9agOBPeqZLIT3YZnzOC5Bg4c14UfIZ7i1uwFbq8Z8c7c mPAV850h0yy++Gxb3owm3f44iKgN99gC+cp1XvowShxho9H4Bhl+CGCumnQFfNgxk/rU 5D5F5casaJ/n9DNLgtvYyJya3zPUkbf6Yu/fV+DBjbJCRNmPlRD+ARQwIe4koQchPw4o /SKyp6dhuo/7YDLuuSj88izZACovcbmzB9qcy3M7LdjmVv9bW/5QrPHk1uPz0R8VyX0D StPcJ+TYFHU+E2SUV6cHithXklEfeA2ZKzWHlEGg+5W15k2VZcw3aBSGc0yER6guAF1e atLg== X-Gm-Message-State: AFuF++lGH9NcQ3DPmEO5ZSXSw2w5fspC0aLBnCXEUcycyuagif8uXyJR shW+FDgQpVnLI5kpCSOAM8rmGw1TnYNpNW8zcC1ddAXwtGYy15JC7NOfgyl2lw== X-Gm-Gg: AR+sD13GxHmcQrMYzwO1TQ8bHwi6BkAZKs/pNp+XyUMfKy6T521WxMrhcVI56hI+2uN ohNmjl46EdtWD/DjyQeVtTqUrPGi2xRj0hJiEI0dyDi3LYQwGyp24c9NV8oWkzYx3ej0v0KFslJ eHtuWQaAWkGXfeMNCGaeuyJBNhIF8NTtxPnQJeMgi78VXblve7+d8nH5U199d7AvQhl+7r84rys /NoWg3U0Gkw2/BFrjtS/dokU+Lh0oPfExvwEFZin88vRgu+G2hkLS6tmz6D2aI3H0N0MpJQNmaZ r/jJhRfgEZqxlZjLxjkDDYoKwApZ0LXI5Xb8q9Gv4sA4QpPn+jPG2p9NoRraIv0nuxZxwEiol7S OFd9oHSBlkhlmhaTn6nTnppFPtAMwzOtMTx0uYxOnPhiDsmJpHTc46kG+zGQIkxenb+0H4MyLPo UNeIFUSk4LBbxjWqkiYSSHjrZb6eGrMTMDxudqNOZ0l6sCsU40rHQ2/BRHf3dQMt/RE+SGskW/L ojtTMykpjSpwZ7u X-Received: by 2002:a17:90b:3e8d:b0:38e:9ca8:e99 with SMTP id 98e67ed59e1d1-395c4fa444bmr14527042a91.5.1787550712677; Sun, 23 Aug 2026 22:51:52 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , qemu-stable@nongnu.org, Alistair Francis Subject: [PULL v2 71/96] disas/riscv: Fix rv32 encoding of zext.h Date: Mon, 24 Aug 2026 15:47:41 +1000 Message-ID: <20260824054806.2790041-72-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=alistair23@gmail.com; helo=mail-pl1-x62d.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550785311158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson For rv64, pack with rs2 =3D 0 does not encode zext.h. Cc: qemu-stable@nongnu.org Fixes: 02c1b569a15 ("disas/riscv: Add Zb[abcs] instructions") Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-39-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index e650ad7688..5624e7f60a 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -3506,9 +3506,10 @@ static const rv_opcode_data *decode_inst_opcode(rv_d= ecode *dec, rv_isa isa) case 14: op =3D rv_op_rem; break; case 15: op =3D rv_op_remu; break; case 36: - switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_zext_h; break; - default: op =3D rv_op_pack; break; + if (isa =3D=3D rv32 && !((inst >> 20) & 0b11111)) { + op =3D rv_op_zext_h; + } else { + op =3D rv_op_pack; } break; case 39: op =3D rv_op_packh; break; --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550809; cv=none; d=zohomail.com; s=zohoarc; b=DLzpGj89vMI4xaEXXyPVXBrd6ZWaHI4fBPjGH3qzO+/2G+ZF74+Dx6/37FEgmaP7jjEwuA6nvHqE5Vt/w1I81d8rjlQstHPbyuPRYpFltQi+tgc461NgSTx5iwB3/OjS2gzhdg5QubWA/G6RF3jtqKmg6LFlPavfYXFZSE8U6Ok= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550809; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=HaltHBrD2Aw1tYNfzSMF6Xxi4/NnMEbI9K3tbX0694Y=; b=XwOTMayB3sUH1p8nsQTaYqNM6DOgOG9VYxN9u5VC0q+ruFlPxLd0LzgcSQ2XcyOMMw+o3ldxI8GdVqzjxiT1xKgrVsLo9zqomfDsE4yTKJxfiwXQADOslccMdPyTRvjCcJAfSVdjy1ux0gkIycGiC8KRyG/36DuNyeg5n9xun1M= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550809251796.7841945276235; Sun, 23 Aug 2026 22:53:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbe-0005rj-Kq; Mon, 24 Aug 2026 01:52:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNbE-0004zs-Hm for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:00 -0400 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNbB-0002y8-Mo for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:51:59 -0400 Received: by mail-pg1-x52b.google.com with SMTP id 41be03b00d2f7-cbedf318752so2243431a12.0 for ; Sun, 23 Aug 2026 22:51:56 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550716; x=1788155516; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=HaltHBrD2Aw1tYNfzSMF6Xxi4/NnMEbI9K3tbX0694Y=; b=WZfwERe8JJQBtpSoxrbI8q0cASEH4U693qZx8NJc/+qqyCOPaAN10S9ybYocfeCvSQ 7Z9zGphj4gUqztyCJLsFqxUUWQjcJXXIIZsFXIOHLujYKy7t8aC9vJLihACaDG35oRqt Y4jU59ayiaeprIR6QGlwOVuJx7TuHjA2r3caqeuul/qOj5p282L2CJXpO8g03JOKm1kz pS0wsVygznwtNVDqa+s9VaiFkfbIGNyI+Sdj0xnuGZfMETc1C3mJ1ZcsKSGmiU1us63b sVPApgRKRv4EgtKUqWU0JFDu3edLXM5yjqKSqopg73b/ijJ+BH0e1svoNzoSRj0rRvWY LZNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550716; x=1788155516; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=HaltHBrD2Aw1tYNfzSMF6Xxi4/NnMEbI9K3tbX0694Y=; b=aZflyeQgPb1BD00tSFU2wEMeMtloLaR77Hcr7L7KFXz5gtu1Cm9ZLAUnB36ghR58s7 ICERwHeAVfvo6m4v1fY1CCqMKpnkq6Pm4FD/1sOldvaTn46R8CjIhU3RdGTFmmSKqfut nuabArOJE2ifc1YhHm6DhAEzguzyblLQDJqusFcCD3wGyjVwVxxCMPCvrA3mDE85RPAf Yy6tFdUilu7864Z0nsakkI4Xjo9G8/r307aM7kD9p92mF7rx9M4fekfDyFIYcKoRQyyM ggXT3YR57vM5zKASt6UBxqfGkEmr2ayMAtZzad8Lfmlf2n2CfZ4fL9pZ5J1WnDwS8kp/ CzPg== X-Gm-Message-State: AFuF++mtF6byDmZenmTFr0ux75OjRFpTrGz4e6ALxG3njGDoDD3tv4IM ATuE9BR7awb1kc3hBPa5AiwXT3TVQn/rSnDe4sAB4pL5Pod3Me8gxcAb3y1IyQ== X-Gm-Gg: AR+sD13bmsV3Nq8bDQT4xMlFJdxnfUm/vfnJFQhth0C5KYqUroOk2w4hs2Qr20ik0Od IgeIW5407H2ZOmqJ4PDD2zxaePj5ZYK8QeBpJg/6HQvm48bKOc8sndyGHAP8rZ7Zcy4D3ZfH6PF 3ByYSd/v0R1yAoRrdZBm+DXWzXHjqpvrJnp6W64+leqnfvYgm2aI16b7z/mskRQhnW3WtkFQAP7 /5OX427Br+Ox129bLK8p9S0EVosRxf38DJS40NFm+0h/XWVQ0wOp0pLznDz1PKZdzb/SwnA5Z0c lOIk8pNMqxnBFC4U5o3rFgcgP/BCkRlk8GnOfqb8ukDStjj0bi0YYOgidlNDw92Ot+2iMLN3iT1 8v+AOX8Z7LTvV2LPj5QRjFJQbZwSBNVl02UJMnKA1lMLfaD32YZFYcMmSZEbVo0J/7iTMDnXY3t AU52kH3Mq1S7CS1Afo3J1SmFb77/up9NGGCjcZ0UBz4uL+8WsNmDt+hirPvCu8JhcCBcW+Bcib/ Wm8Tzc= X-Received: by 2002:a17:90b:3902:b0:38f:240d:b857 with SMTP id 98e67ed59e1d1-395c3377f59mr36457097a91.2.1787550715686; Sun, 23 Aug 2026 22:51:55 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , qemu-stable@nongnu.org, Alistair Francis Subject: [PULL v2 72/96] disas/riscv: Fix isa decoding of rev8 Date: Mon, 24 Aug 2026 15:47:42 +1000 Message-ID: <20260824054806.2790041-73-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52b; envelope-from=alistair23@gmail.com; helo=mail-pg1-x52b.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550809551158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson The encoding of rev8 is different for rv32 and rv64. Cc: qemu-stable@nongnu.org Fixes: 02c1b569a15 ("disas/riscv: Add Zb[abcs] instructions") Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-40-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index 5624e7f60a..787340e811 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -3292,8 +3292,16 @@ static const rv_opcode_data *decode_inst_opcode(rv_d= ecode *dec, rv_isa isa) case 0b01100: op =3D rv_op_rori; break; case 0b01101: switch ((inst >> 20) & 0b1111111) { - case 0b0011000: op =3D rv_op_rev8; break; - case 0b0111000: op =3D rv_op_rev8; break; + case 0b0011000: + if (isa =3D=3D rv32) { + op =3D rv_op_rev8; + } + break; + case 0b0111000: + if (isa =3D=3D rv64) { + op =3D rv_op_rev8; + } + break; case 0b0000111: op =3D rv_op_brev8; break; } break; --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550752; cv=none; d=zohomail.com; s=zohoarc; b=adW2rQvmhKpTPjs0mWP4qGgy9QszlWxHP8osDYaUSUmkNiaeY3VhPZvfSS2n42M3Ed1a4Mc60JNP3J/+7SpRweE0Vsd59eWMfTFpvsFZo+l2ZQX7wDI4354eI20SBQBxvoQwSFHuM20VmL/gwvc0sjVvPSI7FCU6IDWw9Ies0oE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550752; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=oZV9gDbx+A65MEMcmH9Ce0cuAUaddw6IKp5G5U1reZI=; b=M7HRX5uF0zJvGVys9kpGuzO3RQvcyiBaRIlt0iXB5L2GNYUnaLHv35noYYjyXswC0rAvqZKMcStUqV7rOHjSuFYT2Io0zcQrkROcy23P8uC/EM6de/IuKSJBu0j4/sj/BLcbSoMsyVgV35EDFqlLBHoJAMr57d+HP7Com6PEzck= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178755075250497.65538260240533; Sun, 23 Aug 2026 22:52:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbd-0005mI-Fz; Mon, 24 Aug 2026 01:52:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNbG-00051m-2v for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:02 -0400 Received: from mail-pg1-x52a.google.com ([2607:f8b0:4864:20::52a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNbE-0002zc-9a for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:01 -0400 Received: by mail-pg1-x52a.google.com with SMTP id 41be03b00d2f7-cbee3777e1cso1795273a12.3 for ; Sun, 23 Aug 2026 22:51:59 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:51:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550719; x=1788155519; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=oZV9gDbx+A65MEMcmH9Ce0cuAUaddw6IKp5G5U1reZI=; b=pZsfk7+OxCDmMNwvX/fIrNnx/X9z3HhVATSsDWdB7l/TqIAA0Q4mRk6dUVzgSCrOmR i2wV+cMf6i+jH1v01WDP+pD4vujD+8n59cCUYhW8X6Pr0RDKxDvTlK/fxunxqMlc/h53 vO9dvUUDBHI0XM/CKmnr/pljziu0uVIjKk9sreJJ8jQwaiSx1Jnrx8mzfiy2DPSgWe4G 7JNUWm99JXYe6asS455KIfdLPDqmVwBKYgrQmVLh+v3VxzuZvrCwT7hEWyJq+snch5nm obSpHaAxvUgll5ig7oj5wvowk34AH4VmgHFUB1k+96PbNdz52Rl0eLkw35ggaRpvoGor /8RA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550719; x=1788155519; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=oZV9gDbx+A65MEMcmH9Ce0cuAUaddw6IKp5G5U1reZI=; b=Kka1FW+r1fDL9OvDKjuAyajMK1S9T0QExi2Q+TawynISUtHF87ARBuOFdOg7QaXHFr X2olS3UWQ2XjfY4dX1my0gMLbrQExdZsWhkAnddJ8xJMzJKpGJHksMcLxeDNfkhEet5c ZxtSwA7/u4pFU0sRAhqAMwzuWIBjcP4rPbAdfQjPdVWzNGPqMVeJFn2WcpLKmTq/Vhma m895d+meVxxua1H6PPpjrEBbhPMl3DuPLbRYQNssrCBPhfWspbO8+5Sc7PO0xSchSTks GSlYB6cj81Pz9e0uXfCPBGQPThb2w4favnoBV4Dt6ZFBlIDWwIwWdledX6fBTXcwxjhE 0cBA== X-Gm-Message-State: AFuF++k37vWb6bfW34gtrponTzmKSJ9/TlZFh9uTDQz9IutgHXT7ywdZ UzHnST9IjkS0JIcXhvwx2Oyxm/toPmFGdkdz0JOAPgr+2euYt11EkMtdI1mwwA== X-Gm-Gg: AR+sD12ED7msMxVMlBuZVDULXyuUsLMWwvAueiH0kR2cHuu0e1ey1FwH1VK+gL3otJi G6TdVbvMmOI/T4vSb5uLHYNeX3O3qP8xee5xp/nCElMsfwKI5Y9KEN6tFOdvm2u0GVIkfMawwQW Fi96gtjNXi+Fb3jCmpdk5ixqPujouQNQBt1QPuKkPMp/xGBngxzS/K/AZulUrbblMOUpMkPuDl4 hlB1EfuImwwWBQY/F5msNML7u/YO+8HdvSwoP51Px/a50Jxkjx/3hZeyrfQFbeO82IfNGy6ZvEg bETLsvlT+0qhtXQ6fnlmmrqMTriFGL+mPexM1/TSBgOcLknU9SDb2JYVKcPF0qdFe4GuDasW1EC VXclzix8A3Ew0aUhYUUJfSkDlS7RkuWOPs/s51I4pUFEPjgDNtN77WZgWXtu0jmSJsU+qENcEly A5RSWpwysElP2NmoiUbbtV4c8hQ7Ef2CIb4NG/Ky3jJ0/o75/wvTSwXUGFr4TQ2Dx2hWwaDLKsZ QrSMA== X-Received: by 2002:a17:90a:749:b0:395:f0e8:9e13 with SMTP id 98e67ed59e1d1-395f0e8a0c0mr16553476a91.7.1787550718777; Sun, 23 Aug 2026 22:51:58 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , qemu-stable@nongnu.org, Alistair Francis Subject: [PULL v2 73/96] disas/riscv: Fix typo in th.lbib format Date: Mon, 24 Aug 2026 15:47:43 +1000 Message-ID: <20260824054806.2790041-74-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52a; envelope-from=alistair23@gmail.com; helo=mail-pg1-x52a.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550753190158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson th.lbib should format the same as th.lbia, and the other increment insns, with the address register in parenthesis. Cc: qemu-stable@nongnu.org Fixes: 318df7238b9 ("disas/riscv: Add support for XThead* instructions") Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-41-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv-xthead.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/disas/riscv-xthead.c b/disas/riscv-xthead.c index 428a6380e9..fbc96631fd 100644 --- a/disas/riscv-xthead.c +++ b/disas/riscv-xthead.c @@ -189,7 +189,7 @@ static const rv_opcode_data xthead_opcode_data[] =3D { { "th.mulsh", rv_codec_r, rv_fmt_rd_rs1_rs2 }, /* XTheadMemIdx */ { "th.lbia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.lbib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml }, + { "th.lbib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, { "th.lbuia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, { "th.lbuib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, { "th.lhia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551194; cv=none; d=zohomail.com; s=zohoarc; b=SArBsiDGIGPzPJV6fU3H+IOH6xdpJ77zCh8FvaIgmavvo1t1NTMEZPae5KUPmKKOtqWpND0JFoVP5ExgUnM1/ZwOfFMCE3yy7ekyBkMfBI3ekisE1pY6HAP09qacxB6Pdr6sJyGxGK05np1gfHI5wjBnacy0p6AiFMVDjxOe6z4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551194; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=6cxpb598ZC5YQS9pQsz8M+jshSqMrf/FVzGuyNPyanY=; b=RCF3cJEs7c1AqqhLgABelw1Jz/6LphGsp1LS2I2GLFOjVndJXn6eJffQEnFG2BImbXnF0KvWf2/6Vz6lrfSWUCNtYzlrIR79kNvMLGg2/tTAzFq0ys7Al3Z8TtUR/886eefjoU8S7+zp9SltLoSyFZTFqji139EsDOMPreGyZ70= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551194576186.71283588821188; Sun, 23 Aug 2026 22:59:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbg-0005zf-Jy; Mon, 24 Aug 2026 01:52:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNbI-00054M-Fv for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:04 -0400 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNbG-00031f-SN for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:04 -0400 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-2cf452def93so28800495ad.1 for ; Sun, 23 Aug 2026 22:52:02 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.51.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:52:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550721; x=1788155521; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=6cxpb598ZC5YQS9pQsz8M+jshSqMrf/FVzGuyNPyanY=; b=JJI/0GdX0e4+Z3dLyq/3TwfGUJL69jO9V4FhcrE18dS6oCBPdOZ5nm7KkRTf+RQ+pC RZRBN/OwVr7ufEjw3Y0JKWV3clSMqUed2JHscZ2VpH0lZpNypNyRxB8LKBTLiggZXy/h ljMSFiAuaJLqQ14ZGEX/+tCOvtJN4I8/utbVCAghQCl8RIgAxHT2bnDQ0P1GmUPRobVw 9OhtF0C0eS8MAGzVztWLFLbUWcilAv91iRzZFIQGTd+EiW5Ffnj2xGBkctFWBm/dNz4g pwHXfL34MeB+XY8d9wyTsFDYQI4kEX3QFoIfXkUkmCVet/AjSfaxURu9ymzPbEN5SYlX 5aNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550721; x=1788155521; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=6cxpb598ZC5YQS9pQsz8M+jshSqMrf/FVzGuyNPyanY=; b=QeITLPJfhcyivD4ZnnChr+NQ71xC6KRDUwIry32zl+0aHOjVLcwJjOfbsPcDOG+h2V W95Uny0BEv5AiOpkvSo0ebXJxXn6efRP/xUyxYHXUfkTU8+g1duFiQADLol/OLHwdWGN 4dmhSi588dT2XYpQ4+QCRkGcvakacTBKgemghIqBfK/C0bH0LPw4Etpm7waSo9dSwd3u lJdscHIUwF5PS57m4GA+Oj8UOdZqUsJttMgLaykSjyGijZgFsS1+gxEmJs3KhHc5LvFj YWcfOJIofmqiGibDimui3JgEfQw0O1rIj2oTbFnA6McSq90CIBYu9wqh2fpFk0VHscTI I/pg== X-Gm-Message-State: AFuF++m19+aItW+OO51mm2rYjAXnRjG2qnvp0trFiDzJwS0pa20gdE9H 5/rzRaMDvxn/TAcBTVWS5tD5JMk8gUlxd83m04fCksdQVPG2RzCOFUZ04UIQ+A== X-Gm-Gg: AR+sD13kUrIIzEYr13Bi6uVKBEAYb+PpUT8q8GJcb7b9Ng6QM5vjSg+pxYmfZWMCrMG L8+vo+j0suZ9zpVB9xa8PJaqeG05d7rCUXq6yiASwXpXq1Zbt/gpb/EUuIgcYxObD/9kg+XLKyb hKZfoEPmpYw5y4eMBs+i5yoJoIJ/3PdJ5XYdGAvMcW0G3XHcPqn9opBZkbwwAkEOaxVIjHc7aXZ 7zrJV5mjuIrNQUSXUTz7M/BO36aqmDjsRzQB7jIefoOIfQdNGqd6GjqpwWQFLbHkHVTIqPD1ZEy ASn2nHwjidIfu0fDiAsBmEJ11zCTD+xvgSc7S+ZeM0QJr30Ow7PqC3e+G6Zj4zmJ75a1/pB/3hd uKPg6UCAq9Mv3Tf0SIgqucUV6sCslvmA2Akb+WvNCLuyEmjS2B1KfrEavkPvoObmd8ROl1YLYoZ uonJL9pLuYMGEAb7n8i/lQZwIOEjP2qTR6Gpi4liQ8pKH6rYjkABSveBpdN7+HhqGoAYmCImwT6 4bzQg== X-Received: by 2002:a17:90b:5823:b0:38e:c232:9d2c with SMTP id 98e67ed59e1d1-395c4bde19amr22159625a91.2.1787550721491; Sun, 23 Aug 2026 22:52:01 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 74/96] disas/riscv: Split ventana_opcode_data Date: Mon, 24 Aug 2026 15:47:44 +1000 Message-ID: <20260824054806.2790041-75-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::636; envelope-from=alistair23@gmail.com; helo=mail-pl1-x636.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551195038158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Move the table to riscv-xventana-op.c.inc and massage the lines into OP() form. Drop vt.illegal as unused. Return pointers to objects directly. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-42-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv-xventana.c | 21 ++++++--------------- disas/riscv-xventana-op.c.inc | 2 ++ 2 files changed, 8 insertions(+), 15 deletions(-) create mode 100644 disas/riscv-xventana-op.c.inc diff --git a/disas/riscv-xventana.c b/disas/riscv-xventana.c index a4e59312d0..5d2e07865f 100644 --- a/disas/riscv-xventana.c +++ b/disas/riscv-xventana.c @@ -8,35 +8,26 @@ #include "disas/riscv.h" #include "disas/riscv-xventana.h" =20 -typedef enum { - /* 0 is reserved for rv_op_illegal. */ - ventana_op_vt_maskc =3D 1, - ventana_op_vt_maskcn =3D 2, -} rv_ventana_op; - -static const rv_opcode_data ventana_opcode_data[] =3D { - { "vt.illegal", rv_codec_illegal, rv_fmt_none }, - { "vt.maskc", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "vt.maskcn", rv_codec_r, rv_fmt_rd_rs1_rs2 }, -}; +#define OP(N, ...) static const rv_opcode_data op_##N =3D { __VA_ARGS__ }; +#include "riscv-xventana-op.c.inc" +#undef OP =20 const rv_opcode_data *decode_xventanacondops(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; - rv_opcode op =3D rv_op_illegal; =20 switch (((inst >> 0) & 0b11)) { case 3: switch (((inst >> 2) & 0b11111)) { case 30: switch (((inst >> 22) & 0b1111111000) | ((inst >> 12) & 0b0000= 000111)) { - case 6: op =3D ventana_op_vt_maskc; break; - case 7: op =3D ventana_op_vt_maskcn; break; + case 6: return &op_vt_maskc; + case 7: return &op_vt_maskcn; } break; } break; } =20 - return op =3D=3D rv_op_illegal ? NULL : &ventana_opcode_data[op]; + return NULL; } diff --git a/disas/riscv-xventana-op.c.inc b/disas/riscv-xventana-op.c.inc new file mode 100644 index 0000000000..0fe4666aee --- /dev/null +++ b/disas/riscv-xventana-op.c.inc @@ -0,0 +1,2 @@ +OP(vt_maskc, "vt.maskc", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(vt_maskcn, "vt.maskcn", rv_codec_r, rv_fmt_rd_rs1_rs2) --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550777; cv=none; d=zohomail.com; s=zohoarc; b=hQrwWDDq+qz/hh3qLcIgI9XV6P6oQSDO8FNWri57FE0jYmi6qly9fsobKg0fn5gPUS8RFSdFXA53ClSnR3QbmgM2s0+LDHNUGx5LYk8ATXMIR68Qa+fMbA/asbNtDuZeQBQ11R3V2v6elIe+0gva3e0cSOW2GbsN/+OKlcREKw0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550777; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=h2oaOCJCF/+kDDtd38kYag9b0rC6YDKI4au6Nbv4V2A=; b=VMq8p0f0CfbVTxbK0XPeEHR73W4gS8pPA3YmKimuLFiPxnJpkXx0NJ7Jdw5ZRpTuAzU+0OnIBeYkhUy2r1ECPy0It7aFBY0bcdMV7uoGBK/mmrXbfaPjjPbHU2GB9ajagYVN/pP7/jXYVbIHhShSMT6KkN9GgsQ7ALHl3jHjJP8= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550777467455.96417854155345; Sun, 23 Aug 2026 22:52:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbq-0006m5-3W; Mon, 24 Aug 2026 01:52:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNbL-00057t-HS for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:07 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNbJ-000337-Ng for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:07 -0400 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-38dc4553f62so4141597a91.0 for ; Sun, 23 Aug 2026 22:52:05 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.52.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:52:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550724; x=1788155524; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=h2oaOCJCF/+kDDtd38kYag9b0rC6YDKI4au6Nbv4V2A=; b=Z7lELOj2cABIvUMO3pV7Mba66f213Mqw4dza7BQ0Ji/CuhkMBv87hhxV/wR0MFfbKM YCHqzy5iPGpnLMDQEpbsinGKdkG0srF5oFdRx48TxtnA86Aj09b0aL5so9z8ubkt/x7j W2DMbFhTUL2q2ilMzwejPVHSa0H2Y6l9SZEjGlmTxIHjmg4/jRCFXOEctSB4vGM6enIQ Qza59z/AcI6VA6lS6N0ohJzjQg3I37fLbPKMAktuMULoc/15NfDSU5N0uj/scy5ZkFhi oyQFdD2+sqPf7Z6ehCcxyPKxo23VfoZvOc9zgDJjNxMx9M1wS6Q6doACK9Y9larvxaqG /66w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550724; x=1788155524; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=h2oaOCJCF/+kDDtd38kYag9b0rC6YDKI4au6Nbv4V2A=; b=a5oxMdOChzyua9iMRfTzMvyi5iWU2jKaX7aJF79IC5KcJeSRcbQSGYrqh27dDUcxKe 9AzG2h58frm4m9TyF3JXzfWuCOkV6i2k53AztNw+OyqhObeRNM8RHUzruFtJ3dYhZ81r mj5yWwyj2D1JH5RFhx/k5rFi7mKlLB8kLaBZfM8MjxPmfIX32f0R8uD6nHcpkBEv27Wc +euDpxBbzjkeyr7Jp5Eu4cdAJv4xXpmzHyOeXGsIVAjfhQtzqzeK4G/jQxW+ZIMswj3+ HH2IOavuB1EELN84GYtou6ysSeD9fyFWpBfYUpiF19FJX5X9Nk9xM6IweZi8AFsa2ZZd HU3A== X-Gm-Message-State: AFuF++mYrCSHw/EXG6pUEpI63OlJtwDnnG60LBrGryIE9dP7LeBE8qoF /yi6RGzv7c0LyX+gKtdFb1V7zK0N+EzS0klmek2NP0WBMCXFiG3OSlRc7UsVDw== X-Gm-Gg: AR+sD13izwA+4buVBfhtOhaXu66Zqy+bLdhdYfR7vgqWHrDcUHk+oEG5f5dWgQZUKLC 7bSoDPHQJyZcC0v9Ad+O6MCANXIKGorb07/JC5eDqCQKyDPE8P85QLEgdlaTQp1DDP/1prtP88J vKmBiLyDIjdQ8YnGgqbDHQpBWTQYhMq4ldSrRW3XWSj3HJU38qiOvoQ7qwt2cWyFNsfjjwR2Acv lI3t+N4tqXyRcZ/JtE2a+k91zMngCeLrRLhg0Aiz92F09u1zm2i0rf59AF1olc/IR5hEvJtETvk GrIb3faCUHoQ4ZkHpovsNHvZkWTXzIPzgZ3YtwmHrIP5WuCXeO+Kt9+FYl50Ugoh24tIyQEfxYp aYQQnEZNDn7z3EgaPUtpcLyvnUpH7So65P2rEUa5Q1CvTThCIJ3AAIURz6CQDszOkic4NprfaKU TQk7/6+LeA4MZqwr8sg2BdtrW7IGFUmFgWLFmTFIkYfYACvnkM1COR67mZ6j8r20qw2DdUhmpQv Q4ohegy2Fl5JRwL X-Received: by 2002:a17:90b:5844:b0:393:1d92:db5 with SMTP id 98e67ed59e1d1-395c35e1199mr48956259a91.10.1787550724304; Sun, 23 Aug 2026 22:52:04 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 75/96] disas/riscv: Split xlrbr_opcode_data Date: Mon, 24 Aug 2026 15:47:45 +1000 Message-ID: <20260824054806.2790041-76-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1031; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1031.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550779281158501 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Move the table to riscv-xlrbr-op.c.inc and massage the lines into OP() form. Drop illegal as unused. Return pointers to objects directly. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-43-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv-xlrbr.c | 54 +++++++++----------------------------- disas/riscv-xlrbr-op.c.inc | 8 ++++++ 2 files changed, 20 insertions(+), 42 deletions(-) create mode 100644 disas/riscv-xlrbr-op.c.inc diff --git a/disas/riscv-xlrbr.c b/disas/riscv-xlrbr.c index b12916c9da..b4229e5c83 100644 --- a/disas/riscv-xlrbr.c +++ b/disas/riscv-xlrbr.c @@ -8,38 +8,16 @@ */ =20 #include "qemu/osdep.h" - #include "disas/riscv.h" #include "disas/riscv-xlrbr.h" =20 -typedef enum { - /* 0 is reserved for rv_op_illegal. */ - rv_op_crc32_b =3D 1, - rv_op_crc32_h =3D 2, - rv_op_crc32_w =3D 3, - rv_op_crc32_d =3D 4, - rv_op_crc32c_b =3D 5, - rv_op_crc32c_h =3D 6, - rv_op_crc32c_w =3D 7, - rv_op_crc32c_d =3D 8, -} rv_xlrbr_op; - -static const rv_opcode_data xlrbr_opcode_data[] =3D { - { "illegal", rv_codec_illegal, rv_fmt_none }, - { "crc32.b", rv_codec_r, rv_fmt_rd_rs1 }, - { "crc32.h", rv_codec_r, rv_fmt_rd_rs1 }, - { "crc32.w", rv_codec_r, rv_fmt_rd_rs1 }, - { "crc32.d", rv_codec_r, rv_fmt_rd_rs1 }, - { "crc32c.b", rv_codec_r, rv_fmt_rd_rs1 }, - { "crc32c.h", rv_codec_r, rv_fmt_rd_rs1 }, - { "crc32c.w", rv_codec_r, rv_fmt_rd_rs1 }, - { "crc32c.d", rv_codec_r, rv_fmt_rd_rs1 }, -}; +#define OP(N, ...) static const rv_opcode_data op_##N =3D { __VA_ARGS__ }; +#include "riscv-xlrbr-op.c.inc" +#undef OP =20 const rv_opcode_data *decode_xlrbr(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; - rv_opcode op =3D rv_op_illegal; =20 switch ((inst >> 0) & 0b1111111) { case 0b0010011: @@ -47,34 +25,26 @@ const rv_opcode_data *decode_xlrbr(rv_decode *dec, rv_i= sa isa) case 0b001: switch ((inst >> 20 & 0b111111111111)) { case 0b011000010000: - op =3D rv_op_crc32_b; - break; + return &op_crc32_b; case 0b011000010001: - op =3D rv_op_crc32_h; - break; + return &op_crc32_h; case 0b011000010010: - op =3D rv_op_crc32_w; - break; + return &op_crc32_w; case 0b011000010011: - op =3D rv_op_crc32_d; - break; + return &op_crc32_d; case 0b011000011000: - op =3D rv_op_crc32c_b; - break; + return &op_crc32c_b; case 0b011000011001: - op =3D rv_op_crc32c_h; - break; + return &op_crc32c_h; case 0b011000011010: - op =3D rv_op_crc32c_w; - break; + return &op_crc32c_w; case 0b011000011011: - op =3D rv_op_crc32c_d; - break; + return &op_crc32c_d; } break; } break; } =20 - return op =3D=3D rv_op_illegal ? NULL : &xlrbr_opcode_data[op]; + return NULL; } diff --git a/disas/riscv-xlrbr-op.c.inc b/disas/riscv-xlrbr-op.c.inc new file mode 100644 index 0000000000..57add37c24 --- /dev/null +++ b/disas/riscv-xlrbr-op.c.inc @@ -0,0 +1,8 @@ +OP(crc32_b, "crc32.b", rv_codec_r, rv_fmt_rd_rs1) +OP(crc32_h, "crc32.h", rv_codec_r, rv_fmt_rd_rs1) +OP(crc32_w, "crc32.w", rv_codec_r, rv_fmt_rd_rs1) +OP(crc32_d, "crc32.d", rv_codec_r, rv_fmt_rd_rs1) +OP(crc32c_b, "crc32c.b", rv_codec_r, rv_fmt_rd_rs1) +OP(crc32c_h, "crc32c.h", rv_codec_r, rv_fmt_rd_rs1) +OP(crc32c_w, "crc32c.w", rv_codec_r, rv_fmt_rd_rs1) +OP(crc32c_d, "crc32c.d", rv_codec_r, rv_fmt_rd_rs1) --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550805; cv=none; d=zohomail.com; s=zohoarc; b=eWBwu+3YNzlstkBwRnp3SReuLKV3GG7triB60R3G6tgXQJN/yrn2WK+rWazgMjpfTjOY4R7BksvrMcS8YfdhI0ZH3u0BZDUXYSl6DWhC6n11UXnYBV3OluEADYjtMLEFEQMaS3AWj9aK26LHJflp17ud59fC7POrGqXdxiNXCNo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550805; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=hFTZ3kapZ8QJtr1bUBz2auegSsuYlFS9xaT6qtKR8oI=; b=FFHXjUnDRdOKL2sqFI68aDg1UrJODnDwBL2KfptHGBI81pawpVR89R+B/wENYFT0XA+VYE5YsiFypxE1e46bq1qapskLge0uoesV61BOHH6bkAPGJdOaM67FFbzgqglJk/z9AI0ixWkcQKN+Hg29NA2XKv/PFzNFLiqxjruoHbA= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550805445352.65662650211664; Sun, 23 Aug 2026 22:53:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbk-0006NR-Fq; Mon, 24 Aug 2026 01:52:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNbR-0005LB-SZ for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:13 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNbN-00033y-04 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:13 -0400 Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-38a0c7e841fso4262908a91.2 for ; Sun, 23 Aug 2026 22:52:08 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.52.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:52:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550728; x=1788155528; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=hFTZ3kapZ8QJtr1bUBz2auegSsuYlFS9xaT6qtKR8oI=; b=pfuP7JUzJYdBJ7zurOeRurt5EJf5N4BFPscVIXT4Kn9MsQtcDYxtMnpgT+qWg7tx6E mzCYAqYgILkXbLCcO1sxQJ3dDhCT3ZWKeNhGK2i9AEgtMqyxDMWK4KO9nhuWU/YvUibp zWVistPrHGd5uVribDdh8ZDQgeqp4586E/38zf8+KdbWs2X3WsTJFF5xS+ljHZ7Og4Jx Y+KB9ufAziPv8TWyTPs0ZWvxeUz9JiaRESr3fMRH+hS8wR54s2LkILwhc4dpqJHOVftf IqUVbwvmiS2+z9AbfvqyeiXyCf8O0sAq5oPtvf7OE9aVQ6ZENHAZyZ16qnbYq4VHxMmB ESnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550728; x=1788155528; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=hFTZ3kapZ8QJtr1bUBz2auegSsuYlFS9xaT6qtKR8oI=; b=E297pOXDcSbTRMLLeXMPmKPn57JVdqqN+kLafw9KDoorLCuHsVh6DycXS6DsIVbEe/ 6Tb2NHbb3XFUiuPqOuinpn5zvN7/7Q+X3z27k6iEL8gOO401X4a6OcayTAD9DfwfzZne Vh45Nzsarm29r7Xarp+BV5KuBfvN3u9Ri/5+rGC1I4jYCQfOoUBaXsxJbZMqHEWev++J 7tXBRf6KdO3q0x4+mG8/8u9kcN0pN63SNxGRuRSauvIZJbEhgwuT3lKlumIJ6+Uh6iC6 6JINUpgopiAkLUjNVN27jG1sbgQogs8fuuPjWXidiiFS8QaQ/a6xY3rgbHDTXflTk4Ly knTw== X-Gm-Message-State: AFuF++nLFjghrt5HMyanE5fl2HacOPgStyNm344dUU23ymyekCfjABqL 57ji694Ha3tM0a1riC16/KL8ljL4E8C/tglXxEDFbzVAfqN1Wo2NYmemANLmgQ== X-Gm-Gg: AR+sD10QvA2OvKEH4iza3+OZ1mKPi+jxL9EfbdB8tucUq+SHpuUMj4rqWOtsGmj+PZK XFl42X3hTaIePxScXv1x9rJWUveK4pdCIufECy8jHON9+uIzS+O8WyHesoPkvKLnjBkauW9QEeD JYgQSiSZSBleN5GuNXnnTATDrR6CwP2jfPuKsN72+7kW6tjjY52FRSw9uPj0s2d4wRkXyfBXq2X PRLrxgQk1HL2yAfh1eiIkggoR/NuSzxPGQ/negiQ+DxpUzpHUKFHt3DEUR0WaUJROTbWVt99ocf 0tkix1IOrkasFcObt9Gl8M9VeaWBP591FDgllfLTAnmC2DNEpJP0rxXzx4b5THI0qfvO+EpR580 PX7Yrzy1VVwCshHNh/Oq9wT3YOHEsS0tiPHnXrhvidAXR1GNitZPUXqF7vN9oQMGD0GVG6oZjTV 1UHvfVgemiWNE1iqrD+bJCda+GvmvJTpRFzcPjV7ScTt6FQB6brqAoaa18s7U6pKtfGJui0LMbY fQr9A== X-Received: by 2002:a17:90b:1d49:b0:38e:70d5:b12d with SMTP id 98e67ed59e1d1-395c3566ba6mr48552876a91.6.1787550727532; Sun, 23 Aug 2026 22:52:07 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 76/96] disas/riscv: Split xthead_opcode_data Date: Mon, 24 Aug 2026 15:47:46 +1000 Message-ID: <20260824054806.2790041-77-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102e; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102e.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550807564158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Move the table to riscv-xthead-op.c.inc and massage the lines into OP() form. Drop th.illegal as unused. Return pointers to objects directly. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-44-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv-xthead.c | 481 +++++++++--------------------------- disas/riscv-xthead-op.c.inc | 125 ++++++++++ 2 files changed, 243 insertions(+), 363 deletions(-) create mode 100644 disas/riscv-xthead-op.c.inc diff --git a/disas/riscv-xthead.c b/disas/riscv-xthead.c index fbc96631fd..387c22c869 100644 --- a/disas/riscv-xthead.c +++ b/disas/riscv-xthead.c @@ -8,248 +8,13 @@ #include "disas/riscv.h" #include "disas/riscv-xthead.h" =20 -typedef enum { - /* 0 is reserved for rv_op_illegal. */ - /* XTheadBa */ - rv_op_th_addsl =3D 1, - /* XTheadBb */ - rv_op_th_srri, - rv_op_th_srriw, - rv_op_th_ext, - rv_op_th_extu, - rv_op_th_ff0, - rv_op_th_ff1, - rv_op_th_rev, - rv_op_th_revw, - rv_op_th_tstnbz, - /* XTheadBs */ - rv_op_th_tst, - /* XTheadCmo */ - rv_op_th_dcache_call, - rv_op_th_dcache_ciall, - rv_op_th_dcache_iall, - rv_op_th_dcache_cpa, - rv_op_th_dcache_cipa, - rv_op_th_dcache_ipa, - rv_op_th_dcache_cva, - rv_op_th_dcache_civa, - rv_op_th_dcache_iva, - rv_op_th_dcache_csw, - rv_op_th_dcache_cisw, - rv_op_th_dcache_isw, - rv_op_th_dcache_cpal1, - rv_op_th_dcache_cval1, - rv_op_th_icache_iall, - rv_op_th_icache_ialls, - rv_op_th_icache_ipa, - rv_op_th_icache_iva, - rv_op_th_l2cache_call, - rv_op_th_l2cache_ciall, - rv_op_th_l2cache_iall, - /* XTheadCondMov */ - rv_op_th_mveqz, - rv_op_th_mvnez, - /* XTheadFMemIdx */ - rv_op_th_flrd, - rv_op_th_flrw, - rv_op_th_flurd, - rv_op_th_flurw, - rv_op_th_fsrd, - rv_op_th_fsrw, - rv_op_th_fsurd, - rv_op_th_fsurw, - /* XTheadFmv */ - rv_op_th_fmv_hw_x, - rv_op_th_fmv_x_hw, - /* XTheadMac */ - rv_op_th_mula, - rv_op_th_mulah, - rv_op_th_mulaw, - rv_op_th_muls, - rv_op_th_mulsw, - rv_op_th_mulsh, - /* XTheadMemIdx */ - rv_op_th_lbia, - rv_op_th_lbib, - rv_op_th_lbuia, - rv_op_th_lbuib, - rv_op_th_lhia, - rv_op_th_lhib, - rv_op_th_lhuia, - rv_op_th_lhuib, - rv_op_th_lwia, - rv_op_th_lwib, - rv_op_th_lwuia, - rv_op_th_lwuib, - rv_op_th_ldia, - rv_op_th_ldib, - rv_op_th_sbia, - rv_op_th_sbib, - rv_op_th_shia, - rv_op_th_shib, - rv_op_th_swia, - rv_op_th_swib, - rv_op_th_sdia, - rv_op_th_sdib, - rv_op_th_lrb, - rv_op_th_lrbu, - rv_op_th_lrh, - rv_op_th_lrhu, - rv_op_th_lrw, - rv_op_th_lrwu, - rv_op_th_lrd, - rv_op_th_srb, - rv_op_th_srh, - rv_op_th_srw, - rv_op_th_srd, - rv_op_th_lurb, - rv_op_th_lurbu, - rv_op_th_lurh, - rv_op_th_lurhu, - rv_op_th_lurw, - rv_op_th_lurwu, - rv_op_th_lurd, - rv_op_th_surb, - rv_op_th_surh, - rv_op_th_surw, - rv_op_th_surd, - /* XTheadMemPair */ - rv_op_th_ldd, - rv_op_th_lwd, - rv_op_th_lwud, - rv_op_th_sdd, - rv_op_th_swd, - /* XTheadSync */ - rv_op_th_sfence_vmas, - rv_op_th_sync, - rv_op_th_sync_i, - rv_op_th_sync_is, - rv_op_th_sync_s, -} rv_xthead_op; - -static const rv_opcode_data xthead_opcode_data[] =3D { - { "th.illegal", rv_codec_illegal, rv_fmt_none }, - /* XTheadBa */ - { "th.addsl", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - /* XTheadBb */ - { "th.srri", rv_codec_r2_imm6, rv_fmt_rd_rs1_imm }, - { "th.srriw", rv_codec_r2_imm5, rv_fmt_rd_rs1_imm }, - { "th.ext", rv_codec_r2_immhl, rv_fmt_rd_rs1_immh_imml }, - { "th.extu", rv_codec_r2_immhl, rv_fmt_rd_rs1_immh_imml }, - { "th.ff0", rv_codec_r2, rv_fmt_rd_rs1 }, - { "th.ff1", rv_codec_r2, rv_fmt_rd_rs1 }, - { "th.rev", rv_codec_r2, rv_fmt_rd_rs1 }, - { "th.revw", rv_codec_r2, rv_fmt_rd_rs1 }, - { "th.tstnbz", rv_codec_r2, rv_fmt_rd_rs1 }, - /* XTheadBs */ - { "th.tst", rv_codec_r2_imm6, rv_fmt_rd_rs1_imm }, - /* XTheadCmo */ - { "th.dcache.call", rv_codec_none, rv_fmt_none }, - { "th.dcache.ciall", rv_codec_none, rv_fmt_none }, - { "th.dcache.iall", rv_codec_none, rv_fmt_none }, - { "th.dcache.cpa", rv_codec_r, rv_fmt_rs1 }, - { "th.dcache.cipa", rv_codec_r, rv_fmt_rs1 }, - { "th.dcache.ipa", rv_codec_r, rv_fmt_rs1 }, - { "th.dcache.cva", rv_codec_r, rv_fmt_rs1 }, - { "th.dcache.civa", rv_codec_r, rv_fmt_rs1 }, - { "th.dcache.iva", rv_codec_r, rv_fmt_rs1 }, - { "th.dcache.csw", rv_codec_r, rv_fmt_rs1 }, - { "th.dcache.cisw", rv_codec_r, rv_fmt_rs1 }, - { "th.dcache.isw", rv_codec_r, rv_fmt_rs1 }, - { "th.dcache.cpal1", rv_codec_r, rv_fmt_rs1 }, - { "th.dcache.cval1", rv_codec_r, rv_fmt_rs1 }, - { "th.icache.iall", rv_codec_none, rv_fmt_none }, - { "th.icache.ialls", rv_codec_none, rv_fmt_none }, - { "th.icache.ipa", rv_codec_r, rv_fmt_rs1 }, - { "th.icache.iva", rv_codec_r, rv_fmt_rs1 }, - { "th.l2cache.call", rv_codec_none, rv_fmt_none }, - { "th.l2cache.ciall", rv_codec_none, rv_fmt_none }, - { "th.l2cache.iall", rv_codec_none, rv_fmt_none }, - /* XTheadCondMov */ - { "th.mveqz", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "th.mvnez", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - /* XTheadFMemIdx */ - { "th.flrd", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm }, - { "th.flrw", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm }, - { "th.flurd", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm }, - { "th.flurw", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm }, - { "th.fsrd", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm }, - { "th.fsrw", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm }, - { "th.fsurd", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm }, - { "th.fsurw", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm }, - /* XTheadFmv */ - { "th.fmv.hw.x", rv_codec_r, rv_fmt_rd_frs1 }, - { "th.fmv.x.hw", rv_codec_r, rv_fmt_rd_frs1 }, - /* XTheadMac */ - { "th.mula", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "th.mulaw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "th.mulah", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "th.muls", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "th.mulsw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "th.mulsh", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - /* XTheadMemIdx */ - { "th.lbia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.lbib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.lbuia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.lbuib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.lhia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.lhib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.lhuia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.lhuib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.lwia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.lwib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.lwuia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.lwuib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.ldia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.ldib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.sbia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.sbib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.shia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.shib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.swia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.swib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.sdia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.sdib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr }, - { "th.lrb", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.lrbu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.lrh", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.lrhu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.lrw", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.lrwu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.lrd", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.srb", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.srh", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.srw", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.srd", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.lurb", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.lurbu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.lurh", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.lurhu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.lurw", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.lurwu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.lurd", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.surb", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.surh", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.surw", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - { "th.surd", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm }, - /* XTheadMemPair */ - { "th.ldd", rv_codec_r_imm2, rv_fmt_rd2_imm }, - { "th.lwd", rv_codec_r_imm2, rv_fmt_rd2_imm }, - { "th.lwud", rv_codec_r_imm2, rv_fmt_rd2_imm }, - { "th.sdd", rv_codec_r_imm2, rv_fmt_rd2_imm }, - { "th.swd", rv_codec_r_imm2, rv_fmt_rd2_imm }, - /* XTheadSync */ - { "th.sfence.vmas", rv_codec_r, rv_fmt_rs1_rs2 }, - { "th.sync", rv_codec_none, rv_fmt_none }, - { "th.sync.i", rv_codec_none, rv_fmt_none }, - { "th.sync.is", rv_codec_none, rv_fmt_none }, - { "th.sync.s", rv_codec_none, rv_fmt_none }, -}; +#define OP(N, ...) static const rv_opcode_data op_##N =3D { __VA_ARGS__ }; +#include "riscv-xthead-op.c.inc" +#undef OP =20 const rv_opcode_data *decode_xtheadba(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; - rv_opcode op =3D rv_op_illegal; =20 switch (((inst >> 0) & 0b11)) { case 3: @@ -262,7 +27,7 @@ const rv_opcode_data *decode_xtheadba(rv_decode *dec, rv= _isa isa) case 0b0000000: case 0b0000001: case 0b0000010: - case 0b0000011: op =3D rv_op_th_addsl; break; + case 0b0000011: return &op_th_addsl; } break; } @@ -272,13 +37,12 @@ const rv_opcode_data *decode_xtheadba(rv_decode *dec, = rv_isa isa) break; } =20 - return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; + return NULL; } =20 const rv_opcode_data *decode_xtheadbb(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; - rv_opcode op =3D rv_op_illegal; =20 switch (((inst >> 0) & 0b11)) { case 3: @@ -288,41 +52,41 @@ const rv_opcode_data *decode_xtheadbb(rv_decode *dec, = rv_isa isa) switch ((inst >> 12) & 0b111) { case 1: switch ((inst >> 25) & 0b1111111) { - case 0b0001010: op =3D rv_op_th_srriw; break; + case 0b0001010: return &op_th_srriw; case 0b1000000: if (((inst >> 20) & 0b11111) =3D=3D 0) { - op =3D rv_op_th_tstnbz; + return &op_th_tstnbz; } break; case 0b1000001: if (((inst >> 20) & 0b11111) =3D=3D 0) { - op =3D rv_op_th_rev; + return &op_th_rev; } break; case 0b1000010: if (((inst >> 20) & 0b11111) =3D=3D 0) { - op =3D rv_op_th_ff0; + return &op_th_ff0; } break; case 0b1000011: if (((inst >> 20) & 0b11111) =3D=3D 0) { - op =3D rv_op_th_ff1; + return &op_th_ff1; } break; case 0b1000100: case 0b1001000: if (((inst >> 20) & 0b11111) =3D=3D 0) { - op =3D rv_op_th_revw; + return &op_th_revw; } break; case 0b0001000: case 0b0001001: - op =3D rv_op_th_srri; + return &op_th_srri; break; } break; - case 2: op =3D rv_op_th_ext; break; - case 3: op =3D rv_op_th_extu; break; + case 2: return &op_th_ext; + case 3: return &op_th_extu; } break; /* custom-0 */ @@ -330,13 +94,12 @@ const rv_opcode_data *decode_xtheadbb(rv_decode *dec, = rv_isa isa) break; } =20 - return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; + return NULL; } =20 const rv_opcode_data *decode_xtheadbs(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; - rv_opcode op =3D rv_op_illegal; =20 switch (((inst >> 0) & 0b11)) { case 3: @@ -346,7 +109,7 @@ const rv_opcode_data *decode_xtheadbs(rv_decode *dec, r= v_isa isa) switch ((inst >> 12) & 0b111) { case 1: switch ((inst >> 26) & 0b111111) { - case 0b100010: op =3D rv_op_th_tst; break; + case 0b100010: return &op_th_tst; } break; } @@ -356,13 +119,12 @@ const rv_opcode_data *decode_xtheadbs(rv_decode *dec,= rv_isa isa) break; } =20 - return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; + return NULL; } =20 const rv_opcode_data *decode_xtheadcmo(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; - rv_opcode op =3D rv_op_illegal; =20 switch (((inst >> 0) & 0b11)) { case 3: @@ -374,55 +136,55 @@ const rv_opcode_data *decode_xtheadcmo(rv_decode *dec= , rv_isa isa) switch ((inst >> 20 & 0b111111111111)) { case 0b000000000001: if (((inst >> 20) & 0b11111) =3D=3D 0) { - op =3D rv_op_th_dcache_call; + return &op_th_dcache_call; } break; case 0b000000000011: if (((inst >> 20) & 0b11111) =3D=3D 0) { - op =3D rv_op_th_dcache_ciall; + return &op_th_dcache_ciall; } break; case 0b000000000010: if (((inst >> 20) & 0b11111) =3D=3D 0) { - op =3D rv_op_th_dcache_iall; + return &op_th_dcache_iall; } break; - case 0b000000101001: op =3D rv_op_th_dcache_cpa; break; - case 0b000000101011: op =3D rv_op_th_dcache_cipa; break; - case 0b000000101010: op =3D rv_op_th_dcache_ipa; break; - case 0b000000100101: op =3D rv_op_th_dcache_cva; break; - case 0b000000100111: op =3D rv_op_th_dcache_civa; break; - case 0b000000100110: op =3D rv_op_th_dcache_iva; break; - case 0b000000100001: op =3D rv_op_th_dcache_csw; break; - case 0b000000100011: op =3D rv_op_th_dcache_cisw; break; - case 0b000000100010: op =3D rv_op_th_dcache_isw; break; - case 0b000000101000: op =3D rv_op_th_dcache_cpal1; break; - case 0b000000100100: op =3D rv_op_th_dcache_cval1; break; + case 0b000000101001: return &op_th_dcache_cpa; + case 0b000000101011: return &op_th_dcache_cipa; + case 0b000000101010: return &op_th_dcache_ipa; + case 0b000000100101: return &op_th_dcache_cva; + case 0b000000100111: return &op_th_dcache_civa; + case 0b000000100110: return &op_th_dcache_iva; + case 0b000000100001: return &op_th_dcache_csw; + case 0b000000100011: return &op_th_dcache_cisw; + case 0b000000100010: return &op_th_dcache_isw; + case 0b000000101000: return &op_th_dcache_cpal1; + case 0b000000100100: return &op_th_dcache_cval1; case 0b000000010000: if (((inst >> 20) & 0b11111) =3D=3D 0) { - op =3D rv_op_th_icache_iall; + return &op_th_icache_iall; } break; case 0b000000010001: if (((inst >> 20) & 0b11111) =3D=3D 0) { - op =3D rv_op_th_icache_ialls; + return &op_th_icache_ialls; } break; - case 0b000000111000: op =3D rv_op_th_icache_ipa; break; - case 0b000000110000: op =3D rv_op_th_icache_iva; break; + case 0b000000111000: return &op_th_icache_ipa; + case 0b000000110000: return &op_th_icache_iva; case 0b000000010101: if (((inst >> 20) & 0b11111) =3D=3D 0) { - op =3D rv_op_th_l2cache_call; + return &op_th_l2cache_call; } break; case 0b000000010111: if (((inst >> 20) & 0b11111) =3D=3D 0) { - op =3D rv_op_th_l2cache_ciall; + return &op_th_l2cache_ciall; } break; case 0b000000010110: if (((inst >> 20) & 0b11111) =3D=3D 0) { - op =3D rv_op_th_l2cache_iall; + return &op_th_l2cache_iall; } break; } @@ -434,13 +196,12 @@ const rv_opcode_data *decode_xtheadcmo(rv_decode *dec= , rv_isa isa) break; } =20 - return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; + return NULL; } =20 const rv_opcode_data *decode_xtheadcondmov(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; - rv_opcode op =3D rv_op_illegal; =20 switch (((inst >> 0) & 0b11)) { case 3: @@ -450,8 +211,8 @@ const rv_opcode_data *decode_xtheadcondmov(rv_decode *d= ec, rv_isa isa) switch ((inst >> 12) & 0b111) { case 1: switch ((inst >> 25) & 0b1111111) { - case 0b0100000: op =3D rv_op_th_mveqz; break; - case 0b0100001: op =3D rv_op_th_mvnez; break; + case 0b0100000: return &op_th_mveqz; + case 0b0100001: return &op_th_mvnez; } break; } @@ -461,13 +222,12 @@ const rv_opcode_data *decode_xtheadcondmov(rv_decode = *dec, rv_isa isa) break; } =20 - return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; + return NULL; } =20 const rv_opcode_data *decode_xtheadfmemidx(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; - rv_opcode op =3D rv_op_illegal; =20 switch (((inst >> 0) & 0b11)) { case 3: @@ -477,18 +237,18 @@ const rv_opcode_data *decode_xtheadfmemidx(rv_decode = *dec, rv_isa isa) switch ((inst >> 12) & 0b111) { case 6: switch ((inst >> 27) & 0b11111) { - case 8: op =3D rv_op_th_flrw; break; - case 10: op =3D rv_op_th_flurw; break; - case 12: op =3D rv_op_th_flrd; break; - case 14: op =3D rv_op_th_flurd; break; + case 8: return &op_th_flrw; + case 10: return &op_th_flurw; + case 12: return &op_th_flrd; + case 14: return &op_th_flurd; } break; case 7: switch ((inst >> 27) & 0b11111) { - case 8: op =3D rv_op_th_fsrw; break; - case 10: op =3D rv_op_th_fsurw; break; - case 12: op =3D rv_op_th_fsrd; break; - case 14: op =3D rv_op_th_fsurd; break; + case 8: return &op_th_fsrw; + case 10: return &op_th_fsurw; + case 12: return &op_th_fsrd; + case 14: return &op_th_fsurd; } break; } @@ -498,13 +258,12 @@ const rv_opcode_data *decode_xtheadfmemidx(rv_decode = *dec, rv_isa isa) break; } =20 - return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; + return NULL; } =20 const rv_opcode_data *decode_xtheadfmv(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; - rv_opcode op =3D rv_op_illegal; =20 switch (((inst >> 0) & 0b11)) { case 3: @@ -516,12 +275,12 @@ const rv_opcode_data *decode_xtheadfmv(rv_decode *dec= , rv_isa isa) switch ((inst >> 25) & 0b1111111) { case 0b1010000: if (((inst >> 20) & 0b11111) =3D=3D 0) { - op =3D rv_op_th_fmv_hw_x; + return &op_th_fmv_hw_x; } break; case 0b1100000: if (((inst >> 20) & 0b11111) =3D=3D 0) { - op =3D rv_op_th_fmv_x_hw; + return &op_th_fmv_x_hw; } break; } @@ -533,13 +292,12 @@ const rv_opcode_data *decode_xtheadfmv(rv_decode *dec= , rv_isa isa) break; } =20 - return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; + return NULL; } =20 const rv_opcode_data *decode_xtheadmac(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; - rv_opcode op =3D rv_op_illegal; =20 switch (((inst >> 0) & 0b11)) { case 3: @@ -549,12 +307,12 @@ const rv_opcode_data *decode_xtheadmac(rv_decode *dec= , rv_isa isa) switch ((inst >> 12) & 0b111) { case 1: switch ((inst >> 25) & 0b1111111) { - case 0b0010000: op =3D rv_op_th_mula; break; - case 0b0010001: op =3D rv_op_th_muls; break; - case 0b0010010: op =3D rv_op_th_mulaw; break; - case 0b0010011: op =3D rv_op_th_mulsw; break; - case 0b0010100: op =3D rv_op_th_mulah; break; - case 0b0010101: op =3D rv_op_th_mulsh; break; + case 0b0010000: return &op_th_mula; + case 0b0010001: return &op_th_muls; + case 0b0010010: return &op_th_mulaw; + case 0b0010011: return &op_th_mulsw; + case 0b0010100: return &op_th_mulah; + case 0b0010101: return &op_th_mulsh; } break; } @@ -564,13 +322,12 @@ const rv_opcode_data *decode_xtheadmac(rv_decode *dec= , rv_isa isa) break; } =20 - return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; + return NULL; } =20 const rv_opcode_data *decode_xtheadmemidx(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; - rv_opcode op =3D rv_op_illegal; =20 switch (((inst >> 0) & 0b11)) { case 3: @@ -580,54 +337,54 @@ const rv_opcode_data *decode_xtheadmemidx(rv_decode *= dec, rv_isa isa) switch ((inst >> 12) & 0b111) { case 4: switch ((inst >> 27) & 0b11111) { - case 0: op =3D rv_op_th_lrb; break; - case 1: op =3D rv_op_th_lbib; break; - case 2: op =3D rv_op_th_lurb; break; - case 3: op =3D rv_op_th_lbia; break; - case 4: op =3D rv_op_th_lrh; break; - case 5: op =3D rv_op_th_lhib; break; - case 6: op =3D rv_op_th_lurh; break; - case 7: op =3D rv_op_th_lhia; break; - case 8: op =3D rv_op_th_lrw; break; - case 9: op =3D rv_op_th_lwib; break; - case 10: op =3D rv_op_th_lurw; break; - case 11: op =3D rv_op_th_lwia; break; - case 12: op =3D rv_op_th_lrd; break; - case 13: op =3D rv_op_th_ldib; break; - case 14: op =3D rv_op_th_lurd; break; - case 15: op =3D rv_op_th_ldia; break; - case 16: op =3D rv_op_th_lrbu; break; - case 17: op =3D rv_op_th_lbuib; break; - case 18: op =3D rv_op_th_lurbu; break; - case 19: op =3D rv_op_th_lbuia; break; - case 20: op =3D rv_op_th_lrhu; break; - case 21: op =3D rv_op_th_lhuib; break; - case 22: op =3D rv_op_th_lurhu; break; - case 23: op =3D rv_op_th_lhuia; break; - case 24: op =3D rv_op_th_lrwu; break; - case 25: op =3D rv_op_th_lwuib; break; - case 26: op =3D rv_op_th_lurwu; break; - case 27: op =3D rv_op_th_lwuia; break; + case 0: return &op_th_lrb; + case 1: return &op_th_lbib; + case 2: return &op_th_lurb; + case 3: return &op_th_lbia; + case 4: return &op_th_lrh; + case 5: return &op_th_lhib; + case 6: return &op_th_lurh; + case 7: return &op_th_lhia; + case 8: return &op_th_lrw; + case 9: return &op_th_lwib; + case 10: return &op_th_lurw; + case 11: return &op_th_lwia; + case 12: return &op_th_lrd; + case 13: return &op_th_ldib; + case 14: return &op_th_lurd; + case 15: return &op_th_ldia; + case 16: return &op_th_lrbu; + case 17: return &op_th_lbuib; + case 18: return &op_th_lurbu; + case 19: return &op_th_lbuia; + case 20: return &op_th_lrhu; + case 21: return &op_th_lhuib; + case 22: return &op_th_lurhu; + case 23: return &op_th_lhuia; + case 24: return &op_th_lrwu; + case 25: return &op_th_lwuib; + case 26: return &op_th_lurwu; + case 27: return &op_th_lwuia; } break; case 5: switch ((inst >> 27) & 0b11111) { - case 0: op =3D rv_op_th_srb; break; - case 1: op =3D rv_op_th_sbib; break; - case 2: op =3D rv_op_th_surb; break; - case 3: op =3D rv_op_th_sbia; break; - case 4: op =3D rv_op_th_srh; break; - case 5: op =3D rv_op_th_shib; break; - case 6: op =3D rv_op_th_surh; break; - case 7: op =3D rv_op_th_shia; break; - case 8: op =3D rv_op_th_srw; break; - case 9: op =3D rv_op_th_swib; break; - case 10: op =3D rv_op_th_surw; break; - case 11: op =3D rv_op_th_swia; break; - case 12: op =3D rv_op_th_srd; break; - case 13: op =3D rv_op_th_sdib; break; - case 14: op =3D rv_op_th_surd; break; - case 15: op =3D rv_op_th_sdia; break; + case 0: return &op_th_srb; + case 1: return &op_th_sbib; + case 2: return &op_th_surb; + case 3: return &op_th_sbia; + case 4: return &op_th_srh; + case 5: return &op_th_shib; + case 6: return &op_th_surh; + case 7: return &op_th_shia; + case 8: return &op_th_srw; + case 9: return &op_th_swib; + case 10: return &op_th_surw; + case 11: return &op_th_swia; + case 12: return &op_th_srd; + case 13: return &op_th_sdib; + case 14: return &op_th_surd; + case 15: return &op_th_sdia; } break; break; @@ -638,13 +395,12 @@ const rv_opcode_data *decode_xtheadmemidx(rv_decode *= dec, rv_isa isa) break; } =20 - return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; + return NULL; } =20 const rv_opcode_data *decode_xtheadmempair(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; - rv_opcode op =3D rv_op_illegal; =20 switch (((inst >> 0) & 0b11)) { case 3: @@ -654,15 +410,15 @@ const rv_opcode_data *decode_xtheadmempair(rv_decode = *dec, rv_isa isa) switch ((inst >> 12) & 0b111) { case 4: switch ((inst >> 27) & 0b11111) { - case 28: op =3D rv_op_th_lwd; break; - case 30: op =3D rv_op_th_lwud; break; - case 31: op =3D rv_op_th_ldd; break; + case 28: return &op_th_lwd; + case 30: return &op_th_lwud; + case 31: return &op_th_ldd; } break; case 5: switch ((inst >> 27) & 0b11111) { - case 28: op =3D rv_op_th_swd; break; - case 31: op =3D rv_op_th_sdd; break; + case 28: return &op_th_swd; + case 31: return &op_th_sdd; } break; } @@ -672,13 +428,12 @@ const rv_opcode_data *decode_xtheadmempair(rv_decode = *dec, rv_isa isa) break; } =20 - return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; + return NULL; } =20 const rv_opcode_data *decode_xtheadsync(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; - rv_opcode op =3D rv_op_illegal; =20 switch (((inst >> 0) & 0b11)) { case 3: @@ -688,13 +443,13 @@ const rv_opcode_data *decode_xtheadsync(rv_decode *de= c, rv_isa isa) switch ((inst >> 12) & 0b111) { case 0: switch ((inst >> 25) & 0b1111111) { - case 0b0000010: op =3D rv_op_th_sfence_vmas; break; + case 0b0000010: return &op_th_sfence_vmas; case 0b0000000: switch ((inst >> 20) & 0b11111) { - case 0b11000: op =3D rv_op_th_sync; break; - case 0b11010: op =3D rv_op_th_sync_i; break; - case 0b11011: op =3D rv_op_th_sync_is; break; - case 0b11001: op =3D rv_op_th_sync_s; break; + case 0b11000: return &op_th_sync; + case 0b11010: return &op_th_sync_i; + case 0b11011: return &op_th_sync_is; + case 0b11001: return &op_th_sync_s; } break; } @@ -706,5 +461,5 @@ const rv_opcode_data *decode_xtheadsync(rv_decode *dec,= rv_isa isa) break; } =20 - return op =3D=3D rv_op_illegal ? NULL : &xthead_opcode_data[op]; + return NULL; } diff --git a/disas/riscv-xthead-op.c.inc b/disas/riscv-xthead-op.c.inc new file mode 100644 index 0000000000..1e4e0557cd --- /dev/null +++ b/disas/riscv-xthead-op.c.inc @@ -0,0 +1,125 @@ +/* XTheadBa */ +OP(th_addsl, "th.addsl", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) + +/* XTheadBb */ +OP(th_srri, "th.srri", rv_codec_r2_imm6, rv_fmt_rd_rs1_imm) +OP(th_srriw, "th.srriw", rv_codec_r2_imm5, rv_fmt_rd_rs1_imm) +OP(th_ext, "th.ext", rv_codec_r2_immhl, rv_fmt_rd_rs1_immh_imml) +OP(th_extu, "th.extu", rv_codec_r2_immhl, rv_fmt_rd_rs1_immh_imml) +OP(th_ff0, "th.ff0", rv_codec_r2, rv_fmt_rd_rs1) +OP(th_ff1, "th.ff1", rv_codec_r2, rv_fmt_rd_rs1) +OP(th_rev, "th.rev", rv_codec_r2, rv_fmt_rd_rs1) +OP(th_revw, "th.revw", rv_codec_r2, rv_fmt_rd_rs1) +OP(th_tstnbz, "th.tstnbz", rv_codec_r2, rv_fmt_rd_rs1) + +/* XTheadBs */ +OP(th_tst, "th.tst", rv_codec_r2_imm6, rv_fmt_rd_rs1_imm) + +/* XTheadCmo */ +OP(th_dcache_call, "th.dcache.call", rv_codec_none, rv_fmt_none) +OP(th_dcache_ciall, "th.dcache.ciall", rv_codec_none, rv_fmt_none) +OP(th_dcache_iall, "th.dcache.iall", rv_codec_none, rv_fmt_none) +OP(th_dcache_cpa, "th.dcache.cpa", rv_codec_r, rv_fmt_rs1) +OP(th_dcache_cipa, "th.dcache.cipa", rv_codec_r, rv_fmt_rs1) +OP(th_dcache_ipa, "th.dcache.ipa", rv_codec_r, rv_fmt_rs1) +OP(th_dcache_cva, "th.dcache.cva", rv_codec_r, rv_fmt_rs1) +OP(th_dcache_civa, "th.dcache.civa", rv_codec_r, rv_fmt_rs1) +OP(th_dcache_iva, "th.dcache.iva", rv_codec_r, rv_fmt_rs1) +OP(th_dcache_csw, "th.dcache.csw", rv_codec_r, rv_fmt_rs1) +OP(th_dcache_cisw, "th.dcache.cisw", rv_codec_r, rv_fmt_rs1) +OP(th_dcache_isw, "th.dcache.isw", rv_codec_r, rv_fmt_rs1) +OP(th_dcache_cpal1, "th.dcache.cpal1", rv_codec_r, rv_fmt_rs1) +OP(th_dcache_cval1, "th.dcache.cval1", rv_codec_r, rv_fmt_rs1) +OP(th_icache_iall, "th.icache.iall", rv_codec_none, rv_fmt_none) +OP(th_icache_ialls, "th.icache.ialls", rv_codec_none, rv_fmt_none) +OP(th_icache_ipa, "th.icache.ipa", rv_codec_r, rv_fmt_rs1) +OP(th_icache_iva, "th.icache.iva", rv_codec_r, rv_fmt_rs1) +OP(th_l2cache_call, "th.l2cache.call", rv_codec_none, rv_fmt_none) +OP(th_l2cache_ciall, "th.l2cache.ciall", rv_codec_none, rv_fmt_none) +OP(th_l2cache_iall, "th.l2cache.iall", rv_codec_none, rv_fmt_none) + +/* XTheadCondMov */ +OP(th_mveqz, "th.mveqz", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(th_mvnez, "th.mvnez", rv_codec_r, rv_fmt_rd_rs1_rs2) + +/* XTheadFMemIdx */ +OP(th_flrd, "th.flrd", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm) +OP(th_flrw, "th.flrw", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm) +OP(th_flurd, "th.flurd", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm) +OP(th_flurw, "th.flurw", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm) +OP(th_fsrd, "th.fsrd", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm) +OP(th_fsrw, "th.fsrw", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm) +OP(th_fsurd, "th.fsurd", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm) +OP(th_fsurw, "th.fsurw", rv_codec_r_imm2, rv_fmt_frd_rs1_rs2_imm) + +/* XTheadFmv */ +OP(th_fmv_hw_x, "th.fmv.hw.x", rv_codec_r, rv_fmt_rd_frs1) +OP(th_fmv_x_hw, "th.fmv.x.hw", rv_codec_r, rv_fmt_rd_frs1) + +/* XTheadMac */ +OP(th_mula, "th.mula", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(th_mulaw, "th.mulaw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(th_mulah, "th.mulah", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(th_muls, "th.muls", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(th_mulsw, "th.mulsw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(th_mulsh, "th.mulsh", rv_codec_r, rv_fmt_rd_rs1_rs2) + +/* XTheadMemIdx */ +OP(th_lbia, "th.lbia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr) +OP(th_lbib, "th.lbib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr) +OP(th_lbuia, "th.lbuia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_ad= dr) +OP(th_lbuib, "th.lbuib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_ad= dr) +OP(th_lhia, "th.lhia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr) +OP(th_lhib, "th.lhib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr) +OP(th_lhuia, "th.lhuia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_ad= dr) +OP(th_lhuib, "th.lhuib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_ad= dr) +OP(th_lwia, "th.lwia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr) +OP(th_lwib, "th.lwib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr) +OP(th_lwuia, "th.lwuia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_ad= dr) +OP(th_lwuib, "th.lwuib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_ad= dr) +OP(th_ldia, "th.ldia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr) +OP(th_ldib, "th.ldib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr) +OP(th_sbia, "th.sbia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr) +OP(th_sbib, "th.sbib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr) +OP(th_shia, "th.shia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr) +OP(th_shib, "th.shib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr) +OP(th_swia, "th.swia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr) +OP(th_swib, "th.swib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr) +OP(th_sdia, "th.sdia", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr) +OP(th_sdib, "th.sdib", rv_codec_r2_imm2_imm5, rv_fmt_rd_rs1_immh_imml_addr) +OP(th_lrb, "th.lrb", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_lrbu, "th.lrbu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_lrh, "th.lrh", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_lrhu, "th.lrhu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_lrw, "th.lrw", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_lrwu, "th.lrwu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_lrd, "th.lrd", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_srb, "th.srb", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_srh, "th.srh", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_srw, "th.srw", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_srd, "th.srd", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_lurb, "th.lurb", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_lurbu, "th.lurbu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_lurh, "th.lurh", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_lurhu, "th.lurhu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_lurw, "th.lurw", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_lurwu, "th.lurwu", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_lurd, "th.lurd", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_surb, "th.surb", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_surh, "th.surh", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_surw, "th.surw", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) +OP(th_surd, "th.surd", rv_codec_r_imm2, rv_fmt_rd_rs1_rs2_imm) + +/* XTheadMemPair */ +OP(th_ldd, "th.ldd", rv_codec_r_imm2, rv_fmt_rd2_imm) +OP(th_lwd, "th.lwd", rv_codec_r_imm2, rv_fmt_rd2_imm) +OP(th_lwud, "th.lwud", rv_codec_r_imm2, rv_fmt_rd2_imm) +OP(th_sdd, "th.sdd", rv_codec_r_imm2, rv_fmt_rd2_imm) +OP(th_swd, "th.swd", rv_codec_r_imm2, rv_fmt_rd2_imm) + +/* XTheadSync */ +OP(th_sfence_vmas, "th.sfence.vmas", rv_codec_r, rv_fmt_rs1_rs2) +OP(th_sync, "th.sync", rv_codec_none, rv_fmt_none) +OP(th_sync_i, "th.sync.i", rv_codec_none, rv_fmt_none) +OP(th_sync_is, "th.sync.is", rv_codec_none, rv_fmt_none) +OP(th_sync_s, "th.sync.s", rv_codec_none, rv_fmt_none) --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550797; cv=none; d=zohomail.com; s=zohoarc; b=UACV/R+YbMgTLdxCIufAE5PEHSthtE0t9lmyydmHnlGCOXzqFlqskocvub9Gg8EZJQLFWwWqBHBY/zJ1RkDMW20pQvAovDCi5I4srVibGS7egDsY5jwX9f7D7WH1gbuJXSShtwg5+UagipF8Q8LFC4UPS/drBDbo0kXhaQ99W3Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550797; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ulC44i9a3xhjyvxxC0pEa6jbGi+BnZcRf4JICqyq4rw=; b=gad8htQW/8FO1jiwX6WiISfkrFgBBiIusCwxG7DORIqyFXVmJb3Om6D11S8aptRUxkJeu9qV/qc24l2n4nKC4uZU0T26R+9CQmjszbj7e83DbWg94YjOimA2JNIPzfGjdRHx3Ps46h24/6K/KB31zmeU1OKfewM06LHFrdvNGuQ= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178755079785340.96573267206827; Sun, 23 Aug 2026 22:53:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbr-0006pE-QA; Mon, 24 Aug 2026 01:52:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNbR-0005Ke-Ji for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:13 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNbQ-00035I-0I for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:13 -0400 Received: by mail-pj1-x1036.google.com with SMTP id 98e67ed59e1d1-38d489b6b71so3408768a91.0 for ; Sun, 23 Aug 2026 22:52:11 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.52.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:52:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550730; x=1788155530; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ulC44i9a3xhjyvxxC0pEa6jbGi+BnZcRf4JICqyq4rw=; b=iIaFAMPOEZLPgOPToy2LU4AdD+IzS730gxv5IauOaW0bK/gPxTxAEsbKLahCgEy6uo al7dAnYq0d+v15F3HdR3W4yeAzv+WTH/Q+XPwZAWLcvSLFNn2r0+18rp5fD+Jsll8CnU TJldrZm60I7RKDVK4GPWukyg0qaiDnjkedR3Q89rl+dqkUrxnXD1joB7XelxzR4vsqRD ZUjZzYCvQ5stxYOI/bVzZuh2fCGyqN+MSIFHWiOxZIG9KdnVJ44TkO/w/4A974daq5/D pcq30gUsYcITiFOGyzb2M/0sqaapt8AOMcB0v4ImLOmeJEJfhnpYDJcxVf4Pi364XD4h Gvkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550730; x=1788155530; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=ulC44i9a3xhjyvxxC0pEa6jbGi+BnZcRf4JICqyq4rw=; b=AtbvLHc8Qvch/7/UX/1wKv5J71cJngjq8Qnix5udzvB/4oXj7VE6lojIwia6yM8R3A VBiTVVAlBarrAf09v1agZiIp9+c9xGHd0VEkZFFTLnYBKlXMKs27Qvn/fXYBF5M+yNdF r2LVXpzjn1DxzwKWWkO2pd+s1uvCnLQcBs/tKxO1zCGRyxnKqOXV5evLGD7AVdBgb9TG IIjIJvkfLdGF62z6BhhQi438vOix0+tIPYtokbyueGksxJyExo+bWhlf9bJvsYnEav4F FrgIyX2kU4NRzCZx/mfVeGjy4nqCqttnKyYN2hpkW5VeqOWylj0LA1WBBheG6NQdFbsh xmDg== X-Gm-Message-State: AFuF++lXc/U+dVxVLxgca2WSriIdOGrZikMqRWu1Q4obedDSPcXUV52s a4AuxHZZx/S/5naEIWRzmbnQlswj2Pj/F3byxKqbSXfu4StWkDhlA/4AcmZGiA== X-Gm-Gg: AR+sD10F+I9PIgqwBPJE7ho8JOzx3VPswJ/clnE01i0wkopMoKamBIi+2REa7fgPPE3 Kqo10F6TRF0I48ahS8TUf8g7HYJFrDcYtAKsw0wVi+jW3vDRQ+4skkQUxApTx6d5iqwPBFW+WvJ UIu2gQvzGy33xuAY06DTrWNQ2KAGwt5T2zw/2PyAcl9jpCPDt8B3tqCkbPvAyRhSCJrkwyeprnH WOcyexPpHRE0zja1I/F9eGgjGQV1MXEcqS4x/XNZMo0/R5dbywztOAhRL4TvEcrIkEFTqG9p/mO alXRw9wWF6cEl14QLXDYW2alCQ4pyBX31VPbwupv3t7ePtb0cqYqrlXIDfH7LxrVYk1IH7/3dcW 6H1SmoU6tBtZOIXDOGtA4E1X+HvZlAusZl8OAvOmXbA2TXBaUOMzrnzVNRxJ5dxy4K7cr4wcJ15 kcVz5Xw4MPYf9fugneR7LRPkOFygOdk3G+qLdxDJMc31yho6laFk7qLekq/joYDYgmExx8VpZk2 z7CVg== X-Received: by 2002:a17:90b:4c8e:b0:38d:fda6:4873 with SMTP id 98e67ed59e1d1-395c352aee9mr40874783a91.10.1787550730488; Sun, 23 Aug 2026 22:52:10 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 77/96] disas/riscv: Move rv_op_illegal to riscv.c Date: Mon, 24 Aug 2026 15:47:47 +1000 Message-ID: <20260824054806.2790041-78-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1036; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1036.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550799430158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson illegal is no longer used in other files. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-45-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.h | 4 ---- disas/riscv.c | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/disas/riscv.h b/disas/riscv.h index 241dd47d7f..5ac8c41616 100644 --- a/disas/riscv.h +++ b/disas/riscv.h @@ -200,10 +200,6 @@ typedef struct { uint8_t rlist; } rv_decode; =20 -enum { - rv_op_illegal =3D 0 -}; - /* instruction formats */ =20 #define rv_fmt_none "O\t" diff --git a/disas/riscv.c b/disas/riscv.c index 787340e811..c3a8cde37d 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -29,7 +29,7 @@ #include "disas/riscv-xlrbr.h" =20 typedef enum { - /* 0 is reserved for rv_op_illegal. */ + rv_op_illegal =3D 0, rv_op_lui =3D 1, rv_op_auipc =3D 2, rv_op_jal =3D 3, --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550946; cv=none; d=zohomail.com; s=zohoarc; b=KEv89rB/Y6wHmoGCBehhMf2HmCef3E8Qepk0qKd7uhH+A+Cj+MPOWpD6EMChfidieQeujNeeqMGiAxVDsYK49zxK9k7u545/zw5DBH4luXvWW8xlDGQcaXy52dWz65wSnocEl2skF8tp+te2b0rAw0q4zuZ4+DXMc67W5LfRHUU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550946; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Dz35Ajw96jUke/LaXgW6+4pq0SOiz1onnhOikUVBcnw=; b=dw4BHHi725uOTW/CDeu0oHXLWNQFBi1RqbUfwMqFCONN+5J9cTH46SEJJhIVWJG7dRPNvSiAeJDgJ2NZLf+L6hYd+123vuCi+amdDyIe19VOUy/HKDXJhkcipMhtzY/cmlpH5/jDI77bjBJbr7OFePP5xwwkUs/ctCSUbFpoG3g= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550945996247.99997963483543; Sun, 23 Aug 2026 22:55:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbx-0006zm-PV; Mon, 24 Aug 2026 01:52:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNba-0005ZB-GD for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:22 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNbV-00036O-0l for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:22 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-3811f512167so4221280a91.3 for ; Sun, 23 Aug 2026 22:52:16 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.52.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:52:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550735; x=1788155535; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Dz35Ajw96jUke/LaXgW6+4pq0SOiz1onnhOikUVBcnw=; b=gnzJfYTavev7zhcZ3CGJWFEL09o9eN/tdnWP0o5B7j7TPacPhn1lNV5adzO741G4l5 9H7u67Kmphhrjv1y6IicxtsFaRGVVG3mnVhwh2azaHJl2NYvSqEdT/r6KtXNQRz9cgAr HeMp6Q0Fp5m/4iBaAY7b34SJ+lYdWnvAoIXC1UWHVih15CCzIXslxATgc9VxswPfaa+T 2LPDOhwmhnFDHa03z52EDBlVYg3KmwBVSe6SEjmmd90jbDtccv6A26yIhBy/BYSKAW51 BJheGhxZ+ctqAf+6qK9aTDRKAQGxr5qEY3mlCJpYwPwfieMYHTdH6nq9EmeSyiOihFiA 770w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550735; x=1788155535; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Dz35Ajw96jUke/LaXgW6+4pq0SOiz1onnhOikUVBcnw=; b=aTps/al4HstlKvc3dbDR1cFdoPz+UJKRSCNypeFsKxhWLD1CfHLprHpUXgmTqJq7RV MM3mpbXu3sJU/kU573A6kA6qyi0/tot0mbDOQwTcg2oGnR0BdzcdEZFisDExRh0x6St4 oRIKq2+Lto+AwSIwWixzW/fIEqAs0irK6hhoE8XIUEITWOiqiA3YGn/+zCXAgYVDinc4 dKacmAKh6Xm6gPnz8toxAo756a57Bb2yW7/sx+pC39xF4xlNJzG1VEo9+9HJMf9u0Trt Qe2HS/pIVSAwRcE7IEOrqFmrvfrA8mY1TxDI0mLFtsyXuDhbY3mZnsDTpiwnfSPxeql0 whJQ== X-Gm-Message-State: AFuF++mKpwAN5AFShVPZFTslMzvWCD8t30pUyYXbNbHof5v5u1tDI5B3 Q/23pZVPPjTHUtJPG3gLlC+O7FsFFOH0QvBgBWeVznKCMh/u3q8eaX0/0GxyCw== X-Gm-Gg: AR+sD10jJl4fgdouiv44u/fcgqUdZtVSTnz0pxOyB+wJkFGvOVvwekeCylo8MvSdQSa whEkLzFoJgx7ZngfoLZ8a/3imvh30omXU8TR/VZfKEZ9mbRo9UKOtQkzphXTcrxQK7mTxshHhWa 7xzJcp7Inl5e4gBPFOePbPBAh6eyfyRon9/RmRZ7+2iceQR5fTjzXUJN9AIDMM9HNE2bEJBGkVy 70ie3739vZM9ju14Vi/SC+KWVr/EADFz6zARYklAn9f1QQnC4QzYb/01XYBmYbJhzXHDrOrpbD5 Zg8Mk4gLY5l/MVC4pPVWKBI8CVd6dNhv0YNUsL+fHXVpeYOUlDnVwL7dYo80ybyNQM+YhWY+J2H fLXdBMiXexKFFmETvCcrVeXH1rsgnyifcCmu4dzVC2jU4CEKydqu+U9L2s3DF+G7y3vXxyZfyWr 2Cjqj4ptMjkzL6xCq2MAlobVZyB54tfPEhVTOXK7H69Q76Y8oDP3YvoCIDR2jqPv2t0F3gqRBEY ex7mQ== X-Received: by 2002:a17:90b:33c8:b0:38f:57f0:1f5d with SMTP id 98e67ed59e1d1-395c397f4ecmr38578951a91.15.1787550734309; Sun, 23 Aug 2026 22:52:14 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 78/96] disas/riscv: Split out riscv-op.c.inc Date: Mon, 24 Aug 2026 15:47:48 +1000 Message-ID: <20260824054806.2790041-79-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102a; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102a.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550948134158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Move rvi_opcode_data to riscv-op.c.inc and massage the lines into OP() form. Unlike other files, keep the enumeration and the table intact for now, but build them both from the same source. Adjust the names of rv_*mop to include _op_ to match the general pattern. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-46-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 1931 +----------------------------------------- disas/riscv-op.c.inc | 958 +++++++++++++++++++++ 2 files changed, 967 insertions(+), 1922 deletions(-) create mode 100644 disas/riscv-op.c.inc diff --git a/disas/riscv.c b/disas/riscv.c index c3a8cde37d..8aaad96bf4 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -29,964 +29,9 @@ #include "disas/riscv-xlrbr.h" =20 typedef enum { - rv_op_illegal =3D 0, - rv_op_lui =3D 1, - rv_op_auipc =3D 2, - rv_op_jal =3D 3, - rv_op_jalr =3D 4, - rv_op_beq =3D 5, - rv_op_bne =3D 6, - rv_op_blt =3D 7, - rv_op_bge =3D 8, - rv_op_bltu =3D 9, - rv_op_bgeu =3D 10, - rv_op_lb =3D 11, - rv_op_lh =3D 12, - rv_op_lw =3D 13, - rv_op_lbu =3D 14, - rv_op_lhu =3D 15, - rv_op_sb =3D 16, - rv_op_sh =3D 17, - rv_op_sw =3D 18, - rv_op_addi =3D 19, - rv_op_slti =3D 20, - rv_op_sltiu =3D 21, - rv_op_xori =3D 22, - rv_op_ori =3D 23, - rv_op_andi =3D 24, - rv_op_slli =3D 25, - rv_op_srli =3D 26, - rv_op_srai =3D 27, - rv_op_add =3D 28, - rv_op_sub =3D 29, - rv_op_sll =3D 30, - rv_op_slt =3D 31, - rv_op_sltu =3D 32, - rv_op_xor =3D 33, - rv_op_srl =3D 34, - rv_op_sra =3D 35, - rv_op_or =3D 36, - rv_op_and =3D 37, - rv_op_fence =3D 38, - rv_op_fence_i =3D 39, - rv_op_lwu =3D 40, - rv_op_ld =3D 41, - rv_op_sd =3D 42, - rv_op_addiw =3D 43, - rv_op_slliw =3D 44, - rv_op_srliw =3D 45, - rv_op_sraiw =3D 46, - rv_op_addw =3D 47, - rv_op_subw =3D 48, - rv_op_sllw =3D 49, - rv_op_srlw =3D 50, - rv_op_sraw =3D 51, - rv_op_ldu =3D 52, - rv_op_lq =3D 53, - rv_op_sq =3D 54, - rv_op_addid =3D 55, - rv_op_sllid =3D 56, - rv_op_srlid =3D 57, - rv_op_sraid =3D 58, - rv_op_addd =3D 59, - rv_op_subd =3D 60, - rv_op_slld =3D 61, - rv_op_srld =3D 62, - rv_op_srad =3D 63, - rv_op_mul =3D 64, - rv_op_mulh =3D 65, - rv_op_mulhsu =3D 66, - rv_op_mulhu =3D 67, - rv_op_div =3D 68, - rv_op_divu =3D 69, - rv_op_rem =3D 70, - rv_op_remu =3D 71, - rv_op_mulw =3D 72, - rv_op_divw =3D 73, - rv_op_divuw =3D 74, - rv_op_remw =3D 75, - rv_op_remuw =3D 76, - rv_op_muld =3D 77, - rv_op_divd =3D 78, - rv_op_divud =3D 79, - rv_op_remd =3D 80, - rv_op_remud =3D 81, - rv_op_lr_w =3D 82, - rv_op_sc_w =3D 83, - rv_op_amoswap_w =3D 84, - rv_op_amoadd_w =3D 85, - rv_op_amoxor_w =3D 86, - rv_op_amoor_w =3D 87, - rv_op_amoand_w =3D 88, - rv_op_amomin_w =3D 89, - rv_op_amomax_w =3D 90, - rv_op_amominu_w =3D 91, - rv_op_amomaxu_w =3D 92, - rv_op_lr_d =3D 93, - rv_op_sc_d =3D 94, - rv_op_amoswap_d =3D 95, - rv_op_amoadd_d =3D 96, - rv_op_amoxor_d =3D 97, - rv_op_amoor_d =3D 98, - rv_op_amoand_d =3D 99, - rv_op_amomin_d =3D 100, - rv_op_amomax_d =3D 101, - rv_op_amominu_d =3D 102, - rv_op_amomaxu_d =3D 103, - rv_op_lr_q =3D 104, - rv_op_sc_q =3D 105, - rv_op_amoswap_q =3D 106, - rv_op_amoadd_q =3D 107, - rv_op_amoxor_q =3D 108, - rv_op_amoor_q =3D 109, - rv_op_amoand_q =3D 110, - rv_op_amomin_q =3D 111, - rv_op_amomax_q =3D 112, - rv_op_amominu_q =3D 113, - rv_op_amomaxu_q =3D 114, - rv_op_ecall =3D 115, - rv_op_ebreak =3D 116, - rv_op_uret =3D 117, - rv_op_sret =3D 118, - rv_op_hret =3D 119, - rv_op_mret =3D 120, - rv_op_dret =3D 121, - rv_op_sfence_vm =3D 122, - rv_op_sfence_vma =3D 123, - rv_op_wfi =3D 124, - rv_op_csrrw =3D 125, - rv_op_csrrs =3D 126, - rv_op_csrrc =3D 127, - rv_op_csrrwi =3D 128, - rv_op_csrrsi =3D 129, - rv_op_csrrci =3D 130, - rv_op_flw =3D 131, - rv_op_fsw =3D 132, - rv_op_fmadd_s =3D 133, - rv_op_fmsub_s =3D 134, - rv_op_fnmsub_s =3D 135, - rv_op_fnmadd_s =3D 136, - rv_op_fadd_s =3D 137, - rv_op_fsub_s =3D 138, - rv_op_fmul_s =3D 139, - rv_op_fdiv_s =3D 140, - rv_op_fsgnj_s =3D 141, - rv_op_fsgnjn_s =3D 142, - rv_op_fsgnjx_s =3D 143, - rv_op_fmin_s =3D 144, - rv_op_fmax_s =3D 145, - rv_op_fsqrt_s =3D 146, - rv_op_fle_s =3D 147, - rv_op_flt_s =3D 148, - rv_op_feq_s =3D 149, - rv_op_fcvt_w_s =3D 150, - rv_op_fcvt_wu_s =3D 151, - rv_op_fcvt_s_w =3D 152, - rv_op_fcvt_s_wu =3D 153, - rv_op_fmv_x_s =3D 154, - rv_op_fclass_s =3D 155, - rv_op_fmv_s_x =3D 156, - rv_op_fcvt_l_s =3D 157, - rv_op_fcvt_lu_s =3D 158, - rv_op_fcvt_s_l =3D 159, - rv_op_fcvt_s_lu =3D 160, - rv_op_fld =3D 161, - rv_op_fsd =3D 162, - rv_op_fmadd_d =3D 163, - rv_op_fmsub_d =3D 164, - rv_op_fnmsub_d =3D 165, - rv_op_fnmadd_d =3D 166, - rv_op_fadd_d =3D 167, - rv_op_fsub_d =3D 168, - rv_op_fmul_d =3D 169, - rv_op_fdiv_d =3D 170, - rv_op_fsgnj_d =3D 171, - rv_op_fsgnjn_d =3D 172, - rv_op_fsgnjx_d =3D 173, - rv_op_fmin_d =3D 174, - rv_op_fmax_d =3D 175, - rv_op_fcvt_s_d =3D 176, - rv_op_fcvt_d_s =3D 177, - rv_op_fsqrt_d =3D 178, - rv_op_fle_d =3D 179, - rv_op_flt_d =3D 180, - rv_op_feq_d =3D 181, - rv_op_fcvt_w_d =3D 182, - rv_op_fcvt_wu_d =3D 183, - rv_op_fcvt_d_w =3D 184, - rv_op_fcvt_d_wu =3D 185, - rv_op_fclass_d =3D 186, - rv_op_fcvt_l_d =3D 187, - rv_op_fcvt_lu_d =3D 188, - rv_op_fmv_x_d =3D 189, - rv_op_fcvt_d_l =3D 190, - rv_op_fcvt_d_lu =3D 191, - rv_op_fmv_d_x =3D 192, - rv_op_flq =3D 193, - rv_op_fsq =3D 194, - rv_op_fmadd_q =3D 195, - rv_op_fmsub_q =3D 196, - rv_op_fnmsub_q =3D 197, - rv_op_fnmadd_q =3D 198, - rv_op_fadd_q =3D 199, - rv_op_fsub_q =3D 200, - rv_op_fmul_q =3D 201, - rv_op_fdiv_q =3D 202, - rv_op_fsgnj_q =3D 203, - rv_op_fsgnjn_q =3D 204, - rv_op_fsgnjx_q =3D 205, - rv_op_fmin_q =3D 206, - rv_op_fmax_q =3D 207, - rv_op_fcvt_s_q =3D 208, - rv_op_fcvt_q_s =3D 209, - rv_op_fcvt_d_q =3D 210, - rv_op_fcvt_q_d =3D 211, - rv_op_fsqrt_q =3D 212, - rv_op_fle_q =3D 213, - rv_op_flt_q =3D 214, - rv_op_feq_q =3D 215, - rv_op_fcvt_w_q =3D 216, - rv_op_fcvt_wu_q =3D 217, - rv_op_fcvt_q_w =3D 218, - rv_op_fcvt_q_wu =3D 219, - rv_op_fclass_q =3D 220, - rv_op_fcvt_l_q =3D 221, - rv_op_fcvt_lu_q =3D 222, - rv_op_fcvt_q_l =3D 223, - rv_op_fcvt_q_lu =3D 224, - rv_op_fmv_x_q =3D 225, - rv_op_fmv_q_x =3D 226, - rv_op_c_addi4spn =3D 227, - rv_op_c_fld =3D 228, - rv_op_c_lw =3D 229, - rv_op_c_flw =3D 230, - rv_op_c_fsd =3D 231, - rv_op_c_sw =3D 232, - rv_op_c_fsw =3D 233, - rv_op_c_addi =3D 235, - rv_op_c_jal =3D 236, - rv_op_c_li =3D 237, - rv_op_c_addi16sp =3D 238, - rv_op_c_lui =3D 239, - rv_op_c_srli =3D 240, - rv_op_c_srai =3D 241, - rv_op_c_andi =3D 242, - rv_op_c_sub =3D 243, - rv_op_c_xor =3D 244, - rv_op_c_or =3D 245, - rv_op_c_and =3D 246, - rv_op_c_subw =3D 247, - rv_op_c_addw =3D 248, - rv_op_c_j =3D 249, - rv_op_c_beqz =3D 250, - rv_op_c_bnez =3D 251, - rv_op_c_slli =3D 252, - rv_op_c_fldsp =3D 253, - rv_op_c_lwsp =3D 254, - rv_op_c_flwsp =3D 255, - rv_op_c_jr =3D 256, - rv_op_c_mv =3D 257, - rv_op_c_ebreak =3D 258, - rv_op_c_jalr =3D 259, - rv_op_c_add =3D 260, - rv_op_c_fsdsp =3D 261, - rv_op_c_swsp =3D 262, - rv_op_c_fswsp =3D 263, - rv_op_c_ld =3D 264, - rv_op_c_sd =3D 265, - rv_op_c_addiw =3D 266, - rv_op_c_ldsp =3D 267, - rv_op_c_sdsp =3D 268, - rv_op_c_lq =3D 269, - rv_op_c_sq =3D 270, - rv_op_c_lqsp =3D 271, - rv_op_c_sqsp =3D 272, - rv_op_nop =3D 273, - rv_op_mv =3D 274, - rv_op_not =3D 275, - rv_op_neg =3D 276, - rv_op_negw =3D 277, - rv_op_sext_w =3D 278, - rv_op_seqz =3D 279, - rv_op_snez =3D 280, - rv_op_sltz =3D 281, - rv_op_sgtz =3D 282, - rv_op_fmv_s =3D 283, - rv_op_fabs_s =3D 284, - rv_op_fneg_s =3D 285, - rv_op_fmv_d =3D 286, - rv_op_fabs_d =3D 287, - rv_op_fneg_d =3D 288, - rv_op_fmv_q =3D 289, - rv_op_fabs_q =3D 290, - rv_op_fneg_q =3D 291, - rv_op_beqz =3D 292, - rv_op_bnez =3D 293, - rv_op_blez =3D 294, - rv_op_bgez =3D 295, - rv_op_bltz =3D 296, - rv_op_bgtz =3D 297, - rv_op_jal_ra =3D 298, - rv_op_jalr_ra =3D 299, - rv_op_j =3D 302, - rv_op_ret =3D 303, - rv_op_jr =3D 304, - rv_op_rdcycle =3D 305, - rv_op_rdtime =3D 306, - rv_op_rdinstret =3D 307, - rv_op_rdcycleh =3D 308, - rv_op_rdtimeh =3D 309, - rv_op_rdinstreth =3D 310, - rv_op_frcsr =3D 311, - rv_op_frrm =3D 312, - rv_op_frflags =3D 313, - rv_op_fscsr =3D 314, - rv_op_fsrm =3D 315, - rv_op_fsflags =3D 316, - rv_op_fsrmi =3D 317, - rv_op_fsflagsi =3D 318, - rv_op_bseti =3D 319, - rv_op_bclri =3D 320, - rv_op_binvi =3D 321, - rv_op_bexti =3D 322, - rv_op_rori =3D 323, - rv_op_clz =3D 324, - rv_op_ctz =3D 325, - rv_op_cpop =3D 326, - rv_op_sext_h =3D 327, - rv_op_sext_b =3D 328, - rv_op_xnor =3D 329, - rv_op_orn =3D 330, - rv_op_andn =3D 331, - rv_op_rol =3D 332, - rv_op_ror =3D 333, - rv_op_sh1add =3D 334, - rv_op_sh2add =3D 335, - rv_op_sh3add =3D 336, - rv_op_sh1add_uw =3D 337, - rv_op_sh2add_uw =3D 338, - rv_op_sh3add_uw =3D 339, - rv_op_clmul =3D 340, - rv_op_clmulr =3D 341, - rv_op_clmulh =3D 342, - rv_op_min =3D 343, - rv_op_minu =3D 344, - rv_op_max =3D 345, - rv_op_maxu =3D 346, - rv_op_clzw =3D 347, - rv_op_ctzw =3D 348, - rv_op_cpopw =3D 349, - rv_op_slli_uw =3D 350, - rv_op_add_uw =3D 351, - rv_op_rolw =3D 352, - rv_op_rorw =3D 353, - rv_op_rev8 =3D 354, - rv_op_zext_h =3D 355, - rv_op_roriw =3D 356, - rv_op_orc_b =3D 357, - rv_op_bset =3D 358, - rv_op_bclr =3D 359, - rv_op_binv =3D 360, - rv_op_bext =3D 361, - rv_op_aes32esmi =3D 362, - rv_op_aes32esi =3D 363, - rv_op_aes32dsmi =3D 364, - rv_op_aes32dsi =3D 365, - rv_op_aes64ks1i =3D 366, - rv_op_aes64ks2 =3D 367, - rv_op_aes64im =3D 368, - rv_op_aes64esm =3D 369, - rv_op_aes64es =3D 370, - rv_op_aes64dsm =3D 371, - rv_op_aes64ds =3D 372, - rv_op_sha256sig0 =3D 373, - rv_op_sha256sig1 =3D 374, - rv_op_sha256sum0 =3D 375, - rv_op_sha256sum1 =3D 376, - rv_op_sha512sig0 =3D 377, - rv_op_sha512sig1 =3D 378, - rv_op_sha512sum0 =3D 379, - rv_op_sha512sum1 =3D 380, - rv_op_sha512sum0r =3D 381, - rv_op_sha512sum1r =3D 382, - rv_op_sha512sig0l =3D 383, - rv_op_sha512sig0h =3D 384, - rv_op_sha512sig1l =3D 385, - rv_op_sha512sig1h =3D 386, - rv_op_sm3p0 =3D 387, - rv_op_sm3p1 =3D 388, - rv_op_sm4ed =3D 389, - rv_op_sm4ks =3D 390, - rv_op_brev8 =3D 391, - rv_op_pack =3D 392, - rv_op_packh =3D 393, - rv_op_packw =3D 394, - rv_op_unzip =3D 395, - rv_op_zip =3D 396, - rv_op_xperm4 =3D 397, - rv_op_xperm8 =3D 398, - rv_op_vle8_v =3D 399, - rv_op_vle16_v =3D 400, - rv_op_vle32_v =3D 401, - rv_op_vle64_v =3D 402, - rv_op_vse8_v =3D 403, - rv_op_vse16_v =3D 404, - rv_op_vse32_v =3D 405, - rv_op_vse64_v =3D 406, - rv_op_vlm_v =3D 407, - rv_op_vsm_v =3D 408, - rv_op_vlse8_v =3D 409, - rv_op_vlse16_v =3D 410, - rv_op_vlse32_v =3D 411, - rv_op_vlse64_v =3D 412, - rv_op_vsse8_v =3D 413, - rv_op_vsse16_v =3D 414, - rv_op_vsse32_v =3D 415, - rv_op_vsse64_v =3D 416, - rv_op_vluxei8_v =3D 417, - rv_op_vluxei16_v =3D 418, - rv_op_vluxei32_v =3D 419, - rv_op_vluxei64_v =3D 420, - rv_op_vloxei8_v =3D 421, - rv_op_vloxei16_v =3D 422, - rv_op_vloxei32_v =3D 423, - rv_op_vloxei64_v =3D 424, - rv_op_vsuxei8_v =3D 425, - rv_op_vsuxei16_v =3D 426, - rv_op_vsuxei32_v =3D 427, - rv_op_vsuxei64_v =3D 428, - rv_op_vsoxei8_v =3D 429, - rv_op_vsoxei16_v =3D 430, - rv_op_vsoxei32_v =3D 431, - rv_op_vsoxei64_v =3D 432, - rv_op_vle8ff_v =3D 433, - rv_op_vle16ff_v =3D 434, - rv_op_vle32ff_v =3D 435, - rv_op_vle64ff_v =3D 436, - rv_op_vl1re8_v =3D 437, - rv_op_vl1re16_v =3D 438, - rv_op_vl1re32_v =3D 439, - rv_op_vl1re64_v =3D 440, - rv_op_vl2re8_v =3D 441, - rv_op_vl2re16_v =3D 442, - rv_op_vl2re32_v =3D 443, - rv_op_vl2re64_v =3D 444, - rv_op_vl4re8_v =3D 445, - rv_op_vl4re16_v =3D 446, - rv_op_vl4re32_v =3D 447, - rv_op_vl4re64_v =3D 448, - rv_op_vl8re8_v =3D 449, - rv_op_vl8re16_v =3D 450, - rv_op_vl8re32_v =3D 451, - rv_op_vl8re64_v =3D 452, - rv_op_vs1r_v =3D 453, - rv_op_vs2r_v =3D 454, - rv_op_vs4r_v =3D 455, - rv_op_vs8r_v =3D 456, - rv_op_vadd_vv =3D 457, - rv_op_vadd_vx =3D 458, - rv_op_vadd_vi =3D 459, - rv_op_vsub_vv =3D 460, - rv_op_vsub_vx =3D 461, - rv_op_vrsub_vx =3D 462, - rv_op_vrsub_vi =3D 463, - rv_op_vwaddu_vv =3D 464, - rv_op_vwaddu_vx =3D 465, - rv_op_vwadd_vv =3D 466, - rv_op_vwadd_vx =3D 467, - rv_op_vwsubu_vv =3D 468, - rv_op_vwsubu_vx =3D 469, - rv_op_vwsub_vv =3D 470, - rv_op_vwsub_vx =3D 471, - rv_op_vwaddu_wv =3D 472, - rv_op_vwaddu_wx =3D 473, - rv_op_vwadd_wv =3D 474, - rv_op_vwadd_wx =3D 475, - rv_op_vwsubu_wv =3D 476, - rv_op_vwsubu_wx =3D 477, - rv_op_vwsub_wv =3D 478, - rv_op_vwsub_wx =3D 479, - rv_op_vadc_vvm =3D 480, - rv_op_vadc_vxm =3D 481, - rv_op_vadc_vim =3D 482, - rv_op_vmadc_vvm =3D 483, - rv_op_vmadc_vxm =3D 484, - rv_op_vmadc_vim =3D 485, - rv_op_vsbc_vvm =3D 486, - rv_op_vsbc_vxm =3D 487, - rv_op_vmsbc_vvm =3D 488, - rv_op_vmsbc_vxm =3D 489, - rv_op_vand_vv =3D 490, - rv_op_vand_vx =3D 491, - rv_op_vand_vi =3D 492, - rv_op_vor_vv =3D 493, - rv_op_vor_vx =3D 494, - rv_op_vor_vi =3D 495, - rv_op_vxor_vv =3D 496, - rv_op_vxor_vx =3D 497, - rv_op_vxor_vi =3D 498, - rv_op_vsll_vv =3D 499, - rv_op_vsll_vx =3D 500, - rv_op_vsll_vi =3D 501, - rv_op_vsrl_vv =3D 502, - rv_op_vsrl_vx =3D 503, - rv_op_vsrl_vi =3D 504, - rv_op_vsra_vv =3D 505, - rv_op_vsra_vx =3D 506, - rv_op_vsra_vi =3D 507, - rv_op_vnsrl_wv =3D 508, - rv_op_vnsrl_wx =3D 509, - rv_op_vnsrl_wi =3D 510, - rv_op_vnsra_wv =3D 511, - rv_op_vnsra_wx =3D 512, - rv_op_vnsra_wi =3D 513, - rv_op_vmseq_vv =3D 514, - rv_op_vmseq_vx =3D 515, - rv_op_vmseq_vi =3D 516, - rv_op_vmsne_vv =3D 517, - rv_op_vmsne_vx =3D 518, - rv_op_vmsne_vi =3D 519, - rv_op_vmsltu_vv =3D 520, - rv_op_vmsltu_vx =3D 521, - rv_op_vmslt_vv =3D 522, - rv_op_vmslt_vx =3D 523, - rv_op_vmsleu_vv =3D 524, - rv_op_vmsleu_vx =3D 525, - rv_op_vmsleu_vi =3D 526, - rv_op_vmsle_vv =3D 527, - rv_op_vmsle_vx =3D 528, - rv_op_vmsle_vi =3D 529, - rv_op_vmsgtu_vx =3D 530, - rv_op_vmsgtu_vi =3D 531, - rv_op_vmsgt_vx =3D 532, - rv_op_vmsgt_vi =3D 533, - rv_op_vminu_vv =3D 534, - rv_op_vminu_vx =3D 535, - rv_op_vmin_vv =3D 536, - rv_op_vmin_vx =3D 537, - rv_op_vmaxu_vv =3D 538, - rv_op_vmaxu_vx =3D 539, - rv_op_vmax_vv =3D 540, - rv_op_vmax_vx =3D 541, - rv_op_vmul_vv =3D 542, - rv_op_vmul_vx =3D 543, - rv_op_vmulh_vv =3D 544, - rv_op_vmulh_vx =3D 545, - rv_op_vmulhu_vv =3D 546, - rv_op_vmulhu_vx =3D 547, - rv_op_vmulhsu_vv =3D 548, - rv_op_vmulhsu_vx =3D 549, - rv_op_vdivu_vv =3D 550, - rv_op_vdivu_vx =3D 551, - rv_op_vdiv_vv =3D 552, - rv_op_vdiv_vx =3D 553, - rv_op_vremu_vv =3D 554, - rv_op_vremu_vx =3D 555, - rv_op_vrem_vv =3D 556, - rv_op_vrem_vx =3D 557, - rv_op_vwmulu_vv =3D 558, - rv_op_vwmulu_vx =3D 559, - rv_op_vwmulsu_vv =3D 560, - rv_op_vwmulsu_vx =3D 561, - rv_op_vwmul_vv =3D 562, - rv_op_vwmul_vx =3D 563, - rv_op_vmacc_vv =3D 564, - rv_op_vmacc_vx =3D 565, - rv_op_vnmsac_vv =3D 566, - rv_op_vnmsac_vx =3D 567, - rv_op_vmadd_vv =3D 568, - rv_op_vmadd_vx =3D 569, - rv_op_vnmsub_vv =3D 570, - rv_op_vnmsub_vx =3D 571, - rv_op_vwmaccu_vv =3D 572, - rv_op_vwmaccu_vx =3D 573, - rv_op_vwmacc_vv =3D 574, - rv_op_vwmacc_vx =3D 575, - rv_op_vwmaccsu_vv =3D 576, - rv_op_vwmaccsu_vx =3D 577, - rv_op_vwmaccus_vx =3D 578, - rv_op_vmv_v_v =3D 579, - rv_op_vmv_v_x =3D 580, - rv_op_vmv_v_i =3D 581, - rv_op_vmerge_vvm =3D 582, - rv_op_vmerge_vxm =3D 583, - rv_op_vmerge_vim =3D 584, - rv_op_vsaddu_vv =3D 585, - rv_op_vsaddu_vx =3D 586, - rv_op_vsaddu_vi =3D 587, - rv_op_vsadd_vv =3D 588, - rv_op_vsadd_vx =3D 589, - rv_op_vsadd_vi =3D 590, - rv_op_vssubu_vv =3D 591, - rv_op_vssubu_vx =3D 592, - rv_op_vssub_vv =3D 593, - rv_op_vssub_vx =3D 594, - rv_op_vaadd_vv =3D 595, - rv_op_vaadd_vx =3D 596, - rv_op_vaaddu_vv =3D 597, - rv_op_vaaddu_vx =3D 598, - rv_op_vasub_vv =3D 599, - rv_op_vasub_vx =3D 600, - rv_op_vasubu_vv =3D 601, - rv_op_vasubu_vx =3D 602, - rv_op_vsmul_vv =3D 603, - rv_op_vsmul_vx =3D 604, - rv_op_vssrl_vv =3D 605, - rv_op_vssrl_vx =3D 606, - rv_op_vssrl_vi =3D 607, - rv_op_vssra_vv =3D 608, - rv_op_vssra_vx =3D 609, - rv_op_vssra_vi =3D 610, - rv_op_vnclipu_wv =3D 611, - rv_op_vnclipu_wx =3D 612, - rv_op_vnclipu_wi =3D 613, - rv_op_vnclip_wv =3D 614, - rv_op_vnclip_wx =3D 615, - rv_op_vnclip_wi =3D 616, - rv_op_vfadd_vv =3D 617, - rv_op_vfadd_vf =3D 618, - rv_op_vfsub_vv =3D 619, - rv_op_vfsub_vf =3D 620, - rv_op_vfrsub_vf =3D 621, - rv_op_vfwadd_vv =3D 622, - rv_op_vfwadd_vf =3D 623, - rv_op_vfwadd_wv =3D 624, - rv_op_vfwadd_wf =3D 625, - rv_op_vfwsub_vv =3D 626, - rv_op_vfwsub_vf =3D 627, - rv_op_vfwsub_wv =3D 628, - rv_op_vfwsub_wf =3D 629, - rv_op_vfmul_vv =3D 630, - rv_op_vfmul_vf =3D 631, - rv_op_vfdiv_vv =3D 632, - rv_op_vfdiv_vf =3D 633, - rv_op_vfrdiv_vf =3D 634, - rv_op_vfwmul_vv =3D 635, - rv_op_vfwmul_vf =3D 636, - rv_op_vfmacc_vv =3D 637, - rv_op_vfmacc_vf =3D 638, - rv_op_vfnmacc_vv =3D 639, - rv_op_vfnmacc_vf =3D 640, - rv_op_vfmsac_vv =3D 641, - rv_op_vfmsac_vf =3D 642, - rv_op_vfnmsac_vv =3D 643, - rv_op_vfnmsac_vf =3D 644, - rv_op_vfmadd_vv =3D 645, - rv_op_vfmadd_vf =3D 646, - rv_op_vfnmadd_vv =3D 647, - rv_op_vfnmadd_vf =3D 648, - rv_op_vfmsub_vv =3D 649, - rv_op_vfmsub_vf =3D 650, - rv_op_vfnmsub_vv =3D 651, - rv_op_vfnmsub_vf =3D 652, - rv_op_vfwmacc_vv =3D 653, - rv_op_vfwmacc_vf =3D 654, - rv_op_vfwnmacc_vv =3D 655, - rv_op_vfwnmacc_vf =3D 656, - rv_op_vfwmsac_vv =3D 657, - rv_op_vfwmsac_vf =3D 658, - rv_op_vfwnmsac_vv =3D 659, - rv_op_vfwnmsac_vf =3D 660, - rv_op_vfsqrt_v =3D 661, - rv_op_vfrsqrt7_v =3D 662, - rv_op_vfrec7_v =3D 663, - rv_op_vfmin_vv =3D 664, - rv_op_vfmin_vf =3D 665, - rv_op_vfmax_vv =3D 666, - rv_op_vfmax_vf =3D 667, - rv_op_vfsgnj_vv =3D 668, - rv_op_vfsgnj_vf =3D 669, - rv_op_vfsgnjn_vv =3D 670, - rv_op_vfsgnjn_vf =3D 671, - rv_op_vfsgnjx_vv =3D 672, - rv_op_vfsgnjx_vf =3D 673, - rv_op_vfslide1up_vf =3D 674, - rv_op_vfslide1down_vf =3D 675, - rv_op_vmfeq_vv =3D 676, - rv_op_vmfeq_vf =3D 677, - rv_op_vmfne_vv =3D 678, - rv_op_vmfne_vf =3D 679, - rv_op_vmflt_vv =3D 680, - rv_op_vmflt_vf =3D 681, - rv_op_vmfle_vv =3D 682, - rv_op_vmfle_vf =3D 683, - rv_op_vmfgt_vf =3D 684, - rv_op_vmfge_vf =3D 685, - rv_op_vfclass_v =3D 686, - rv_op_vfmerge_vfm =3D 687, - rv_op_vfmv_v_f =3D 688, - rv_op_vfcvt_xu_f_v =3D 689, - rv_op_vfcvt_x_f_v =3D 690, - rv_op_vfcvt_f_xu_v =3D 691, - rv_op_vfcvt_f_x_v =3D 692, - rv_op_vfcvt_rtz_xu_f_v =3D 693, - rv_op_vfcvt_rtz_x_f_v =3D 694, - rv_op_vfwcvt_xu_f_v =3D 695, - rv_op_vfwcvt_x_f_v =3D 696, - rv_op_vfwcvt_f_xu_v =3D 697, - rv_op_vfwcvt_f_x_v =3D 698, - rv_op_vfwcvt_f_f_v =3D 699, - rv_op_vfwcvt_rtz_xu_f_v =3D 700, - rv_op_vfwcvt_rtz_x_f_v =3D 701, - rv_op_vfncvt_xu_f_w =3D 702, - rv_op_vfncvt_x_f_w =3D 703, - rv_op_vfncvt_f_xu_w =3D 704, - rv_op_vfncvt_f_x_w =3D 705, - rv_op_vfncvt_f_f_w =3D 706, - rv_op_vfncvt_rod_f_f_w =3D 707, - rv_op_vfncvt_rtz_xu_f_w =3D 708, - rv_op_vfncvt_rtz_x_f_w =3D 709, - rv_op_vredsum_vs =3D 710, - rv_op_vredand_vs =3D 711, - rv_op_vredor_vs =3D 712, - rv_op_vredxor_vs =3D 713, - rv_op_vredminu_vs =3D 714, - rv_op_vredmin_vs =3D 715, - rv_op_vredmaxu_vs =3D 716, - rv_op_vredmax_vs =3D 717, - rv_op_vwredsumu_vs =3D 718, - rv_op_vwredsum_vs =3D 719, - rv_op_vfredusum_vs =3D 720, - rv_op_vfredosum_vs =3D 721, - rv_op_vfredmin_vs =3D 722, - rv_op_vfredmax_vs =3D 723, - rv_op_vfwredusum_vs =3D 724, - rv_op_vfwredosum_vs =3D 725, - rv_op_vmand_mm =3D 726, - rv_op_vmnand_mm =3D 727, - rv_op_vmandn_mm =3D 728, - rv_op_vmxor_mm =3D 729, - rv_op_vmor_mm =3D 730, - rv_op_vmnor_mm =3D 731, - rv_op_vmorn_mm =3D 732, - rv_op_vmxnor_mm =3D 733, - rv_op_vcpop_m =3D 734, - rv_op_vfirst_m =3D 735, - rv_op_vmsbf_m =3D 736, - rv_op_vmsif_m =3D 737, - rv_op_vmsof_m =3D 738, - rv_op_viota_m =3D 739, - rv_op_vid_v =3D 740, - rv_op_vmv_x_s =3D 741, - rv_op_vmv_s_x =3D 742, - rv_op_vfmv_f_s =3D 743, - rv_op_vfmv_s_f =3D 744, - rv_op_vslideup_vx =3D 745, - rv_op_vslideup_vi =3D 746, - rv_op_vslide1up_vx =3D 747, - rv_op_vslidedown_vx =3D 748, - rv_op_vslidedown_vi =3D 749, - rv_op_vslide1down_vx =3D 750, - rv_op_vrgather_vv =3D 751, - rv_op_vrgatherei16_vv =3D 752, - rv_op_vrgather_vx =3D 753, - rv_op_vrgather_vi =3D 754, - rv_op_vcompress_vm =3D 755, - rv_op_vmv1r_v =3D 756, - rv_op_vmv2r_v =3D 757, - rv_op_vmv4r_v =3D 758, - rv_op_vmv8r_v =3D 759, - rv_op_vzext_vf2 =3D 760, - rv_op_vzext_vf4 =3D 761, - rv_op_vzext_vf8 =3D 762, - rv_op_vsext_vf2 =3D 763, - rv_op_vsext_vf4 =3D 764, - rv_op_vsext_vf8 =3D 765, - rv_op_vsetvli =3D 766, - rv_op_vsetivli =3D 767, - rv_op_vsetvl =3D 768, - rv_op_c_zext_b =3D 769, - rv_op_c_sext_b =3D 770, - rv_op_c_zext_h =3D 771, - rv_op_c_sext_h =3D 772, - rv_op_c_zext_w =3D 773, - rv_op_c_not =3D 774, - rv_op_c_mul =3D 775, - rv_op_c_lbu =3D 776, - rv_op_c_lhu =3D 777, - rv_op_c_lh =3D 778, - rv_op_c_sb =3D 779, - rv_op_c_sh =3D 780, - rv_op_cm_push =3D 781, - rv_op_cm_pop =3D 782, - rv_op_cm_popret =3D 783, - rv_op_cm_popretz =3D 784, - rv_op_cm_mva01s =3D 785, - rv_op_cm_mvsa01 =3D 786, - rv_op_cm_jt =3D 787, - rv_op_cm_jalt =3D 788, - rv_op_czero_eqz =3D 789, - rv_op_czero_nez =3D 790, - rv_op_fcvt_bf16_s =3D 791, - rv_op_fcvt_s_bf16 =3D 792, - rv_op_vfncvtbf16_f_f_w =3D 793, - rv_op_vfwcvtbf16_f_f_v =3D 794, - rv_op_vfwmaccbf16_vv =3D 795, - rv_op_vfwmaccbf16_vf =3D 796, - rv_op_flh =3D 797, - rv_op_fsh =3D 798, - rv_op_fmv_h_x =3D 799, - rv_op_fmv_x_h =3D 800, - rv_op_fli_s =3D 801, - rv_op_fli_d =3D 802, - rv_op_fli_q =3D 803, - rv_op_fli_h =3D 804, - rv_op_fminm_s =3D 805, - rv_op_fmaxm_s =3D 806, - rv_op_fminm_d =3D 807, - rv_op_fmaxm_d =3D 808, - rv_op_fminm_q =3D 809, - rv_op_fmaxm_q =3D 810, - rv_op_fminm_h =3D 811, - rv_op_fmaxm_h =3D 812, - rv_op_fround_s =3D 813, - rv_op_froundnx_s =3D 814, - rv_op_fround_d =3D 815, - rv_op_froundnx_d =3D 816, - rv_op_fround_q =3D 817, - rv_op_froundnx_q =3D 818, - rv_op_fround_h =3D 819, - rv_op_froundnx_h =3D 820, - rv_op_fcvtmod_w_d =3D 821, - rv_op_fmvh_x_d =3D 822, - rv_op_fmvp_d_x =3D 823, - rv_op_fmvh_x_q =3D 824, - rv_op_fmvp_q_x =3D 825, - rv_op_fleq_s =3D 826, - rv_op_fltq_s =3D 827, - rv_op_fleq_d =3D 828, - rv_op_fltq_d =3D 829, - rv_op_fleq_q =3D 830, - rv_op_fltq_q =3D 831, - rv_op_fleq_h =3D 832, - rv_op_fltq_h =3D 833, - rv_op_vaesdf_vv =3D 834, - rv_op_vaesdf_vs =3D 835, - rv_op_vaesdm_vv =3D 836, - rv_op_vaesdm_vs =3D 837, - rv_op_vaesef_vv =3D 838, - rv_op_vaesef_vs =3D 839, - rv_op_vaesem_vv =3D 840, - rv_op_vaesem_vs =3D 841, - rv_op_vaeskf1_vi =3D 842, - rv_op_vaeskf2_vi =3D 843, - rv_op_vaesz_vs =3D 844, - rv_op_vandn_vv =3D 845, - rv_op_vandn_vx =3D 846, - rv_op_vbrev_v =3D 847, - rv_op_vbrev8_v =3D 848, - rv_op_vclmul_vv =3D 849, - rv_op_vclmul_vx =3D 850, - rv_op_vclmulh_vv =3D 851, - rv_op_vclmulh_vx =3D 852, - rv_op_vclz_v =3D 853, - rv_op_vcpop_v =3D 854, - rv_op_vctz_v =3D 855, - rv_op_vghsh_vv =3D 856, - rv_op_vgmul_vv =3D 857, - rv_op_vrev8_v =3D 858, - rv_op_vrol_vv =3D 859, - rv_op_vrol_vx =3D 860, - rv_op_vror_vv =3D 861, - rv_op_vror_vx =3D 862, - rv_op_vror_vi =3D 863, - rv_op_vsha2ch_vv =3D 864, - rv_op_vsha2cl_vv =3D 865, - rv_op_vsha2ms_vv =3D 866, - rv_op_vsm3c_vi =3D 867, - rv_op_vsm3me_vv =3D 868, - rv_op_vsm4k_vi =3D 869, - rv_op_vsm4r_vv =3D 870, - rv_op_vsm4r_vs =3D 871, - rv_op_vwsll_vv =3D 872, - rv_op_vwsll_vx =3D 873, - rv_op_vwsll_vi =3D 874, - rv_op_amocas_w =3D 875, - rv_op_amocas_d =3D 876, - rv_op_amocas_q =3D 877, - rv_mop_r_0 =3D 878, - rv_mop_r_1 =3D 879, - rv_mop_r_2 =3D 880, - rv_mop_r_3 =3D 881, - rv_mop_r_4 =3D 882, - rv_mop_r_5 =3D 883, - rv_mop_r_6 =3D 884, - rv_mop_r_7 =3D 885, - rv_mop_r_8 =3D 886, - rv_mop_r_9 =3D 887, - rv_mop_r_10 =3D 888, - rv_mop_r_11 =3D 889, - rv_mop_r_12 =3D 890, - rv_mop_r_13 =3D 891, - rv_mop_r_14 =3D 892, - rv_mop_r_15 =3D 893, - rv_mop_r_16 =3D 894, - rv_mop_r_17 =3D 895, - rv_mop_r_18 =3D 896, - rv_mop_r_19 =3D 897, - rv_mop_r_20 =3D 898, - rv_mop_r_21 =3D 899, - rv_mop_r_22 =3D 900, - rv_mop_r_23 =3D 901, - rv_mop_r_24 =3D 902, - rv_mop_r_25 =3D 903, - rv_mop_r_26 =3D 904, - rv_mop_r_27 =3D 905, - rv_mop_r_28 =3D 906, - rv_mop_r_29 =3D 907, - rv_mop_r_30 =3D 908, - rv_mop_r_31 =3D 909, - rv_mop_rr_0 =3D 910, - rv_mop_rr_1 =3D 911, - rv_mop_rr_2 =3D 912, - rv_mop_rr_3 =3D 913, - rv_mop_rr_4 =3D 914, - rv_mop_rr_5 =3D 915, - rv_mop_rr_6 =3D 916, - rv_mop_rr_7 =3D 917, - rv_c_mop_1 =3D 918, - rv_c_mop_3 =3D 919, - rv_c_mop_5 =3D 920, - rv_c_mop_7 =3D 921, - rv_c_mop_9 =3D 922, - rv_c_mop_11 =3D 923, - rv_c_mop_13 =3D 924, - rv_c_mop_15 =3D 925, - rv_op_amoswap_b =3D 926, - rv_op_amoadd_b =3D 927, - rv_op_amoxor_b =3D 928, - rv_op_amoor_b =3D 929, - rv_op_amoand_b =3D 930, - rv_op_amomin_b =3D 931, - rv_op_amomax_b =3D 932, - rv_op_amominu_b =3D 933, - rv_op_amomaxu_b =3D 934, - rv_op_amoswap_h =3D 935, - rv_op_amoadd_h =3D 936, - rv_op_amoxor_h =3D 937, - rv_op_amoor_h =3D 938, - rv_op_amoand_h =3D 939, - rv_op_amomin_h =3D 940, - rv_op_amomax_h =3D 941, - rv_op_amominu_h =3D 942, - rv_op_amomaxu_h =3D 943, - rv_op_amocas_b =3D 944, - rv_op_amocas_h =3D 945, - rv_op_wrs_sto =3D 946, - rv_op_wrs_nto =3D 947, - rv_op_lpad =3D 948, - rv_op_sspush =3D 949, - rv_op_sspopchk =3D 950, - rv_op_ssrdp =3D 951, - rv_op_ssamoswap_w =3D 952, - rv_op_ssamoswap_d =3D 953, - rv_op_c_sspush =3D 954, - rv_op_c_sspopchk =3D 955, - rv_op_cbo_inval =3D 956, - rv_op_cbo_clean =3D 957, - rv_op_cbo_flush =3D 958, - rv_op_cbo_zero =3D 959, - rv_op_mnret =3D 960, +#define OP(N, ...) rv_op_##N, +#include "riscv-op.c.inc" +#undef OP } rv_op; =20 /* register names */ @@ -1601,967 +646,9 @@ static uint32_t operand_lpl(rv_inst inst) /* instruction metadata */ =20 static const rv_opcode_data rvi_opcode_data[] =3D { - { "illegal", rv_codec_none, rv_fmt_none }, - { "lui", rv_codec_u, rv_fmt_rd_uimm }, - { "auipc", rv_codec_u, rv_fmt_rd_uoffset }, - { "jal", rv_codec_uj, rv_fmt_rd_offset, rvcp_jal }, - { "jalr", rv_codec_i, rv_fmt_rd_rs1_offset, rvcp_jalr }, - { "beq", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_beq }, - { "bne", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bne }, - { "blt", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_blt }, - { "bge", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bge }, - { "bltu", rv_codec_sb, rv_fmt_rs1_rs2_offset }, - { "bgeu", rv_codec_sb, rv_fmt_rs1_rs2_offset }, - { "lb", rv_codec_i, rv_fmt_rd_offset_rs1 }, - { "lh", rv_codec_i, rv_fmt_rd_offset_rs1 }, - { "lw", rv_codec_i, rv_fmt_rd_offset_rs1 }, - { "lbu", rv_codec_i, rv_fmt_rd_offset_rs1 }, - { "lhu", rv_codec_i, rv_fmt_rd_offset_rs1 }, - { "sb", rv_codec_s, rv_fmt_rs2_offset_rs1 }, - { "sh", rv_codec_s, rv_fmt_rs2_offset_rs1 }, - { "sw", rv_codec_s, rv_fmt_rs2_offset_rs1 }, - { "addi", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addi }, - { "slti", rv_codec_i, rv_fmt_rd_rs1_imm }, - { "sltiu", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_sltiu }, - { "xori", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_xori }, - { "ori", rv_codec_i, rv_fmt_rd_rs1_imm }, - { "andi", rv_codec_i, rv_fmt_rd_rs1_imm }, - { "slli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm }, - { "srli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm }, - { "srai", rv_codec_i_sh7, rv_fmt_rd_rs1_imm }, - { "add", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "sub", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sub }, - { "sll", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "slt", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_slt }, - { "sltu", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sltu }, - { "xor", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "srl", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "sra", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "or", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "and", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "fence", rv_codec_r_f, rv_fmt_pred_succ }, - { "fence.i", rv_codec_none, rv_fmt_none }, - { "lwu", rv_codec_i, rv_fmt_rd_offset_rs1 }, - { "ld", rv_codec_i, rv_fmt_rd_offset_rs1 }, - { "sd", rv_codec_s, rv_fmt_rs2_offset_rs1 }, - { "addiw", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addiw }, - { "slliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm }, - { "srliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm }, - { "sraiw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm }, - { "addw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "subw", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_subw }, - { "sllw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "srlw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "sraw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "ldu", rv_codec_i, rv_fmt_rd_offset_rs1 }, - { "lq", rv_codec_i, rv_fmt_rd_offset_rs1 }, - { "sq", rv_codec_s, rv_fmt_rs2_offset_rs1 }, - { "addid", rv_codec_i, rv_fmt_rd_rs1_imm }, - { "sllid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm }, - { "srlid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm }, - { "sraid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm }, - { "addd", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "subd", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "slld", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "srld", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "srad", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "mul", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "mulh", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "mulhsu", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "mulhu", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "div", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "divu", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "rem", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "remu", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "mulw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "divw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "divuw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "remw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "remuw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "muld", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "divd", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "divud", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "remd", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "remud", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "lr.w", rv_codec_r_l, rv_fmt_aqrl_rd_rs1 }, - { "sc.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoadd.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoxor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoand.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amomin.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amomax.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amominu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amomaxu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "lr.d", rv_codec_r_l, rv_fmt_aqrl_rd_rs1 }, - { "sc.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoadd.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoxor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoand.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amomin.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amomax.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amominu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amomaxu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "lr.q", rv_codec_r_l, rv_fmt_aqrl_rd_rs1 }, - { "sc.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoswap.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoadd.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoxor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoand.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amomin.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amomax.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amominu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amomaxu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "ecall", rv_codec_none, rv_fmt_none }, - { "ebreak", rv_codec_none, rv_fmt_none }, - { "uret", rv_codec_none, rv_fmt_none }, - { "sret", rv_codec_none, rv_fmt_none }, - { "hret", rv_codec_none, rv_fmt_none }, - { "mret", rv_codec_none, rv_fmt_none }, - { "dret", rv_codec_none, rv_fmt_none }, - { "sfence.vm", rv_codec_r, rv_fmt_rs1 }, - { "sfence.vma", rv_codec_r, rv_fmt_rs1_rs2 }, - { "wfi", rv_codec_none, rv_fmt_none }, - { "csrrw", rv_codec_i_csr, rv_fmt_rd_csr_rs1 }, - { "csrrs", rv_codec_i_csr, rv_fmt_rd_csr_rs1 }, - { "csrrc", rv_codec_i_csr, rv_fmt_rd_csr_rs1 }, - { "csrrwi", rv_codec_i_csr, rv_fmt_rd_csr_zimm }, - { "csrrsi", rv_codec_i_csr, rv_fmt_rd_csr_zimm }, - { "csrrci", rv_codec_i_csr, rv_fmt_rd_csr_zimm }, - { "flw", rv_codec_i, rv_fmt_frd_offset_rs1 }, - { "fsw", rv_codec_s, rv_fmt_frs2_offset_rs1 }, - { "fmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, - { "fmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, - { "fnmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, - { "fnmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, - { "fadd.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, - { "fsub.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, - { "fmul.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, - { "fdiv.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, - { "fsgnj.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_s }, - { "fsgnjn.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_s }, - { "fsgnjx.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_s }, - { "fmin.s", rv_codec_r, rv_fmt_frd_frs1_frs2 }, - { "fmax.s", rv_codec_r, rv_fmt_frd_frs1_frs2 }, - { "fsqrt.s", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, - { "fle.s", rv_codec_r, rv_fmt_rd_frs1_frs2 }, - { "flt.s", rv_codec_r, rv_fmt_rd_frs1_frs2 }, - { "feq.s", rv_codec_r, rv_fmt_rd_frs1_frs2 }, - { "fcvt.w.s", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, - { "fcvt.wu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, - { "fcvt.s.w", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, - { "fcvt.s.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, - { "fmv.x.s", rv_codec_r, rv_fmt_rd_frs1 }, - { "fclass.s", rv_codec_r, rv_fmt_rd_frs1 }, - { "fmv.s.x", rv_codec_r, rv_fmt_frd_rs1 }, - { "fcvt.l.s", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, - { "fcvt.lu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, - { "fcvt.s.l", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, - { "fcvt.s.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, - { "fld", rv_codec_i, rv_fmt_frd_offset_rs1 }, - { "fsd", rv_codec_s, rv_fmt_frs2_offset_rs1 }, - { "fmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, - { "fmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, - { "fnmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, - { "fnmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, - { "fadd.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, - { "fsub.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, - { "fmul.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, - { "fdiv.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, - { "fsgnj.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_d }, - { "fsgnjn.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_d }, - { "fsgnjx.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_d }, - { "fmin.d", rv_codec_r, rv_fmt_frd_frs1_frs2 }, - { "fmax.d", rv_codec_r, rv_fmt_frd_frs1_frs2 }, - { "fcvt.s.d", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, - { "fcvt.d.s", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, - { "fsqrt.d", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, - { "fle.d", rv_codec_r, rv_fmt_rd_frs1_frs2 }, - { "flt.d", rv_codec_r, rv_fmt_rd_frs1_frs2 }, - { "feq.d", rv_codec_r, rv_fmt_rd_frs1_frs2 }, - { "fcvt.w.d", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, - { "fcvt.wu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, - { "fcvt.d.w", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, - { "fcvt.d.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, - { "fclass.d", rv_codec_r, rv_fmt_rd_frs1 }, - { "fcvt.l.d", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, - { "fcvt.lu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, - { "fmv.x.d", rv_codec_r, rv_fmt_rd_frs1 }, - { "fcvt.d.l", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, - { "fcvt.d.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, - { "fmv.d.x", rv_codec_r, rv_fmt_frd_rs1 }, - { "flq", rv_codec_i, rv_fmt_frd_offset_rs1 }, - { "fsq", rv_codec_s, rv_fmt_frs2_offset_rs1 }, - { "fmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, - { "fmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, - { "fnmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, - { "fnmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3 }, - { "fadd.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, - { "fsub.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, - { "fmul.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, - { "fdiv.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2 }, - { "fsgnj.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_q }, - { "fsgnjn.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_q }, - { "fsgnjx.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_q }, - { "fmin.q", rv_codec_r, rv_fmt_frd_frs1_frs2 }, - { "fmax.q", rv_codec_r, rv_fmt_frd_frs1_frs2 }, - { "fcvt.s.q", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, - { "fcvt.q.s", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, - { "fcvt.d.q", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, - { "fcvt.q.d", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, - { "fsqrt.q", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, - { "fle.q", rv_codec_r, rv_fmt_rd_frs1_frs2 }, - { "flt.q", rv_codec_r, rv_fmt_rd_frs1_frs2 }, - { "feq.q", rv_codec_r, rv_fmt_rd_frs1_frs2 }, - { "fcvt.w.q", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, - { "fcvt.wu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, - { "fcvt.q.w", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, - { "fcvt.q.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, - { "fclass.q", rv_codec_r, rv_fmt_rd_frs1 }, - { "fcvt.l.q", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, - { "fcvt.lu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, - { "fcvt.q.l", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, - { "fcvt.q.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1 }, - { "fmv.x.q", rv_codec_r, rv_fmt_rd_frs1 }, - { "fmv.q.x", rv_codec_r, rv_fmt_frd_rs1 }, - { "c.addi4spn", rv_codec_ciw_4spn, NULL, DECOMP(rv_op_addi) }, - { "c.fld", rv_codec_cl_ld, NULL, DECOMP(rv_op_fld) }, - { "c.lw", rv_codec_cl_lw, NULL, DECOMP(rv_op_lw) }, - { "c.flw", rv_codec_cl_lw, NULL, DECOMP(rv_op_flw) }, - { "c.fsd", rv_codec_cs_sd, NULL, DECOMP(rv_op_fsd) }, - { "c.sw", rv_codec_cs_sw, NULL, DECOMP(rv_op_sw) }, - { "c.fsw", rv_codec_cs_sw, NULL, DECOMP(rv_op_fsw) }, - { }, - { "c.addi", rv_codec_ci, NULL, DECOMP(rv_op_addi) }, - { "c.jal", rv_codec_cj_jal, NULL, DECOMP(rv_op_jal) }, - { "c.li", rv_codec_ci_li, NULL, DECOMP(rv_op_addi) }, - { "c.addi16sp", rv_codec_ci_16sp, NULL, DECOMP(rv_op_addi) }, - { "c.lui", rv_codec_ci_lui, NULL, DECOMP(rv_op_lui) }, - { "c.srli", rv_codec_cb_sh6, NULL, DECOMP(rv_op_srli) }, - { "c.srai", rv_codec_cb_sh6, NULL, DECOMP(rv_op_srai) }, - { "c.andi", rv_codec_cb_imm, NULL, DECOMP(rv_op_andi) }, - { "c.sub", rv_codec_cs, NULL, DECOMP(rv_op_sub) }, - { "c.xor", rv_codec_cs, NULL, DECOMP(rv_op_xor) }, - { "c.or", rv_codec_cs, NULL, DECOMP(rv_op_or) }, - { "c.and", rv_codec_cs, NULL, DECOMP(rv_op_and) }, - { "c.subw", rv_codec_cs, NULL, DECOMP(rv_op_subw) }, - { "c.addw", rv_codec_cs, NULL, DECOMP(rv_op_addw) }, - { "c.j", rv_codec_cj, NULL, DECOMP(rv_op_j) }, - { "c.beqz", rv_codec_cb, NULL, DECOMP(rv_op_beqz) }, - { "c.bnez", rv_codec_cb, NULL, DECOMP(rv_op_bnez) }, - { "c.slli", rv_codec_ci_sh6, NULL, DECOMP(rv_op_slli) }, - { "c.fldsp", rv_codec_ci_ldsp, NULL, DECOMP(rv_op_fld) }, - { "c.lwsp", rv_codec_ci_lwsp, NULL, DECOMP(rv_op_lw) }, - { "c.flwsp", rv_codec_ci_lwsp, NULL, DECOMP(rv_op_flw) }, - { "c.jr", rv_codec_cr_jr, NULL, DECOMP(rv_op_jr) }, - { "c.mv", rv_codec_cr_mv, NULL, DECOMP(rv_op_mv) }, - { "c.ebreak", rv_codec_ci_none, NULL, DECOMP(rv_op_ebreak) }, - { "c.jalr", rv_codec_cr_jalr, NULL, DECOMP(rv_op_jalr) }, - { "c.add", rv_codec_cr, NULL, DECOMP(rv_op_add) }, - { "c.fsdsp", rv_codec_css_sdsp, NULL, DECOMP(rv_op_fsd) }, - { "c.swsp", rv_codec_css_swsp, NULL, DECOMP(rv_op_sw) }, - { "c.fswsp", rv_codec_css_swsp, NULL, DECOMP(rv_op_fsw) }, - { "c.ld", rv_codec_cl_ld, NULL, DECOMP(rv_op_ld) }, - { "c.sd", rv_codec_cs_sd, NULL, DECOMP(rv_op_sd) }, - { "c.addiw", rv_codec_ci, NULL, DECOMP(rv_op_addiw) }, - { "c.ldsp", rv_codec_ci_ldsp, NULL, DECOMP(rv_op_ld) }, - { "c.sdsp", rv_codec_css_sdsp, NULL, DECOMP(rv_op_sd) }, - { "c.lq", rv_codec_cl_lq, NULL, DECOMP(rv_op_lq) }, - { "c.sq", rv_codec_cs_sq, NULL, DECOMP(rv_op_sq) }, - { "c.lqsp", rv_codec_ci_lqsp, NULL, DECOMP(rv_op_lq) }, - { "c.sqsp", rv_codec_css_sqsp, NULL, DECOMP(rv_op_sq) }, - { "nop", rv_codec_illegal, rv_fmt_none }, - { "mv", rv_codec_illegal, rv_fmt_rd_rs1, rvcp_mv }, - { "not", rv_codec_illegal, rv_fmt_rd_rs1 }, - { "neg", rv_codec_illegal, rv_fmt_rd_rs2 }, - { "negw", rv_codec_illegal, rv_fmt_rd_rs2 }, - { "sext.w", rv_codec_illegal, rv_fmt_rd_rs1 }, - { "seqz", rv_codec_illegal, rv_fmt_rd_rs1 }, - { "snez", rv_codec_illegal, rv_fmt_rd_rs2 }, - { "sltz", rv_codec_illegal, rv_fmt_rd_rs1 }, - { "sgtz", rv_codec_illegal, rv_fmt_rd_rs2 }, - { "fmv.s", rv_codec_illegal, rv_fmt_frd_frs1 }, - { "fabs.s", rv_codec_illegal, rv_fmt_frd_frs1 }, - { "fneg.s", rv_codec_illegal, rv_fmt_frd_frs1 }, - { "fmv.d", rv_codec_illegal, rv_fmt_frd_frs1 }, - { "fabs.d", rv_codec_illegal, rv_fmt_frd_frs1 }, - { "fneg.d", rv_codec_illegal, rv_fmt_frd_frs1 }, - { "fmv.q", rv_codec_illegal, rv_fmt_frd_frs1 }, - { "fabs.q", rv_codec_illegal, rv_fmt_frd_frs1 }, - { "fneg.q", rv_codec_illegal, rv_fmt_frd_frs1 }, - { "beqz", rv_codec_illegal, rv_fmt_rs1_offset }, - { "bnez", rv_codec_illegal, rv_fmt_rs1_offset }, - { "blez", rv_codec_illegal, rv_fmt_rs2_offset }, - { "bgez", rv_codec_illegal, rv_fmt_rs1_offset }, - { "bltz", rv_codec_illegal, rv_fmt_rs1_offset }, - { "bgtz", rv_codec_illegal, rv_fmt_rs2_offset }, - { "jal", rv_codec_illegal, rv_fmt_offset }, /* rv_op_jal_ra */ - { "jalr", rv_codec_illegal, rv_fmt_rs1 }, /* rv_op_jalr_ra */ - { }, - { }, - { "j", rv_codec_illegal, rv_fmt_offset }, - { "ret", rv_codec_illegal, rv_fmt_none }, - { "jr", rv_codec_illegal, rv_fmt_rs1, rvcp_jr }, - { "rdcycle", rv_codec_i_csr, rv_fmt_rd }, - { "rdtime", rv_codec_i_csr, rv_fmt_rd }, - { "rdinstret", rv_codec_i_csr, rv_fmt_rd }, - { "rdcycleh", rv_codec_i_csr, rv_fmt_rd }, - { "rdtimeh", rv_codec_i_csr, rv_fmt_rd }, - { "rdinstreth", rv_codec_i_csr, rv_fmt_rd }, - { "frcsr", rv_codec_i_csr, rv_fmt_rd }, - { "frrm", rv_codec_i_csr, rv_fmt_rd }, - { "frflags", rv_codec_i_csr, rv_fmt_rd }, - { "fscsr", rv_codec_i_csr, rv_fmt_rd_rs1 }, - { "fsrm", rv_codec_i_csr, rv_fmt_rd_rs1 }, - { "fsflags", rv_codec_i_csr, rv_fmt_rd_rs1 }, - { "fsrmi", rv_codec_i_csr, rv_fmt_rd_zimm }, - { "fsflagsi", rv_codec_i_csr, rv_fmt_rd_zimm }, - { "bseti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm }, - { "bclri", rv_codec_i_sh7, rv_fmt_rd_rs1_imm }, - { "binvi", rv_codec_i_sh7, rv_fmt_rd_rs1_imm }, - { "bexti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm }, - { "rori", rv_codec_i_sh7, rv_fmt_rd_rs1_imm }, - { "clz", rv_codec_r, rv_fmt_rd_rs1 }, - { "ctz", rv_codec_r, rv_fmt_rd_rs1 }, - { "cpop", rv_codec_r, rv_fmt_rd_rs1 }, - { "sext.h", rv_codec_r, rv_fmt_rd_rs1 }, - { "sext.b", rv_codec_r, rv_fmt_rd_rs1 }, - { "xnor", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "orn", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "andn", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "rol", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "ror", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "sh1add", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "sh2add", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "sh3add", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "sh1add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "sh2add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "sh3add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "clmul", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "clmulr", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "clmulh", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "min", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "minu", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "max", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "maxu", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "clzw", rv_codec_r, rv_fmt_rd_rs1 }, - { "ctzw", rv_codec_r, rv_fmt_rd_rs1 }, - { "cpopw", rv_codec_r, rv_fmt_rd_rs1 }, - { "slli.uw", rv_codec_i_sh6, rv_fmt_rd_rs1_imm }, - { "add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "rolw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "rorw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "rev8", rv_codec_r, rv_fmt_rd_rs1 }, - { "zext.h", rv_codec_r, rv_fmt_rd_rs1 }, - { "roriw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm }, - { "orc.b", rv_codec_r, rv_fmt_rd_rs1 }, - { "bset", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "bclr", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "binv", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "bext", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "aes32esmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs }, - { "aes32esi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs }, - { "aes32dsmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs }, - { "aes32dsi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs }, - { "aes64ks1i", rv_codec_k_rnum, rv_fmt_rd_rs1_rnum }, - { "aes64ks2", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "aes64im", rv_codec_r, rv_fmt_rd_rs1 }, - { "aes64esm", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "aes64es", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "aes64dsm", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "aes64ds", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "sha256sig0", rv_codec_r, rv_fmt_rd_rs1 }, - { "sha256sig1", rv_codec_r, rv_fmt_rd_rs1 }, - { "sha256sum0", rv_codec_r, rv_fmt_rd_rs1 }, - { "sha256sum1", rv_codec_r, rv_fmt_rd_rs1 }, - { "sha512sig0", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "sha512sig1", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "sha512sum0", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "sha512sum1", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "sha512sum0r", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "sha512sum1r", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "sha512sig0l", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "sha512sig0h", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "sha512sig1l", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "sha512sig1h", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "sm3p0", rv_codec_r, rv_fmt_rd_rs1 }, - { "sm3p1", rv_codec_r, rv_fmt_rd_rs1 }, - { "sm4ed", rv_codec_k_bs, rv_fmt_rs1_rs2_bs }, - { "sm4ks", rv_codec_k_bs, rv_fmt_rs1_rs2_bs }, - { "brev8", rv_codec_r, rv_fmt_rd_rs1 }, - { "pack", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "packh", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "packw", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "unzip", rv_codec_r, rv_fmt_rd_rs1 }, - { "zip", rv_codec_r, rv_fmt_rd_rs1 }, - { "xperm4", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "xperm8", rv_codec_r, rv_fmt_rd_rs1 }, - { "vle8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vle16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vle32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vle64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vse8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vse16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vse32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vse64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vlm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vsm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vlse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm }, - { "vlse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm }, - { "vlse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm }, - { "vlse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm }, - { "vsse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm }, - { "vsse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm }, - { "vsse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm }, - { "vsse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm }, - { "vluxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, - { "vluxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, - { "vluxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, - { "vluxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, - { "vloxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, - { "vloxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, - { "vloxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, - { "vloxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, - { "vsuxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, - { "vsuxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, - { "vsuxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, - { "vsuxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, - { "vsoxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, - { "vsoxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, - { "vsoxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, - { "vsoxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm }, - { "vle8ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vle16ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vle32ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vle64ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vl1re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vl1re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vl1re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vl1re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vl2re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vl2re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vl2re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vl2re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vl4re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vl4re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vl4re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vl4re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vl8re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vl8re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vl8re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vl8re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vs1r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vs2r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vs4r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vs8r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm }, - { "vadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, - { "vsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vrsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vrsub.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, - { "vwaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vwaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vwadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vwsubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vwsubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vwsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vwaddu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vwaddu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vwadd.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vwsubu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vwsubu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vwsub.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl }, - { "vadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl }, - { "vadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl }, - { "vmadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl }, - { "vmadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl }, - { "vmadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl }, - { "vsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl }, - { "vsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl }, - { "vmsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl }, - { "vmsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl }, - { "vand.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vand.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vand.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, - { "vor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, - { "vxor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vxor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vxor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, - { "vsll.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vsll.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vsll.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, - { "vsrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vsrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vsrl.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, - { "vsra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vsra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vsra.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, - { "vnsrl.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vnsrl.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vnsrl.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, - { "vnsra.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vnsra.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vnsra.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, - { "vmseq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmseq.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vmseq.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, - { "vmsne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmsne.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vmsne.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, - { "vmsltu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmsltu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vmslt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmslt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vmsleu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmsleu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vmsleu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, - { "vmsle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmsle.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vmsle.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, - { "vmsgtu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vmsgtu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, - { "vmsgt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vmsgt.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, - { "vminu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vminu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmin.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vmaxu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmaxu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmax.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vmulh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmulh.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vmulhu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmulhu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vmulhsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmulhsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vdivu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vdivu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vdiv.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vremu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vremu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vrem.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vrem.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vwmulu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vwmulu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vwmulsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vwmulsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vwmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, - { "vmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm }, - { "vnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, - { "vnmsac.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm }, - { "vmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, - { "vmadd.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm }, - { "vnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, - { "vnmsub.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm }, - { "vwmaccu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, - { "vwmaccu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm }, - { "vwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, - { "vwmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm }, - { "vwmaccsu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, - { "vwmaccsu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm }, - { "vwmaccus.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm }, - { "vmv.v.v", rv_codec_v_r, rv_fmt_vd_vs1 }, - { "vmv.v.x", rv_codec_v_r, rv_fmt_vd_rs1 }, - { "vmv.v.i", rv_codec_v_i, rv_fmt_vd_imm }, - { "vmerge.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl }, - { "vmerge.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl }, - { "vmerge.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl }, - { "vsaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vsaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vsaddu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, - { "vsadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vsadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vsadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm }, - { "vssubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vssubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vssub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vssub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vaadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vaadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vaaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vaaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vasub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vasub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vasubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vasubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vsmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vsmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vssrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vssrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vssrl.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, - { "vssra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vssra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vssra.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, - { "vnclipu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vnclipu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vnclipu.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, - { "vnclip.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vnclip.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vnclip.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, - { "vfadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vfadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vfsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vfsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vfrsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vfwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vfwadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vfwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vfwadd.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vfwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vfwsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vfwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vfwsub.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vfmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vfmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vfdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vfdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vfrdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vfwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vfwmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vfmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, - { "vfmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, - { "vfnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, - { "vfnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, - { "vfmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, - { "vfmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, - { "vfnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, - { "vfnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, - { "vfmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, - { "vfmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, - { "vfnmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, - { "vfnmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, - { "vfmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, - { "vfmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, - { "vfnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, - { "vfnmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, - { "vfwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, - { "vfwmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, - { "vfwnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, - { "vfwnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, - { "vfwmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, - { "vfwmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, - { "vfwnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, - { "vfwnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, - { "vfsqrt.v", rv_codec_v_r, rv_fmt_vd_vs2 }, - { "vfrsqrt7.v", rv_codec_v_r, rv_fmt_vd_vs2 }, - { "vfrec7.v", rv_codec_v_r, rv_fmt_vd_vs2 }, - { "vfmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vfmin.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vfmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vfmax.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vfsgnj.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vfsgnj.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vfsgnjn.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vfsgnjn.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vfsgnjx.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vfsgnjx.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vfslide1up.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vfslide1down.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vmfeq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmfeq.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vmfne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmfne.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vmflt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmflt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vmfle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmfle.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vmfgt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vmfge.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm }, - { "vfclass.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfmerge.vfm", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vl }, - { "vfmv.v.f", rv_codec_v_r, rv_fmt_vd_fs1 }, - { "vfcvt.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfcvt.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfcvt.f.xu.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfcvt.f.x.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfcvt.rtz.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfcvt.rtz.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfwcvt.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfwcvt.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfwcvt.f.xu.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfwcvt.f.x.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfwcvt.f.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfwcvt.rtz.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfwcvt.rtz.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfncvt.xu.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfncvt.x.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfncvt.f.xu.w", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfncvt.f.x.w", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfncvt.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfncvt.rod.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfncvt.rtz.xu.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfncvt.rtz.x.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vredand.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vredor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vredxor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vredminu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vredmaxu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vwredsumu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vwredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vfredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vfredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vfredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vfredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vfwredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vfwredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmnand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmandn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmxor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmorn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vmxnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vcpop.m", rv_codec_v_r, rv_fmt_rd_vs2_vm }, - { "vfirst.m", rv_codec_v_r, rv_fmt_rd_vs2_vm }, - { "vmsbf.m", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vmsif.m", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vmsof.m", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "viota.m", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vid.v", rv_codec_v_r, rv_fmt_vd_vm }, - { "vmv.x.s", rv_codec_v_r, rv_fmt_rd_vs2 }, - { "vmv.s.x", rv_codec_v_r, rv_fmt_vd_rs1 }, - { "vfmv.f.s", rv_codec_v_r, rv_fmt_fd_vs2 }, - { "vfmv.s.f", rv_codec_v_r, rv_fmt_vd_fs1 }, - { "vslideup.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vslideup.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, - { "vslide1up.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vslidedown.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vslidedown.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, - { "vslide1down.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vrgather.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vrgatherei16.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vrgather.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vrgather.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, - { "vcompress.vm", rv_codec_v_r, rv_fmt_vd_vs2_vs1 }, - { "vmv1r.v", rv_codec_v_r, rv_fmt_vd_vs2 }, - { "vmv2r.v", rv_codec_v_r, rv_fmt_vd_vs2 }, - { "vmv4r.v", rv_codec_v_r, rv_fmt_vd_vs2 }, - { "vmv8r.v", rv_codec_v_r, rv_fmt_vd_vs2 }, - { "vzext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vzext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vzext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vsext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vsext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vsext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vsetvli", rv_codec_vsetvli, rv_fmt_vsetvli }, - { "vsetivli", rv_codec_vsetivli, rv_fmt_vsetivli }, - { "vsetvl", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "c.zext.b", rv_codec_zcb_ext, rv_fmt_rd }, - { "c.sext.b", rv_codec_zcb_ext, rv_fmt_rd }, - { "c.zext.h", rv_codec_zcb_ext, rv_fmt_rd }, - { "c.sext.h", rv_codec_zcb_ext, rv_fmt_rd }, - { "c.zext.w", rv_codec_zcb_ext, rv_fmt_rd }, - { "c.not", rv_codec_zcb_ext, rv_fmt_rd }, - { "c.mul", rv_codec_zcb_mul, rv_fmt_rd_rs2 }, - { "c.lbu", rv_codec_zcb_lb, rv_fmt_rs1_rs2_zce_ldst }, - { "c.lhu", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst }, - { "c.lh", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst }, - { "c.sb", rv_codec_zcb_lb, rv_fmt_rs1_rs2_zce_ldst }, - { "c.sh", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst }, - { "cm.push", rv_codec_zcmp_cm_pushpop, rv_fmt_push_rlist }, - { "cm.pop", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist }, - { "cm.popret", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist }, - { "cm.popretz", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist }, - { "cm.mva01s", rv_codec_zcmp_cm_mv, rv_fmt_rd_rs2 }, - { "cm.mvsa01", rv_codec_zcmp_cm_mv, rv_fmt_rd_rs2 }, - { "cm.jt", rv_codec_zcmt_jt, rv_fmt_zcmt_index }, - { "cm.jalt", rv_codec_zcmt_jt, rv_fmt_zcmt_index }, - { "czero.eqz", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "czero.nez", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "fcvt.bf16.s", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, - { "fcvt.s.bf16", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, - { "vfncvtbf16.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfwcvtbf16.f.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vfwmaccbf16.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm }, - { "vfwmaccbf16.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm }, - { "flh", rv_codec_i, rv_fmt_frd_offset_rs1 }, - { "fsh", rv_codec_s, rv_fmt_frs2_offset_rs1 }, - { "fmv.h.x", rv_codec_r, rv_fmt_frd_rs1 }, - { "fmv.x.h", rv_codec_r, rv_fmt_rd_frs1 }, - { "fli.s", rv_codec_fli, rv_fmt_fli }, - { "fli.d", rv_codec_fli, rv_fmt_fli }, - { "fli.q", rv_codec_fli, rv_fmt_fli }, - { "fli.h", rv_codec_fli, rv_fmt_fli }, - { "fminm.s", rv_codec_r, rv_fmt_frd_frs1_frs2 }, - { "fmaxm.s", rv_codec_r, rv_fmt_frd_frs1_frs2 }, - { "fminm.d", rv_codec_r, rv_fmt_frd_frs1_frs2 }, - { "fmaxm.d", rv_codec_r, rv_fmt_frd_frs1_frs2 }, - { "fminm.q", rv_codec_r, rv_fmt_frd_frs1_frs2 }, - { "fmaxm.q", rv_codec_r, rv_fmt_frd_frs1_frs2 }, - { "fminm.h", rv_codec_r, rv_fmt_frd_frs1_frs2 }, - { "fmaxm.h", rv_codec_r, rv_fmt_frd_frs1_frs2 }, - { "fround.s", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, - { "froundnx.s", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, - { "fround.d", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, - { "froundnx.d", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, - { "fround.q", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, - { "froundnx.q", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, - { "fround.h", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, - { "froundnx.h", rv_codec_r_m, rv_fmt_rm_frd_frs1 }, - { "fcvtmod.w.d", rv_codec_r_m, rv_fmt_rm_rd_frs1 }, - { "fmvh.x.d", rv_codec_r, rv_fmt_rd_frs1 }, - { "fmvp.d.x", rv_codec_r, rv_fmt_frd_rs1_rs2 }, - { "fmvh.x.q", rv_codec_r, rv_fmt_rd_frs1 }, - { "fmvp.q.x", rv_codec_r, rv_fmt_frd_rs1_rs2 }, - { "fleq.s", rv_codec_r, rv_fmt_rd_frs1_frs2 }, - { "fltq.s", rv_codec_r, rv_fmt_rd_frs1_frs2 }, - { "fleq.d", rv_codec_r, rv_fmt_rd_frs1_frs2 }, - { "fltq.d", rv_codec_r, rv_fmt_rd_frs1_frs2 }, - { "fleq.q", rv_codec_r, rv_fmt_rd_frs1_frs2 }, - { "fltq.q", rv_codec_r, rv_fmt_rd_frs1_frs2 }, - { "fleq.h", rv_codec_r, rv_fmt_rd_frs1_frs2 }, - { "fltq.h", rv_codec_r, rv_fmt_rd_frs1_frs2 }, - { "vaesdf.vv", rv_codec_v_r, rv_fmt_vd_vs2 }, - { "vaesdf.vs", rv_codec_v_r, rv_fmt_vd_vs2 }, - { "vaesdm.vv", rv_codec_v_r, rv_fmt_vd_vs2 }, - { "vaesdm.vs", rv_codec_v_r, rv_fmt_vd_vs2 }, - { "vaesef.vv", rv_codec_v_r, rv_fmt_vd_vs2 }, - { "vaesef.vs", rv_codec_v_r, rv_fmt_vd_vs2 }, - { "vaesem.vv", rv_codec_v_r, rv_fmt_vd_vs2 }, - { "vaesem.vs", rv_codec_v_r, rv_fmt_vd_vs2 }, - { "vaeskf1.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm }, - { "vaeskf2.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm }, - { "vaesz.vs", rv_codec_v_r, rv_fmt_vd_vs2 }, - { "vandn.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vandn.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vbrev.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vbrev8.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vclmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vclmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vclmulh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vclmulh.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vclz.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vcpop.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vctz.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vghsh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1 }, - { "vgmul.vv", rv_codec_v_r, rv_fmt_vd_vs2 }, - { "vrev8.v", rv_codec_v_r, rv_fmt_vd_vs2_vm }, - { "vrol.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vrol.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vror.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vror.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vror.vi", rv_codec_vror_vi, rv_fmt_vd_vs2_uimm_vm }, - { "vsha2ch.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1 }, - { "vsha2cl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1 }, - { "vsha2ms.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1 }, - { "vsm3c.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm }, - { "vsm3me.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1 }, - { "vsm4k.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm }, - { "vsm4r.vv", rv_codec_v_r, rv_fmt_vd_vs2 }, - { "vsm4r.vs", rv_codec_v_r, rv_fmt_vd_vs2 }, - { "vwsll.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm }, - { "vwsll.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm }, - { "vwsll.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm }, - { "amocas.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amocas.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amocas.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "mop.r.0", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.1", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.2", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.3", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.4", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.5", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.6", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.7", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.8", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.9", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.10", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.11", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.12", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.13", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.14", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.15", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.16", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.17", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.18", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.19", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.20", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.21", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.22", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.23", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.24", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.25", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.26", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.27", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.28", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.29", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.30", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.r.31", rv_codec_r, rv_fmt_rd_rs1 }, - { "mop.rr.0", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "mop.rr.1", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "mop.rr.2", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "mop.rr.3", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "mop.rr.4", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "mop.rr.5", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "mop.rr.6", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "mop.rr.7", rv_codec_r, rv_fmt_rd_rs1_rs2 }, - { "c.mop.1", rv_codec_ci_none, rv_fmt_none }, - { "c.mop.3", rv_codec_ci_none, rv_fmt_none }, - { "c.mop.5", rv_codec_ci_none, rv_fmt_none }, - { "c.mop.7", rv_codec_ci_none, rv_fmt_none }, - { "c.mop.9", rv_codec_ci_none, rv_fmt_none }, - { "c.mop.11", rv_codec_ci_none, rv_fmt_none }, - { "c.mop.13", rv_codec_ci_none, rv_fmt_none }, - { "c.mop.15", rv_codec_ci_none, rv_fmt_none }, - { "amoswap.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoadd.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoxor.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoor.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoand.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amomin.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amomax.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amominu.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amomaxu.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoswap.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoadd.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoxor.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoor.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amoand.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amomin.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amomax.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amominu.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amomaxu.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amocas.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "amocas.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "wrs.sto", rv_codec_none, rv_fmt_none }, - { "wrs.nto", rv_codec_none, rv_fmt_none }, - { "lpad", rv_codec_lp, rv_fmt_imm }, - { "sspush", rv_codec_r, rv_fmt_rs2 }, - { "sspopchk", rv_codec_r, rv_fmt_rs1 }, - { "ssrdp", rv_codec_r, rv_fmt_rd }, - { "ssamoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "ssamoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1 }, - { "c.sspush", rv_codec_cmop_ss, NULL, DECOMP(rv_op_sspush) }, - { "c.sspopchk", rv_codec_cmop_ss, NULL, DECOMP(rv_op_sspopchk) }, - { "cbo.inval", rv_codec_r, rv_fmt_rs1 }, - { "cbo.clean", rv_codec_r, rv_fmt_rs1 }, - { "cbo.flush", rv_codec_r, rv_fmt_rs1 }, - { "cbo.zero", rv_codec_r, rv_fmt_rs1 }, - { "mnret", rv_codec_none, rv_fmt_none }, +#define OP(N, ...) { __VA_ARGS__ }, +#include "riscv-op.c.inc" +#undef OP }; =20 /* CSR names */ @@ -2928,7 +1015,7 @@ static const rv_opcode_data *decode_inst_opcode(rv_de= code *dec, rv_isa isa) (((inst >> 11) & 0b11) =3D=3D 0b0)) { unsigned int cmop_code =3D 0; cmop_code =3D ((inst >> 8) & 0b111); - op =3D rv_c_mop_1 + cmop_code; + op =3D rv_op_c_mop_1 + cmop_code; if (dec->cfg->ext_zicfiss) { op =3D (cmop_code =3D=3D 0) ? rv_op_c_sspush : op; op =3D (cmop_code =3D=3D 2) ? rv_op_c_sspopchk : o= p; @@ -4459,7 +2546,7 @@ static const rv_opcode_data *decode_inst_opcode(rv_de= code *dec, rv_isa isa) 2, 2, extract32(inst, 26,= 2)), 4, 1, extract32(inst, 30, 1)); - op =3D rv_mop_r_0 + imm_mop5; + op =3D rv_op_mop_r_0 + imm_mop5; /* if zicfiss enabled and mop5 is shadow stack */ if (dec->cfg->ext_zicfiss && ((imm_mop5 & 0b11100) =3D=3D 0b11100)) { @@ -4478,7 +2565,7 @@ static const rv_opcode_data *decode_inst_opcode(rv_de= code *dec, rv_isa isa) =3D=3D 0b1000001) { imm_mop3 =3D deposit32(extract32(inst, 26, 2), 2, 1, extract32(inst, 30, 1)); - op =3D rv_mop_rr_0 + imm_mop3; + op =3D rv_op_mop_rr_0 + imm_mop3; /* if zicfiss enabled and mop3 is shadow stack */ if (dec->cfg->ext_zicfiss && ((imm_mop3 & 0b111) =3D=3D 0b111)) { diff --git a/disas/riscv-op.c.inc b/disas/riscv-op.c.inc new file mode 100644 index 0000000000..3fe934688e --- /dev/null +++ b/disas/riscv-op.c.inc @@ -0,0 +1,958 @@ +OP(illegal, "illegal", rv_codec_none, rv_fmt_none) +OP(lui, "lui", rv_codec_u, rv_fmt_rd_uimm) +OP(auipc, "auipc", rv_codec_u, rv_fmt_rd_uoffset) +OP(jal, "jal", rv_codec_uj, rv_fmt_rd_offset, rvcp_jal) +OP(jalr, "jalr", rv_codec_i, rv_fmt_rd_rs1_offset, rvcp_jalr) +OP(beq, "beq", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_beq) +OP(bne, "bne", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bne) +OP(blt, "blt", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_blt) +OP(bge, "bge", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bge) +OP(bltu, "bltu", rv_codec_sb, rv_fmt_rs1_rs2_offset) +OP(bgeu, "bgeu", rv_codec_sb, rv_fmt_rs1_rs2_offset) +OP(lb, "lb", rv_codec_i, rv_fmt_rd_offset_rs1) +OP(lh, "lh", rv_codec_i, rv_fmt_rd_offset_rs1) +OP(lw, "lw", rv_codec_i, rv_fmt_rd_offset_rs1) +OP(lbu, "lbu", rv_codec_i, rv_fmt_rd_offset_rs1) +OP(lhu, "lhu", rv_codec_i, rv_fmt_rd_offset_rs1) +OP(sb, "sb", rv_codec_s, rv_fmt_rs2_offset_rs1) +OP(sh, "sh", rv_codec_s, rv_fmt_rs2_offset_rs1) +OP(sw, "sw", rv_codec_s, rv_fmt_rs2_offset_rs1) +OP(addi, "addi", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addi) +OP(slti, "slti", rv_codec_i, rv_fmt_rd_rs1_imm) +OP(sltiu, "sltiu", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_sltiu) +OP(xori, "xori", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_xori) +OP(ori, "ori", rv_codec_i, rv_fmt_rd_rs1_imm) +OP(andi, "andi", rv_codec_i, rv_fmt_rd_rs1_imm) +OP(slli, "slli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) +OP(srli, "srli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) +OP(srai, "srai", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) +OP(add, "add", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sub, "sub", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sub) +OP(sll, "sll", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(slt, "slt", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_slt) +OP(sltu, "sltu", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sltu) +OP(xor, "xor", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(srl, "srl", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sra, "sra", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(or, "or", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(and, "and", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(fence, "fence", rv_codec_r_f, rv_fmt_pred_succ) +OP(fence_i, "fence.i", rv_codec_none, rv_fmt_none) +OP(lwu, "lwu", rv_codec_i, rv_fmt_rd_offset_rs1) +OP(ld, "ld", rv_codec_i, rv_fmt_rd_offset_rs1) +OP(sd, "sd", rv_codec_s, rv_fmt_rs2_offset_rs1) +OP(addiw, "addiw", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addiw) +OP(slliw, "slliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm) +OP(srliw, "srliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm) +OP(sraiw, "sraiw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm) +OP(addw, "addw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(subw, "subw", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_subw) +OP(sllw, "sllw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(srlw, "srlw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sraw, "sraw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(ldu, "ldu", rv_codec_i, rv_fmt_rd_offset_rs1) +OP(lq, "lq", rv_codec_i, rv_fmt_rd_offset_rs1) +OP(sq, "sq", rv_codec_s, rv_fmt_rs2_offset_rs1) +OP(addid, "addid", rv_codec_i, rv_fmt_rd_rs1_imm) +OP(sllid, "sllid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm) +OP(srlid, "srlid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm) +OP(sraid, "sraid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm) +OP(addd, "addd", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(subd, "subd", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(slld, "slld", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(srld, "srld", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(srad, "srad", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(mul, "mul", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(mulh, "mulh", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(mulhsu, "mulhsu", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(mulhu, "mulhu", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(div, "div", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(divu, "divu", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(rem, "rem", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(remu, "remu", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(mulw, "mulw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(divw, "divw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(divuw, "divuw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(remw, "remw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(remuw, "remuw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(muld, "muld", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(divd, "divd", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(divud, "divud", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(remd, "remd", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(remud, "remud", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(lr_w, "lr.w", rv_codec_r_l, rv_fmt_aqrl_rd_rs1) +OP(sc_w, "sc.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoswap_w, "amoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoadd_w, "amoadd.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoxor_w, "amoxor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoor_w, "amoor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoand_w, "amoand.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomin_w, "amomin.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomax_w, "amomax.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amominu_w, "amominu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomaxu_w, "amomaxu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(lr_d, "lr.d", rv_codec_r_l, rv_fmt_aqrl_rd_rs1) +OP(sc_d, "sc.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoswap_d, "amoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoadd_d, "amoadd.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoxor_d, "amoxor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoor_d, "amoor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoand_d, "amoand.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomin_d, "amomin.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomax_d, "amomax.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amominu_d, "amominu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomaxu_d, "amomaxu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(lr_q, "lr.q", rv_codec_r_l, rv_fmt_aqrl_rd_rs1) +OP(sc_q, "sc.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoswap_q, "amoswap.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoadd_q, "amoadd.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoxor_q, "amoxor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoor_q, "amoor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoand_q, "amoand.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomin_q, "amomin.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomax_q, "amomax.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amominu_q, "amominu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomaxu_q, "amomaxu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(ecall, "ecall", rv_codec_none, rv_fmt_none) +OP(ebreak, "ebreak", rv_codec_none, rv_fmt_none) +OP(uret, "uret", rv_codec_none, rv_fmt_none) +OP(sret, "sret", rv_codec_none, rv_fmt_none) +OP(hret, "hret", rv_codec_none, rv_fmt_none) +OP(mret, "mret", rv_codec_none, rv_fmt_none) +OP(dret, "dret", rv_codec_none, rv_fmt_none) +OP(sfence_vm, "sfence.vm", rv_codec_r, rv_fmt_rs1) +OP(sfence_vma, "sfence.vma", rv_codec_r, rv_fmt_rs1_rs2) +OP(wfi, "wfi", rv_codec_none, rv_fmt_none) +OP(csrrw, "csrrw", rv_codec_i_csr, rv_fmt_rd_csr_rs1) +OP(csrrs, "csrrs", rv_codec_i_csr, rv_fmt_rd_csr_rs1) +OP(csrrc, "csrrc", rv_codec_i_csr, rv_fmt_rd_csr_rs1) +OP(csrrwi, "csrrwi", rv_codec_i_csr, rv_fmt_rd_csr_zimm) +OP(csrrsi, "csrrsi", rv_codec_i_csr, rv_fmt_rd_csr_zimm) +OP(csrrci, "csrrci", rv_codec_i_csr, rv_fmt_rd_csr_zimm) +OP(flw, "flw", rv_codec_i, rv_fmt_frd_offset_rs1) +OP(fsw, "fsw", rv_codec_s, rv_fmt_frs2_offset_rs1) +OP(fmadd_s, "fmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fmsub_s, "fmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fnmsub_s, "fnmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fnmadd_s, "fnmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fadd_s, "fadd.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fsub_s, "fsub.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fmul_s, "fmul.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fdiv_s, "fdiv.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fsgnj_s, "fsgnj.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_s) +OP(fsgnjn_s, "fsgnjn.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_s) +OP(fsgnjx_s, "fsgnjx.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_s) +OP(fmin_s, "fmin.s", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fmax_s, "fmax.s", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fsqrt_s, "fsqrt.s", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fle_s, "fle.s", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(flt_s, "flt.s", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(feq_s, "feq.s", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fcvt_w_s, "fcvt.w.s", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_wu_s, "fcvt.wu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_s_w, "fcvt.s.w", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fcvt_s_wu, "fcvt.s.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fmv_x_s, "fmv.x.s", rv_codec_r, rv_fmt_rd_frs1) +OP(fclass_s, "fclass.s", rv_codec_r, rv_fmt_rd_frs1) +OP(fmv_s_x, "fmv.s.x", rv_codec_r, rv_fmt_frd_rs1) +OP(fcvt_l_s, "fcvt.l.s", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_lu_s, "fcvt.lu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_s_l, "fcvt.s.l", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fcvt_s_lu, "fcvt.s.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fld, "fld", rv_codec_i, rv_fmt_frd_offset_rs1) +OP(fsd, "fsd", rv_codec_s, rv_fmt_frs2_offset_rs1) +OP(fmadd_d, "fmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fmsub_d, "fmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fnmsub_d, "fnmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fnmadd_d, "fnmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fadd_d, "fadd.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fsub_d, "fsub.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fmul_d, "fmul.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fdiv_d, "fdiv.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fsgnj_d, "fsgnj.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_d) +OP(fsgnjn_d, "fsgnjn.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_d) +OP(fsgnjx_d, "fsgnjx.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_d) +OP(fmin_d, "fmin.d", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fmax_d, "fmax.d", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fcvt_s_d, "fcvt.s.d", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fcvt_d_s, "fcvt.d.s", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fsqrt_d, "fsqrt.d", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fle_d, "fle.d", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(flt_d, "flt.d", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(feq_d, "feq.d", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fcvt_w_d, "fcvt.w.d", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_wu_d, "fcvt.wu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_d_w, "fcvt.d.w", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fcvt_d_wu, "fcvt.d.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fclass_d, "fclass.d", rv_codec_r, rv_fmt_rd_frs1) +OP(fcvt_l_d, "fcvt.l.d", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_lu_d, "fcvt.lu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fmv_x_d, "fmv.x.d", rv_codec_r, rv_fmt_rd_frs1) +OP(fcvt_d_l, "fcvt.d.l", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fcvt_d_lu, "fcvt.d.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fmv_d_x, "fmv.d.x", rv_codec_r, rv_fmt_frd_rs1) +OP(flq, "flq", rv_codec_i, rv_fmt_frd_offset_rs1) +OP(fsq, "fsq", rv_codec_s, rv_fmt_frs2_offset_rs1) +OP(fmadd_q, "fmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fmsub_q, "fmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fnmsub_q, "fnmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fnmadd_q, "fnmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fadd_q, "fadd.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fsub_q, "fsub.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fmul_q, "fmul.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fdiv_q, "fdiv.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fsgnj_q, "fsgnj.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_q) +OP(fsgnjn_q, "fsgnjn.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_q) +OP(fsgnjx_q, "fsgnjx.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_q) +OP(fmin_q, "fmin.q", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fmax_q, "fmax.q", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fcvt_s_q, "fcvt.s.q", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fcvt_q_s, "fcvt.q.s", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fcvt_d_q, "fcvt.d.q", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fcvt_q_d, "fcvt.q.d", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fsqrt_q, "fsqrt.q", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fle_q, "fle.q", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(flt_q, "flt.q", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(feq_q, "feq.q", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fcvt_w_q, "fcvt.w.q", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_wu_q, "fcvt.wu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_q_w, "fcvt.q.w", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fcvt_q_wu, "fcvt.q.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fclass_q, "fclass.q", rv_codec_r, rv_fmt_rd_frs1) +OP(fcvt_l_q, "fcvt.l.q", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_lu_q, "fcvt.lu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_q_l, "fcvt.q.l", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fcvt_q_lu, "fcvt.q.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fmv_x_q, "fmv.x.q", rv_codec_r, rv_fmt_rd_frs1) +OP(fmv_q_x, "fmv.q.x", rv_codec_r, rv_fmt_frd_rs1) +OP(c_addi4spn, "c.addi4spn", rv_codec_ciw_4spn, NULL, DECOMP(rv_op_addi)) +OP(c_fld, "c.fld", rv_codec_cl_ld, NULL, DECOMP(rv_op_fld)) +OP(c_lw, "c.lw", rv_codec_cl_lw, NULL, DECOMP(rv_op_lw)) +OP(c_flw, "c.flw", rv_codec_cl_lw, NULL, DECOMP(rv_op_flw)) +OP(c_fsd, "c.fsd", rv_codec_cs_sd, NULL, DECOMP(rv_op_fsd)) +OP(c_sw, "c.sw", rv_codec_cs_sw, NULL, DECOMP(rv_op_sw)) +OP(c_fsw, "c.fsw", rv_codec_cs_sw, NULL, DECOMP(rv_op_fsw)) +OP(c_addi, "c.addi", rv_codec_ci, NULL, DECOMP(rv_op_addi)) +OP(c_jal, "c.jal", rv_codec_cj_jal, NULL, DECOMP(rv_op_jal)) +OP(c_li, "c.li", rv_codec_ci_li, NULL, DECOMP(rv_op_addi)) +OP(c_addi16sp, "c.addi16sp", rv_codec_ci_16sp, NULL, DECOMP(rv_op_addi)) +OP(c_lui, "c.lui", rv_codec_ci_lui, NULL, DECOMP(rv_op_lui)) +OP(c_srli, "c.srli", rv_codec_cb_sh6, NULL, DECOMP(rv_op_srli)) +OP(c_srai, "c.srai", rv_codec_cb_sh6, NULL, DECOMP(rv_op_srai)) +OP(c_andi, "c.andi", rv_codec_cb_imm, NULL, DECOMP(rv_op_andi)) +OP(c_sub, "c.sub", rv_codec_cs, NULL, DECOMP(rv_op_sub)) +OP(c_xor, "c.xor", rv_codec_cs, NULL, DECOMP(rv_op_xor)) +OP(c_or, "c.or", rv_codec_cs, NULL, DECOMP(rv_op_or)) +OP(c_and, "c.and", rv_codec_cs, NULL, DECOMP(rv_op_and)) +OP(c_subw, "c.subw", rv_codec_cs, NULL, DECOMP(rv_op_subw)) +OP(c_addw, "c.addw", rv_codec_cs, NULL, DECOMP(rv_op_addw)) +OP(c_j, "c.j", rv_codec_cj, NULL, DECOMP(rv_op_j)) +OP(c_beqz, "c.beqz", rv_codec_cb, NULL, DECOMP(rv_op_beqz)) +OP(c_bnez, "c.bnez", rv_codec_cb, NULL, DECOMP(rv_op_bnez)) +OP(c_slli, "c.slli", rv_codec_ci_sh6, NULL, DECOMP(rv_op_slli)) +OP(c_fldsp, "c.fldsp", rv_codec_ci_ldsp, NULL, DECOMP(rv_op_fld)) +OP(c_lwsp, "c.lwsp", rv_codec_ci_lwsp, NULL, DECOMP(rv_op_lw)) +OP(c_flwsp, "c.flwsp", rv_codec_ci_lwsp, NULL, DECOMP(rv_op_flw)) +OP(c_jr, "c.jr", rv_codec_cr_jr, NULL, DECOMP(rv_op_jr)) +OP(c_mv, "c.mv", rv_codec_cr_mv, NULL, DECOMP(rv_op_mv)) +OP(c_ebreak, "c.ebreak", rv_codec_ci_none, NULL, DECOMP(rv_op_ebreak)) +OP(c_jalr, "c.jalr", rv_codec_cr_jalr, NULL, DECOMP(rv_op_jalr)) +OP(c_add, "c.add", rv_codec_cr, NULL, DECOMP(rv_op_add)) +OP(c_fsdsp, "c.fsdsp", rv_codec_css_sdsp, NULL, DECOMP(rv_op_fsd)) +OP(c_swsp, "c.swsp", rv_codec_css_swsp, NULL, DECOMP(rv_op_sw)) +OP(c_fswsp, "c.fswsp", rv_codec_css_swsp, NULL, DECOMP(rv_op_fsw)) +OP(c_ld, "c.ld", rv_codec_cl_ld, NULL, DECOMP(rv_op_ld)) +OP(c_sd, "c.sd", rv_codec_cs_sd, NULL, DECOMP(rv_op_sd)) +OP(c_addiw, "c.addiw", rv_codec_ci, NULL, DECOMP(rv_op_addiw)) +OP(c_ldsp, "c.ldsp", rv_codec_ci_ldsp, NULL, DECOMP(rv_op_ld)) +OP(c_sdsp, "c.sdsp", rv_codec_css_sdsp, NULL, DECOMP(rv_op_sd)) +OP(c_lq, "c.lq", rv_codec_cl_lq, NULL, DECOMP(rv_op_lq)) +OP(c_sq, "c.sq", rv_codec_cs_sq, NULL, DECOMP(rv_op_sq)) +OP(c_lqsp, "c.lqsp", rv_codec_ci_lqsp, NULL, DECOMP(rv_op_lq)) +OP(c_sqsp, "c.sqsp", rv_codec_css_sqsp, NULL, DECOMP(rv_op_sq)) +OP(nop, "nop", rv_codec_illegal, rv_fmt_none) +OP(mv, "mv", rv_codec_illegal, rv_fmt_rd_rs1, rvcp_mv) +OP(not, "not", rv_codec_illegal, rv_fmt_rd_rs1) +OP(neg, "neg", rv_codec_illegal, rv_fmt_rd_rs2) +OP(negw, "negw", rv_codec_illegal, rv_fmt_rd_rs2) +OP(sext_w, "sext.w", rv_codec_illegal, rv_fmt_rd_rs1) +OP(seqz, "seqz", rv_codec_illegal, rv_fmt_rd_rs1) +OP(snez, "snez", rv_codec_illegal, rv_fmt_rd_rs2) +OP(sltz, "sltz", rv_codec_illegal, rv_fmt_rd_rs1) +OP(sgtz, "sgtz", rv_codec_illegal, rv_fmt_rd_rs2) +OP(fmv_s, "fmv.s", rv_codec_illegal, rv_fmt_frd_frs1) +OP(fabs_s, "fabs.s", rv_codec_illegal, rv_fmt_frd_frs1) +OP(fneg_s, "fneg.s", rv_codec_illegal, rv_fmt_frd_frs1) +OP(fmv_d, "fmv.d", rv_codec_illegal, rv_fmt_frd_frs1) +OP(fabs_d, "fabs.d", rv_codec_illegal, rv_fmt_frd_frs1) +OP(fneg_d, "fneg.d", rv_codec_illegal, rv_fmt_frd_frs1) +OP(fmv_q, "fmv.q", rv_codec_illegal, rv_fmt_frd_frs1) +OP(fabs_q, "fabs.q", rv_codec_illegal, rv_fmt_frd_frs1) +OP(fneg_q, "fneg.q", rv_codec_illegal, rv_fmt_frd_frs1) +OP(beqz, "beqz", rv_codec_illegal, rv_fmt_rs1_offset) +OP(bnez, "bnez", rv_codec_illegal, rv_fmt_rs1_offset) +OP(blez, "blez", rv_codec_illegal, rv_fmt_rs2_offset) +OP(bgez, "bgez", rv_codec_illegal, rv_fmt_rs1_offset) +OP(bltz, "bltz", rv_codec_illegal, rv_fmt_rs1_offset) +OP(bgtz, "bgtz", rv_codec_illegal, rv_fmt_rs2_offset) +OP(jal_ra, "jal", rv_codec_illegal, rv_fmt_offset) +OP(jalr_ra, "jalr", rv_codec_illegal, rv_fmt_rs1) +OP(j, "j", rv_codec_illegal, rv_fmt_offset) +OP(ret, "ret", rv_codec_illegal, rv_fmt_none) +OP(jr, "jr", rv_codec_illegal, rv_fmt_rs1, rvcp_jr) +OP(rdcycle, "rdcycle", rv_codec_i_csr, rv_fmt_rd) +OP(rdtime, "rdtime", rv_codec_i_csr, rv_fmt_rd) +OP(rdinstret, "rdinstret", rv_codec_i_csr, rv_fmt_rd) +OP(rdcycleh, "rdcycleh", rv_codec_i_csr, rv_fmt_rd) +OP(rdtimeh, "rdtimeh", rv_codec_i_csr, rv_fmt_rd) +OP(rdinstreth, "rdinstreth", rv_codec_i_csr, rv_fmt_rd) +OP(frcsr, "frcsr", rv_codec_i_csr, rv_fmt_rd) +OP(frrm, "frrm", rv_codec_i_csr, rv_fmt_rd) +OP(frflags, "frflags", rv_codec_i_csr, rv_fmt_rd) +OP(fscsr, "fscsr", rv_codec_i_csr, rv_fmt_rd_rs1) +OP(fsrm, "fsrm", rv_codec_i_csr, rv_fmt_rd_rs1) +OP(fsflags, "fsflags", rv_codec_i_csr, rv_fmt_rd_rs1) +OP(fsrmi, "fsrmi", rv_codec_i_csr, rv_fmt_rd_zimm) +OP(fsflagsi, "fsflagsi", rv_codec_i_csr, rv_fmt_rd_zimm) +OP(bseti, "bseti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) +OP(bclri, "bclri", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) +OP(binvi, "binvi", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) +OP(bexti, "bexti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) +OP(rori, "rori", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) +OP(clz, "clz", rv_codec_r, rv_fmt_rd_rs1) +OP(ctz, "ctz", rv_codec_r, rv_fmt_rd_rs1) +OP(cpop, "cpop", rv_codec_r, rv_fmt_rd_rs1) +OP(sext_h, "sext.h", rv_codec_r, rv_fmt_rd_rs1) +OP(sext_b, "sext.b", rv_codec_r, rv_fmt_rd_rs1) +OP(xnor, "xnor", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(orn, "orn", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(andn, "andn", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(rol, "rol", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(ror, "ror", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sh1add, "sh1add", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sh2add, "sh2add", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sh3add, "sh3add", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sh1add_uw, "sh1add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sh2add_uw, "sh2add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sh3add_uw, "sh3add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(clmul, "clmul", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(clmulr, "clmulr", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(clmulh, "clmulh", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(min, "min", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(minu, "minu", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(max, "max", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(maxu, "maxu", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(clzw, "clzw", rv_codec_r, rv_fmt_rd_rs1) +OP(ctzw, "ctzw", rv_codec_r, rv_fmt_rd_rs1) +OP(cpopw, "cpopw", rv_codec_r, rv_fmt_rd_rs1) +OP(slli_uw, "slli.uw", rv_codec_i_sh6, rv_fmt_rd_rs1_imm) +OP(add_uw, "add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(rolw, "rolw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(rorw, "rorw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(rev8, "rev8", rv_codec_r, rv_fmt_rd_rs1) +OP(zext_h, "zext.h", rv_codec_r, rv_fmt_rd_rs1) +OP(roriw, "roriw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm) +OP(orc_b, "orc.b", rv_codec_r, rv_fmt_rd_rs1) +OP(bset, "bset", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(bclr, "bclr", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(binv, "binv", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(bext, "bext", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(aes32esmi, "aes32esmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs) +OP(aes32esi, "aes32esi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs) +OP(aes32dsmi, "aes32dsmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs) +OP(aes32dsi, "aes32dsi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs) +OP(aes64ks1i, "aes64ks1i", rv_codec_k_rnum, rv_fmt_rd_rs1_rnum) +OP(aes64ks2, "aes64ks2", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(aes64im, "aes64im", rv_codec_r, rv_fmt_rd_rs1) +OP(aes64esm, "aes64esm", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(aes64es, "aes64es", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(aes64dsm, "aes64dsm", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(aes64ds, "aes64ds", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sha256sig0, "sha256sig0", rv_codec_r, rv_fmt_rd_rs1) +OP(sha256sig1, "sha256sig1", rv_codec_r, rv_fmt_rd_rs1) +OP(sha256sum0, "sha256sum0", rv_codec_r, rv_fmt_rd_rs1) +OP(sha256sum1, "sha256sum1", rv_codec_r, rv_fmt_rd_rs1) +OP(sha512sig0, "sha512sig0", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sha512sig1, "sha512sig1", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sha512sum0, "sha512sum0", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sha512sum1, "sha512sum1", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sha512sum0r, "sha512sum0r", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sha512sum1r, "sha512sum1r", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sha512sig0l, "sha512sig0l", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sha512sig0h, "sha512sig0h", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sha512sig1l, "sha512sig1l", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sha512sig1h, "sha512sig1h", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sm3p0, "sm3p0", rv_codec_r, rv_fmt_rd_rs1) +OP(sm3p1, "sm3p1", rv_codec_r, rv_fmt_rd_rs1) +OP(sm4ed, "sm4ed", rv_codec_k_bs, rv_fmt_rs1_rs2_bs) +OP(sm4ks, "sm4ks", rv_codec_k_bs, rv_fmt_rs1_rs2_bs) +OP(brev8, "brev8", rv_codec_r, rv_fmt_rd_rs1) +OP(pack, "pack", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(packh, "packh", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(packw, "packw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(unzip, "unzip", rv_codec_r, rv_fmt_rd_rs1) +OP(zip, "zip", rv_codec_r, rv_fmt_rd_rs1) +OP(xperm4, "xperm4", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(xperm8, "xperm8", rv_codec_r, rv_fmt_rd_rs1) +OP(vle8_v, "vle8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vle16_v, "vle16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vle32_v, "vle32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vle64_v, "vle64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vse8_v, "vse8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vse16_v, "vse16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vse32_v, "vse32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vse64_v, "vse64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vlm_v, "vlm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vsm_v, "vsm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vlse8_v, "vlse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) +OP(vlse16_v, "vlse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) +OP(vlse32_v, "vlse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) +OP(vlse64_v, "vlse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) +OP(vsse8_v, "vsse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) +OP(vsse16_v, "vsse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) +OP(vsse32_v, "vsse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) +OP(vsse64_v, "vsse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) +OP(vluxei8_v, "vluxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vluxei16_v, "vluxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vluxei32_v, "vluxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vluxei64_v, "vluxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vloxei8_v, "vloxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vloxei16_v, "vloxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vloxei32_v, "vloxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vloxei64_v, "vloxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vsuxei8_v, "vsuxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vsuxei16_v, "vsuxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vsuxei32_v, "vsuxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vsuxei64_v, "vsuxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vsoxei8_v, "vsoxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vsoxei16_v, "vsoxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vsoxei32_v, "vsoxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vsoxei64_v, "vsoxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vle8ff_v, "vle8ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vle16ff_v, "vle16ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vle32ff_v, "vle32ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vle64ff_v, "vle64ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl1re8_v, "vl1re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl1re16_v, "vl1re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl1re32_v, "vl1re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl1re64_v, "vl1re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl2re8_v, "vl2re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl2re16_v, "vl2re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl2re32_v, "vl2re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl2re64_v, "vl2re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl4re8_v, "vl4re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl4re16_v, "vl4re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl4re32_v, "vl4re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl4re64_v, "vl4re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl8re8_v, "vl8re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl8re16_v, "vl8re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl8re32_v, "vl8re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl8re64_v, "vl8re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vs1r_v, "vs1r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vs2r_v, "vs2r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vs4r_v, "vs4r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vs8r_v, "vs8r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vadd_vv, "vadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vadd_vx, "vadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vadd_vi, "vadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vsub_vv, "vsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vsub_vx, "vsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vrsub_vx, "vrsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vrsub_vi, "vrsub.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vwaddu_vv, "vwaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwaddu_vx, "vwaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwadd_vv, "vwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwadd_vx, "vwadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwsubu_vv, "vwsubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwsubu_vx, "vwsubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwsub_vv, "vwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwsub_vx, "vwsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwaddu_wv, "vwaddu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwaddu_wx, "vwaddu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwadd_wv, "vwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwadd_wx, "vwadd.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwsubu_wv, "vwsubu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwsubu_wx, "vwsubu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwsub_wv, "vwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwsub_wx, "vwsub.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vadc_vvm, "vadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl) +OP(vadc_vxm, "vadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl) +OP(vadc_vim, "vadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl) +OP(vmadc_vvm, "vmadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl) +OP(vmadc_vxm, "vmadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl) +OP(vmadc_vim, "vmadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl) +OP(vsbc_vvm, "vsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl) +OP(vsbc_vxm, "vsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl) +OP(vmsbc_vvm, "vmsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl) +OP(vmsbc_vxm, "vmsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl) +OP(vand_vv, "vand.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vand_vx, "vand.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vand_vi, "vand.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vor_vv, "vor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vor_vx, "vor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vor_vi, "vor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vxor_vv, "vxor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vxor_vx, "vxor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vxor_vi, "vxor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vsll_vv, "vsll.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vsll_vx, "vsll.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vsll_vi, "vsll.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vsrl_vv, "vsrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vsrl_vx, "vsrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vsrl_vi, "vsrl.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vsra_vv, "vsra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vsra_vx, "vsra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vsra_vi, "vsra.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vnsrl_wv, "vnsrl.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vnsrl_wx, "vnsrl.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vnsrl_wi, "vnsrl.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vnsra_wv, "vnsra.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vnsra_wx, "vnsra.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vnsra_wi, "vnsra.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vmseq_vv, "vmseq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmseq_vx, "vmseq.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmseq_vi, "vmseq.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vmsne_vv, "vmsne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmsne_vx, "vmsne.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmsne_vi, "vmsne.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vmsltu_vv, "vmsltu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmsltu_vx, "vmsltu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmslt_vv, "vmslt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmslt_vx, "vmslt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmsleu_vv, "vmsleu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmsleu_vx, "vmsleu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmsleu_vi, "vmsleu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vmsle_vv, "vmsle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmsle_vx, "vmsle.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmsle_vi, "vmsle.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vmsgtu_vx, "vmsgtu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmsgtu_vi, "vmsgtu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vmsgt_vx, "vmsgt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmsgt_vi, "vmsgt.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vminu_vv, "vminu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vminu_vx, "vminu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmin_vv, "vmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmin_vx, "vmin.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmaxu_vv, "vmaxu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmaxu_vx, "vmaxu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmax_vv, "vmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmax_vx, "vmax.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmul_vv, "vmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmul_vx, "vmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmulh_vv, "vmulh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmulh_vx, "vmulh.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmulhu_vv, "vmulhu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmulhu_vx, "vmulhu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmulhsu_vv, "vmulhsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmulhsu_vx, "vmulhsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vdivu_vv, "vdivu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vdivu_vx, "vdivu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vdiv_vv, "vdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vdiv_vx, "vdiv.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vremu_vv, "vremu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vremu_vx, "vremu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vrem_vv, "vrem.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vrem_vx, "vrem.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwmulu_vv, "vwmulu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwmulu_vx, "vwmulu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwmulsu_vv, "vwmulsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwmulsu_vx, "vwmulsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwmul_vv, "vwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwmul_vx, "vwmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmacc_vv, "vmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vmacc_vx, "vmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) +OP(vnmsac_vv, "vnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vnmsac_vx, "vnmsac.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) +OP(vmadd_vv, "vmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vmadd_vx, "vmadd.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) +OP(vnmsub_vv, "vnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vnmsub_vx, "vnmsub.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) +OP(vwmaccu_vv, "vwmaccu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vwmaccu_vx, "vwmaccu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) +OP(vwmacc_vv, "vwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vwmacc_vx, "vwmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) +OP(vwmaccsu_vv, "vwmaccsu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vwmaccsu_vx, "vwmaccsu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) +OP(vwmaccus_vx, "vwmaccus.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) +OP(vmv_v_v, "vmv.v.v", rv_codec_v_r, rv_fmt_vd_vs1) +OP(vmv_v_x, "vmv.v.x", rv_codec_v_r, rv_fmt_vd_rs1) +OP(vmv_v_i, "vmv.v.i", rv_codec_v_i, rv_fmt_vd_imm) +OP(vmerge_vvm, "vmerge.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl) +OP(vmerge_vxm, "vmerge.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl) +OP(vmerge_vim, "vmerge.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl) +OP(vsaddu_vv, "vsaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vsaddu_vx, "vsaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vsaddu_vi, "vsaddu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vsadd_vv, "vsadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vsadd_vx, "vsadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vsadd_vi, "vsadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vssubu_vv, "vssubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vssubu_vx, "vssubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vssub_vv, "vssub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vssub_vx, "vssub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vaadd_vv, "vaadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vaadd_vx, "vaadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vaaddu_vv, "vaaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vaaddu_vx, "vaaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vasub_vv, "vasub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vasub_vx, "vasub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vasubu_vv, "vasubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vasubu_vx, "vasubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vsmul_vv, "vsmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vsmul_vx, "vsmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vssrl_vv, "vssrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vssrl_vx, "vssrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vssrl_vi, "vssrl.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vssra_vv, "vssra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vssra_vx, "vssra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vssra_vi, "vssra.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vnclipu_wv, "vnclipu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vnclipu_wx, "vnclipu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vnclipu_wi, "vnclipu.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vnclip_wv, "vnclip.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vnclip_wx, "vnclip.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vnclip_wi, "vnclip.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vfadd_vv, "vfadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfadd_vf, "vfadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfsub_vv, "vfsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfsub_vf, "vfsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfrsub_vf, "vfrsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfwadd_vv, "vfwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfwadd_vf, "vfwadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfwadd_wv, "vfwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfwadd_wf, "vfwadd.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfwsub_vv, "vfwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfwsub_vf, "vfwsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfwsub_wv, "vfwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfwsub_wf, "vfwsub.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfmul_vv, "vfmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfmul_vf, "vfmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfdiv_vv, "vfdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfdiv_vf, "vfdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfrdiv_vf, "vfrdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfwmul_vv, "vfwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfwmul_vf, "vfwmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfmacc_vv, "vfmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfmacc_vf, "vfmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfnmacc_vv, "vfnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfnmacc_vf, "vfnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfmsac_vv, "vfmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfmsac_vf, "vfmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfnmsac_vv, "vfnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfnmsac_vf, "vfnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfmadd_vv, "vfmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfmadd_vf, "vfmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfnmadd_vv, "vfnmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfnmadd_vf, "vfnmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfmsub_vv, "vfmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfmsub_vf, "vfmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfnmsub_vv, "vfnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfnmsub_vf, "vfnmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfwmacc_vv, "vfwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfwmacc_vf, "vfwmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfwnmacc_vv, "vfwnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfwnmacc_vf, "vfwnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfwmsac_vv, "vfwmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfwmsac_vf, "vfwmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfwnmsac_vv, "vfwnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfwnmsac_vf, "vfwnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfsqrt_v, "vfsqrt.v", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vfrsqrt7_v, "vfrsqrt7.v", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vfrec7_v, "vfrec7.v", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vfmin_vv, "vfmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfmin_vf, "vfmin.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfmax_vv, "vfmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfmax_vf, "vfmax.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfsgnj_vv, "vfsgnj.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfsgnj_vf, "vfsgnj.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfsgnjn_vv, "vfsgnjn.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfsgnjn_vf, "vfsgnjn.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfsgnjx_vv, "vfsgnjx.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfsgnjx_vf, "vfsgnjx.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfslide1up_vf, "vfslide1up.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfslide1down_vf, "vfslide1down.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vmfeq_vv, "vmfeq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmfeq_vf, "vmfeq.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vmfne_vv, "vmfne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmfne_vf, "vmfne.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vmflt_vv, "vmflt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmflt_vf, "vmflt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vmfle_vv, "vmfle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmfle_vf, "vmfle.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vmfgt_vf, "vmfgt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vmfge_vf, "vmfge.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfclass_v, "vfclass.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfmerge_vfm, "vfmerge.vfm", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vl) +OP(vfmv_v_f, "vfmv.v.f", rv_codec_v_r, rv_fmt_vd_fs1) +OP(vfcvt_xu_f_v, "vfcvt.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfcvt_x_f_v, "vfcvt.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfcvt_f_xu_v, "vfcvt.f.xu.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfcvt_f_x_v, "vfcvt.f.x.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfcvt_rtz_xu_f_v, "vfcvt.rtz.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfcvt_rtz_x_f_v, "vfcvt.rtz.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfwcvt_xu_f_v, "vfwcvt.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfwcvt_x_f_v, "vfwcvt.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfwcvt_f_xu_v, "vfwcvt.f.xu.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfwcvt_f_x_v, "vfwcvt.f.x.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfwcvt_f_f_v, "vfwcvt.f.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfwcvt_rtz_xu_f_v, "vfwcvt.rtz.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfwcvt_rtz_x_f_v, "vfwcvt.rtz.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfncvt_xu_f_w, "vfncvt.xu.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfncvt_x_f_w, "vfncvt.x.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfncvt_f_xu_w, "vfncvt.f.xu.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfncvt_f_x_w, "vfncvt.f.x.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfncvt_f_f_w, "vfncvt.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfncvt_rod_f_f_w, "vfncvt.rod.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfncvt_rtz_xu_f_w, "vfncvt.rtz.xu.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfncvt_rtz_x_f_w, "vfncvt.rtz.x.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vredsum_vs, "vredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vredand_vs, "vredand.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vredor_vs, "vredor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vredxor_vs, "vredxor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vredminu_vs, "vredminu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vredmin_vs, "vredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vredmaxu_vs, "vredmaxu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vredmax_vs, "vredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwredsumu_vs, "vwredsumu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwredsum_vs, "vwredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfredusum_vs, "vfredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfredosum_vs, "vfredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfredmin_vs, "vfredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfredmax_vs, "vfredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfwredusum_vs, "vfwredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfwredosum_vs, "vfwredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmand_mm, "vmand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmnand_mm, "vmnand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmandn_mm, "vmandn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmxor_mm, "vmxor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmor_mm, "vmor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmnor_mm, "vmnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmorn_mm, "vmorn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmxnor_mm, "vmxnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vcpop_m, "vcpop.m", rv_codec_v_r, rv_fmt_rd_vs2_vm) +OP(vfirst_m, "vfirst.m", rv_codec_v_r, rv_fmt_rd_vs2_vm) +OP(vmsbf_m, "vmsbf.m", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vmsif_m, "vmsif.m", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vmsof_m, "vmsof.m", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(viota_m, "viota.m", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vid_v, "vid.v", rv_codec_v_r, rv_fmt_vd_vm) +OP(vmv_x_s, "vmv.x.s", rv_codec_v_r, rv_fmt_rd_vs2) +OP(vmv_s_x, "vmv.s.x", rv_codec_v_r, rv_fmt_vd_rs1) +OP(vfmv_f_s, "vfmv.f.s", rv_codec_v_r, rv_fmt_fd_vs2) +OP(vfmv_s_f, "vfmv.s.f", rv_codec_v_r, rv_fmt_vd_fs1) +OP(vslideup_vx, "vslideup.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vslideup_vi, "vslideup.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vslide1up_vx, "vslide1up.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vslidedown_vx, "vslidedown.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vslidedown_vi, "vslidedown.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vslide1down_vx, "vslide1down.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vrgather_vv, "vrgather.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vrgatherei16_vv, "vrgatherei16.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vrgather_vx, "vrgather.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vrgather_vi, "vrgather.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vcompress_vm, "vcompress.vm", rv_codec_v_r, rv_fmt_vd_vs2_vs1) +OP(vmv1r_v, "vmv1r.v", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vmv2r_v, "vmv2r.v", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vmv4r_v, "vmv4r.v", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vmv8r_v, "vmv8r.v", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vzext_vf2, "vzext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vzext_vf4, "vzext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vzext_vf8, "vzext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vsext_vf2, "vsext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vsext_vf4, "vsext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vsext_vf8, "vsext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vsetvli, "vsetvli", rv_codec_vsetvli, rv_fmt_vsetvli) +OP(vsetivli, "vsetivli", rv_codec_vsetivli, rv_fmt_vsetivli) +OP(vsetvl, "vsetvl", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(c_zext_b, "c.zext.b", rv_codec_zcb_ext, rv_fmt_rd) +OP(c_sext_b, "c.sext.b", rv_codec_zcb_ext, rv_fmt_rd) +OP(c_zext_h, "c.zext.h", rv_codec_zcb_ext, rv_fmt_rd) +OP(c_sext_h, "c.sext.h", rv_codec_zcb_ext, rv_fmt_rd) +OP(c_zext_w, "c.zext.w", rv_codec_zcb_ext, rv_fmt_rd) +OP(c_not, "c.not", rv_codec_zcb_ext, rv_fmt_rd) +OP(c_mul, "c.mul", rv_codec_zcb_mul, rv_fmt_rd_rs2) +OP(c_lbu, "c.lbu", rv_codec_zcb_lb, rv_fmt_rs1_rs2_zce_ldst) +OP(c_lhu, "c.lhu", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst) +OP(c_lh, "c.lh", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst) +OP(c_sb, "c.sb", rv_codec_zcb_lb, rv_fmt_rs1_rs2_zce_ldst) +OP(c_sh, "c.sh", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst) +OP(cm_push, "cm.push", rv_codec_zcmp_cm_pushpop, rv_fmt_push_rlist) +OP(cm_pop, "cm.pop", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist) +OP(cm_popret, "cm.popret", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist) +OP(cm_popretz, "cm.popretz", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist) +OP(cm_mva01s, "cm.mva01s", rv_codec_zcmp_cm_mv, rv_fmt_rd_rs2) +OP(cm_mvsa01, "cm.mvsa01", rv_codec_zcmp_cm_mv, rv_fmt_rd_rs2) +OP(cm_jt, "cm.jt", rv_codec_zcmt_jt, rv_fmt_zcmt_index) +OP(cm_jalt, "cm.jalt", rv_codec_zcmt_jt, rv_fmt_zcmt_index) +OP(czero_eqz, "czero.eqz", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(czero_nez, "czero.nez", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(fcvt_bf16_s, "fcvt.bf16.s", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fcvt_s_bf16, "fcvt.s.bf16", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(vfncvtbf16_f_f_w, "vfncvtbf16.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfwcvtbf16_f_f_v, "vfwcvtbf16.f.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfwmaccbf16_vv, "vfwmaccbf16.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfwmaccbf16_vf, "vfwmaccbf16.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(flh, "flh", rv_codec_i, rv_fmt_frd_offset_rs1) +OP(fsh, "fsh", rv_codec_s, rv_fmt_frs2_offset_rs1) +OP(fmv_h_x, "fmv.h.x", rv_codec_r, rv_fmt_frd_rs1) +OP(fmv_x_h, "fmv.x.h", rv_codec_r, rv_fmt_rd_frs1) +OP(fli_s, "fli.s", rv_codec_fli, rv_fmt_fli) +OP(fli_d, "fli.d", rv_codec_fli, rv_fmt_fli) +OP(fli_q, "fli.q", rv_codec_fli, rv_fmt_fli) +OP(fli_h, "fli.h", rv_codec_fli, rv_fmt_fli) +OP(fminm_s, "fminm.s", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fmaxm_s, "fmaxm.s", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fminm_d, "fminm.d", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fmaxm_d, "fmaxm.d", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fminm_q, "fminm.q", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fmaxm_q, "fmaxm.q", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fminm_h, "fminm.h", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fmaxm_h, "fmaxm.h", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fround_s, "fround.s", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(froundnx_s, "froundnx.s", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fround_d, "fround.d", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(froundnx_d, "froundnx.d", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fround_q, "fround.q", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(froundnx_q, "froundnx.q", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fround_h, "fround.h", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(froundnx_h, "froundnx.h", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fcvtmod_w_d, "fcvtmod.w.d", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fmvh_x_d, "fmvh.x.d", rv_codec_r, rv_fmt_rd_frs1) +OP(fmvp_d_x, "fmvp.d.x", rv_codec_r, rv_fmt_frd_rs1_rs2) +OP(fmvh_x_q, "fmvh.x.q", rv_codec_r, rv_fmt_rd_frs1) +OP(fmvp_q_x, "fmvp.q.x", rv_codec_r, rv_fmt_frd_rs1_rs2) +OP(fleq_s, "fleq.s", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fltq_s, "fltq.s", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fleq_d, "fleq.d", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fltq_d, "fltq.d", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fleq_q, "fleq.q", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fltq_q, "fltq.q", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fleq_h, "fleq.h", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fltq_h, "fltq.h", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(vaesdf_vv, "vaesdf.vv", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vaesdf_vs, "vaesdf.vs", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vaesdm_vv, "vaesdm.vv", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vaesdm_vs, "vaesdm.vs", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vaesef_vv, "vaesef.vv", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vaesef_vs, "vaesef.vs", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vaesem_vv, "vaesem.vv", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vaesem_vs, "vaesem.vs", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vaeskf1_vi, "vaeskf1.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm) +OP(vaeskf2_vi, "vaeskf2.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm) +OP(vaesz_vs, "vaesz.vs", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vandn_vv, "vandn.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vandn_vx, "vandn.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vbrev_v, "vbrev.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vbrev8_v, "vbrev8.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vclmul_vv, "vclmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vclmul_vx, "vclmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vclmulh_vv, "vclmulh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vclmulh_vx, "vclmulh.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vclz_v, "vclz.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vcpop_v, "vcpop.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vctz_v, "vctz.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vghsh_vv, "vghsh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1) +OP(vgmul_vv, "vgmul.vv", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vrev8_v, "vrev8.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vrol_vv, "vrol.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vrol_vx, "vrol.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vror_vv, "vror.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vror_vx, "vror.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vror_vi, "vror.vi", rv_codec_vror_vi, rv_fmt_vd_vs2_uimm_vm) +OP(vsha2ch_vv, "vsha2ch.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1) +OP(vsha2cl_vv, "vsha2cl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1) +OP(vsha2ms_vv, "vsha2ms.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1) +OP(vsm3c_vi, "vsm3c.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm) +OP(vsm3me_vv, "vsm3me.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1) +OP(vsm4k_vi, "vsm4k.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm) +OP(vsm4r_vv, "vsm4r.vv", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vsm4r_vs, "vsm4r.vs", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vwsll_vv, "vwsll.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwsll_vx, "vwsll.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwsll_vi, "vwsll.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(amocas_w, "amocas.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amocas_d, "amocas.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amocas_q, "amocas.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(mop_r_0, "mop.r.0", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_1, "mop.r.1", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_2, "mop.r.2", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_3, "mop.r.3", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_4, "mop.r.4", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_5, "mop.r.5", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_6, "mop.r.6", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_7, "mop.r.7", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_8, "mop.r.8", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_9, "mop.r.9", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_10, "mop.r.10", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_11, "mop.r.11", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_12, "mop.r.12", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_13, "mop.r.13", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_14, "mop.r.14", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_15, "mop.r.15", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_16, "mop.r.16", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_17, "mop.r.17", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_18, "mop.r.18", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_19, "mop.r.19", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_20, "mop.r.20", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_21, "mop.r.21", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_22, "mop.r.22", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_23, "mop.r.23", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_24, "mop.r.24", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_25, "mop.r.25", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_26, "mop.r.26", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_27, "mop.r.27", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_28, "mop.r.28", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_29, "mop.r.29", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_30, "mop.r.30", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r_31, "mop.r.31", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_rr_0, "mop.rr.0", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(mop_rr_1, "mop.rr.1", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(mop_rr_2, "mop.rr.2", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(mop_rr_3, "mop.rr.3", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(mop_rr_4, "mop.rr.4", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(mop_rr_5, "mop.rr.5", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(mop_rr_6, "mop.rr.6", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(mop_rr_7, "mop.rr.7", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(c_mop_1, "c.mop.1", rv_codec_ci_none, rv_fmt_none) +OP(c_mop_3, "c.mop.3", rv_codec_ci_none, rv_fmt_none) +OP(c_mop_5, "c.mop.5", rv_codec_ci_none, rv_fmt_none) +OP(c_mop_7, "c.mop.7", rv_codec_ci_none, rv_fmt_none) +OP(c_mop_9, "c.mop.9", rv_codec_ci_none, rv_fmt_none) +OP(c_mop_11, "c.mop.11", rv_codec_ci_none, rv_fmt_none) +OP(c_mop_13, "c.mop.13", rv_codec_ci_none, rv_fmt_none) +OP(c_mop_15, "c.mop.15", rv_codec_ci_none, rv_fmt_none) +OP(amoswap_b, "amoswap.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoadd_b, "amoadd.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoxor_b, "amoxor.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoor_b, "amoor.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoand_b, "amoand.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomin_b, "amomin.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomax_b, "amomax.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amominu_b, "amominu.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomaxu_b, "amomaxu.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoswap_h, "amoswap.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoadd_h, "amoadd.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoxor_h, "amoxor.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoor_h, "amoor.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoand_h, "amoand.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomin_h, "amomin.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomax_h, "amomax.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amominu_h, "amominu.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomaxu_h, "amomaxu.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amocas_b, "amocas.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amocas_h, "amocas.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(wrs_sto, "wrs.sto", rv_codec_none, rv_fmt_none) +OP(wrs_nto, "wrs.nto", rv_codec_none, rv_fmt_none) +OP(lpad, "lpad", rv_codec_lp, rv_fmt_imm) +OP(sspush, "sspush", rv_codec_r, rv_fmt_rs2) +OP(sspopchk, "sspopchk", rv_codec_r, rv_fmt_rs1) +OP(ssrdp, "ssrdp", rv_codec_r, rv_fmt_rd) +OP(ssamoswap_w, "ssamoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(ssamoswap_d, "ssamoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(c_sspush, "c.sspush", rv_codec_cmop_ss, NULL, DECOMP(rv_op_sspush)) +OP(c_sspopchk, "c.sspopchk", rv_codec_cmop_ss, NULL, DECOMP(rv_op_sspopchk= )) +OP(cbo_inval, "cbo.inval", rv_codec_r, rv_fmt_rs1) +OP(cbo_clean, "cbo.clean", rv_codec_r, rv_fmt_rs1) +OP(cbo_flush, "cbo.flush", rv_codec_r, rv_fmt_rs1) +OP(cbo_zero, "cbo.zero", rv_codec_r, rv_fmt_rs1) +OP(mnret, "mnret", rv_codec_none, rv_fmt_none) --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550992; cv=none; d=zohomail.com; s=zohoarc; b=I6RGPMeqKf2BEvune5qyNQu9r9i2bvKTgptWYZeXrcrCYlQOcBPOLg2DyCqaHHeNw1GGqZvxy92PYYgd3mf/zpDMZayUVrtPhzAE0T4NLTSx9ZQj0NfX+stD4YdP5h6rUUtBT1eur45YethpJI6730QpxdGOAf9OMLzKrxffqOI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550992; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=72GARMzn2bUyBu7BeKAYGflCgKnwtbN6s6HTDCW9QrE=; b=bCzX60nDOz7sM6dq+6k1SpF0ICROdczOxNNxuovSkAxVzmun4Vz4bbnidcK+/I+BjUWJscAoq89z3l42+Nz+57F25Jut1k1sCu+xIgXO+Qnk+W9ZmznO1wuIy4aimRmj3VbaxcCmGON6JpMe/Yzxyb3joeK7meAz8XBxGUf0vLs= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550992677127.32460680908889; Sun, 23 Aug 2026 22:56:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNc0-0007Df-43; Mon, 24 Aug 2026 01:52:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNbZ-0005XQ-AS for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:21 -0400 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNbW-00036k-Ph for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:20 -0400 Received: by mail-pj1-x1029.google.com with SMTP id 98e67ed59e1d1-38dcbade417so3537146a91.1 for ; Sun, 23 Aug 2026 22:52:18 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.52.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:52:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550737; x=1788155537; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=72GARMzn2bUyBu7BeKAYGflCgKnwtbN6s6HTDCW9QrE=; b=NQgZ9W0NS7TEMycIKGOGLb1xXN2/fSXM1Z63MeP+JMzl7EDr2EBqsWKnOOGIwzHYSE 9k+jvv0wul4slNEdi9Y4UH9B4s6mBlNiaxysx55DtNmpMI7XwQzX81YVMtCorijVMHSS e8B0W/9fyblqBz4Xobb7P3vcONr41HmXt34nl4irEt+53uNEAwwvV/MiixCahSl33911 Z0ARtZOfHWQ2ADjEVuNJ8vhN2Y677w9Q15M8Oyp+oOxvwGwxv0hzMDXU1f1cu+xON7b6 5wdozX5QIAKBoobZOTcgjnS1hgWuLR/laxXheFrzytnkfMsIK0d+eBlEVnrxSzZEbsdS 6eeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550737; x=1788155537; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=72GARMzn2bUyBu7BeKAYGflCgKnwtbN6s6HTDCW9QrE=; b=EPrIat30OMG66jInUaAIZ/K9rLaYxs5InNk5C0u+PynkpNSWL1JIx6ovtggVbKNblx akRUzjlJVinKU3Fenv67Uhp5YN0m9lujdNj+ZMebjGcV1rBUXb8maP+aPhwa9Rkyh1Oq zTlzZajgZ2FrtZ8DlX1PgNuFL8mUC7EY4NiCthaW6iLJNZIB/bw1Pxl4156/ywSqoUMB 1v89LWws+Gi9gYTcA5h9XOzQhrfbLRC25RZxOo95ffEHUb4TsgrvzatXVP5A+w4GIzpj G+i4DNlAS737Ynmn0G38oPtaQhGkrtOvRWu2GuV6Hw1S+huPJOOGWX7BwMYXK0mz8bgN yp8Q== X-Gm-Message-State: AFuF++mliO3Fl7i7QRMx0yUByk+8GuiSIwG7TCjfCT63sGiprtnf9KLQ CmhBew3bjPTpuji1PK7E3pznEcHIVr5yTN+9RVK1yAu8RX80Se6YZ3j1riabgg== X-Gm-Gg: AR+sD12wv4ZFcVeXzStZU6O1MJ9rkVMW1rmrjSjAY3XzTYXkKxIU/zM+z6fjWmgIcI7 XTSPse6LneF7Uhiac4YgEFo/YQyVvW68G5k+D9F6G8WyLFSA4J0ZJfIjqFdUHGp8LRfIG5XhYPg +NjI2M3lJIJvLtYI1uTXpHGG3cZytFjcHJifCnuC+5mkfRV6wNfXK84X4UB3kPfL4we/71+ktMp bkxokkQgfv7imW9WKLzJCoXXUr5GFtiSAu+2sO86ao/8/djlxEqEZWZXY6/dwtRz1S7MTIlq03G PSEYbX+Gw9G30m6Sm70lyareutnkqkZLeBygHC3DB8w8zSEH8CyXGchQn8M8qBZc18BYVuOvWJi mnd2X5R7xXoatJEStfrpPbU+eiKFL1PRMgFLjrIkhE3z+qd/Ffx+oBaHPeUzKyWrcOejTPvnphs ireveYN/SSQIMUxSbpEQi5CwgNI3cBdoIaX6fkRB3rCRcKPAd+cuWk2EIw146OMObLm8toJXoCd cM6mq9L0d1LSKM+ X-Received: by 2002:a17:90b:1b04:b0:38d:dfd1:7c1 with SMTP id 98e67ed59e1d1-395c33406e0mr40090386a91.2.1787550737198; Sun, 23 Aug 2026 22:52:17 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 79/96] disas/riscv: Merge all mop.r.n to one pattern Date: Mon, 24 Aug 2026 15:47:49 +1000 Message-ID: <20260824054806.2790041-80-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1029; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1029.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550994295158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Avoid performing arithmetic on rv_op_mop_r_0. Treat the 'n' as an immediate. Create a codec and format to match. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-47-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.h | 2 ++ disas/riscv.c | 15 ++++++++++++++- disas/riscv-op.c.inc | 33 +-------------------------------- 3 files changed, 17 insertions(+), 33 deletions(-) diff --git a/disas/riscv.h b/disas/riscv.h index 5ac8c41616..b47a7f0150 100644 --- a/disas/riscv.h +++ b/disas/riscv.h @@ -160,6 +160,7 @@ typedef enum { rv_codec_fli, rv_codec_lp, rv_codec_cmop_ss, + rv_codec_mop_r, } rv_codec; =20 /* structures */ @@ -284,5 +285,6 @@ typedef struct { #define rv_fmt_rd_rs1_immh_imml_addr "O\t0,(1),i,j" #define rv_fmt_rd2_imm "O\t0,2,(1),i" #define rv_fmt_fli "O\t3,h" +#define rv_fmt_mop_r "O.i\t0,1" =20 #endif /* DISAS_RISCV_H */ diff --git a/disas/riscv.c b/disas/riscv.c index 8aaad96bf4..0751f1a841 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -643,6 +643,13 @@ static uint32_t operand_lpl(rv_inst inst) return extract32(inst, 12, 20); } =20 +static uint32_t operand_mop_r_imm(rv_inst inst) +{ + return (extract32(inst, 30, 1) << 4) | + (extract32(inst, 26, 2) << 2) | + extract32(inst, 20, 2); +} + /* instruction metadata */ =20 static const rv_opcode_data rvi_opcode_data[] =3D { @@ -2546,7 +2553,7 @@ static const rv_opcode_data *decode_inst_opcode(rv_de= code *dec, rv_isa isa) 2, 2, extract32(inst, 26,= 2)), 4, 1, extract32(inst, 30, 1)); - op =3D rv_op_mop_r_0 + imm_mop5; + op =3D rv_op_mop_r; /* if zicfiss enabled and mop5 is shadow stack */ if (dec->cfg->ext_zicfiss && ((imm_mop5 & 0b11100) =3D=3D 0b11100)) { @@ -3049,6 +3056,11 @@ static void decode_inst_operands(rv_decode *dec, rv_= isa isa, dec->rs1 =3D dec->rs2 =3D operand_crs1(inst); dec->imm =3D 0; break; + case rv_codec_mop_r: + dec->rd =3D operand_rd(inst); + dec->rs1 =3D operand_rs1(inst); + dec->imm =3D operand_mop_r_imm(inst); + break; default: g_assert_not_reached(); } @@ -3134,6 +3146,7 @@ static GString *format_inst(size_t tab, rv_decode *de= c, g_string_append(buf, op->name); break; case '(': + case '.': case ',': case ')': case '-': diff --git a/disas/riscv-op.c.inc b/disas/riscv-op.c.inc index 3fe934688e..222d249a70 100644 --- a/disas/riscv-op.c.inc +++ b/disas/riscv-op.c.inc @@ -873,38 +873,7 @@ OP(vwsll_vi, "vwsll.vi", rv_codec_v_i_u, rv_fmt_vd_vs2= _uimm_vm) OP(amocas_w, "amocas.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) OP(amocas_d, "amocas.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) OP(amocas_q, "amocas.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(mop_r_0, "mop.r.0", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_1, "mop.r.1", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_2, "mop.r.2", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_3, "mop.r.3", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_4, "mop.r.4", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_5, "mop.r.5", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_6, "mop.r.6", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_7, "mop.r.7", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_8, "mop.r.8", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_9, "mop.r.9", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_10, "mop.r.10", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_11, "mop.r.11", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_12, "mop.r.12", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_13, "mop.r.13", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_14, "mop.r.14", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_15, "mop.r.15", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_16, "mop.r.16", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_17, "mop.r.17", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_18, "mop.r.18", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_19, "mop.r.19", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_20, "mop.r.20", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_21, "mop.r.21", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_22, "mop.r.22", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_23, "mop.r.23", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_24, "mop.r.24", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_25, "mop.r.25", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_26, "mop.r.26", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_27, "mop.r.27", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_28, "mop.r.28", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_29, "mop.r.29", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_30, "mop.r.30", rv_codec_r, rv_fmt_rd_rs1) -OP(mop_r_31, "mop.r.31", rv_codec_r, rv_fmt_rd_rs1) +OP(mop_r, "mop.r", rv_codec_mop_r, rv_fmt_mop_r) OP(mop_rr_0, "mop.rr.0", rv_codec_r, rv_fmt_rd_rs1_rs2) OP(mop_rr_1, "mop.rr.1", rv_codec_r, rv_fmt_rd_rs1_rs2) OP(mop_rr_2, "mop.rr.2", rv_codec_r, rv_fmt_rd_rs1_rs2) --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551009; cv=none; d=zohomail.com; s=zohoarc; b=WS2pZ+EGbnSUIYIXZ5UaTuJnpeSz3ZoFR9nbDDqkgshKYGhQ0th8EeKGcW0grqctZ6C0uqx9VzXMm/4fhRtrYhF4DtGHEIzFIaaSmQKJgFW5kuRJOWDDhqjrPUz65VmZ6jyv0pytAaOv9zZsXT2AI+HuaNW8USXbuPPCWVc3U4A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551009; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=LfQohlZt640C5GwVV70FzQC1fZ1dLJnvxGCO8xDnz0w=; b=LDDCZJqIt2HTWlp3k9ZXVDLEJdeGCUa07t9ZQOCkVdj4rGpJBTSeTc/oS0H67Vm5ppq1EJLL1LS2ErVuJLV6WccdUs0ZYu/KaTlFiIE/nqaSmprQxqy7zbWVaH3QfRTBsGAeNVHFErvz1h01gkbFd17JR/EbTn9m72xkKhyBYIU= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551009262943.8438903602422; Sun, 23 Aug 2026 22:56:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNbm-0006Rh-1T; Mon, 24 Aug 2026 01:52:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNbb-0005ay-Kd for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:23 -0400 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNbZ-00037A-Gq for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:23 -0400 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-2ced3386430so31409725ad.1 for ; Sun, 23 Aug 2026 22:52:21 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.52.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:52:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550740; x=1788155540; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=LfQohlZt640C5GwVV70FzQC1fZ1dLJnvxGCO8xDnz0w=; b=DlShzqtfQ8BUq8fMkkadkTiTo7+SH4ebIp/21W1JMkJzN1YVWYAM2bzhf3vxjqp3r9 ipjqafQrfSWAnVJbl30VJqHYBqEhtIkDmxGrDHI5lciomdIfLpiY/mTMftanKC5cn559 ecoQNHD2tlpJILh5jfhDZAg9+Cx4VWhpxZP8D12mMxhi+1o9wEwDWkREJAB5Jgnw7Jnw hEcMligfM7BNjJjPvFqpA3uzs0iA6niLK6Gv24l5XCMgI1gD8w2LzLRhpFkeVZ178DDu upGOpQPu92l7nxdl06hBQlTrRkgxi2h5kuPjpVzWEh0RhV3i6jKZVewweekMK9uRnpaC tW8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550740; x=1788155540; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=LfQohlZt640C5GwVV70FzQC1fZ1dLJnvxGCO8xDnz0w=; b=XXyS/RKWyAvW4yddU25UnSziTal8nMegHGNILCxHNQYnn5Wo1X46R2wAmaqJnvYxDO 1G/lrnlr1vS839SqW6rJ8E7XBPNsQ3Yh3yagr+DjHu5IM99eDhrFxg4z4gIRXxnbT9fF 0dWcuQ5Bcz6hHCPRL+NkKusahupxikaSZGdAOH4JoPPvOLGruN6TT0iG4BJoiISkaDc4 8apy5tokfg/9KIf9/TwnBVPO4X90nqP7Kv3wtuK6JDlndWfxdV1wbQVj9Bnx78pL3cTb p+2s2AuwuGtMoJB8swznFBkGXH+qEhX1asZgyeaPq9AsOmO+EfyERewxRV1ce/Ka11gy i3tw== X-Gm-Message-State: AFuF++lEVzMIgSmn+D/Xq86F04jtYxAZB5itrbaEiBW558CtV2V16se+ 3M/i8LHkaByUYFUnILvrRkZztgUEUI2F8PUpa1RSCG0KL5ZKXZnQWOeE5/D/rA== X-Gm-Gg: AR+sD12/kI97zx+G+BwCHroSVeMAo8/TOYQ5fmr6DRmU1/k3xmvoElsx/hF555yJyF/ 9qvEtyMxdpHuxPN5yDkN0Y4NtQbbk1xSY+UPa0O4VjC6XHRsDqlNMJTrODYTznvXiPrGOj0i0RE wZ9rbcK5Xkf2z4m77LTa7SDVyQM4cl7uVijmfv1e2qj7dGV/u9UWFxtUv2MlAjD9sHZ0DFUshmK A+vj3FtrGVWPfZ6FnM5zrPHxLlwaOcFPo3jXbteltGCHVeW3Vk8ZDGLuX6xpBJQHpjALocR7U9Z 52I1iW0Q9oKZwD3f5eEdIhsrwSj84hw3FRXtmIQoM/od/XmRS65/+rt8NHx7pk5S1jQGQ6DWp5r NSWgnWeXrwyBXBnCNfX8jwNrwtucGkKYhK13gh0XGVheIthP8sd9hyir4i1nE0w1Cnkqk+XnuyN Btzbz1k7j/zyJG5gUiCiiqVG3Yu3P2eZTx+TPXb8Iiet8pBmJPvffKSfKrI/RyKKz+cCsq1OYXg ra74A== X-Received: by 2002:a17:90b:2d0e:b0:395:7fff:a08f with SMTP id 98e67ed59e1d1-395c2f65bfbmr47401583a91.0.1787550740018; Sun, 23 Aug 2026 22:52:20 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 80/96] disas/riscv: Merge all mop.rr.n to one pattern Date: Mon, 24 Aug 2026 15:47:50 +1000 Message-ID: <20260824054806.2790041-81-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::633; envelope-from=alistair23@gmail.com; helo=mail-pl1-x633.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551010337158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Avoid performing arithmetic on rv_op_mop_rr_0. Treat the 'n' as an immediate. Create a codec and format to match. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-48-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.h | 2 ++ disas/riscv.c | 13 ++++++++++++- disas/riscv-op.c.inc | 9 +-------- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/disas/riscv.h b/disas/riscv.h index b47a7f0150..47647f750f 100644 --- a/disas/riscv.h +++ b/disas/riscv.h @@ -161,6 +161,7 @@ typedef enum { rv_codec_lp, rv_codec_cmop_ss, rv_codec_mop_r, + rv_codec_mop_rr, } rv_codec; =20 /* structures */ @@ -286,5 +287,6 @@ typedef struct { #define rv_fmt_rd2_imm "O\t0,2,(1),i" #define rv_fmt_fli "O\t3,h" #define rv_fmt_mop_r "O.i\t0,1" +#define rv_fmt_mop_rr "O.i\t0,1,2" =20 #endif /* DISAS_RISCV_H */ diff --git a/disas/riscv.c b/disas/riscv.c index 0751f1a841..22104638e1 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -650,6 +650,11 @@ static uint32_t operand_mop_r_imm(rv_inst inst) extract32(inst, 20, 2); } =20 +static uint32_t operand_mop_rr_imm(rv_inst inst) +{ + return (extract32(inst, 30, 1) << 2) | extract32(inst, 26, 2); +} + /* instruction metadata */ =20 static const rv_opcode_data rvi_opcode_data[] =3D { @@ -2572,7 +2577,7 @@ static const rv_opcode_data *decode_inst_opcode(rv_de= code *dec, rv_isa isa) =3D=3D 0b1000001) { imm_mop3 =3D deposit32(extract32(inst, 26, 2), 2, 1, extract32(inst, 30, 1)); - op =3D rv_op_mop_rr_0 + imm_mop3; + op =3D rv_op_mop_rr; /* if zicfiss enabled and mop3 is shadow stack */ if (dec->cfg->ext_zicfiss && ((imm_mop3 & 0b111) =3D=3D 0b111)) { @@ -3061,6 +3066,12 @@ static void decode_inst_operands(rv_decode *dec, rv_= isa isa, dec->rs1 =3D operand_rs1(inst); dec->imm =3D operand_mop_r_imm(inst); break; + case rv_codec_mop_rr: + dec->rd =3D operand_rd(inst); + dec->rs1 =3D operand_rs1(inst); + dec->rs2 =3D operand_rs2(inst); + dec->imm =3D operand_mop_rr_imm(inst); + break; default: g_assert_not_reached(); } diff --git a/disas/riscv-op.c.inc b/disas/riscv-op.c.inc index 222d249a70..2100e54475 100644 --- a/disas/riscv-op.c.inc +++ b/disas/riscv-op.c.inc @@ -874,14 +874,7 @@ OP(amocas_w, "amocas.w", rv_codec_r_a, rv_fmt_aqrl_rd_= rs2_rs1) OP(amocas_d, "amocas.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) OP(amocas_q, "amocas.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) OP(mop_r, "mop.r", rv_codec_mop_r, rv_fmt_mop_r) -OP(mop_rr_0, "mop.rr.0", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(mop_rr_1, "mop.rr.1", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(mop_rr_2, "mop.rr.2", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(mop_rr_3, "mop.rr.3", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(mop_rr_4, "mop.rr.4", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(mop_rr_5, "mop.rr.5", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(mop_rr_6, "mop.rr.6", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(mop_rr_7, "mop.rr.7", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(mop_rr, "mop.rr", rv_codec_mop_rr, rv_fmt_mop_rr) OP(c_mop_1, "c.mop.1", rv_codec_ci_none, rv_fmt_none) OP(c_mop_3, "c.mop.3", rv_codec_ci_none, rv_fmt_none) OP(c_mop_5, "c.mop.5", rv_codec_ci_none, rv_fmt_none) --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550912; cv=none; d=zohomail.com; s=zohoarc; b=Xw9p5U2ZCLdN+2O3a2jOAViV1Q/YKLpWdlpu1TRcYgna28N+07fr0k+qpSK8tfOsxPB0vtm8qmK1v/ciHuIb8qaU/brHbo3JTndWZgQByL84hxu1VjlzUzvsTiXB9Ycbv4kHoiKkPhy3eNWQyNh9BKhY4KeUvHK3W0YxdQxCTOc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550912; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=82rer5v+mUlWOAXCYhpssgxoxfjq1dcBWXCAHZ6HX8I=; b=GGk00Lyq8WG7HmbX0n7t8n95ok/9nJ2FzA7JTvqZFh8NHD8NKLrCouBUPHP8DEVfc0mLTh+rSgfZZgg7lotXm3AkKwpVpOCvJsCgcnowsRHtclqwjX6pJd86Phvow3jZK4Ll7e7lasdS5jsBkPw2Dl4oBQIuVtJYveww7x6b6So= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550912104282.4574274038166; Sun, 23 Aug 2026 22:55:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNc3-0007bt-UK; Mon, 24 Aug 2026 01:52:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNbe-0005qu-BE for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:26 -0400 Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNbc-00037s-F8 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:26 -0400 Received: by mail-pg1-x52c.google.com with SMTP id 41be03b00d2f7-cbedd5aece4so2907269a12.0 for ; Sun, 23 Aug 2026 22:52:24 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.52.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:52:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550743; x=1788155543; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=82rer5v+mUlWOAXCYhpssgxoxfjq1dcBWXCAHZ6HX8I=; b=dhEbmDGTAj+zV9O+13UJ8iWS1Wp8NM+jtWbSspde6AhEN/bBBC13XiIoemyd0uYWPo 8dvvklFED0Xd3yP6jDvJ6SxhPwe3gYlsrda8tiOuoKrWFUnSpWWsB3yBIaEvmquLjXVT Pdipu8Pi0Wg4dSpzI0uqD2ZKVqgkXdbrf/+R+GrXUP5LXnApMkoBPYtrzNDqEdeRyZvc I9Jf6+Xytur/zmfa0GcJwUtwV7kdSp99yBa6ytXCs7uUT1mr3ngU0Q37dQqBhib5oJeC GP0S4PGYIrHG+CpKyucWdibvUMbUMJHbyw2Z0ym9n89++58Md4c3eLtuFv2oipSQH7OZ Xb2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550743; x=1788155543; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=82rer5v+mUlWOAXCYhpssgxoxfjq1dcBWXCAHZ6HX8I=; b=MRA6NxFCRIP2oF6fRdHtXbBCShfNweu3syStAUWXvT6CZs3UH1zdMxkrfoxR9nLygL Eayw6lGvLc4L2pfIysSOn/bNmygx83cYqJqRsWF/nul0R4VseeUGjDZYv+GzfM/56z1o zIIsDd7cNQ0faQ8N7/x+dKicWjGbGV9Vq3KfYNu5qXBnE3T9E0iRk4klGVVCM5yXKcAK ua+nCsBVNCInPSjLH3mQyQee3ajjJep+kJLhPtJiIkdqOkDY2fF9cvqI5jiMgVqtYdWr nuaJPjZDW1dziFd23Mwh4urybWUUNn7XfNJNV5s/iOQ0GI6Z02TrFQD3QLQTPAldbtVF OOMw== X-Gm-Message-State: AFuF++kapq0BmjFjolBsXBNFH1Ukv41VzQ9hPsNoZTjof3vy78uZ5+Eb oTfcAvrAx2cbMnWt0OjEED9P0DpGWcZwnIYVJPl/3nBf5x/7P0bPXl6LDGnhuQ== X-Gm-Gg: AR+sD13gmiVEa3KVCa4UoJxpBmTF3cVmLv8GiRP/dv5bruXDh8QODl3lJIHBn4YN3pL UR/E6eBsiUK262q7KqDHa4JfjAyYu+aPSviTbL/oHcYDTcIQZwEmKlRz7G5dDQ1kUfZ0tF5Icx9 c8OGbkVuXfNun2s2dkf4NIZwCuoNPZ/Ji9Fo2iD2W0C7m+AUEylCW9ZMvlNz1u4Z/TKIjJgGlcm ZtOkL3JFBIyo6Mv9ta1MFSEaY5I2FI5bIzywStbBQdnt43SGOVsUykyyuRX/+NX/q1NFZj/wrsQ eDFkszP/RgDtD0Gfa64o8+O8L9GkOQSs5Mckxg5d4SZ/NocXcQ8UXsWP5PT5JqWovFKYKjVSkS+ BdbCs9HxHmMPuTCbKR4raJAjrKy81lHLyCdyQiMjMvR2rduSj97t9HwU8tAVPJYHuN8tS8mAk96 4vfyY3T/0xqMoCkUa7pD7EklkGIXkdfM+oxLs2ZAnFZ6p3xaa3dCm3ai7kdNhPzQHIRPIJXT2AL t09+Q== X-Received: by 2002:a17:90b:3943:b0:38f:657:6823 with SMTP id 98e67ed59e1d1-395c50b43bamr22985351a91.8.1787550743049; Sun, 23 Aug 2026 22:52:23 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 81/96] disas/riscv: Merge all c.mop.n to one pattern Date: Mon, 24 Aug 2026 15:47:51 +1000 Message-ID: <20260824054806.2790041-82-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52c; envelope-from=alistair23@gmail.com; helo=mail-pg1-x52c.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550914129158501 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Avoid performing arithmetic on rv_op_c_mop_1. Treat the 'n' as an immediate. Create a codec and format to match. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-49-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.h | 2 ++ disas/riscv.c | 10 +++++++++- disas/riscv-op.c.inc | 9 +-------- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/disas/riscv.h b/disas/riscv.h index 47647f750f..b0269bb709 100644 --- a/disas/riscv.h +++ b/disas/riscv.h @@ -159,6 +159,7 @@ typedef enum { rv_codec_r2_imm2_imm5, rv_codec_fli, rv_codec_lp, + rv_codec_cmop, rv_codec_cmop_ss, rv_codec_mop_r, rv_codec_mop_rr, @@ -286,6 +287,7 @@ typedef struct { #define rv_fmt_rd_rs1_immh_imml_addr "O\t0,(1),i,j" #define rv_fmt_rd2_imm "O\t0,2,(1),i" #define rv_fmt_fli "O\t3,h" +#define rv_fmt_cmop "O.i" #define rv_fmt_mop_r "O.i\t0,1" #define rv_fmt_mop_rr "O.i\t0,1,2" =20 diff --git a/disas/riscv.c b/disas/riscv.c index 22104638e1..39235e5bc7 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -643,6 +643,11 @@ static uint32_t operand_lpl(rv_inst inst) return extract32(inst, 12, 20); } =20 +static uint32_t operand_cmop_imm(rv_inst inst) +{ + return extract32(inst, 8, 3) * 2 + 1; +} + static uint32_t operand_mop_r_imm(rv_inst inst) { return (extract32(inst, 30, 1) << 4) | @@ -1027,7 +1032,7 @@ static const rv_opcode_data *decode_inst_opcode(rv_de= code *dec, rv_isa isa) (((inst >> 11) & 0b11) =3D=3D 0b0)) { unsigned int cmop_code =3D 0; cmop_code =3D ((inst >> 8) & 0b111); - op =3D rv_op_c_mop_1 + cmop_code; + op =3D rv_op_c_mop; if (dec->cfg->ext_zicfiss) { op =3D (cmop_code =3D=3D 0) ? rv_op_c_sspush : op; op =3D (cmop_code =3D=3D 2) ? rv_op_c_sspopchk : o= p; @@ -3056,6 +3061,9 @@ static void decode_inst_operands(rv_decode *dec, rv_i= sa isa, case rv_codec_lp: dec->imm =3D operand_lpl(inst); break; + case rv_codec_cmop: + dec->imm =3D operand_cmop_imm(inst); + break; case rv_codec_cmop_ss: dec->rd =3D rv_ireg_zero; dec->rs1 =3D dec->rs2 =3D operand_crs1(inst); diff --git a/disas/riscv-op.c.inc b/disas/riscv-op.c.inc index 2100e54475..802a521bca 100644 --- a/disas/riscv-op.c.inc +++ b/disas/riscv-op.c.inc @@ -875,14 +875,7 @@ OP(amocas_d, "amocas.d", rv_codec_r_a, rv_fmt_aqrl_rd_= rs2_rs1) OP(amocas_q, "amocas.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) OP(mop_r, "mop.r", rv_codec_mop_r, rv_fmt_mop_r) OP(mop_rr, "mop.rr", rv_codec_mop_rr, rv_fmt_mop_rr) -OP(c_mop_1, "c.mop.1", rv_codec_ci_none, rv_fmt_none) -OP(c_mop_3, "c.mop.3", rv_codec_ci_none, rv_fmt_none) -OP(c_mop_5, "c.mop.5", rv_codec_ci_none, rv_fmt_none) -OP(c_mop_7, "c.mop.7", rv_codec_ci_none, rv_fmt_none) -OP(c_mop_9, "c.mop.9", rv_codec_ci_none, rv_fmt_none) -OP(c_mop_11, "c.mop.11", rv_codec_ci_none, rv_fmt_none) -OP(c_mop_13, "c.mop.13", rv_codec_ci_none, rv_fmt_none) -OP(c_mop_15, "c.mop.15", rv_codec_ci_none, rv_fmt_none) +OP(c_mop, "c.mop", rv_codec_cmop, rv_fmt_cmop) OP(amoswap_b, "amoswap.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) OP(amoadd_b, "amoadd.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) OP(amoxor_b, "amoxor.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550952; cv=none; d=zohomail.com; s=zohoarc; b=B6DSXHimNqrF1eI8MyzYoJdiWBunru0nAkC/Z+ZT3fIkg8fkW2ahoAb86grgpKzqKQxaBHgVOZjhPpTsVuNlodwi2h3vNlUNGWCroloqzbHRhc1agFM3/KRmBg77GBbcKY7jzgwEpdbv9ejb2cEENENp3Pq2F+4ulSIEinny9KQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550952; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=sVV9c8S04txxWkCEX8+hRViSARQ6uNL7zv3RnJ4UqLs=; b=SN9ldVQs07017apySxkFPU22WbScN85mg4vMKG2zjA2kKdl4W68AnEaEHvHqdxKVjwEwi4cKRCzl9MW7Cl4tfwD7G7/2c0IOSWmDrwgQUVCArwJfpz/l5qiMzcWASmAptLFaP7Nig4Z4FmHSmgmO1pvVxzzkyKUdtPFWkqCuMIc= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550951994187.2123009460264; Sun, 23 Aug 2026 22:55:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNc3-0007Ur-3y; Mon, 24 Aug 2026 01:52:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNbg-00064W-V0 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:28 -0400 Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNbf-00038R-7Y for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:28 -0400 Received: by mail-pg1-x52c.google.com with SMTP id 41be03b00d2f7-c9cf07d2df6so1891524a12.2 for ; Sun, 23 Aug 2026 22:52:26 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.52.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:52:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550746; x=1788155546; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=sVV9c8S04txxWkCEX8+hRViSARQ6uNL7zv3RnJ4UqLs=; b=Uk8baWBXhdA06Bazqz6By/dm/koddKL4GHyjnoSlIBkJkb4L7gLZGPbHT9UeAxawWH 2XJJDhwopkiyEFrPkrto3T+/RROO2t6rtRxirIKUK6n5mhDcO9UU2tqA7IQdlEmJWBGq IGgZ+b+SlrXM9Ps0Yq6Zfowttye7RMlW0CQL1DJi4D7w33GPaIZsla4L9fC7qklNQdtZ hydgZFaWLvjg6DgF/5QoWi6d1OGcmh3YwV7cjvAeSDIg+j0j7E+/9gwmKb0q4/AuTRQW P7/z0Yx3Hv/iNveOkHCTWPzMjuHiw2V4YlAJoqmNOPT7+lq6OH1WKx7Y2AsKIDnOKFcO h0Yg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550746; x=1788155546; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=sVV9c8S04txxWkCEX8+hRViSARQ6uNL7zv3RnJ4UqLs=; b=FWq+B+Ula7NML68UL0up4zV4RIYWlOSRR2PmuFwc2aRCD9iJU70Rshzvu9yjGZuVtJ u3fbWSzkcSaL7eSDVECDflU0Kova3BUvQeFX/PsZH8XpAfox543tIXXginD2mVTx3ZJZ RbTX8kEMF2eLArtUFm9rPjDcal8nLXQWNtT6Odc2VS+zRBh7NOyZCBPmBSCWyKSZCdgp 3D7RESuUJdJGranPCSOsr7WhDDrY+EkrNMhw0sqBj1oJtvYVENlHc1fElJK5DQ/Gnm5I 6QefnYNplK059kZaUZsNeDkOx+1SNZslB5vBcNZ2/Gue27gYH2BFjAN4X2UkrwPAtyTF wiWg== X-Gm-Message-State: AFuF++mpjQMbRx9dkA1pIjoW815EbYqWyDA1mtF2KoEeBiuTlplVWu97 CGMg+OIjJkXklpQHznbhEwBeQKQ7psVHOUBk8Ruaww6i21Yr9z8RkOTRd9yMpQ== X-Gm-Gg: AR+sD1025poRW8K+0NW87+OLY/lDrXddVAckAEL8EEVX1oc9Q2+0DdHtnNHA1v42Alm 2hDnduAN1UnoRhLiegRmY74t8FNqh3dF6DkSf13yZij2yxWn20NthlbUEF2BrrbEkbPUuE6sCfz th15KNvRM41MIiTkvwcmwbRhJyS96U04ZHv5B97zZucri7fMrK0NYc48E+67Dr81jNDvruOv87T Ikp5MA05DI45iikibQEYG/NvW11aFFkv6RK0V00P+I7KaBppASg7Da317nKbCByNJN+xGoCzqyq L1nCvuvF9eRjbSBK7a91vgqLCFryfZkYHULaQVkx323lakvKPrmTunjhtEn7qLgwBpv+L4PDW8x kDjY8NT6qI+YvwWsPjD+4GC00LeI9CohLVl0OpChQV51UGbLteLDPEWkcR0Thp6EVUDsLNnatye LGigMaZ/3CS+AbTh41pIHcp2FaOk1wnNad96B9LczAJpsIAdVdGjq7IVzeZ4rNApOqTa6uU5Jnb VJtbrk= X-Received: by 2002:a17:90b:1e0d:b0:395:4e0d:bc60 with SMTP id 98e67ed59e1d1-395c354d7ebmr36095549a91.9.1787550745830; Sun, 23 Aug 2026 22:52:25 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 82/96] disas/riscv: Tidy decode of c.mop.n Date: Mon, 24 Aug 2026 15:47:52 +1000 Message-ID: <20260824054806.2790041-83-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52c; envelope-from=alistair23@gmail.com; helo=mail-pg1-x52c.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550954052158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Merge nested if's. Reuse operand_cmop_imm for zicfiss decode. Return pointers directly. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-50-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index 39235e5bc7..197eaa43b1 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -1027,18 +1027,17 @@ static const rv_opcode_data *decode_inst_opcode(rv_= decode *dec, rv_isa isa) break; case 2: op =3D rv_op_c_li; break; case 3: - if (dec->cfg && dec->cfg->ext_zcmop) { - if ((((inst >> 2) & 0b111111) =3D=3D 0b100000) && - (((inst >> 11) & 0b11) =3D=3D 0b0)) { - unsigned int cmop_code =3D 0; - cmop_code =3D ((inst >> 8) & 0b111); - op =3D rv_op_c_mop; - if (dec->cfg->ext_zicfiss) { - op =3D (cmop_code =3D=3D 0) ? rv_op_c_sspush : op; - op =3D (cmop_code =3D=3D 2) ? rv_op_c_sspopchk : o= p; + if (dec->cfg + && dec->cfg->ext_zcmop + && ((inst >> 2) & 0b111111) =3D=3D 0b100000 + && ((inst >> 11) & 0b11) =3D=3D 0) { + if (dec->cfg->ext_zicfiss) { + switch (operand_cmop_imm(inst)) { + case 1: return &rvi_opcode_data[rv_op_c_sspush]; + case 5: return &rvi_opcode_data[rv_op_c_sspopchk]; } - break; } + return &rvi_opcode_data[rv_op_c_mop]; } if (inst & ((1 << 12) | (0x1f << 2))) { switch ((inst >> 7) & 0b11111) { --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551194; cv=none; d=zohomail.com; s=zohoarc; b=LfWbXUK9aWXPauSD2MpFQNXuFXzMZvmphxuey7hW+DGwHIlzb/PQ7haI8z3TOwd1Ug1M/ZmdRurCO6EmMjOOa+FdHBvsTVEb93jqsZ0qW3zWKmdDg51awG1QVSwV3qGBvDYJrgS/C9knhHaxMZzbtdEheaiB8QpNyghzhMOlC+s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551194; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=kp+RARhuhB9eCydGM0toopCbuCJCJESGSSluyzS3iH8=; b=HBJiwVrQQ9sbhrWR47eQbo32Wv6nBI9TSk8pJOOpepmLAw9+E46+uLPd9Z5WlL2ASbo9kA31dzeMyJXVcQrLTs57I3sqCCGJEvCK2qK69//wr56grCRu33IKjnRbfzIkcjb27SuuLYI4qBNEvu75OTu0OZ/X//7/JRIHya9vz8g= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551194294972.9391955527825; Sun, 23 Aug 2026 22:59:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNc4-0007dU-ES; Mon, 24 Aug 2026 01:52:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNbm-0006Tc-2j for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:34 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNbk-00039F-AK for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:33 -0400 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-38e041ea211so2463255a91.0 for ; Sun, 23 Aug 2026 22:52:31 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.52.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:52:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550751; x=1788155551; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=kp+RARhuhB9eCydGM0toopCbuCJCJESGSSluyzS3iH8=; b=T8t7odJW/gMP5IKJboBOYb9UPZCNEcZEnt8MV35BkMA1sk7UkKHkGtyvgxIalvR89E 94Z7ETLF8NBcXQMilMvtJdq0mozYYsve+yQ99v6dEGMtIXphT/euENcsAYtMztgdeJEE my1xH+SNB5/+odHuT/FSsYJU/om54fHSgpnl9CRm90/fPk9iaQeV4y70Q3m1FUlFcUM0 grJGQLyx4d8dvIpaUxzbfG8tnYIk7hEY6Qo8qAy47mvCy9tJ5W4bQBae9sX6PElhWpP+ g4EGO72DGYH2VMl3+NqJnhGkWr14Qitvtfvi5oQk15Awp7of3iKDNeMnTKptBcEOUc69 dWNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550751; x=1788155551; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=kp+RARhuhB9eCydGM0toopCbuCJCJESGSSluyzS3iH8=; b=ETmlNueS+pi9kwLg6VQWnJjlpCqsKqsB1H3rxtfMjH17gViQNkz18/PMsuXaI/w05m 8CzD2MMIQUxqisDGRr+LupJr5/pghSCAPXx3qLqx4B+4nFJZjDidPfZzOWQqm79dnS0p 2iMn4kiE9aJrB96jJRRt/vhX2RiYz/u4UhZcBMrkE92hSHZzFZGLtmprZfC1jQ5/jvfB bZAcfOczy2XdJ7HBSq2KGYC7yVEiQidufo+Ifmn3flsRpbQbU9jQNiwlq8yYZORYhwMx eVYo+y5dYq4/iRcQ7RJaUkexc/+R5UvyLFM+SF1yXqwRn5iEBpT1z88Y7a20u1NHfOKn kmdQ== X-Gm-Message-State: AFuF++nHX/pEhE83icQ6DuX8feUznyYtrphgczEb9tEE595+rEpja9Ej KL/rBJJpQ+Pt5PRZN6Eitk/MLieO+u16ts0YvVZ8+DQx54fR5qfjU2clcygtkg== X-Gm-Gg: AR+sD112rJZOaytkJw+gqfIUlFfVekKX2oLMDiC7vb+AsugjV7b+I4xQjBkQpC5JS5t sbXDdLpedvZ3vGnQly9u+aX8PGQhT3bSSXQK580iRiys/fm8enze7mARxDTuFaIvt3NXNkjHzl7 LA4BzJdR5IFrMGds4JSOqW5LJ8wgDgJ8mku2OsQqALmYNDIRWogNbiSzVr2zFf1/oQer+E2jJpc W0fg2TUaKUVqtO3fUMj32WUXb9joT1Xuox+R5HrTino70/TPAG6u8/RRTdKeWRUACF2RTVFTLjM QTY44uUbV9PDXZuXISFNxhx6IRgBRBWdrfMpROz+t4YbGY60ykrsGN5Eqwb8BaC1KbKaJhZqLzb R35akAtsGL3xEIe2nNjnO5+SZcfPqxq8+rXfIBqmZLCS5zN8PGZjrWluqetCGNZfZuU6yKRzm9D RFg2b2cU84lp8eqf/HqNtGzJ25Mb/Utu0b/noRpRS3YHgy5PsPowvWw4oSE4K4tzmTj/rBJeEHK YTerw== X-Received: by 2002:a17:90b:53d0:b0:38e:bbf1:de3f with SMTP id 98e67ed59e1d1-395c359a74bmr42151189a91.12.1787550750929; Sun, 23 Aug 2026 22:52:30 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 83/96] disas/riscv: Tidy decode of mop.r.n and mop.rr.n Date: Mon, 24 Aug 2026 15:47:53 +1000 Message-ID: <20260824054806.2790041-84-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1031; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1031.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551195051158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Merge nested if's. Reuse operand_mop_{r,rr}_imm for zicfiss decode. Return pointers directly. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-51-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 59 +++++++++++++++++++++------------------------------ 1 file changed, 24 insertions(+), 35 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index 197eaa43b1..7ea65ba2e7 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -2555,44 +2555,33 @@ static const rv_opcode_data *decode_inst_opcode(rv_= decode *dec, rv_isa isa) case 3: op =3D rv_op_csrrc; break; case 4: if (dec->cfg && dec->cfg->ext_zimop) { - int imm_mop5, imm_mop3, reg_num; - if ((extract32(inst, 22, 10) & 0b1011001111) - =3D=3D 0b1000000111) { - imm_mop5 =3D deposit32(deposit32(extract32(inst, 2= 0, 2), - 2, 2, - extract32(inst, 26,= 2)), - 4, 1, extract32(inst, 30, 1)); - op =3D rv_op_mop_r; - /* if zicfiss enabled and mop5 is shadow stack */ - if (dec->cfg->ext_zicfiss && - ((imm_mop5 & 0b11100) =3D=3D 0b11100)) { - /* rs1=3D0 means ssrdp */ - if ((inst & (0b011111 << 15)) =3D=3D 0) { - op =3D rv_op_ssrdp; - } - /* rd=3D0 means sspopchk */ - reg_num =3D (inst >> 15) & 0b011111; - if (((inst & (0b011111 << 7)) =3D=3D 0) && - ((reg_num =3D=3D 1) || (reg_num =3D=3D= 5))) { - op =3D rv_op_sspopchk; + if (((inst >> 22) & 0b1011001111) =3D=3D 0b1000000111)= { + if (dec->cfg->ext_zicfiss + && operand_mop_r_imm(inst) =3D=3D 28) { + switch (operand_rs1(inst)) { + case 0: + return &rvi_opcode_data[rv_op_ssrdp]; + case 1: + case 5: + if (operand_rd(inst) =3D=3D 0) { + return &rvi_opcode_data[rv_op_sspopchk= ]; } + } } - } else if ((extract32(inst, 25, 7) & 0b1011001) - =3D=3D 0b1000001) { - imm_mop3 =3D deposit32(extract32(inst, 26, 2), - 2, 1, extract32(inst, 30, 1)); - op =3D rv_op_mop_rr; - /* if zicfiss enabled and mop3 is shadow stack */ - if (dec->cfg->ext_zicfiss && - ((imm_mop3 & 0b111) =3D=3D 0b111)) { - /* rs1=3D0 and rd=3D0 means sspush */ - reg_num =3D (inst >> 20) & 0b011111; - if (((inst & (0b011111 << 15)) =3D=3D 0) && - ((inst & (0b011111 << 7)) =3D=3D 0) && - ((reg_num =3D=3D 1) || (reg_num =3D=3D= 5))) { - op =3D rv_op_sspush; - } + return &rvi_opcode_data[rv_op_mop_r]; + } + if (((inst >> 25) & 0b1011001) =3D=3D 0b1000001) { + if (dec->cfg->ext_zicfiss + && operand_mop_rr_imm(inst) =3D=3D 7 + && operand_rd(inst) =3D=3D 0 + && operand_rs1(inst) =3D=3D 0) { + switch (operand_rs2(inst)) { + case 1: + case 5: + return &rvi_opcode_data[rv_op_sspush]; + } } + return &rvi_opcode_data[rv_op_mop_rr]; } } break; --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550844; cv=none; d=zohomail.com; s=zohoarc; b=ILA8oKJaZHm/KfQjXQE/bMO6wXw9D5j+YZM2ve16WNoeraekZglcJ+CPSMO4fHxQuOButvawkW4KXZlZE0uMyh3pWlGrZlaNK3R34jFedJPyQA8KUtaWF1n0/uPza04iJqdx70paR9twR0IGB7R6ZXfMuoPNlGID+TpqDj7rVDs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550844; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=dNtbm0veFpAUUI11k9G62a1Arz3Nu9g0Jy+IoZP8f9Y=; b=l1t73IpeJ7WWOPTgpsWAU60u632R6n7kaGfUQk/t9G0RONluG3/YAIrTVpA431kravVRUtPcBtaw4jsRXWu2gk/CdsO9oO8ptTGMkh31I9dXap4h2G49+v/ZWeh/4oLXT6ifcKdbk1nUs7yf39R3V6GcytQ26BEV60AMDIe7qe8= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550844021223.26100678542196; Sun, 23 Aug 2026 22:54:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNcA-0008LQ-3y; Mon, 24 Aug 2026 01:52:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNbt-0006zz-Ts for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:43 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNbo-0003A2-8u for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:40 -0400 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-38a0c7e841fso4263425a91.2 for ; Sun, 23 Aug 2026 22:52:35 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.52.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:52:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550755; x=1788155555; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=dNtbm0veFpAUUI11k9G62a1Arz3Nu9g0Jy+IoZP8f9Y=; b=rtyVdWha71PG41UAovODhw4O6ahp6TEJvpbcUGyb5PiCaY6MAXETjsZlHb/nEme232 NOp02nCCmTRgdvsb0kevZXcvW4/uLL+dRbOwPy78byZxLYsOY6XLDCt6e09UTGxCBCha lrXoJD0ycuSWMNTzUIyWB9/hhzppLdnJJPCdKcb0LyDFKfVVGCKiBh0jMyEIcQmnu6ZS w+4QEemm6ezDHtOfVgPLZAezTy9ET/IXfX4IYU4bYiw5pl4S5Idzjtnr8+8rv7PIY5wA bw0n4Mv4SpU4redp8p/6jOAhrjP+ZcZi0Mk2xupr46qn3KdY8fHwcuQDY1Lt02F4KdPI K06A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550755; x=1788155555; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=dNtbm0veFpAUUI11k9G62a1Arz3Nu9g0Jy+IoZP8f9Y=; b=SHnW2NvKdGfRqmA5COreL+AdgWFUNbzqvd14NO0q5Jadi84keBjKn9OG5kGcEeiqM0 ZFHLDEP+joVk7KvEMcEpkTpl6swTxfK15z7X9wIf8bNXKUr1Vv447jc9vSXjjKkTnBTo jL8yolPFOI85fUQ84w9BSBT1/vPd3DKhtZ+uy7MH+atIMDBBNE70JQ0BoejO/sHy9PjL dcFQ6jFlyWDbcsbanUsujQcRhj/HbMsTDcYHyxiCxv87BZwp0cHkWizGlGSYq4nN5ops 2WytHfzx5zWBqR4i58w21n01BTMEmBlU4MUU3uMXcfthiPq0PVNb0a9UeeWjqBoxXHpW jdBQ== X-Gm-Message-State: AFuF++kfz5snQWWBbDXooGk/Ie2T+4BQKfkNjSq6JPRdKj9JF3BJjTfp ey9fBXFdkIOwLMS1gPVRV+vVE/WnUX5gfRn2k3D4qznHUXcXTuKAw+u5BWGmeA== X-Gm-Gg: AR+sD12AB6LJSm1tusaWJBMVfkSVNtyDeVo+012WV/Mk/F7HmXvZTTk1xuqw+QilsIB rr2mX0pUxCzpQYrtRu9B8qZSP0fzuZ+RfQHHwdm9ckgYihmFXs/5d9KR3i4EVT3j5spRSZ2Megv WQl1muiERnehoymMCZfCHBQt8+GsScVC1+CY0aIsk5VtQap7m4eEcrG02WxPV69PIb/h0qPgh0G DmJXD2lzettKeVcmwEeUrw5FQxwoCwMGuXFpdRblnTT3ReBd1mf99Kjdh5RemCyfSqq6rpmBuFF ZeQdRdlUV/0s9IyVCgsKJ+elEj1hx36ArqDRIQMZCJ+hQTMHxtSCCOC2q6AsxvsCQDnWkgLzAb2 AP6jPqYQ42rsXEPOWusd9q0y4LEa/tp7wGCNGGFs33UAIMbUybp/Vpaz+ce5vrqtMPPv4mq9OhT Nsc48ufmzMSgbyYNAIyRxafhpIhrVHLV9idp/CTBQeLivpfIXJGpKYhADt/OkJ0PsH1QCHpiO21 Ksdqw== X-Received: by 2002:a17:90b:2e8f:b0:381:e74f:8a6a with SMTP id 98e67ed59e1d1-395c3abee54mr42928092a91.16.1787550754144; Sun, 23 Aug 2026 22:52:34 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis Subject: [PULL v2 84/96] disas/riscv: Split rvi_opcode_data Date: Mon, 24 Aug 2026 15:47:54 +1000 Message-ID: <20260824054806.2790041-85-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102d; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102d.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550845891158500 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Generate separate objects for OP() instead of collecting in a table. Return pointers to objects directly. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-52-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv.c | 1981 +++++++++++++++++++++--------------------- disas/riscv-op.c.inc | 94 +- 2 files changed, 1048 insertions(+), 1027 deletions(-) diff --git a/disas/riscv.c b/disas/riscv.c index 7ea65ba2e7..b8099cbdf8 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -28,12 +28,6 @@ #include "disas/riscv-xventana.h" #include "disas/riscv-xlrbr.h" =20 -typedef enum { -#define OP(N, ...) rv_op_##N, -#include "riscv-op.c.inc" -#undef OP -} rv_op; - /* register names */ =20 static const char rv_ireg_name_sym[32][5] =3D { @@ -113,140 +107,143 @@ static const rvc_constraint rvcc_true[] =3D { rvc_e= nd }; =20 /* pseudo-instruction metadata */ =20 -static const rv_opcode_data rvi_opcode_data[]; +/* Forward declare the all the opcodes so that we may link them. */ +#define OP(N, ...) static const rv_opcode_data op_##N; +#include "riscv-op.c.inc" +#undef OP =20 static const rv_comp_data rvcp_jal[] =3D { - { &rvi_opcode_data[rv_op_j], rvcc_j }, - { &rvi_opcode_data[rv_op_jal_ra], rvcc_jal_ra }, + { &op_j, rvcc_j }, + { &op_jal_ra, rvcc_jal_ra }, { }, }; =20 static const rv_comp_data rvcp_jalr[] =3D { - { &rvi_opcode_data[rv_op_jr], rvcc_jr }, - { &rvi_opcode_data[rv_op_jalr_ra], rvcc_jalr_ra }, + { &op_jr, rvcc_jr }, + { &op_jalr_ra, rvcc_jalr_ra }, { }, }; =20 static const rv_comp_data rvcp_jr[] =3D { - { &rvi_opcode_data[rv_op_ret], rvcc_ret }, + { &op_ret, rvcc_ret }, { }, }; =20 static const rv_comp_data rvcp_beq[] =3D { - { &rvi_opcode_data[rv_op_beqz], rvcc_beqz }, + { &op_beqz, rvcc_beqz }, { }, }; =20 static const rv_comp_data rvcp_bne[] =3D { - { &rvi_opcode_data[rv_op_bnez], rvcc_bnez }, + { &op_bnez, rvcc_bnez }, { }, }; =20 static const rv_comp_data rvcp_blt[] =3D { - { &rvi_opcode_data[rv_op_bltz], rvcc_bltz }, - { &rvi_opcode_data[rv_op_bgtz], rvcc_bgtz }, + { &op_bltz, rvcc_bltz }, + { &op_bgtz, rvcc_bgtz }, { }, }; =20 static const rv_comp_data rvcp_bge[] =3D { - { &rvi_opcode_data[rv_op_blez], rvcc_blez }, - { &rvi_opcode_data[rv_op_bgez], rvcc_bgez }, + { &op_blez, rvcc_blez }, + { &op_bgez, rvcc_bgez }, { }, }; =20 static const rv_comp_data rvcp_addi[] =3D { - { &rvi_opcode_data[rv_op_mv], rvcc_mv }, + { &op_mv, rvcc_mv }, { }, }; =20 static const rv_comp_data rvcp_mv[] =3D { - { &rvi_opcode_data[rv_op_nop], rvcc_nop }, + { &op_nop, rvcc_nop }, { }, }; =20 static const rv_comp_data rvcp_sltiu[] =3D { - { &rvi_opcode_data[rv_op_seqz], rvcc_seqz }, + { &op_seqz, rvcc_seqz }, { }, }; =20 static const rv_comp_data rvcp_xori[] =3D { - { &rvi_opcode_data[rv_op_not], rvcc_not }, + { &op_not, rvcc_not }, { }, }; =20 static const rv_comp_data rvcp_sub[] =3D { - { &rvi_opcode_data[rv_op_neg], rvcc_neg }, + { &op_neg, rvcc_neg }, { }, }; =20 static const rv_comp_data rvcp_slt[] =3D { - { &rvi_opcode_data[rv_op_sltz], rvcc_sltz }, - { &rvi_opcode_data[rv_op_sgtz], rvcc_sgtz }, + { &op_sltz, rvcc_sltz }, + { &op_sgtz, rvcc_sgtz }, { }, }; =20 static const rv_comp_data rvcp_sltu[] =3D { - { &rvi_opcode_data[rv_op_snez], rvcc_snez }, + { &op_snez, rvcc_snez }, { }, }; =20 static const rv_comp_data rvcp_addiw[] =3D { - { &rvi_opcode_data[rv_op_sext_w], rvcc_sext_w }, + { &op_sext_w, rvcc_sext_w }, { }, }; =20 static const rv_comp_data rvcp_subw[] =3D { - { &rvi_opcode_data[rv_op_negw], rvcc_negw }, + { &op_negw, rvcc_negw }, { }, }; =20 static const rv_comp_data rvcp_fsgnj_s[] =3D { - { &rvi_opcode_data[rv_op_fmv_s], rvcc_fmv_s }, + { &op_fmv_s, rvcc_fmv_s }, { }, }; =20 static const rv_comp_data rvcp_fsgnjn_s[] =3D { - { &rvi_opcode_data[rv_op_fneg_s], rvcc_fneg_s }, + { &op_fneg_s, rvcc_fneg_s }, { }, }; =20 static const rv_comp_data rvcp_fsgnjx_s[] =3D { - { &rvi_opcode_data[rv_op_fabs_s], rvcc_fabs_s }, + { &op_fabs_s, rvcc_fabs_s }, { }, }; =20 static const rv_comp_data rvcp_fsgnj_d[] =3D { - { &rvi_opcode_data[rv_op_fmv_d], rvcc_fmv_d }, + { &op_fmv_d, rvcc_fmv_d }, { }, }; =20 static const rv_comp_data rvcp_fsgnjn_d[] =3D { - { &rvi_opcode_data[rv_op_fneg_d], rvcc_fneg_d }, + { &op_fneg_d, rvcc_fneg_d }, { }, }; =20 static const rv_comp_data rvcp_fsgnjx_d[] =3D { - { &rvi_opcode_data[rv_op_fabs_d], rvcc_fabs_d }, + { &op_fabs_d, rvcc_fabs_d }, { }, }; =20 static const rv_comp_data rvcp_fsgnj_q[] =3D { - { &rvi_opcode_data[rv_op_fmv_q], rvcc_fmv_q }, + { &op_fmv_q, rvcc_fmv_q }, { }, }; =20 static const rv_comp_data rvcp_fsgnjn_q[] =3D { - { &rvi_opcode_data[rv_op_fneg_q], rvcc_fneg_q }, + { &op_fneg_q, rvcc_fneg_q }, { }, }; =20 static const rv_comp_data rvcp_fsgnjx_q[] =3D { - { &rvi_opcode_data[rv_op_fabs_q], rvcc_fabs_q }, + { &op_fabs_q, rvcc_fabs_q }, { }, }; =20 /* Convert compressed insns into normal insns via pseudo expansion. */ -#define DECOMP(X) &(const rv_comp_data){ &rvi_opcode_data[X], rvcc_true } +#define DECOMP(X) &(const rv_comp_data){ &X, rvcc_true } =20 /* operand extractors */ =20 @@ -662,11 +659,9 @@ static uint32_t operand_mop_rr_imm(rv_inst inst) =20 /* instruction metadata */ =20 -static const rv_opcode_data rvi_opcode_data[] =3D { -#define OP(N, ...) { __VA_ARGS__ }, +#define OP(N, ...) static const rv_opcode_data op_##N =3D { __VA_ARGS__ }; #include "riscv-op.c.inc" #undef OP -}; =20 /* CSR names */ =20 @@ -953,79 +948,65 @@ static const char *csr_name(int csrno) static const rv_opcode_data *decode_inst_opcode(rv_decode *dec, rv_isa isa) { rv_inst inst =3D dec->inst; - rv_opcode op =3D rv_op_illegal; =20 switch ((inst >> 0) & 0b11) { case 0: switch ((inst >> 13) & 0b111) { case 0: if ((inst >> 5) & 0xff) { - op =3D rv_op_c_addi4spn; + return &op_c_addi4spn; } break; case 1: if (isa =3D=3D rv128) { - op =3D rv_op_c_lq; - } else { - op =3D rv_op_c_fld; + return &op_c_lq; } - break; - case 2: op =3D rv_op_c_lw; break; + return &op_c_fld; + case 2: return &op_c_lw; case 3: if (isa =3D=3D rv32) { - op =3D rv_op_c_flw; - } else { - op =3D rv_op_c_ld; + return &op_c_flw; } - break; + return &op_c_ld; case 4: switch ((inst >> 10) & 0b111) { - case 0: op =3D rv_op_c_lbu; break; + case 0: return &op_c_lbu; case 1: if (((inst >> 6) & 1) =3D=3D 0) { - op =3D rv_op_c_lhu; - } else { - op =3D rv_op_c_lh; + return &op_c_lhu; } - break; - case 2: op =3D rv_op_c_sb; break; + return &op_c_lh; + case 2: return &op_c_sb; case 3: if (((inst >> 6) & 1) =3D=3D 0) { - op =3D rv_op_c_sh; + return &op_c_sh; } break; } break; case 5: if (isa =3D=3D rv128) { - op =3D rv_op_c_sq; - } else { - op =3D rv_op_c_fsd; + return &op_c_sq; } - break; - case 6: op =3D rv_op_c_sw; break; + return &op_c_fsd; + case 6: return &op_c_sw; case 7: if (isa =3D=3D rv32) { - op =3D rv_op_c_fsw; - } else { - op =3D rv_op_c_sd; + return &op_c_fsw; } - break; + return &op_c_sd; } break; case 1: switch ((inst >> 13) & 0b111) { case 0: - op =3D rv_op_c_addi; /* or unspecified HINT */ - break; + return &op_c_addi; /* or unspecified HINT */ case 1: if (isa =3D=3D rv32) { - op =3D rv_op_c_jal; - } else { - op =3D rv_op_c_addiw; + return &op_c_jal; } - break; - case 2: op =3D rv_op_c_li; break; + return &op_c_addiw; + case 2: return &op_c_li; case 3: if (dec->cfg && dec->cfg->ext_zcmop @@ -1033,16 +1014,16 @@ static const rv_opcode_data *decode_inst_opcode(rv_= decode *dec, rv_isa isa) && ((inst >> 11) & 0b11) =3D=3D 0) { if (dec->cfg->ext_zicfiss) { switch (operand_cmop_imm(inst)) { - case 1: return &rvi_opcode_data[rv_op_c_sspush]; - case 5: return &rvi_opcode_data[rv_op_c_sspopchk]; + case 1: return &op_c_sspush; + case 5: return &op_c_sspopchk; } } - return &rvi_opcode_data[rv_op_c_mop]; + return &op_c_mop; } if (inst & ((1 << 12) | (0x1f << 2))) { switch ((inst >> 7) & 0b11111) { - case 2: op =3D rv_op_c_addi16sp; break; - default: op =3D rv_op_c_lui; break; + case 2: return &op_c_addi16sp; + default: return &op_c_lui; } } break; @@ -1051,261 +1032,252 @@ static const rv_opcode_data *decode_inst_opcode(r= v_decode *dec, rv_isa isa) case 0: /* For rv32, shamt[5]=3D1 is designated for custom extensi= ons. */ if (isa !=3D rv32 || (inst & 0x1000) =3D=3D 0) { - op =3D rv_op_c_srli; /* or unspecified HINT */ + return &op_c_srli; /* or unspecified HINT */ } break; case 1: /* For rv32, shamt[5]=3D1 is designated for custom extensi= ons. */ if (isa !=3D rv32 || (inst & 0x1000) =3D=3D 0) { - op =3D rv_op_c_srai; /* or unspecified HINT */ + return &op_c_srai; /* or unspecified HINT */ } break; - case 2: op =3D rv_op_c_andi; break; + case 2: return &op_c_andi; case 3: switch (((inst >> 10) & 0b100) | ((inst >> 5) & 0b011)) { - case 0: op =3D rv_op_c_sub; break; - case 1: op =3D rv_op_c_xor; break; - case 2: op =3D rv_op_c_or; break; - case 3: op =3D rv_op_c_and; break; + case 0: return &op_c_sub; + case 1: return &op_c_xor; + case 2: return &op_c_or; + case 3: return &op_c_and; case 4: if (isa !=3D rv32) { - op =3D rv_op_c_subw; + return &op_c_subw; } break; case 5: if (isa !=3D rv32) { - op =3D rv_op_c_addw; + return &op_c_addw; } break; - case 6: op =3D rv_op_c_mul; break; + case 6: return &op_c_mul; case 7: switch ((inst >> 2) & 0b111) { - case 0: op =3D rv_op_c_zext_b; break; - case 1: op =3D rv_op_c_sext_b; break; - case 2: op =3D rv_op_c_zext_h; break; - case 3: op =3D rv_op_c_sext_h; break; - case 4: op =3D rv_op_c_zext_w; break; - case 5: op =3D rv_op_c_not; break; + case 0: return &op_c_zext_b; + case 1: return &op_c_sext_b; + case 2: return &op_c_zext_h; + case 3: return &op_c_sext_h; + case 4: return &op_c_zext_w; + case 5: return &op_c_not; } break; } break; } break; - case 5: op =3D rv_op_c_j; break; - case 6: op =3D rv_op_c_beqz; break; - case 7: op =3D rv_op_c_bnez; break; + case 5: return &op_c_j; + case 6: return &op_c_beqz; + case 7: return &op_c_bnez; } break; case 2: switch ((inst >> 13) & 0b111) { case 0: if (isa !=3D rv32 || (inst & 0x1000) =3D=3D 0) { - op =3D rv_op_c_slli; /* or unspecified HINT */ + return &op_c_slli; /* or unspecified HINT */ } break; case 1: if (isa =3D=3D rv128) { - op =3D rv_op_c_lqsp; - } else { - op =3D rv_op_c_fldsp; + return &op_c_lqsp; } - break; - case 2: op =3D rv_op_c_lwsp; break; + return &op_c_fldsp; + case 2: return &op_c_lwsp; case 3: if (isa =3D=3D rv32) { - op =3D rv_op_c_flwsp; - } else { - op =3D rv_op_c_ldsp; + return &op_c_flwsp; } - break; + return &op_c_ldsp; case 4: switch ((inst >> 12) & 0b1) { case 0: switch ((inst >> 2) & 0b11111) { - case 0: op =3D rv_op_c_jr; break; - default: op =3D rv_op_c_mv; break; + case 0: return &op_c_jr; + default: return &op_c_mv; } break; case 1: switch ((inst >> 2) & 0b11111) { case 0: switch ((inst >> 7) & 0b11111) { - case 0: op =3D rv_op_c_ebreak; break; - default: op =3D rv_op_c_jalr; break; + case 0: return &op_c_ebreak; + default: return &op_c_jalr; } break; - default: op =3D rv_op_c_add; break; + default: return &op_c_add; } break; } break; case 5: if (isa =3D=3D rv128) { - op =3D rv_op_c_sqsp; - } else { - op =3D rv_op_c_fsdsp; - if (dec->cfg && dec->cfg->ext_zcmp && ((inst >> 12) & 0b01= )) { + return &op_c_sqsp; + } + if (dec->cfg) { + if (dec->cfg->ext_zcmp && ((inst >> 12) & 0b01)) { switch ((inst >> 8) & 0b01111) { case 8: if (((inst >> 4) & 0b01111) >=3D 4) { - op =3D rv_op_cm_push; + return &op_cm_push; } break; case 10: if (((inst >> 4) & 0b01111) >=3D 4) { - op =3D rv_op_cm_pop; + return &op_cm_pop; } break; case 12: if (((inst >> 4) & 0b01111) >=3D 4) { - op =3D rv_op_cm_popretz; + return &op_cm_popretz; } break; case 14: if (((inst >> 4) & 0b01111) >=3D 4) { - op =3D rv_op_cm_popret; + return &op_cm_popret; } break; } - } else { - switch ((inst >> 10) & 0b011) { - case 0: - if (dec->cfg && !dec->cfg->ext_zcmt) { - break; - } - if (((inst >> 2) & 0xFF) >=3D 32) { - op =3D rv_op_cm_jalt; - } else { - op =3D rv_op_cm_jt; - } + } + switch ((inst >> 10) & 0b011) { + case 0: + if (!dec->cfg->ext_zcmt) { break; - case 3: - if (dec->cfg && !dec->cfg->ext_zcmp) { - break; - } - switch ((inst >> 5) & 0b011) { - case 1: op =3D rv_op_cm_mvsa01; break; - case 3: op =3D rv_op_cm_mva01s; break; - } + } + if (((inst >> 2) & 0xFF) >=3D 32) { + return &op_cm_jalt; + } + return &op_cm_jt; + case 3: + if (!dec->cfg->ext_zcmp) { break; } + switch ((inst >> 5) & 0b011) { + case 1: return &op_cm_mvsa01; + case 3: return &op_cm_mva01s; + } + break; } } - break; - case 6: op =3D rv_op_c_swsp; break; + return &op_c_fsdsp; + case 6: return &op_c_swsp; case 7: if (isa =3D=3D rv32) { - op =3D rv_op_c_fswsp; - } else { - op =3D rv_op_c_sdsp; + return &op_c_fswsp; } - break; + return &op_c_sdsp; } break; case 3: switch ((inst >> 2) & 0b11111) { case 0: switch ((inst >> 12) & 0b111) { - case 0: op =3D rv_op_lb; break; - case 1: op =3D rv_op_lh; break; - case 2: op =3D rv_op_lw; break; - case 3: op =3D rv_op_ld; break; - case 4: op =3D rv_op_lbu; break; - case 5: op =3D rv_op_lhu; break; - case 6: op =3D rv_op_lwu; break; - case 7: op =3D rv_op_ldu; break; + case 0: return &op_lb; + case 1: return &op_lh; + case 2: return &op_lw; + case 3: return &op_ld; + case 4: return &op_lbu; + case 5: return &op_lhu; + case 6: return &op_lwu; + case 7: return &op_ldu; } break; case 1: switch ((inst >> 12) & 0b111) { case 0: switch ((inst >> 20) & 0b111111111111) { - case 40: op =3D rv_op_vl1re8_v; break; - case 552: op =3D rv_op_vl2re8_v; break; - case 1576: op =3D rv_op_vl4re8_v; break; - case 3624: op =3D rv_op_vl8re8_v; break; + case 40: return &op_vl1re8_v; + case 552: return &op_vl2re8_v; + case 1576: return &op_vl4re8_v; + case 3624: return &op_vl8re8_v; } switch ((inst >> 26) & 0b111) { case 0: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_vle8_v; break; - case 11: op =3D rv_op_vlm_v; break; - case 16: op =3D rv_op_vle8ff_v; break; + case 0: return &op_vle8_v; + case 11: return &op_vlm_v; + case 16: return &op_vle8ff_v; } break; - case 1: op =3D rv_op_vluxei8_v; break; - case 2: op =3D rv_op_vlse8_v; break; - case 3: op =3D rv_op_vloxei8_v; break; + case 1: return &op_vluxei8_v; + case 2: return &op_vlse8_v; + case 3: return &op_vloxei8_v; } break; - case 1: op =3D rv_op_flh; break; - case 2: op =3D rv_op_flw; break; - case 3: op =3D rv_op_fld; break; - case 4: op =3D rv_op_flq; break; + case 1: return &op_flh; + case 2: return &op_flw; + case 3: return &op_fld; + case 4: return &op_flq; case 5: switch ((inst >> 20) & 0b111111111111) { - case 40: op =3D rv_op_vl1re16_v; break; - case 552: op =3D rv_op_vl2re16_v; break; - case 1576: op =3D rv_op_vl4re16_v; break; - case 3624: op =3D rv_op_vl8re16_v; break; + case 40: return &op_vl1re16_v; + case 552: return &op_vl2re16_v; + case 1576: return &op_vl4re16_v; + case 3624: return &op_vl8re16_v; } switch ((inst >> 26) & 0b111) { case 0: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_vle16_v; break; - case 16: op =3D rv_op_vle16ff_v; break; + case 0: return &op_vle16_v; + case 16: return &op_vle16ff_v; } break; - case 1: op =3D rv_op_vluxei16_v; break; - case 2: op =3D rv_op_vlse16_v; break; - case 3: op =3D rv_op_vloxei16_v; break; + case 1: return &op_vluxei16_v; + case 2: return &op_vlse16_v; + case 3: return &op_vloxei16_v; } break; case 6: switch ((inst >> 20) & 0b111111111111) { - case 40: op =3D rv_op_vl1re32_v; break; - case 552: op =3D rv_op_vl2re32_v; break; - case 1576: op =3D rv_op_vl4re32_v; break; - case 3624: op =3D rv_op_vl8re32_v; break; + case 40: return &op_vl1re32_v; + case 552: return &op_vl2re32_v; + case 1576: return &op_vl4re32_v; + case 3624: return &op_vl8re32_v; } switch ((inst >> 26) & 0b111) { case 0: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_vle32_v; break; - case 16: op =3D rv_op_vle32ff_v; break; + case 0: return &op_vle32_v; + case 16: return &op_vle32ff_v; } break; - case 1: op =3D rv_op_vluxei32_v; break; - case 2: op =3D rv_op_vlse32_v; break; - case 3: op =3D rv_op_vloxei32_v; break; + case 1: return &op_vluxei32_v; + case 2: return &op_vlse32_v; + case 3: return &op_vloxei32_v; } break; case 7: switch ((inst >> 20) & 0b111111111111) { - case 40: op =3D rv_op_vl1re64_v; break; - case 552: op =3D rv_op_vl2re64_v; break; - case 1576: op =3D rv_op_vl4re64_v; break; - case 3624: op =3D rv_op_vl8re64_v; break; + case 40: return &op_vl1re64_v; + case 552: return &op_vl2re64_v; + case 1576: return &op_vl4re64_v; + case 3624: return &op_vl8re64_v; } switch ((inst >> 26) & 0b111) { case 0: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_vle64_v; break; - case 16: op =3D rv_op_vle64ff_v; break; + case 0: return &op_vle64_v; + case 16: return &op_vle64ff_v; } break; - case 1: op =3D rv_op_vluxei64_v; break; - case 2: op =3D rv_op_vlse64_v; break; - case 3: op =3D rv_op_vloxei64_v; break; + case 1: return &op_vluxei64_v; + case 2: return &op_vlse64_v; + case 3: return &op_vloxei64_v; } break; } break; case 3: switch ((inst >> 12) & 0b111) { - case 0: op =3D rv_op_fence; break; - case 1: op =3D rv_op_fence_i; break; + case 0: return &op_fence; + case 1: return &op_fence_i; case 2: /* * 'lq' shares the "(...) 010 ..... 0001111" opcode space @@ -1320,204 +1292,203 @@ static const rv_opcode_data *decode_inst_opcode(r= v_decode *dec, rv_isa isa) * Anything that doesn't match these will default to 'lq'. */ switch ((inst >> 17) & 0b11111) { - case 0: op =3D rv_op_cbo_inval; break; - case 1: op =3D rv_op_cbo_clean; break; - case 2: op =3D rv_op_cbo_flush; break; - case 4: op =3D rv_op_cbo_zero; break; - default: op =3D rv_op_lq; break; + case 0: return &op_cbo_inval; + case 1: return &op_cbo_clean; + case 2: return &op_cbo_flush; + case 4: return &op_cbo_zero; + default: return &op_lq; } } break; case 4: switch ((inst >> 12) & 0b111) { - case 0: op =3D rv_op_addi; break; + case 0: return &op_addi; case 1: switch ((inst >> 27) & 0b11111) { - case 0b00000: op =3D rv_op_slli; break; + case 0b00000: return &op_slli; case 0b00001: switch ((inst >> 20) & 0b1111111) { - case 0b0001111: op =3D rv_op_zip; break; + case 0b0001111: return &op_zip; } break; case 0b00010: switch ((inst >> 20) & 0b1111111) { - case 0b0000000: op =3D rv_op_sha256sum0; break; - case 0b0000001: op =3D rv_op_sha256sum1; break; - case 0b0000010: op =3D rv_op_sha256sig0; break; - case 0b0000011: op =3D rv_op_sha256sig1; break; - case 0b0000100: op =3D rv_op_sha512sum0; break; - case 0b0000101: op =3D rv_op_sha512sum1; break; - case 0b0000110: op =3D rv_op_sha512sig0; break; - case 0b0000111: op =3D rv_op_sha512sig1; break; - case 0b0001000: op =3D rv_op_sm3p0; break; - case 0b0001001: op =3D rv_op_sm3p1; break; + case 0b0000000: return &op_sha256sum0; + case 0b0000001: return &op_sha256sum1; + case 0b0000010: return &op_sha256sig0; + case 0b0000011: return &op_sha256sig1; + case 0b0000100: return &op_sha512sum0; + case 0b0000101: return &op_sha512sum1; + case 0b0000110: return &op_sha512sig0; + case 0b0000111: return &op_sha512sig1; + case 0b0001000: return &op_sm3p0; + case 0b0001001: return &op_sm3p1; } break; - case 0b00101: op =3D rv_op_bseti; break; + case 0b00101: return &op_bseti; case 0b00110: switch ((inst >> 20) & 0b1111111) { - case 0b0000000: op =3D rv_op_aes64im; break; + case 0b0000000: return &op_aes64im; default: if (((inst >> 24) & 0b0111) =3D=3D 0b001) { - op =3D rv_op_aes64ks1i; + return &op_aes64ks1i; } break; } break; - case 0b01001: op =3D rv_op_bclri; break; - case 0b01101: op =3D rv_op_binvi; break; + case 0b01001: return &op_bclri; + case 0b01101: return &op_binvi; case 0b01100: switch ((inst >> 20) & 0b1111111) { - case 0b0000000: op =3D rv_op_clz; break; - case 0b0000001: op =3D rv_op_ctz; break; - case 0b0000010: op =3D rv_op_cpop; break; + case 0b0000000: return &op_clz; + case 0b0000001: return &op_ctz; + case 0b0000010: return &op_cpop; /* 0b0000011 */ - case 0b0000100: op =3D rv_op_sext_b; break; - case 0b0000101: op =3D rv_op_sext_h; break; + case 0b0000100: return &op_sext_b; + case 0b0000101: return &op_sext_h; } break; } break; - case 2: op =3D rv_op_slti; break; - case 3: op =3D rv_op_sltiu; break; - case 4: op =3D rv_op_xori; break; + case 2: return &op_slti; + case 3: return &op_sltiu; + case 4: return &op_xori; case 5: switch ((inst >> 27) & 0b11111) { - case 0b00000: op =3D rv_op_srli; break; + case 0b00000: return &op_srli; case 0b00001: switch ((inst >> 20) & 0b1111111) { - case 0b0001111: op =3D rv_op_unzip; break; + case 0b0001111: return &op_unzip; } break; - case 0b00101: op =3D rv_op_orc_b; break; - case 0b01000: op =3D rv_op_srai; break; - case 0b01001: op =3D rv_op_bexti; break; - case 0b01100: op =3D rv_op_rori; break; + case 0b00101: return &op_orc_b; + case 0b01000: return &op_srai; + case 0b01001: return &op_bexti; + case 0b01100: return &op_rori; case 0b01101: switch ((inst >> 20) & 0b1111111) { case 0b0011000: if (isa =3D=3D rv32) { - op =3D rv_op_rev8; + return &op_rev8; } break; case 0b0111000: if (isa =3D=3D rv64) { - op =3D rv_op_rev8; + return &op_rev8; } break; - case 0b0000111: op =3D rv_op_brev8; break; + case 0b0000111: return &op_brev8; } break; } break; - case 6: op =3D rv_op_ori; break; - case 7: op =3D rv_op_andi; break; + case 6: return &op_ori; + case 7: return &op_andi; } break; case 5: - op =3D rv_op_auipc; if (dec->cfg && dec->cfg->ext_zicfilp && (((inst >> 7) & 0b11111) =3D=3D 0b00000)) { - op =3D rv_op_lpad; + return &op_lpad; } - break; + return &op_auipc; case 6: /* OP-IMM-32 */ if (isa =3D=3D rv32) { break; } switch ((inst >> 12) & 0b111) { - case 0: op =3D rv_op_addiw; break; + case 0: return &op_addiw; case 1: switch ((inst >> 26) & 0b111111) { - case 0: op =3D rv_op_slliw; break; - case 2: op =3D rv_op_slli_uw; break; + case 0: return &op_slliw; + case 2: return &op_slli_uw; case 24: switch ((inst >> 20) & 0b11111) { - case 0b00000: op =3D rv_op_clzw; break; - case 0b00001: op =3D rv_op_ctzw; break; - case 0b00010: op =3D rv_op_cpopw; break; + case 0b00000: return &op_clzw; + case 0b00001: return &op_ctzw; + case 0b00010: return &op_cpopw; } break; } break; case 5: switch ((inst >> 25) & 0b1111111) { - case 0: op =3D rv_op_srliw; break; - case 32: op =3D rv_op_sraiw; break; - case 48: op =3D rv_op_roriw; break; + case 0: return &op_srliw; + case 32: return &op_sraiw; + case 48: return &op_roriw; } break; } break; case 8: switch ((inst >> 12) & 0b111) { - case 0: op =3D rv_op_sb; break; - case 1: op =3D rv_op_sh; break; - case 2: op =3D rv_op_sw; break; - case 3: op =3D rv_op_sd; break; - case 4: op =3D rv_op_sq; break; + case 0: return &op_sb; + case 1: return &op_sh; + case 2: return &op_sw; + case 3: return &op_sd; + case 4: return &op_sq; } break; case 9: switch ((inst >> 12) & 0b111) { case 0: switch ((inst >> 20) & 0b111111111111) { - case 40: op =3D rv_op_vs1r_v; break; - case 552: op =3D rv_op_vs2r_v; break; - case 1576: op =3D rv_op_vs4r_v; break; - case 3624: op =3D rv_op_vs8r_v; break; + case 40: return &op_vs1r_v; + case 552: return &op_vs2r_v; + case 1576: return &op_vs4r_v; + case 3624: return &op_vs8r_v; } switch ((inst >> 26) & 0b111) { case 0: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_vse8_v; break; - case 11: op =3D rv_op_vsm_v; break; + case 0: return &op_vse8_v; + case 11: return &op_vsm_v; } break; - case 1: op =3D rv_op_vsuxei8_v; break; - case 2: op =3D rv_op_vsse8_v; break; - case 3: op =3D rv_op_vsoxei8_v; break; + case 1: return &op_vsuxei8_v; + case 2: return &op_vsse8_v; + case 3: return &op_vsoxei8_v; } break; - case 1: op =3D rv_op_fsh; break; - case 2: op =3D rv_op_fsw; break; - case 3: op =3D rv_op_fsd; break; - case 4: op =3D rv_op_fsq; break; + case 1: return &op_fsh; + case 2: return &op_fsw; + case 3: return &op_fsd; + case 4: return &op_fsq; case 5: switch ((inst >> 26) & 0b111) { case 0: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_vse16_v; break; + case 0: return &op_vse16_v; } break; - case 1: op =3D rv_op_vsuxei16_v; break; - case 2: op =3D rv_op_vsse16_v; break; - case 3: op =3D rv_op_vsoxei16_v; break; + case 1: return &op_vsuxei16_v; + case 2: return &op_vsse16_v; + case 3: return &op_vsoxei16_v; } break; case 6: switch ((inst >> 26) & 0b111) { case 0: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_vse32_v; break; + case 0: return &op_vse32_v; } break; - case 1: op =3D rv_op_vsuxei32_v; break; - case 2: op =3D rv_op_vsse32_v; break; - case 3: op =3D rv_op_vsoxei32_v; break; + case 1: return &op_vsuxei32_v; + case 2: return &op_vsse32_v; + case 3: return &op_vsoxei32_v; } break; case 7: switch ((inst >> 26) & 0b111) { case 0: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_vse64_v; break; + case 0: return &op_vse64_v; } break; - case 1: op =3D rv_op_vsuxei64_v; break; - case 2: op =3D rv_op_vsse64_v; break; - case 3: op =3D rv_op_vsoxei64_v; break; + case 1: return &op_vsuxei64_v; + case 2: return &op_vsse64_v; + case 3: return &op_vsoxei64_v; } break; } @@ -1525,153 +1496,150 @@ static const rv_opcode_data *decode_inst_opcode(r= v_decode *dec, rv_isa isa) case 11: switch (((inst >> 24) & 0b11111000) | ((inst >> 12) & 0b00000111)) { - case 0: op =3D rv_op_amoadd_b; break; - case 1: op =3D rv_op_amoadd_h; break; - case 2: op =3D rv_op_amoadd_w; break; - case 3: op =3D rv_op_amoadd_d; break; - case 4: op =3D rv_op_amoadd_q; break; - case 8: op =3D rv_op_amoswap_b; break; - case 9: op =3D rv_op_amoswap_h; break; - case 10: op =3D rv_op_amoswap_w; break; - case 11: op =3D rv_op_amoswap_d; break; - case 12: op =3D rv_op_amoswap_q; break; + case 0: return &op_amoadd_b; + case 1: return &op_amoadd_h; + case 2: return &op_amoadd_w; + case 3: return &op_amoadd_d; + case 4: return &op_amoadd_q; + case 8: return &op_amoswap_b; + case 9: return &op_amoswap_h; + case 10: return &op_amoswap_w; + case 11: return &op_amoswap_d; + case 12: return &op_amoswap_q; case 18: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_lr_w; break; + case 0: return &op_lr_w; } break; case 19: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_lr_d; break; + case 0: return &op_lr_d; } break; case 20: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_lr_q; break; - } - break; - case 26: op =3D rv_op_sc_w; break; - case 27: op =3D rv_op_sc_d; break; - case 28: op =3D rv_op_sc_q; break; - case 32: op =3D rv_op_amoxor_b; break; - case 33: op =3D rv_op_amoxor_h; break; - case 34: op =3D rv_op_amoxor_w; break; - case 35: op =3D rv_op_amoxor_d; break; - case 36: op =3D rv_op_amoxor_q; break; - case 40: op =3D rv_op_amocas_b; break; - case 41: op =3D rv_op_amocas_h; break; - case 42: op =3D rv_op_amocas_w; break; - case 43: op =3D rv_op_amocas_d; break; - case 44: op =3D rv_op_amocas_q; break; - case 64: op =3D rv_op_amoor_b; break; - case 65: op =3D rv_op_amoor_h; break; - case 66: op =3D rv_op_amoor_w; break; - case 67: op =3D rv_op_amoor_d; break; - case 68: op =3D rv_op_amoor_q; break; - case 74: op =3D rv_op_ssamoswap_w; break; - case 75: op =3D rv_op_ssamoswap_d; break; - case 96: op =3D rv_op_amoand_b; break; - case 97: op =3D rv_op_amoand_h; break; - case 98: op =3D rv_op_amoand_w; break; - case 99: op =3D rv_op_amoand_d; break; - case 100: op =3D rv_op_amoand_q; break; - case 128: op =3D rv_op_amomin_b; break; - case 129: op =3D rv_op_amomin_h; break; - case 130: op =3D rv_op_amomin_w; break; - case 131: op =3D rv_op_amomin_d; break; - case 132: op =3D rv_op_amomin_q; break; - case 160: op =3D rv_op_amomax_b; break; - case 161: op =3D rv_op_amomax_h; break; - case 162: op =3D rv_op_amomax_w; break; - case 163: op =3D rv_op_amomax_d; break; - case 164: op =3D rv_op_amomax_q; break; - case 192: op =3D rv_op_amominu_b; break; - case 193: op =3D rv_op_amominu_h; break; - case 194: op =3D rv_op_amominu_w; break; - case 195: op =3D rv_op_amominu_d; break; - case 196: op =3D rv_op_amominu_q; break; - case 224: op =3D rv_op_amomaxu_b; break; - case 225: op =3D rv_op_amomaxu_h; break; - case 226: op =3D rv_op_amomaxu_w; break; - case 227: op =3D rv_op_amomaxu_d; break; - case 228: op =3D rv_op_amomaxu_q; break; + case 0: return &op_lr_q; + } + break; + case 26: return &op_sc_w; + case 27: return &op_sc_d; + case 28: return &op_sc_q; + case 32: return &op_amoxor_b; + case 33: return &op_amoxor_h; + case 34: return &op_amoxor_w; + case 35: return &op_amoxor_d; + case 36: return &op_amoxor_q; + case 40: return &op_amocas_b; + case 41: return &op_amocas_h; + case 42: return &op_amocas_w; + case 43: return &op_amocas_d; + case 44: return &op_amocas_q; + case 64: return &op_amoor_b; + case 65: return &op_amoor_h; + case 66: return &op_amoor_w; + case 67: return &op_amoor_d; + case 68: return &op_amoor_q; + case 74: return &op_ssamoswap_w; + case 75: return &op_ssamoswap_d; + case 96: return &op_amoand_b; + case 97: return &op_amoand_h; + case 98: return &op_amoand_w; + case 99: return &op_amoand_d; + case 100: return &op_amoand_q; + case 128: return &op_amomin_b; + case 129: return &op_amomin_h; + case 130: return &op_amomin_w; + case 131: return &op_amomin_d; + case 132: return &op_amomin_q; + case 160: return &op_amomax_b; + case 161: return &op_amomax_h; + case 162: return &op_amomax_w; + case 163: return &op_amomax_d; + case 164: return &op_amomax_q; + case 192: return &op_amominu_b; + case 193: return &op_amominu_h; + case 194: return &op_amominu_w; + case 195: return &op_amominu_d; + case 196: return &op_amominu_q; + case 224: return &op_amomaxu_b; + case 225: return &op_amomaxu_h; + case 226: return &op_amomaxu_w; + case 227: return &op_amomaxu_d; + case 228: return &op_amomaxu_q; } break; case 12: switch (((inst >> 22) & 0b1111111000) | ((inst >> 12) & 0b0000000111)) { - case 0: op =3D rv_op_add; break; - case 1: op =3D rv_op_sll; break; - case 2: op =3D rv_op_slt; break; - case 3: op =3D rv_op_sltu; break; - case 4: op =3D rv_op_xor; break; - case 5: op =3D rv_op_srl; break; - case 6: op =3D rv_op_or; break; - case 7: op =3D rv_op_and; break; - case 8: op =3D rv_op_mul; break; - case 9: op =3D rv_op_mulh; break; - case 10: op =3D rv_op_mulhsu; break; - case 11: op =3D rv_op_mulhu; break; - case 12: op =3D rv_op_div; break; - case 13: op =3D rv_op_divu; break; - case 14: op =3D rv_op_rem; break; - case 15: op =3D rv_op_remu; break; + case 0: return &op_add; + case 1: return &op_sll; + case 2: return &op_slt; + case 3: return &op_sltu; + case 4: return &op_xor; + case 5: return &op_srl; + case 6: return &op_or; + case 7: return &op_and; + case 8: return &op_mul; + case 9: return &op_mulh; + case 10: return &op_mulhsu; + case 11: return &op_mulhu; + case 12: return &op_div; + case 13: return &op_divu; + case 14: return &op_rem; + case 15: return &op_remu; case 36: if (isa =3D=3D rv32 && !((inst >> 20) & 0b11111)) { - op =3D rv_op_zext_h; - } else { - op =3D rv_op_pack; - } - break; - case 39: op =3D rv_op_packh; break; - - case 41: op =3D rv_op_clmul; break; - case 42: op =3D rv_op_clmulr; break; - case 43: op =3D rv_op_clmulh; break; - case 44: op =3D rv_op_min; break; - case 45: op =3D rv_op_minu; break; - case 46: op =3D rv_op_max; break; - case 47: op =3D rv_op_maxu; break; - case 075: op =3D rv_op_czero_eqz; break; - case 077: op =3D rv_op_czero_nez; break; - case 130: op =3D rv_op_sh1add; break; - case 132: op =3D rv_op_sh2add; break; - case 134: op =3D rv_op_sh3add; break; - case 161: op =3D rv_op_bset; break; - case 162: op =3D rv_op_xperm4; break; - case 164: op =3D rv_op_xperm8; break; - case 200: op =3D rv_op_aes64es; break; - case 216: op =3D rv_op_aes64esm; break; - case 232: op =3D rv_op_aes64ds; break; - case 248: op =3D rv_op_aes64dsm; break; - case 256: op =3D rv_op_sub; break; - case 260: op =3D rv_op_xnor; break; - case 261: op =3D rv_op_sra; break; - case 262: op =3D rv_op_orn; break; - case 263: op =3D rv_op_andn; break; - case 289: op =3D rv_op_bclr; break; - case 293: op =3D rv_op_bext; break; - case 320: op =3D rv_op_sha512sum0r; break; - case 328: op =3D rv_op_sha512sum1r; break; - case 336: op =3D rv_op_sha512sig0l; break; - case 344: op =3D rv_op_sha512sig1l; break; - case 368: op =3D rv_op_sha512sig0h; break; - case 376: op =3D rv_op_sha512sig1h; break; - case 385: op =3D rv_op_rol; break; - case 389: op =3D rv_op_ror; break; - case 417: op =3D rv_op_binv; break; - case 504: op =3D rv_op_aes64ks2; break; + return &op_zext_h; + } + return &op_pack; + case 39: return &op_packh; + case 41: return &op_clmul; + case 42: return &op_clmulr; + case 43: return &op_clmulh; + case 44: return &op_min; + case 45: return &op_minu; + case 46: return &op_max; + case 47: return &op_maxu; + case 075: return &op_czero_eqz; + case 077: return &op_czero_nez; + case 130: return &op_sh1add; + case 132: return &op_sh2add; + case 134: return &op_sh3add; + case 161: return &op_bset; + case 162: return &op_xperm4; + case 164: return &op_xperm8; + case 200: return &op_aes64es; + case 216: return &op_aes64esm; + case 232: return &op_aes64ds; + case 248: return &op_aes64dsm; + case 256: return &op_sub; + case 260: return &op_xnor; + case 261: return &op_sra; + case 262: return &op_orn; + case 263: return &op_andn; + case 289: return &op_bclr; + case 293: return &op_bext; + case 320: return &op_sha512sum0r; + case 328: return &op_sha512sum1r; + case 336: return &op_sha512sig0l; + case 344: return &op_sha512sig1l; + case 368: return &op_sha512sig0h; + case 376: return &op_sha512sig1h; + case 385: return &op_rol; + case 389: return &op_ror; + case 417: return &op_binv; + case 504: return &op_aes64ks2; } switch ((inst >> 25) & 0b0011111) { - case 17: op =3D rv_op_aes32esi; break; - case 19: op =3D rv_op_aes32esmi; break; - case 21: op =3D rv_op_aes32dsi; break; - case 23: op =3D rv_op_aes32dsmi; break; - case 24: op =3D rv_op_sm4ed; break; - case 26: op =3D rv_op_sm4ks; break; + case 17: return &op_aes32esi; + case 19: return &op_aes32esmi; + case 21: return &op_aes32dsi; + case 23: return &op_aes32dsmi; + case 24: return &op_sm4ed; + case 26: return &op_sm4ks; } break; - case 13: op =3D rv_op_lui; break; + case 13: return &op_lui; case 14: /* OP-32 */ if (isa =3D=3D rv32) { @@ -1679,317 +1647,317 @@ static const rv_opcode_data *decode_inst_opcode(r= v_decode *dec, rv_isa isa) } switch (((inst >> 22) & 0b1111111000) | ((inst >> 12) & 0b0000000111)) { - case 0: op =3D rv_op_addw; break; - case 1: op =3D rv_op_sllw; break; - case 5: op =3D rv_op_srlw; break; - case 8: op =3D rv_op_mulw; break; - case 12: op =3D rv_op_divw; break; - case 13: op =3D rv_op_divuw; break; - case 14: op =3D rv_op_remw; break; - case 15: op =3D rv_op_remuw; break; - case 32: op =3D rv_op_add_uw; break; + case 0: return &op_addw; + case 1: return &op_sllw; + case 5: return &op_srlw; + case 8: return &op_mulw; + case 12: return &op_divw; + case 13: return &op_divuw; + case 14: return &op_remw; + case 15: return &op_remuw; + case 32: return &op_add_uw; case 36: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_zext_h; break; - default: op =3D rv_op_packw; break; + case 0: return &op_zext_h; + default: return &op_packw; } break; - case 130: op =3D rv_op_sh1add_uw; break; - case 132: op =3D rv_op_sh2add_uw; break; - case 134: op =3D rv_op_sh3add_uw; break; - case 256: op =3D rv_op_subw; break; - case 261: op =3D rv_op_sraw; break; - case 385: op =3D rv_op_rolw; break; - case 389: op =3D rv_op_rorw; break; + case 130: return &op_sh1add_uw; + case 132: return &op_sh2add_uw; + case 134: return &op_sh3add_uw; + case 256: return &op_subw; + case 261: return &op_sraw; + case 385: return &op_rolw; + case 389: return &op_rorw; } break; case 16: switch ((inst >> 25) & 0b11) { - case 0: op =3D rv_op_fmadd_s; break; - case 1: op =3D rv_op_fmadd_d; break; - case 3: op =3D rv_op_fmadd_q; break; + case 0: return &op_fmadd_s; + case 1: return &op_fmadd_d; + case 3: return &op_fmadd_q; } break; case 17: switch ((inst >> 25) & 0b11) { - case 0: op =3D rv_op_fmsub_s; break; - case 1: op =3D rv_op_fmsub_d; break; - case 3: op =3D rv_op_fmsub_q; break; + case 0: return &op_fmsub_s; + case 1: return &op_fmsub_d; + case 3: return &op_fmsub_q; } break; case 18: switch ((inst >> 25) & 0b11) { - case 0: op =3D rv_op_fnmsub_s; break; - case 1: op =3D rv_op_fnmsub_d; break; - case 3: op =3D rv_op_fnmsub_q; break; + case 0: return &op_fnmsub_s; + case 1: return &op_fnmsub_d; + case 3: return &op_fnmsub_q; } break; case 19: switch ((inst >> 25) & 0b11) { - case 0: op =3D rv_op_fnmadd_s; break; - case 1: op =3D rv_op_fnmadd_d; break; - case 3: op =3D rv_op_fnmadd_q; break; + case 0: return &op_fnmadd_s; + case 1: return &op_fnmadd_d; + case 3: return &op_fnmadd_q; } break; case 20: switch ((inst >> 25) & 0b1111111) { - case 0: op =3D rv_op_fadd_s; break; - case 1: op =3D rv_op_fadd_d; break; - case 3: op =3D rv_op_fadd_q; break; - case 4: op =3D rv_op_fsub_s; break; - case 5: op =3D rv_op_fsub_d; break; - case 7: op =3D rv_op_fsub_q; break; - case 8: op =3D rv_op_fmul_s; break; - case 9: op =3D rv_op_fmul_d; break; - case 11: op =3D rv_op_fmul_q; break; - case 12: op =3D rv_op_fdiv_s; break; - case 13: op =3D rv_op_fdiv_d; break; - case 15: op =3D rv_op_fdiv_q; break; + case 0: return &op_fadd_s; + case 1: return &op_fadd_d; + case 3: return &op_fadd_q; + case 4: return &op_fsub_s; + case 5: return &op_fsub_d; + case 7: return &op_fsub_q; + case 8: return &op_fmul_s; + case 9: return &op_fmul_d; + case 11: return &op_fmul_q; + case 12: return &op_fdiv_s; + case 13: return &op_fdiv_d; + case 15: return &op_fdiv_q; case 16: switch ((inst >> 12) & 0b111) { - case 0: op =3D rv_op_fsgnj_s; break; - case 1: op =3D rv_op_fsgnjn_s; break; - case 2: op =3D rv_op_fsgnjx_s; break; + case 0: return &op_fsgnj_s; + case 1: return &op_fsgnjn_s; + case 2: return &op_fsgnjx_s; } break; case 17: switch ((inst >> 12) & 0b111) { - case 0: op =3D rv_op_fsgnj_d; break; - case 1: op =3D rv_op_fsgnjn_d; break; - case 2: op =3D rv_op_fsgnjx_d; break; + case 0: return &op_fsgnj_d; + case 1: return &op_fsgnjn_d; + case 2: return &op_fsgnjx_d; } break; case 19: switch ((inst >> 12) & 0b111) { - case 0: op =3D rv_op_fsgnj_q; break; - case 1: op =3D rv_op_fsgnjn_q; break; - case 2: op =3D rv_op_fsgnjx_q; break; + case 0: return &op_fsgnj_q; + case 1: return &op_fsgnjn_q; + case 2: return &op_fsgnjx_q; } break; case 20: switch ((inst >> 12) & 0b111) { - case 0: op =3D rv_op_fmin_s; break; - case 1: op =3D rv_op_fmax_s; break; - case 2: op =3D rv_op_fminm_s; break; - case 3: op =3D rv_op_fmaxm_s; break; + case 0: return &op_fmin_s; + case 1: return &op_fmax_s; + case 2: return &op_fminm_s; + case 3: return &op_fmaxm_s; } break; case 21: switch ((inst >> 12) & 0b111) { - case 0: op =3D rv_op_fmin_d; break; - case 1: op =3D rv_op_fmax_d; break; - case 2: op =3D rv_op_fminm_d; break; - case 3: op =3D rv_op_fmaxm_d; break; + case 0: return &op_fmin_d; + case 1: return &op_fmax_d; + case 2: return &op_fminm_d; + case 3: return &op_fmaxm_d; } break; case 22: switch (((inst >> 12) & 0b111)) { - case 2: op =3D rv_op_fminm_h; break; - case 3: op =3D rv_op_fmaxm_h; break; + case 2: return &op_fminm_h; + case 3: return &op_fmaxm_h; } break; case 23: switch ((inst >> 12) & 0b111) { - case 0: op =3D rv_op_fmin_q; break; - case 1: op =3D rv_op_fmax_q; break; - case 2: op =3D rv_op_fminm_q; break; - case 3: op =3D rv_op_fmaxm_q; break; + case 0: return &op_fmin_q; + case 1: return &op_fmax_q; + case 2: return &op_fminm_q; + case 3: return &op_fmaxm_q; } break; case 32: switch ((inst >> 20) & 0b11111) { - case 1: op =3D rv_op_fcvt_s_d; break; - case 3: op =3D rv_op_fcvt_s_q; break; - case 4: op =3D rv_op_fround_s; break; - case 5: op =3D rv_op_froundnx_s; break; - case 6: op =3D rv_op_fcvt_s_bf16; break; + case 1: return &op_fcvt_s_d; + case 3: return &op_fcvt_s_q; + case 4: return &op_fround_s; + case 5: return &op_froundnx_s; + case 6: return &op_fcvt_s_bf16; } break; case 33: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_fcvt_d_s; break; - case 3: op =3D rv_op_fcvt_d_q; break; - case 4: op =3D rv_op_fround_d; break; - case 5: op =3D rv_op_froundnx_d; break; + case 0: return &op_fcvt_d_s; + case 3: return &op_fcvt_d_q; + case 4: return &op_fround_d; + case 5: return &op_froundnx_d; } break; case 34: switch (((inst >> 20) & 0b11111)) { - case 4: op =3D rv_op_fround_h; break; - case 5: op =3D rv_op_froundnx_h; break; - case 8: op =3D rv_op_fcvt_bf16_s; break; + case 4: return &op_fround_h; + case 5: return &op_froundnx_h; + case 8: return &op_fcvt_bf16_s; } break; case 35: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_fcvt_q_s; break; - case 1: op =3D rv_op_fcvt_q_d; break; - case 4: op =3D rv_op_fround_q; break; - case 5: op =3D rv_op_froundnx_q; break; + case 0: return &op_fcvt_q_s; + case 1: return &op_fcvt_q_d; + case 4: return &op_fround_q; + case 5: return &op_froundnx_q; } break; case 44: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_fsqrt_s; break; + case 0: return &op_fsqrt_s; } break; case 45: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_fsqrt_d; break; + case 0: return &op_fsqrt_d; } break; case 47: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_fsqrt_q; break; + case 0: return &op_fsqrt_q; } break; case 80: switch ((inst >> 12) & 0b111) { - case 0: op =3D rv_op_fle_s; break; - case 1: op =3D rv_op_flt_s; break; - case 2: op =3D rv_op_feq_s; break; - case 4: op =3D rv_op_fleq_s; break; - case 5: op =3D rv_op_fltq_s; break; + case 0: return &op_fle_s; + case 1: return &op_flt_s; + case 2: return &op_feq_s; + case 4: return &op_fleq_s; + case 5: return &op_fltq_s; } break; case 81: switch ((inst >> 12) & 0b111) { - case 0: op =3D rv_op_fle_d; break; - case 1: op =3D rv_op_flt_d; break; - case 2: op =3D rv_op_feq_d; break; - case 4: op =3D rv_op_fleq_d; break; - case 5: op =3D rv_op_fltq_d; break; + case 0: return &op_fle_d; + case 1: return &op_flt_d; + case 2: return &op_feq_d; + case 4: return &op_fleq_d; + case 5: return &op_fltq_d; } break; case 82: switch (((inst >> 12) & 0b111)) { - case 4: op =3D rv_op_fleq_h; break; - case 5: op =3D rv_op_fltq_h; break; + case 4: return &op_fleq_h; + case 5: return &op_fltq_h; } break; case 83: switch ((inst >> 12) & 0b111) { - case 0: op =3D rv_op_fle_q; break; - case 1: op =3D rv_op_flt_q; break; - case 2: op =3D rv_op_feq_q; break; - case 4: op =3D rv_op_fleq_q; break; - case 5: op =3D rv_op_fltq_q; break; + case 0: return &op_fle_q; + case 1: return &op_flt_q; + case 2: return &op_feq_q; + case 4: return &op_fleq_q; + case 5: return &op_fltq_q; } break; case 89: switch (((inst >> 12) & 0b111)) { - case 0: op =3D rv_op_fmvp_d_x; break; + case 0: return &op_fmvp_d_x; } break; case 91: switch (((inst >> 12) & 0b111)) { - case 0: op =3D rv_op_fmvp_q_x; break; + case 0: return &op_fmvp_q_x; } break; case 96: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_fcvt_w_s; break; - case 1: op =3D rv_op_fcvt_wu_s; break; - case 2: op =3D rv_op_fcvt_l_s; break; - case 3: op =3D rv_op_fcvt_lu_s; break; + case 0: return &op_fcvt_w_s; + case 1: return &op_fcvt_wu_s; + case 2: return &op_fcvt_l_s; + case 3: return &op_fcvt_lu_s; } break; case 97: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_fcvt_w_d; break; - case 1: op =3D rv_op_fcvt_wu_d; break; - case 2: op =3D rv_op_fcvt_l_d; break; - case 3: op =3D rv_op_fcvt_lu_d; break; - case 8: op =3D rv_op_fcvtmod_w_d; break; + case 0: return &op_fcvt_w_d; + case 1: return &op_fcvt_wu_d; + case 2: return &op_fcvt_l_d; + case 3: return &op_fcvt_lu_d; + case 8: return &op_fcvtmod_w_d; } break; case 99: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_fcvt_w_q; break; - case 1: op =3D rv_op_fcvt_wu_q; break; - case 2: op =3D rv_op_fcvt_l_q; break; - case 3: op =3D rv_op_fcvt_lu_q; break; + case 0: return &op_fcvt_w_q; + case 1: return &op_fcvt_wu_q; + case 2: return &op_fcvt_l_q; + case 3: return &op_fcvt_lu_q; } break; case 104: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_fcvt_s_w; break; - case 1: op =3D rv_op_fcvt_s_wu; break; - case 2: op =3D rv_op_fcvt_s_l; break; - case 3: op =3D rv_op_fcvt_s_lu; break; + case 0: return &op_fcvt_s_w; + case 1: return &op_fcvt_s_wu; + case 2: return &op_fcvt_s_l; + case 3: return &op_fcvt_s_lu; } break; case 105: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_fcvt_d_w; break; - case 1: op =3D rv_op_fcvt_d_wu; break; - case 2: op =3D rv_op_fcvt_d_l; break; - case 3: op =3D rv_op_fcvt_d_lu; break; + case 0: return &op_fcvt_d_w; + case 1: return &op_fcvt_d_wu; + case 2: return &op_fcvt_d_l; + case 3: return &op_fcvt_d_lu; } break; case 107: switch ((inst >> 20) & 0b11111) { - case 0: op =3D rv_op_fcvt_q_w; break; - case 1: op =3D rv_op_fcvt_q_wu; break; - case 2: op =3D rv_op_fcvt_q_l; break; - case 3: op =3D rv_op_fcvt_q_lu; break; + case 0: return &op_fcvt_q_w; + case 1: return &op_fcvt_q_wu; + case 2: return &op_fcvt_q_l; + case 3: return &op_fcvt_q_lu; } break; case 112: switch (((inst >> 17) & 0b11111000) | ((inst >> 12) & 0b00000111)) { - case 0: op =3D rv_op_fmv_x_s; break; - case 1: op =3D rv_op_fclass_s; break; + case 0: return &op_fmv_x_s; + case 1: return &op_fclass_s; } break; case 113: switch (((inst >> 17) & 0b11111000) | ((inst >> 12) & 0b00000111)) { - case 0: op =3D rv_op_fmv_x_d; break; - case 1: op =3D rv_op_fclass_d; break; - case 8: op =3D rv_op_fmvh_x_d; break; + case 0: return &op_fmv_x_d; + case 1: return &op_fclass_d; + case 8: return &op_fmvh_x_d; } break; case 114: switch (((inst >> 17) & 0b11111000) | ((inst >> 12) & 0b00000111)) { - case 0: op =3D rv_op_fmv_x_h; break; + case 0: return &op_fmv_x_h; } break; case 115: switch (((inst >> 17) & 0b11111000) | ((inst >> 12) & 0b00000111)) { - case 0: op =3D rv_op_fmv_x_q; break; - case 1: op =3D rv_op_fclass_q; break; - case 8: op =3D rv_op_fmvh_x_q; break; + case 0: return &op_fmv_x_q; + case 1: return &op_fclass_q; + case 8: return &op_fmvh_x_q; } break; case 120: switch (((inst >> 17) & 0b11111000) | ((inst >> 12) & 0b00000111)) { - case 0: op =3D rv_op_fmv_s_x; break; - case 8: op =3D rv_op_fli_s; break; + case 0: return &op_fmv_s_x; + case 8: return &op_fli_s; } break; case 121: switch (((inst >> 17) & 0b11111000) | ((inst >> 12) & 0b00000111)) { - case 0: op =3D rv_op_fmv_d_x; break; - case 8: op =3D rv_op_fli_d; break; + case 0: return &op_fmv_d_x; + case 8: return &op_fli_d; } break; case 122: switch (((inst >> 17) & 0b11111000) | ((inst >> 12) & 0b00000111)) { - case 0: op =3D rv_op_fmv_h_x; break; - case 8: op =3D rv_op_fli_h; break; + case 0: return &op_fmv_h_x; + case 8: return &op_fli_h; } break; case 123: switch (((inst >> 17) & 0b11111000) | ((inst >> 12) & 0b00000111)) { - case 0: op =3D rv_op_fmv_q_x; break; - case 8: op =3D rv_op_fli_q; break; + case 0: return &op_fmv_q_x; + case 8: return &op_fli_q; } break; } @@ -1998,484 +1966,537 @@ static const rv_opcode_data *decode_inst_opcode(r= v_decode *dec, rv_isa isa) switch ((inst >> 12) & 0b111) { case 0: switch ((inst >> 26) & 0b111111) { - case 0: op =3D rv_op_vadd_vv; break; - case 1: op =3D rv_op_vandn_vv; break; - case 2: op =3D rv_op_vsub_vv; break; - case 4: op =3D rv_op_vminu_vv; break; - case 5: op =3D rv_op_vmin_vv; break; - case 6: op =3D rv_op_vmaxu_vv; break; - case 7: op =3D rv_op_vmax_vv; break; - case 9: op =3D rv_op_vand_vv; break; - case 10: op =3D rv_op_vor_vv; break; - case 11: op =3D rv_op_vxor_vv; break; - case 12: op =3D rv_op_vrgather_vv; break; - case 14: op =3D rv_op_vrgatherei16_vv; break; + case 0: return &op_vadd_vv; + case 1: return &op_vandn_vv; + case 2: return &op_vsub_vv; + case 4: return &op_vminu_vv; + case 5: return &op_vmin_vv; + case 6: return &op_vmaxu_vv; + case 7: return &op_vmax_vv; + case 9: return &op_vand_vv; + case 10: return &op_vor_vv; + case 11: return &op_vxor_vv; + case 12: return &op_vrgather_vv; + case 14: return &op_vrgatherei16_vv; case 16: if (((inst >> 25) & 1) =3D=3D 0) { - op =3D rv_op_vadc_vvm; + return &op_vadc_vvm; } break; - case 17: op =3D rv_op_vmadc_vvm; break; + case 17: return &op_vmadc_vvm; case 18: if (((inst >> 25) & 1) =3D=3D 0) { - op =3D rv_op_vsbc_vvm; + return &op_vsbc_vvm; } break; - case 19: op =3D rv_op_vmsbc_vvm; break; - case 20: op =3D rv_op_vror_vv; break; - case 21: op =3D rv_op_vrol_vv; break; + case 19: return &op_vmsbc_vvm; + case 20: return &op_vror_vv; + case 21: return &op_vrol_vv; case 23: - if (((inst >> 20) & 0b111111) =3D=3D 32) - op =3D rv_op_vmv_v_v; - else if (((inst >> 25) & 1) =3D=3D 0) - op =3D rv_op_vmerge_vvm; + if (((inst >> 20) & 0b111111) =3D=3D 32) { + return &op_vmv_v_v; + } else if (((inst >> 25) & 1) =3D=3D 0) { + return &op_vmerge_vvm; + } break; - case 24: op =3D rv_op_vmseq_vv; break; - case 25: op =3D rv_op_vmsne_vv; break; - case 26: op =3D rv_op_vmsltu_vv; break; - case 27: op =3D rv_op_vmslt_vv; break; - case 28: op =3D rv_op_vmsleu_vv; break; - case 29: op =3D rv_op_vmsle_vv; break; - case 32: op =3D rv_op_vsaddu_vv; break; - case 33: op =3D rv_op_vsadd_vv; break; - case 34: op =3D rv_op_vssubu_vv; break; - case 35: op =3D rv_op_vssub_vv; break; - case 37: op =3D rv_op_vsll_vv; break; - case 39: op =3D rv_op_vsmul_vv; break; - case 40: op =3D rv_op_vsrl_vv; break; - case 41: op =3D rv_op_vsra_vv; break; - case 42: op =3D rv_op_vssrl_vv; break; - case 43: op =3D rv_op_vssra_vv; break; - case 44: op =3D rv_op_vnsrl_wv; break; - case 45: op =3D rv_op_vnsra_wv; break; - case 46: op =3D rv_op_vnclipu_wv; break; - case 47: op =3D rv_op_vnclip_wv; break; - case 48: op =3D rv_op_vwredsumu_vs; break; - case 49: op =3D rv_op_vwredsum_vs; break; - case 53: op =3D rv_op_vwsll_vv; break; + case 24: return &op_vmseq_vv; + case 25: return &op_vmsne_vv; + case 26: return &op_vmsltu_vv; + case 27: return &op_vmslt_vv; + case 28: return &op_vmsleu_vv; + case 29: return &op_vmsle_vv; + case 32: return &op_vsaddu_vv; + case 33: return &op_vsadd_vv; + case 34: return &op_vssubu_vv; + case 35: return &op_vssub_vv; + case 37: return &op_vsll_vv; + case 39: return &op_vsmul_vv; + case 40: return &op_vsrl_vv; + case 41: return &op_vsra_vv; + case 42: return &op_vssrl_vv; + case 43: return &op_vssra_vv; + case 44: return &op_vnsrl_wv; + case 45: return &op_vnsra_wv; + case 46: return &op_vnclipu_wv; + case 47: return &op_vnclip_wv; + case 48: return &op_vwredsumu_vs; + case 49: return &op_vwredsum_vs; + case 53: return &op_vwsll_vv; } break; case 1: switch ((inst >> 26) & 0b111111) { - case 0: op =3D rv_op_vfadd_vv; break; - case 1: op =3D rv_op_vfredusum_vs; break; - case 2: op =3D rv_op_vfsub_vv; break; - case 3: op =3D rv_op_vfredosum_vs; break; - case 4: op =3D rv_op_vfmin_vv; break; - case 5: op =3D rv_op_vfredmin_vs; break; - case 6: op =3D rv_op_vfmax_vv; break; - case 7: op =3D rv_op_vfredmax_vs; break; - case 8: op =3D rv_op_vfsgnj_vv; break; - case 9: op =3D rv_op_vfsgnjn_vv; break; - case 10: op =3D rv_op_vfsgnjx_vv; break; + case 0: return &op_vfadd_vv; + case 1: return &op_vfredusum_vs; + case 2: return &op_vfsub_vv; + case 3: return &op_vfredosum_vs; + case 4: return &op_vfmin_vv; + case 5: return &op_vfredmin_vs; + case 6: return &op_vfmax_vv; + case 7: return &op_vfredmax_vs; + case 8: return &op_vfsgnj_vv; + case 9: return &op_vfsgnjn_vv; + case 10: return &op_vfsgnjx_vv; case 16: switch ((inst >> 15) & 0b11111) { - case 0: if ((inst >> 25) & 1) op =3D rv_op_vfmv_f_s; b= reak; + case 0: + if ((inst >> 25) & 1) { + return &op_vfmv_f_s; + } } break; case 18: switch ((inst >> 15) & 0b11111) { - case 0: op =3D rv_op_vfcvt_xu_f_v; break; - case 1: op =3D rv_op_vfcvt_x_f_v; break; - case 2: op =3D rv_op_vfcvt_f_xu_v; break; - case 3: op =3D rv_op_vfcvt_f_x_v; break; - case 6: op =3D rv_op_vfcvt_rtz_xu_f_v; break; - case 7: op =3D rv_op_vfcvt_rtz_x_f_v; break; - case 8: op =3D rv_op_vfwcvt_xu_f_v; break; - case 9: op =3D rv_op_vfwcvt_x_f_v; break; - case 10: op =3D rv_op_vfwcvt_f_xu_v; break; - case 11: op =3D rv_op_vfwcvt_f_x_v; break; - case 12: op =3D rv_op_vfwcvt_f_f_v; break; - case 13: op =3D rv_op_vfwcvtbf16_f_f_v; break; - case 14: op =3D rv_op_vfwcvt_rtz_xu_f_v; break; - case 15: op =3D rv_op_vfwcvt_rtz_x_f_v; break; - case 16: op =3D rv_op_vfncvt_xu_f_w; break; - case 17: op =3D rv_op_vfncvt_x_f_w; break; - case 18: op =3D rv_op_vfncvt_f_xu_w; break; - case 19: op =3D rv_op_vfncvt_f_x_w; break; - case 20: op =3D rv_op_vfncvt_f_f_w; break; - case 21: op =3D rv_op_vfncvt_rod_f_f_w; break; - case 22: op =3D rv_op_vfncvt_rtz_xu_f_w; break; - case 23: op =3D rv_op_vfncvt_rtz_x_f_w; break; - case 29: op =3D rv_op_vfncvtbf16_f_f_w; break; + case 0: return &op_vfcvt_xu_f_v; + case 1: return &op_vfcvt_x_f_v; + case 2: return &op_vfcvt_f_xu_v; + case 3: return &op_vfcvt_f_x_v; + case 6: return &op_vfcvt_rtz_xu_f_v; + case 7: return &op_vfcvt_rtz_x_f_v; + case 8: return &op_vfwcvt_xu_f_v; + case 9: return &op_vfwcvt_x_f_v; + case 10: return &op_vfwcvt_f_xu_v; + case 11: return &op_vfwcvt_f_x_v; + case 12: return &op_vfwcvt_f_f_v; + case 13: return &op_vfwcvtbf16_f_f_v; + case 14: return &op_vfwcvt_rtz_xu_f_v; + case 15: return &op_vfwcvt_rtz_x_f_v; + case 16: return &op_vfncvt_xu_f_w; + case 17: return &op_vfncvt_x_f_w; + case 18: return &op_vfncvt_f_xu_w; + case 19: return &op_vfncvt_f_x_w; + case 20: return &op_vfncvt_f_f_w; + case 21: return &op_vfncvt_rod_f_f_w; + case 22: return &op_vfncvt_rtz_xu_f_w; + case 23: return &op_vfncvt_rtz_x_f_w; + case 29: return &op_vfncvtbf16_f_f_w; } break; case 19: switch ((inst >> 15) & 0b11111) { - case 0: op =3D rv_op_vfsqrt_v; break; - case 4: op =3D rv_op_vfrsqrt7_v; break; - case 5: op =3D rv_op_vfrec7_v; break; - case 16: op =3D rv_op_vfclass_v; break; + case 0: return &op_vfsqrt_v; + case 4: return &op_vfrsqrt7_v; + case 5: return &op_vfrec7_v; + case 16: return &op_vfclass_v; } break; - case 24: op =3D rv_op_vmfeq_vv; break; - case 25: op =3D rv_op_vmfle_vv; break; - case 27: op =3D rv_op_vmflt_vv; break; - case 28: op =3D rv_op_vmfne_vv; break; - case 32: op =3D rv_op_vfdiv_vv; break; - case 36: op =3D rv_op_vfmul_vv; break; - case 40: op =3D rv_op_vfmadd_vv; break; - case 41: op =3D rv_op_vfnmadd_vv; break; - case 42: op =3D rv_op_vfmsub_vv; break; - case 43: op =3D rv_op_vfnmsub_vv; break; - case 44: op =3D rv_op_vfmacc_vv; break; - case 45: op =3D rv_op_vfnmacc_vv; break; - case 46: op =3D rv_op_vfmsac_vv; break; - case 47: op =3D rv_op_vfnmsac_vv; break; - case 48: op =3D rv_op_vfwadd_vv; break; - case 49: op =3D rv_op_vfwredusum_vs; break; - case 50: op =3D rv_op_vfwsub_vv; break; - case 51: op =3D rv_op_vfwredosum_vs; break; - case 52: op =3D rv_op_vfwadd_wv; break; - case 54: op =3D rv_op_vfwsub_wv; break; - case 56: op =3D rv_op_vfwmul_vv; break; - case 59: op =3D rv_op_vfwmaccbf16_vv; break; - case 60: op =3D rv_op_vfwmacc_vv; break; - case 61: op =3D rv_op_vfwnmacc_vv; break; - case 62: op =3D rv_op_vfwmsac_vv; break; - case 63: op =3D rv_op_vfwnmsac_vv; break; + case 24: return &op_vmfeq_vv; + case 25: return &op_vmfle_vv; + case 27: return &op_vmflt_vv; + case 28: return &op_vmfne_vv; + case 32: return &op_vfdiv_vv; + case 36: return &op_vfmul_vv; + case 40: return &op_vfmadd_vv; + case 41: return &op_vfnmadd_vv; + case 42: return &op_vfmsub_vv; + case 43: return &op_vfnmsub_vv; + case 44: return &op_vfmacc_vv; + case 45: return &op_vfnmacc_vv; + case 46: return &op_vfmsac_vv; + case 47: return &op_vfnmsac_vv; + case 48: return &op_vfwadd_vv; + case 49: return &op_vfwredusum_vs; + case 50: return &op_vfwsub_vv; + case 51: return &op_vfwredosum_vs; + case 52: return &op_vfwadd_wv; + case 54: return &op_vfwsub_wv; + case 56: return &op_vfwmul_vv; + case 59: return &op_vfwmaccbf16_vv; + case 60: return &op_vfwmacc_vv; + case 61: return &op_vfwnmacc_vv; + case 62: return &op_vfwmsac_vv; + case 63: return &op_vfwnmsac_vv; } break; case 2: switch ((inst >> 26) & 0b111111) { - case 0: op =3D rv_op_vredsum_vs; break; - case 1: op =3D rv_op_vredand_vs; break; - case 2: op =3D rv_op_vredor_vs; break; - case 3: op =3D rv_op_vredxor_vs; break; - case 4: op =3D rv_op_vredminu_vs; break; - case 5: op =3D rv_op_vredmin_vs; break; - case 6: op =3D rv_op_vredmaxu_vs; break; - case 7: op =3D rv_op_vredmax_vs; break; - case 8: op =3D rv_op_vaaddu_vv; break; - case 9: op =3D rv_op_vaadd_vv; break; - case 10: op =3D rv_op_vasubu_vv; break; - case 11: op =3D rv_op_vasub_vv; break; - case 12: op =3D rv_op_vclmul_vv; break; - case 13: op =3D rv_op_vclmulh_vv; break; + case 0: return &op_vredsum_vs; + case 1: return &op_vredand_vs; + case 2: return &op_vredor_vs; + case 3: return &op_vredxor_vs; + case 4: return &op_vredminu_vs; + case 5: return &op_vredmin_vs; + case 6: return &op_vredmaxu_vs; + case 7: return &op_vredmax_vs; + case 8: return &op_vaaddu_vv; + case 9: return &op_vaadd_vv; + case 10: return &op_vasubu_vv; + case 11: return &op_vasub_vv; + case 12: return &op_vclmul_vv; + case 13: return &op_vclmulh_vv; case 16: switch ((inst >> 15) & 0b11111) { - case 0: if ((inst >> 25) & 1) op =3D rv_op_vmv_x_s; br= eak; - case 16: op =3D rv_op_vcpop_m; break; - case 17: op =3D rv_op_vfirst_m; break; + case 0: + if ((inst >> 25) & 1) { + return &op_vmv_x_s; + } + break; + case 16: return &op_vcpop_m; + case 17: return &op_vfirst_m; } break; case 18: switch ((inst >> 15) & 0b11111) { - case 2: op =3D rv_op_vzext_vf8; break; - case 3: op =3D rv_op_vsext_vf8; break; - case 4: op =3D rv_op_vzext_vf4; break; - case 5: op =3D rv_op_vsext_vf4; break; - case 6: op =3D rv_op_vzext_vf2; break; - case 7: op =3D rv_op_vsext_vf2; break; - case 8: op =3D rv_op_vbrev8_v; break; - case 9: op =3D rv_op_vrev8_v; break; - case 10: op =3D rv_op_vbrev_v; break; - case 12: op =3D rv_op_vclz_v; break; - case 13: op =3D rv_op_vctz_v; break; - case 14: op =3D rv_op_vcpop_v; break; + case 2: return &op_vzext_vf8; + case 3: return &op_vsext_vf8; + case 4: return &op_vzext_vf4; + case 5: return &op_vsext_vf4; + case 6: return &op_vzext_vf2; + case 7: return &op_vsext_vf2; + case 8: return &op_vbrev8_v; + case 9: return &op_vrev8_v; + case 10: return &op_vbrev_v; + case 12: return &op_vclz_v; + case 13: return &op_vctz_v; + case 14: return &op_vcpop_v; } break; case 20: switch ((inst >> 15) & 0b11111) { - case 1: op =3D rv_op_vmsbf_m; break; - case 2: op =3D rv_op_vmsof_m; break; - case 3: op =3D rv_op_vmsif_m; break; - case 16: op =3D rv_op_viota_m; break; + case 1: return &op_vmsbf_m; break; + case 2: return &op_vmsof_m; + case 3: return &op_vmsif_m; + case 16: return &op_viota_m; case 17: if (((inst >> 20) & 0b11111) =3D=3D 0) { - op =3D rv_op_vid_v; + return &op_vid_v; } break; } break; - case 23: if ((inst >> 25) & 1) op =3D rv_op_vcompress_vm; = break; - case 24: if ((inst >> 25) & 1) op =3D rv_op_vmandn_mm; bre= ak; - case 25: if ((inst >> 25) & 1) op =3D rv_op_vmand_mm; brea= k; - case 26: if ((inst >> 25) & 1) op =3D rv_op_vmor_mm; break; - case 27: if ((inst >> 25) & 1) op =3D rv_op_vmxor_mm; brea= k; - case 28: if ((inst >> 25) & 1) op =3D rv_op_vmorn_mm; brea= k; - case 29: if ((inst >> 25) & 1) op =3D rv_op_vmnand_mm; bre= ak; - case 30: if ((inst >> 25) & 1) op =3D rv_op_vmnor_mm; brea= k; - case 31: if ((inst >> 25) & 1) op =3D rv_op_vmxnor_mm; bre= ak; - case 32: op =3D rv_op_vdivu_vv; break; - case 33: op =3D rv_op_vdiv_vv; break; - case 34: op =3D rv_op_vremu_vv; break; - case 35: op =3D rv_op_vrem_vv; break; - case 36: op =3D rv_op_vmulhu_vv; break; - case 37: op =3D rv_op_vmul_vv; break; - case 38: op =3D rv_op_vmulhsu_vv; break; - case 39: op =3D rv_op_vmulh_vv; break; - case 41: op =3D rv_op_vmadd_vv; break; - case 43: op =3D rv_op_vnmsub_vv; break; - case 45: op =3D rv_op_vmacc_vv; break; - case 47: op =3D rv_op_vnmsac_vv; break; - case 48: op =3D rv_op_vwaddu_vv; break; - case 49: op =3D rv_op_vwadd_vv; break; - case 50: op =3D rv_op_vwsubu_vv; break; - case 51: op =3D rv_op_vwsub_vv; break; - case 52: op =3D rv_op_vwaddu_wv; break; - case 53: op =3D rv_op_vwadd_wv; break; - case 54: op =3D rv_op_vwsubu_wv; break; - case 55: op =3D rv_op_vwsub_wv; break; - case 56: op =3D rv_op_vwmulu_vv; break; - case 58: op =3D rv_op_vwmulsu_vv; break; - case 59: op =3D rv_op_vwmul_vv; break; - case 60: op =3D rv_op_vwmaccu_vv; break; - case 61: op =3D rv_op_vwmacc_vv; break; - case 63: op =3D rv_op_vwmaccsu_vv; break; + case 23: + if ((inst >> 25) & 1) { + return &op_vcompress_vm; + } + break; + case 24: + if ((inst >> 25) & 1) { + return &op_vmandn_mm; + } + break; + case 25: + if ((inst >> 25) & 1) { + return &op_vmand_mm; + } + break; + case 26: + if ((inst >> 25) & 1) { + return &op_vmor_mm; + } + break; + case 27: + if ((inst >> 25) & 1) { + return &op_vmxor_mm; + } + break; + case 28: + if ((inst >> 25) & 1) { + return &op_vmorn_mm; + } + break; + case 29: + if ((inst >> 25) & 1) { + return &op_vmnand_mm; + } + break; + case 30: + if ((inst >> 25) & 1) { + return &op_vmnor_mm; + } + break; + case 31: + if ((inst >> 25) & 1) { + return &op_vmxnor_mm; + } + break; + case 32: return &op_vdivu_vv; + case 33: return &op_vdiv_vv; + case 34: return &op_vremu_vv; + case 35: return &op_vrem_vv; + case 36: return &op_vmulhu_vv; + case 37: return &op_vmul_vv; + case 38: return &op_vmulhsu_vv; + case 39: return &op_vmulh_vv; + case 41: return &op_vmadd_vv; + case 43: return &op_vnmsub_vv; + case 45: return &op_vmacc_vv; + case 47: return &op_vnmsac_vv; + case 48: return &op_vwaddu_vv; + case 49: return &op_vwadd_vv; + case 50: return &op_vwsubu_vv; + case 51: return &op_vwsub_vv; + case 52: return &op_vwaddu_wv; + case 53: return &op_vwadd_wv; + case 54: return &op_vwsubu_wv; + case 55: return &op_vwsub_wv; + case 56: return &op_vwmulu_vv; + case 58: return &op_vwmulsu_vv; + case 59: return &op_vwmul_vv; + case 60: return &op_vwmaccu_vv; + case 61: return &op_vwmacc_vv; + case 63: return &op_vwmaccsu_vv; } break; case 3: switch ((inst >> 26) & 0b111111) { - case 0: op =3D rv_op_vadd_vi; break; - case 3: op =3D rv_op_vrsub_vi; break; - case 9: op =3D rv_op_vand_vi; break; - case 10: op =3D rv_op_vor_vi; break; - case 11: op =3D rv_op_vxor_vi; break; - case 12: op =3D rv_op_vrgather_vi; break; - case 14: op =3D rv_op_vslideup_vi; break; - case 15: op =3D rv_op_vslidedown_vi; break; + case 0: return &op_vadd_vi; + case 3: return &op_vrsub_vi; + case 9: return &op_vand_vi; + case 10: return &op_vor_vi; + case 11: return &op_vxor_vi; + case 12: return &op_vrgather_vi; + case 14: return &op_vslideup_vi; + case 15: return &op_vslidedown_vi; case 16: if (((inst >> 25) & 1) =3D=3D 0) { - op =3D rv_op_vadc_vim; + return &op_vadc_vim; } break; - case 17: op =3D rv_op_vmadc_vim; break; - case 20: case 21: op =3D rv_op_vror_vi; break; + case 17: return &op_vmadc_vim; + case 20: case 21: return &op_vror_vi; case 23: - if (((inst >> 20) & 0b111111) =3D=3D 32) - op =3D rv_op_vmv_v_i; - else if (((inst >> 25) & 1) =3D=3D 0) - op =3D rv_op_vmerge_vim; + if (((inst >> 20) & 0b111111) =3D=3D 32) { + return &op_vmv_v_i; + } else if (((inst >> 25) & 1) =3D=3D 0) { + return &op_vmerge_vim; + } break; - case 24: op =3D rv_op_vmseq_vi; break; - case 25: op =3D rv_op_vmsne_vi; break; - case 28: op =3D rv_op_vmsleu_vi; break; - case 29: op =3D rv_op_vmsle_vi; break; - case 30: op =3D rv_op_vmsgtu_vi; break; - case 31: op =3D rv_op_vmsgt_vi; break; - case 32: op =3D rv_op_vsaddu_vi; break; - case 33: op =3D rv_op_vsadd_vi; break; - case 37: op =3D rv_op_vsll_vi; break; + case 24: return &op_vmseq_vi; + case 25: return &op_vmsne_vi; + case 28: return &op_vmsleu_vi; + case 29: return &op_vmsle_vi; + case 30: return &op_vmsgtu_vi; + case 31: return &op_vmsgt_vi; + case 32: return &op_vsaddu_vi; + case 33: return &op_vsadd_vi; + case 37: return &op_vsll_vi; case 39: switch ((inst >> 15) & 0b11111) { - case 0: op =3D rv_op_vmv1r_v; break; - case 1: op =3D rv_op_vmv2r_v; break; - case 3: op =3D rv_op_vmv4r_v; break; - case 7: op =3D rv_op_vmv8r_v; break; + case 0: return &op_vmv1r_v; + case 1: return &op_vmv2r_v; + case 3: return &op_vmv4r_v; + case 7: return &op_vmv8r_v; } break; - case 40: op =3D rv_op_vsrl_vi; break; - case 41: op =3D rv_op_vsra_vi; break; - case 42: op =3D rv_op_vssrl_vi; break; - case 43: op =3D rv_op_vssra_vi; break; - case 44: op =3D rv_op_vnsrl_wi; break; - case 45: op =3D rv_op_vnsra_wi; break; - case 46: op =3D rv_op_vnclipu_wi; break; - case 47: op =3D rv_op_vnclip_wi; break; - case 53: op =3D rv_op_vwsll_vi; break; + case 40: return &op_vsrl_vi; + case 41: return &op_vsra_vi; + case 42: return &op_vssrl_vi; + case 43: return &op_vssra_vi; + case 44: return &op_vnsrl_wi; + case 45: return &op_vnsra_wi; + case 46: return &op_vnclipu_wi; + case 47: return &op_vnclip_wi; + case 53: return &op_vwsll_vi; } break; case 4: switch ((inst >> 26) & 0b111111) { - case 0: op =3D rv_op_vadd_vx; break; - case 1: op =3D rv_op_vandn_vx; break; - case 2: op =3D rv_op_vsub_vx; break; - case 3: op =3D rv_op_vrsub_vx; break; - case 4: op =3D rv_op_vminu_vx; break; - case 5: op =3D rv_op_vmin_vx; break; - case 6: op =3D rv_op_vmaxu_vx; break; - case 7: op =3D rv_op_vmax_vx; break; - case 9: op =3D rv_op_vand_vx; break; - case 10: op =3D rv_op_vor_vx; break; - case 11: op =3D rv_op_vxor_vx; break; - case 12: op =3D rv_op_vrgather_vx; break; - case 14: op =3D rv_op_vslideup_vx; break; - case 15: op =3D rv_op_vslidedown_vx; break; + case 0: return &op_vadd_vx; + case 1: return &op_vandn_vx; + case 2: return &op_vsub_vx; + case 3: return &op_vrsub_vx; + case 4: return &op_vminu_vx; + case 5: return &op_vmin_vx; + case 6: return &op_vmaxu_vx; + case 7: return &op_vmax_vx; + case 9: return &op_vand_vx; + case 10: return &op_vor_vx; + case 11: return &op_vxor_vx; + case 12: return &op_vrgather_vx; + case 14: return &op_vslideup_vx; + case 15: return &op_vslidedown_vx; case 16: if (((inst >> 25) & 1) =3D=3D 0) { - op =3D rv_op_vadc_vxm; + return &op_vadc_vxm; } break; - case 17: op =3D rv_op_vmadc_vxm; break; + case 17: return &op_vmadc_vxm; case 18: if (((inst >> 25) & 1) =3D=3D 0) { - op =3D rv_op_vsbc_vxm; + return &op_vsbc_vxm; } break; - case 19: op =3D rv_op_vmsbc_vxm; break; - case 20: op =3D rv_op_vror_vx; break; - case 21: op =3D rv_op_vrol_vx; break; + case 19: return &op_vmsbc_vxm; + case 20: return &op_vror_vx; + case 21: return &op_vrol_vx; case 23: - if (((inst >> 20) & 0b111111) =3D=3D 32) - op =3D rv_op_vmv_v_x; - else if (((inst >> 25) & 1) =3D=3D 0) - op =3D rv_op_vmerge_vxm; + if (((inst >> 20) & 0b111111) =3D=3D 32) { + return &op_vmv_v_x; + } else if (((inst >> 25) & 1) =3D=3D 0) { + return &op_vmerge_vxm; + } break; - case 24: op =3D rv_op_vmseq_vx; break; - case 25: op =3D rv_op_vmsne_vx; break; - case 26: op =3D rv_op_vmsltu_vx; break; - case 27: op =3D rv_op_vmslt_vx; break; - case 28: op =3D rv_op_vmsleu_vx; break; - case 29: op =3D rv_op_vmsle_vx; break; - case 30: op =3D rv_op_vmsgtu_vx; break; - case 31: op =3D rv_op_vmsgt_vx; break; - case 32: op =3D rv_op_vsaddu_vx; break; - case 33: op =3D rv_op_vsadd_vx; break; - case 34: op =3D rv_op_vssubu_vx; break; - case 35: op =3D rv_op_vssub_vx; break; - case 37: op =3D rv_op_vsll_vx; break; - case 39: op =3D rv_op_vsmul_vx; break; - case 40: op =3D rv_op_vsrl_vx; break; - case 41: op =3D rv_op_vsra_vx; break; - case 42: op =3D rv_op_vssrl_vx; break; - case 43: op =3D rv_op_vssra_vx; break; - case 44: op =3D rv_op_vnsrl_wx; break; - case 45: op =3D rv_op_vnsra_wx; break; - case 46: op =3D rv_op_vnclipu_wx; break; - case 47: op =3D rv_op_vnclip_wx; break; - case 53: op =3D rv_op_vwsll_vx; break; + case 24: return &op_vmseq_vx; + case 25: return &op_vmsne_vx; + case 26: return &op_vmsltu_vx; + case 27: return &op_vmslt_vx; + case 28: return &op_vmsleu_vx; + case 29: return &op_vmsle_vx; + case 30: return &op_vmsgtu_vx; + case 31: return &op_vmsgt_vx; + case 32: return &op_vsaddu_vx; + case 33: return &op_vsadd_vx; + case 34: return &op_vssubu_vx; + case 35: return &op_vssub_vx; + case 37: return &op_vsll_vx; + case 39: return &op_vsmul_vx; + case 40: return &op_vsrl_vx; + case 41: return &op_vsra_vx; + case 42: return &op_vssrl_vx; + case 43: return &op_vssra_vx; + case 44: return &op_vnsrl_wx; + case 45: return &op_vnsra_wx; + case 46: return &op_vnclipu_wx; + case 47: return &op_vnclip_wx; + case 53: return &op_vwsll_vx; } break; case 5: switch ((inst >> 26) & 0b111111) { - case 0: op =3D rv_op_vfadd_vf; break; - case 2: op =3D rv_op_vfsub_vf; break; - case 4: op =3D rv_op_vfmin_vf; break; - case 6: op =3D rv_op_vfmax_vf; break; - case 8: op =3D rv_op_vfsgnj_vf; break; - case 9: op =3D rv_op_vfsgnjn_vf; break; - case 10: op =3D rv_op_vfsgnjx_vf; break; - case 14: op =3D rv_op_vfslide1up_vf; break; - case 15: op =3D rv_op_vfslide1down_vf; break; + case 0: return &op_vfadd_vf; + case 2: return &op_vfsub_vf; + case 4: return &op_vfmin_vf; + case 6: return &op_vfmax_vf; + case 8: return &op_vfsgnj_vf; + case 9: return &op_vfsgnjn_vf; + case 10: return &op_vfsgnjx_vf; + case 14: return &op_vfslide1up_vf; + case 15: return &op_vfslide1down_vf; case 16: switch ((inst >> 20) & 0b11111) { - case 0: if ((inst >> 25) & 1) op =3D rv_op_vfmv_s_f; b= reak; + case 0: + if ((inst >> 25) & 1) { + return &op_vfmv_s_f; + } } break; case 23: - if (((inst >> 25) & 1) =3D=3D 0) - op =3D rv_op_vfmerge_vfm; - else if (((inst >> 20) & 0b111111) =3D=3D 32) - op =3D rv_op_vfmv_v_f; + if (((inst >> 25) & 1) =3D=3D 0) { + return &op_vfmerge_vfm; + } else if (((inst >> 20) & 0b111111) =3D=3D 32) { + return &op_vfmv_v_f; + } break; - case 24: op =3D rv_op_vmfeq_vf; break; - case 25: op =3D rv_op_vmfle_vf; break; - case 27: op =3D rv_op_vmflt_vf; break; - case 28: op =3D rv_op_vmfne_vf; break; - case 29: op =3D rv_op_vmfgt_vf; break; - case 31: op =3D rv_op_vmfge_vf; break; - case 32: op =3D rv_op_vfdiv_vf; break; - case 33: op =3D rv_op_vfrdiv_vf; break; - case 36: op =3D rv_op_vfmul_vf; break; - case 39: op =3D rv_op_vfrsub_vf; break; - case 40: op =3D rv_op_vfmadd_vf; break; - case 41: op =3D rv_op_vfnmadd_vf; break; - case 42: op =3D rv_op_vfmsub_vf; break; - case 43: op =3D rv_op_vfnmsub_vf; break; - case 44: op =3D rv_op_vfmacc_vf; break; - case 45: op =3D rv_op_vfnmacc_vf; break; - case 46: op =3D rv_op_vfmsac_vf; break; - case 47: op =3D rv_op_vfnmsac_vf; break; - case 48: op =3D rv_op_vfwadd_vf; break; - case 50: op =3D rv_op_vfwsub_vf; break; - case 52: op =3D rv_op_vfwadd_wf; break; - case 54: op =3D rv_op_vfwsub_wf; break; - case 56: op =3D rv_op_vfwmul_vf; break; - case 59: op =3D rv_op_vfwmaccbf16_vf; break; - case 60: op =3D rv_op_vfwmacc_vf; break; - case 61: op =3D rv_op_vfwnmacc_vf; break; - case 62: op =3D rv_op_vfwmsac_vf; break; - case 63: op =3D rv_op_vfwnmsac_vf; break; + case 24: return &op_vmfeq_vf; + case 25: return &op_vmfle_vf; + case 27: return &op_vmflt_vf; + case 28: return &op_vmfne_vf; + case 29: return &op_vmfgt_vf; + case 31: return &op_vmfge_vf; + case 32: return &op_vfdiv_vf; + case 33: return &op_vfrdiv_vf; + case 36: return &op_vfmul_vf; + case 39: return &op_vfrsub_vf; + case 40: return &op_vfmadd_vf; + case 41: return &op_vfnmadd_vf; + case 42: return &op_vfmsub_vf; + case 43: return &op_vfnmsub_vf; + case 44: return &op_vfmacc_vf; + case 45: return &op_vfnmacc_vf; + case 46: return &op_vfmsac_vf; + case 47: return &op_vfnmsac_vf; + case 48: return &op_vfwadd_vf; + case 50: return &op_vfwsub_vf; + case 52: return &op_vfwadd_wf; + case 54: return &op_vfwsub_wf; + case 56: return &op_vfwmul_vf; + case 59: return &op_vfwmaccbf16_vf; + case 60: return &op_vfwmacc_vf; + case 61: return &op_vfwnmacc_vf; + case 62: return &op_vfwmsac_vf; + case 63: return &op_vfwnmsac_vf; } break; case 6: switch ((inst >> 26) & 0b111111) { - case 8: op =3D rv_op_vaaddu_vx; break; - case 9: op =3D rv_op_vaadd_vx; break; - case 10: op =3D rv_op_vasubu_vx; break; - case 11: op =3D rv_op_vasub_vx; break; - case 12: op =3D rv_op_vclmul_vx; break; - case 13: op =3D rv_op_vclmulh_vx; break; - case 14: op =3D rv_op_vslide1up_vx; break; - case 15: op =3D rv_op_vslide1down_vx; break; + case 8: return &op_vaaddu_vx; + case 9: return &op_vaadd_vx; + case 10: return &op_vasubu_vx; + case 11: return &op_vasub_vx; + case 12: return &op_vclmul_vx; + case 13: return &op_vclmulh_vx; + case 14: return &op_vslide1up_vx; + case 15: return &op_vslide1down_vx; case 16: switch ((inst >> 20) & 0b11111) { - case 0: if ((inst >> 25) & 1) op =3D rv_op_vmv_s_x; br= eak; + case 0: + if ((inst >> 25) & 1) { + return &op_vmv_s_x; + } } break; - case 32: op =3D rv_op_vdivu_vx; break; - case 33: op =3D rv_op_vdiv_vx; break; - case 34: op =3D rv_op_vremu_vx; break; - case 35: op =3D rv_op_vrem_vx; break; - case 36: op =3D rv_op_vmulhu_vx; break; - case 37: op =3D rv_op_vmul_vx; break; - case 38: op =3D rv_op_vmulhsu_vx; break; - case 39: op =3D rv_op_vmulh_vx; break; - case 41: op =3D rv_op_vmadd_vx; break; - case 43: op =3D rv_op_vnmsub_vx; break; - case 45: op =3D rv_op_vmacc_vx; break; - case 47: op =3D rv_op_vnmsac_vx; break; - case 48: op =3D rv_op_vwaddu_vx; break; - case 49: op =3D rv_op_vwadd_vx; break; - case 50: op =3D rv_op_vwsubu_vx; break; - case 51: op =3D rv_op_vwsub_vx; break; - case 52: op =3D rv_op_vwaddu_wx; break; - case 53: op =3D rv_op_vwadd_wx; break; - case 54: op =3D rv_op_vwsubu_wx; break; - case 55: op =3D rv_op_vwsub_wx; break; - case 56: op =3D rv_op_vwmulu_vx; break; - case 58: op =3D rv_op_vwmulsu_vx; break; - case 59: op =3D rv_op_vwmul_vx; break; - case 60: op =3D rv_op_vwmaccu_vx; break; - case 61: op =3D rv_op_vwmacc_vx; break; - case 62: op =3D rv_op_vwmaccus_vx; break; - case 63: op =3D rv_op_vwmaccsu_vx; break; + case 32: return &op_vdivu_vx; + case 33: return &op_vdiv_vx; + case 34: return &op_vremu_vx; + case 35: return &op_vrem_vx; + case 36: return &op_vmulhu_vx; + case 37: return &op_vmul_vx; + case 38: return &op_vmulhsu_vx; + case 39: return &op_vmulh_vx; + case 41: return &op_vmadd_vx; + case 43: return &op_vnmsub_vx; + case 45: return &op_vmacc_vx; + case 47: return &op_vnmsac_vx; + case 48: return &op_vwaddu_vx; + case 49: return &op_vwadd_vx; + case 50: return &op_vwsubu_vx; + case 51: return &op_vwsub_vx; + case 52: return &op_vwaddu_wx; + case 53: return &op_vwadd_wx; + case 54: return &op_vwsubu_wx; + case 55: return &op_vwsub_wx; + case 56: return &op_vwmulu_vx; + case 58: return &op_vwmulsu_vx; + case 59: return &op_vwmul_vx; + case 60: return &op_vwmaccu_vx; + case 61: return &op_vwmacc_vx; + case 62: return &op_vwmaccus_vx; + case 63: return &op_vwmaccsu_vx; } break; case 7: if (((inst >> 31) & 1) =3D=3D 0) { - op =3D rv_op_vsetvli; + return &op_vsetvli; } else if ((inst >> 30) & 1) { - op =3D rv_op_vsetivli; + return &op_vsetivli; } else if (((inst >> 25) & 0b11111) =3D=3D 0) { - op =3D rv_op_vsetvl; + return &op_vsetvl; } break; } break; case 22: switch ((inst >> 12) & 0b111) { - case 0: op =3D rv_op_addid; break; + case 0: return &op_addid; case 1: switch ((inst >> 26) & 0b111111) { - case 0: op =3D rv_op_sllid; break; + case 0: return &op_sllid; } break; case 5: switch ((inst >> 26) & 0b111111) { - case 0: op =3D rv_op_srlid; break; - case 16: op =3D rv_op_sraid; break; + case 0: return &op_srlid; + case 16: return &op_sraid; } break; } break; case 24: switch ((inst >> 12) & 0b111) { - case 0: op =3D rv_op_beq; break; - case 1: op =3D rv_op_bne; break; - case 4: op =3D rv_op_blt; break; - case 5: op =3D rv_op_bge; break; - case 6: op =3D rv_op_bltu; break; - case 7: op =3D rv_op_bgeu; break; + case 0: return &op_beq; + case 1: return &op_bne; + case 4: return &op_blt; + case 5: return &op_bge; + case 6: return &op_bltu; + case 7: return &op_bgeu; } break; case 25: switch ((inst >> 12) & 0b111) { - case 0: op =3D rv_op_jalr; break; + case 0: return &op_jalr; } break; - case 27: op =3D rv_op_jal; break; + case 27: return &op_jal; case 28: switch ((inst >> 12) & 0b111) { case 0: @@ -2483,76 +2504,76 @@ static const rv_opcode_data *decode_inst_opcode(rv_= decode *dec, rv_isa isa) ((inst >> 7) & 0b000000011111)) { case 0: switch ((inst >> 15) & 0b1111111111) { - case 0: op =3D rv_op_ecall; break; - case 32: op =3D rv_op_ebreak; break; - case 64: op =3D rv_op_uret; break; - case 416: op =3D rv_op_wrs_nto; break; - case 928: op =3D rv_op_wrs_sto; break; + case 0: return &op_ecall; + case 32: return &op_ebreak; + case 64: return &op_uret; + case 416: return &op_wrs_nto; + case 928: return &op_wrs_sto; } break; case 256: switch ((inst >> 20) & 0b11111) { case 2: switch ((inst >> 15) & 0b11111) { - case 0: op =3D rv_op_sret; break; + case 0: return &op_sret; } break; - case 4: op =3D rv_op_sfence_vm; break; + case 4: return &op_sfence_vm; case 5: switch ((inst >> 15) & 0b11111) { - case 0: op =3D rv_op_wfi; break; + case 0: return &op_wfi; } break; } break; - case 288: op =3D rv_op_sfence_vma; break; + case 288: return &op_sfence_vma; case 512: switch ((inst >> 15) & 0b1111111111) { - case 64: op =3D rv_op_hret; break; + case 64: return &op_hret; } break; case 768: switch ((inst >> 15) & 0b1111111111) { - case 64: op =3D rv_op_mret; break; + case 64: return &op_mret; } break; case 1792: switch ((inst >> 15) & 0b1111111111) { - case 64: op =3D rv_op_mnret; break; + case 64: return &op_mnret; } break; case 1952: switch ((inst >> 15) & 0b1111111111) { - case 576: op =3D rv_op_dret; break; + case 576: return &op_dret; } break; } break; case 1: switch (operand_csr12(inst)) { - case 1: op =3D rv_op_fsflags; break; - case 2: op =3D rv_op_fsrm; break; - case 3: op =3D rv_op_fscsr; break; - default: op =3D rv_op_csrrw; break; + case 1: return &op_fsflags; + case 2: return &op_fsrm; + case 3: return &op_fscsr; + default: return &op_csrrw; } break; case 2: - op =3D rv_op_csrrs; + return &op_csrrs; if (operand_rs1(inst) =3D=3D 0) { switch (operand_csr12(inst)) { - case 0x001: op =3D rv_op_frflags; break; - case 0x002: op =3D rv_op_frrm; break; - case 0x003: op =3D rv_op_frcsr; break; - case 0xc00: op =3D rv_op_rdcycle; break; - case 0xc01: op =3D rv_op_rdtime; break; - case 0xc02: op =3D rv_op_rdinstret; break; - case 0xc80: op =3D rv_op_rdcycleh; break; - case 0xc81: op =3D rv_op_rdtimeh; break; - case 0xc82: op =3D rv_op_rdinstreth; break; + case 0x001: return &op_frflags; + case 0x002: return &op_frrm; + case 0x003: return &op_frcsr; + case 0xc00: return &op_rdcycle; + case 0xc01: return &op_rdtime; + case 0xc02: return &op_rdinstret; + case 0xc80: return &op_rdcycleh; + case 0xc81: return &op_rdtimeh; + case 0xc82: return &op_rdinstreth; } } break; - case 3: op =3D rv_op_csrrc; break; + case 3: return &op_csrrc; case 4: if (dec->cfg && dec->cfg->ext_zimop) { if (((inst >> 22) & 0b1011001111) =3D=3D 0b1000000111)= { @@ -2560,15 +2581,15 @@ static const rv_opcode_data *decode_inst_opcode(rv_= decode *dec, rv_isa isa) && operand_mop_r_imm(inst) =3D=3D 28) { switch (operand_rs1(inst)) { case 0: - return &rvi_opcode_data[rv_op_ssrdp]; + return &op_ssrdp; case 1: case 5: if (operand_rd(inst) =3D=3D 0) { - return &rvi_opcode_data[rv_op_sspopchk= ]; + return &op_sspopchk; } } } - return &rvi_opcode_data[rv_op_mop_r]; + return &op_mop_r; } if (((inst >> 25) & 0b1011001) =3D=3D 0b1000001) { if (dec->cfg->ext_zicfiss @@ -2578,79 +2599,79 @@ static const rv_opcode_data *decode_inst_opcode(rv_= decode *dec, rv_isa isa) switch (operand_rs2(inst)) { case 1: case 5: - return &rvi_opcode_data[rv_op_sspush]; + return &op_sspush; } } - return &rvi_opcode_data[rv_op_mop_rr]; + return &op_mop_rr; } } break; case 5: switch (operand_csr12(inst)) { - case 1: op =3D rv_op_fsflagsi; break; - case 2: op =3D rv_op_fsrmi; break; - default: op =3D rv_op_csrrwi; break; + case 1: return &op_fsflagsi; + case 2: return &op_fsrmi; + default: return &op_csrrwi; } break; - case 6: op =3D rv_op_csrrsi; break; - case 7: op =3D rv_op_csrrci; break; + case 6: return &op_csrrsi; + case 7: return &op_csrrci; } break; case 29: if (((inst >> 25) & 1) =3D=3D 1 && ((inst >> 12) & 0b111) =3D= =3D 2) { switch ((inst >> 26) & 0b111111) { - case 32: op =3D rv_op_vsm3me_vv; break; - case 33: op =3D rv_op_vsm4k_vi; break; - case 34: op =3D rv_op_vaeskf1_vi; break; + case 32: return &op_vsm3me_vv; + case 33: return &op_vsm4k_vi; + case 34: return &op_vaeskf1_vi; case 40: switch ((inst >> 15) & 0b11111) { - case 0: op =3D rv_op_vaesdm_vv; break; - case 1: op =3D rv_op_vaesdf_vv; break; - case 2: op =3D rv_op_vaesem_vv; break; - case 3: op =3D rv_op_vaesef_vv; break; - case 16: op =3D rv_op_vsm4r_vv; break; - case 17: op =3D rv_op_vgmul_vv; break; + case 0: return &op_vaesdm_vv; + case 1: return &op_vaesdf_vv; + case 2: return &op_vaesem_vv; + case 3: return &op_vaesef_vv; + case 16: return &op_vsm4r_vv; + case 17: return &op_vgmul_vv; } break; case 41: switch ((inst >> 15) & 0b11111) { - case 0: op =3D rv_op_vaesdm_vs; break; - case 1: op =3D rv_op_vaesdf_vs; break; - case 2: op =3D rv_op_vaesem_vs; break; - case 3: op =3D rv_op_vaesef_vs; break; - case 7: op =3D rv_op_vaesz_vs; break; - case 16: op =3D rv_op_vsm4r_vs; break; + case 0: return &op_vaesdm_vs; + case 1: return &op_vaesdf_vs; + case 2: return &op_vaesem_vs; + case 3: return &op_vaesef_vs; + case 7: return &op_vaesz_vs; + case 16: return &op_vsm4r_vs; } break; - case 42: op =3D rv_op_vaeskf2_vi; break; - case 43: op =3D rv_op_vsm3c_vi; break; - case 44: op =3D rv_op_vghsh_vv; break; - case 45: op =3D rv_op_vsha2ms_vv; break; - case 46: op =3D rv_op_vsha2ch_vv; break; - case 47: op =3D rv_op_vsha2cl_vv; break; + case 42: return &op_vaeskf2_vi; + case 43: return &op_vsm3c_vi; + case 44: return &op_vghsh_vv; + case 45: return &op_vsha2ms_vv; + case 46: return &op_vsha2ch_vv; + case 47: return &op_vsha2cl_vv; } } break; case 30: switch (((inst >> 22) & 0b1111111000) | ((inst >> 12) & 0b0000000111)) { - case 0: op =3D rv_op_addd; break; - case 1: op =3D rv_op_slld; break; - case 5: op =3D rv_op_srld; break; - case 8: op =3D rv_op_muld; break; - case 12: op =3D rv_op_divd; break; - case 13: op =3D rv_op_divud; break; - case 14: op =3D rv_op_remd; break; - case 15: op =3D rv_op_remud; break; - case 256: op =3D rv_op_subd; break; - case 261: op =3D rv_op_srad; break; + case 0: return &op_addd; + case 1: return &op_slld; + case 5: return &op_srld; + case 8: return &op_muld; + case 12: return &op_divd; + case 13: return &op_divud; + case 14: return &op_remd; + case 15: return &op_remud; + case 256: return &op_subd; + case 261: return &op_srad; } break; } break; } =20 - return op =3D=3D rv_op_illegal ? NULL : &rvi_opcode_data[op]; + return NULL; } =20 /* decode operands */ @@ -3450,7 +3471,7 @@ static GString *disasm_inst(rv_isa isa, uint64_t pc, = rv_inst inst, decode_inst_operands(&dec, isa, op); op =3D decode_inst_lift_pseudo(&dec, op); } else { - op =3D &rvi_opcode_data[rv_op_illegal]; + op =3D &op_illegal; } =20 return format_inst(24, &dec, op); diff --git a/disas/riscv-op.c.inc b/disas/riscv-op.c.inc index 802a521bca..cc939f557f 100644 --- a/disas/riscv-op.c.inc +++ b/disas/riscv-op.c.inc @@ -225,51 +225,51 @@ OP(fcvt_q_l, "fcvt.q.l", rv_codec_r_m, rv_fmt_rm_frd_= rs1) OP(fcvt_q_lu, "fcvt.q.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1) OP(fmv_x_q, "fmv.x.q", rv_codec_r, rv_fmt_rd_frs1) OP(fmv_q_x, "fmv.q.x", rv_codec_r, rv_fmt_frd_rs1) -OP(c_addi4spn, "c.addi4spn", rv_codec_ciw_4spn, NULL, DECOMP(rv_op_addi)) -OP(c_fld, "c.fld", rv_codec_cl_ld, NULL, DECOMP(rv_op_fld)) -OP(c_lw, "c.lw", rv_codec_cl_lw, NULL, DECOMP(rv_op_lw)) -OP(c_flw, "c.flw", rv_codec_cl_lw, NULL, DECOMP(rv_op_flw)) -OP(c_fsd, "c.fsd", rv_codec_cs_sd, NULL, DECOMP(rv_op_fsd)) -OP(c_sw, "c.sw", rv_codec_cs_sw, NULL, DECOMP(rv_op_sw)) -OP(c_fsw, "c.fsw", rv_codec_cs_sw, NULL, DECOMP(rv_op_fsw)) -OP(c_addi, "c.addi", rv_codec_ci, NULL, DECOMP(rv_op_addi)) -OP(c_jal, "c.jal", rv_codec_cj_jal, NULL, DECOMP(rv_op_jal)) -OP(c_li, "c.li", rv_codec_ci_li, NULL, DECOMP(rv_op_addi)) -OP(c_addi16sp, "c.addi16sp", rv_codec_ci_16sp, NULL, DECOMP(rv_op_addi)) -OP(c_lui, "c.lui", rv_codec_ci_lui, NULL, DECOMP(rv_op_lui)) -OP(c_srli, "c.srli", rv_codec_cb_sh6, NULL, DECOMP(rv_op_srli)) -OP(c_srai, "c.srai", rv_codec_cb_sh6, NULL, DECOMP(rv_op_srai)) -OP(c_andi, "c.andi", rv_codec_cb_imm, NULL, DECOMP(rv_op_andi)) -OP(c_sub, "c.sub", rv_codec_cs, NULL, DECOMP(rv_op_sub)) -OP(c_xor, "c.xor", rv_codec_cs, NULL, DECOMP(rv_op_xor)) -OP(c_or, "c.or", rv_codec_cs, NULL, DECOMP(rv_op_or)) -OP(c_and, "c.and", rv_codec_cs, NULL, DECOMP(rv_op_and)) -OP(c_subw, "c.subw", rv_codec_cs, NULL, DECOMP(rv_op_subw)) -OP(c_addw, "c.addw", rv_codec_cs, NULL, DECOMP(rv_op_addw)) -OP(c_j, "c.j", rv_codec_cj, NULL, DECOMP(rv_op_j)) -OP(c_beqz, "c.beqz", rv_codec_cb, NULL, DECOMP(rv_op_beqz)) -OP(c_bnez, "c.bnez", rv_codec_cb, NULL, DECOMP(rv_op_bnez)) -OP(c_slli, "c.slli", rv_codec_ci_sh6, NULL, DECOMP(rv_op_slli)) -OP(c_fldsp, "c.fldsp", rv_codec_ci_ldsp, NULL, DECOMP(rv_op_fld)) -OP(c_lwsp, "c.lwsp", rv_codec_ci_lwsp, NULL, DECOMP(rv_op_lw)) -OP(c_flwsp, "c.flwsp", rv_codec_ci_lwsp, NULL, DECOMP(rv_op_flw)) -OP(c_jr, "c.jr", rv_codec_cr_jr, NULL, DECOMP(rv_op_jr)) -OP(c_mv, "c.mv", rv_codec_cr_mv, NULL, DECOMP(rv_op_mv)) -OP(c_ebreak, "c.ebreak", rv_codec_ci_none, NULL, DECOMP(rv_op_ebreak)) -OP(c_jalr, "c.jalr", rv_codec_cr_jalr, NULL, DECOMP(rv_op_jalr)) -OP(c_add, "c.add", rv_codec_cr, NULL, DECOMP(rv_op_add)) -OP(c_fsdsp, "c.fsdsp", rv_codec_css_sdsp, NULL, DECOMP(rv_op_fsd)) -OP(c_swsp, "c.swsp", rv_codec_css_swsp, NULL, DECOMP(rv_op_sw)) -OP(c_fswsp, "c.fswsp", rv_codec_css_swsp, NULL, DECOMP(rv_op_fsw)) -OP(c_ld, "c.ld", rv_codec_cl_ld, NULL, DECOMP(rv_op_ld)) -OP(c_sd, "c.sd", rv_codec_cs_sd, NULL, DECOMP(rv_op_sd)) -OP(c_addiw, "c.addiw", rv_codec_ci, NULL, DECOMP(rv_op_addiw)) -OP(c_ldsp, "c.ldsp", rv_codec_ci_ldsp, NULL, DECOMP(rv_op_ld)) -OP(c_sdsp, "c.sdsp", rv_codec_css_sdsp, NULL, DECOMP(rv_op_sd)) -OP(c_lq, "c.lq", rv_codec_cl_lq, NULL, DECOMP(rv_op_lq)) -OP(c_sq, "c.sq", rv_codec_cs_sq, NULL, DECOMP(rv_op_sq)) -OP(c_lqsp, "c.lqsp", rv_codec_ci_lqsp, NULL, DECOMP(rv_op_lq)) -OP(c_sqsp, "c.sqsp", rv_codec_css_sqsp, NULL, DECOMP(rv_op_sq)) +OP(c_addi4spn, "c.addi4spn", rv_codec_ciw_4spn, NULL, DECOMP(op_addi)) +OP(c_fld, "c.fld", rv_codec_cl_ld, NULL, DECOMP(op_fld)) +OP(c_lw, "c.lw", rv_codec_cl_lw, NULL, DECOMP(op_lw)) +OP(c_flw, "c.flw", rv_codec_cl_lw, NULL, DECOMP(op_flw)) +OP(c_fsd, "c.fsd", rv_codec_cs_sd, NULL, DECOMP(op_fsd)) +OP(c_sw, "c.sw", rv_codec_cs_sw, NULL, DECOMP(op_sw)) +OP(c_fsw, "c.fsw", rv_codec_cs_sw, NULL, DECOMP(op_fsw)) +OP(c_addi, "c.addi", rv_codec_ci, NULL, DECOMP(op_addi)) +OP(c_jal, "c.jal", rv_codec_cj_jal, NULL, DECOMP(op_jal)) +OP(c_li, "c.li", rv_codec_ci_li, NULL, DECOMP(op_addi)) +OP(c_addi16sp, "c.addi16sp", rv_codec_ci_16sp, NULL, DECOMP(op_addi)) +OP(c_lui, "c.lui", rv_codec_ci_lui, NULL, DECOMP(op_lui)) +OP(c_srli, "c.srli", rv_codec_cb_sh6, NULL, DECOMP(op_srli)) +OP(c_srai, "c.srai", rv_codec_cb_sh6, NULL, DECOMP(op_srai)) +OP(c_andi, "c.andi", rv_codec_cb_imm, NULL, DECOMP(op_andi)) +OP(c_sub, "c.sub", rv_codec_cs, NULL, DECOMP(op_sub)) +OP(c_xor, "c.xor", rv_codec_cs, NULL, DECOMP(op_xor)) +OP(c_or, "c.or", rv_codec_cs, NULL, DECOMP(op_or)) +OP(c_and, "c.and", rv_codec_cs, NULL, DECOMP(op_and)) +OP(c_subw, "c.subw", rv_codec_cs, NULL, DECOMP(op_subw)) +OP(c_addw, "c.addw", rv_codec_cs, NULL, DECOMP(op_addw)) +OP(c_j, "c.j", rv_codec_cj, NULL, DECOMP(op_j)) +OP(c_beqz, "c.beqz", rv_codec_cb, NULL, DECOMP(op_beqz)) +OP(c_bnez, "c.bnez", rv_codec_cb, NULL, DECOMP(op_bnez)) +OP(c_slli, "c.slli", rv_codec_ci_sh6, NULL, DECOMP(op_slli)) +OP(c_fldsp, "c.fldsp", rv_codec_ci_ldsp, NULL, DECOMP(op_fld)) +OP(c_lwsp, "c.lwsp", rv_codec_ci_lwsp, NULL, DECOMP(op_lw)) +OP(c_flwsp, "c.flwsp", rv_codec_ci_lwsp, NULL, DECOMP(op_flw)) +OP(c_jr, "c.jr", rv_codec_cr_jr, NULL, DECOMP(op_jr)) +OP(c_mv, "c.mv", rv_codec_cr_mv, NULL, DECOMP(op_mv)) +OP(c_ebreak, "c.ebreak", rv_codec_ci_none, NULL, DECOMP(op_ebreak)) +OP(c_jalr, "c.jalr", rv_codec_cr_jalr, NULL, DECOMP(op_jalr)) +OP(c_add, "c.add", rv_codec_cr, NULL, DECOMP(op_add)) +OP(c_fsdsp, "c.fsdsp", rv_codec_css_sdsp, NULL, DECOMP(op_fsd)) +OP(c_swsp, "c.swsp", rv_codec_css_swsp, NULL, DECOMP(op_sw)) +OP(c_fswsp, "c.fswsp", rv_codec_css_swsp, NULL, DECOMP(op_fsw)) +OP(c_ld, "c.ld", rv_codec_cl_ld, NULL, DECOMP(op_ld)) +OP(c_sd, "c.sd", rv_codec_cs_sd, NULL, DECOMP(op_sd)) +OP(c_addiw, "c.addiw", rv_codec_ci, NULL, DECOMP(op_addiw)) +OP(c_ldsp, "c.ldsp", rv_codec_ci_ldsp, NULL, DECOMP(op_ld)) +OP(c_sdsp, "c.sdsp", rv_codec_css_sdsp, NULL, DECOMP(op_sd)) +OP(c_lq, "c.lq", rv_codec_cl_lq, NULL, DECOMP(op_lq)) +OP(c_sq, "c.sq", rv_codec_cs_sq, NULL, DECOMP(op_sq)) +OP(c_lqsp, "c.lqsp", rv_codec_ci_lqsp, NULL, DECOMP(op_lq)) +OP(c_sqsp, "c.sqsp", rv_codec_css_sqsp, NULL, DECOMP(op_sq)) OP(nop, "nop", rv_codec_illegal, rv_fmt_none) OP(mv, "mv", rv_codec_illegal, rv_fmt_rd_rs1, rvcp_mv) OP(not, "not", rv_codec_illegal, rv_fmt_rd_rs1) @@ -904,8 +904,8 @@ OP(sspopchk, "sspopchk", rv_codec_r, rv_fmt_rs1) OP(ssrdp, "ssrdp", rv_codec_r, rv_fmt_rd) OP(ssamoswap_w, "ssamoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) OP(ssamoswap_d, "ssamoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(c_sspush, "c.sspush", rv_codec_cmop_ss, NULL, DECOMP(rv_op_sspush)) -OP(c_sspopchk, "c.sspopchk", rv_codec_cmop_ss, NULL, DECOMP(rv_op_sspopchk= )) +OP(c_sspush, "c.sspush", rv_codec_cmop_ss, NULL, DECOMP(op_sspush)) +OP(c_sspopchk, "c.sspopchk", rv_codec_cmop_ss, NULL, DECOMP(op_sspopchk)) OP(cbo_inval, "cbo.inval", rv_codec_r, rv_fmt_rs1) OP(cbo_clean, "cbo.clean", rv_codec_r, rv_fmt_rs1) OP(cbo_flush, "cbo.flush", rv_codec_r, rv_fmt_rs1) --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550990; cv=none; d=zohomail.com; s=zohoarc; b=UtZg9En4dufPbgtyU6mIL2k4QMrsf57imReKar+Sbj2fxoguvyzXASUahaF6qK9vjQJ35K3S3h/5KY1cFkcs4ufS/LqdJC5hV8+kP3U7cA+q/ljz94c0zCGacRqhWFZ8kA2FWzi2fHczWFCb8HsrLFI2jERG12w+7/Ga9AQYETw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550990; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ydOqS/4xymxm1DAzVx5O8ObQewA/wmkFbzQ9Qrwa5L0=; b=hKpn9Qic7ZMkSaEmnV9stAULlv3PkSh8tcKnEoPGrAY2J4Y+1oymddf0A9P6T43hK3eJuhY0zKC7u571ciKY8mZuB5e4wgudxYUMMS60rWSmuyOn7l1jAPiT8ieRx3UfgXvqUvm/ndtW1CJj0Eom+JAJjHEJMX2taJn7zYIovug= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550990854123.28603362909178; Sun, 23 Aug 2026 22:56:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNcC-0000Hs-T9; Mon, 24 Aug 2026 01:53:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNbx-0007Ai-AS for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:45 -0400 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNbs-0003AZ-3l for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:45 -0400 Received: by mail-pj1-x1029.google.com with SMTP id 98e67ed59e1d1-3856d6fbcb3so2518056a91.2 for ; Sun, 23 Aug 2026 22:52:39 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.52.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:52:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550759; x=1788155559; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=ydOqS/4xymxm1DAzVx5O8ObQewA/wmkFbzQ9Qrwa5L0=; b=DtEBXks2rrkofdjWDyBiwEt0p25tMZBY5J+YM7eNm21vWhT2MowtztVwfeMGmrQywQ 7dnAc42+PrnOCvmbPqdy7ORyKFGdANCzbNt5NOWHEjXeYTCHVKZPJV/qgMqyYjB7ce3M UPV10yc9tJJeAyq2rWk3FdhUE94T9I9ElckqBRDQv9WN8yKyK2WT19jcIEioWPoY8vcs wGqMOyW9+5WqkNAYvc8LYyMdRqyeYUjqDtejF88FtCpWfPqVbVYV/XxeFzj4LoYKlRYc ZPs1MtBFDglZH+AZPsHuVb7fsk+uqVnTXMrCEeuDixiWyA1vKmNyxHXwalcTXCa9xLNh xCkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550759; x=1788155559; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ydOqS/4xymxm1DAzVx5O8ObQewA/wmkFbzQ9Qrwa5L0=; b=ffOAhKQsI7Vg5IB81zY6sCFirLIzrGBb5zYoN7pHZguvmOd6CuAM74iaHoEXEuxA2v 7QNv1FVya7BSvkWEjH/Kz9EZUrvLNz8zihbqPAXeeT6gc/BqlmAZeU07+gtKdoXRQ7r5 SG5PiyoOKTu3HMk8VbvTThAPGdVpsqTJhVbKaSDtvpbXWcWS1ZGzLCw+xvzZikMACqyR fXr4T5d6dI9TC0BfPnHGbG4U6k9lRQKeinKpI2KpdSZpikJ9eHSfpbcHgxAOXbgdtnC9 ab3s9IitRyUN8508n6jhYK/iNGCZSWzvWl+PwbI7ilBYvuTv3iOKrG22UmZHZozLP55u EDCA== X-Gm-Message-State: AFuF++lQ+fxa+2hCDpkdaB2DBlhseog2b/yZZMuev0fi/fSB5vphYvYt fEx2Iobnk9iduUw8/2R7aCUTHvaOkqt7Ftyha4I9PnX0O5U6UcAjL60jMEwcNw== X-Gm-Gg: AR+sD12Jo1/LdDOqfZd3HKjAEViSY1Zlmd6S8T0jffAHXHLgwQ0aDS3VYrGwW9BgLIs fy0Cg5D5TBtHb6EqM0k7q9Ij8aa2c/ETvX6GIP3zQmrP9z/Xrb4jsoicZUFqjJdOvndqLBsVUWy YZ5b+5Ljx2SL2Q2dwRqzn4fjYTAHqxnqa40g1w5/qwzVe7fXa0pmTQ4VVFqH/RFNMPmSgqPocWK 4B8Oh8Bd716mOuJ1esEBXkK+hRzNgDcFXneQ0Zc2tPSUHACF7WVsJGAVGUjuQ8enctEllap7amN rRjAXHKqdIP8y1+SGsLIX2Y+fFHfkN2Tf7zco4sFecBw+avrUMzUjSWWSNg3qmHE29Ixn8twrWl +ikzALCUJ5BlCN/4S+XtiOxKu8w3ZkiYR6bRFqJarujyasPrZsCfckfyd17/0tajm4K/rr8+fxs 1ITwFbp26CmajhAXt878KvZVUlhhSf+Pblm+1lQuDXdtW5EmkbjsVWctRd3edX9sk/Tf2YqNQpy djHqw== X-Received: by 2002:a17:90b:33c2:b0:38e:c232:9d3f with SMTP id 98e67ed59e1d1-395c3597c56mr39389629a91.5.1787550758087; Sun, 23 Aug 2026 22:52:38 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Richard Henderson , Alistair Francis , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL v2 85/96] disas/riscv: Sort riscv-op.c.inc Date: Mon, 24 Aug 2026 15:47:55 +1000 Message-ID: <20260824054806.2790041-86-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1029; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1029.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550992290158500 From: Richard Henderson To date, opcodes had to be added to the end of the list, resulting in quite the disorder. Sort via 'LANG=3DC sort'. Reviewed-by: Alistair Francis Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson Message-ID: <20260812223142.349142-53-richard.henderson@linaro.org> Signed-off-by: Alistair Francis --- disas/riscv-op.c.inc | 1674 +++++++++++++++++++++--------------------- 1 file changed, 837 insertions(+), 837 deletions(-) diff --git a/disas/riscv-op.c.inc b/disas/riscv-op.c.inc index cc939f557f..1d334e4857 100644 --- a/disas/riscv-op.c.inc +++ b/disas/riscv-op.c.inc @@ -1,913 +1,913 @@ -OP(illegal, "illegal", rv_codec_none, rv_fmt_none) -OP(lui, "lui", rv_codec_u, rv_fmt_rd_uimm) -OP(auipc, "auipc", rv_codec_u, rv_fmt_rd_uoffset) -OP(jal, "jal", rv_codec_uj, rv_fmt_rd_offset, rvcp_jal) -OP(jalr, "jalr", rv_codec_i, rv_fmt_rd_rs1_offset, rvcp_jalr) -OP(beq, "beq", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_beq) -OP(bne, "bne", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bne) -OP(blt, "blt", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_blt) -OP(bge, "bge", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bge) -OP(bltu, "bltu", rv_codec_sb, rv_fmt_rs1_rs2_offset) -OP(bgeu, "bgeu", rv_codec_sb, rv_fmt_rs1_rs2_offset) -OP(lb, "lb", rv_codec_i, rv_fmt_rd_offset_rs1) -OP(lh, "lh", rv_codec_i, rv_fmt_rd_offset_rs1) -OP(lw, "lw", rv_codec_i, rv_fmt_rd_offset_rs1) -OP(lbu, "lbu", rv_codec_i, rv_fmt_rd_offset_rs1) -OP(lhu, "lhu", rv_codec_i, rv_fmt_rd_offset_rs1) -OP(sb, "sb", rv_codec_s, rv_fmt_rs2_offset_rs1) -OP(sh, "sh", rv_codec_s, rv_fmt_rs2_offset_rs1) -OP(sw, "sw", rv_codec_s, rv_fmt_rs2_offset_rs1) -OP(addi, "addi", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addi) -OP(slti, "slti", rv_codec_i, rv_fmt_rd_rs1_imm) -OP(sltiu, "sltiu", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_sltiu) -OP(xori, "xori", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_xori) -OP(ori, "ori", rv_codec_i, rv_fmt_rd_rs1_imm) -OP(andi, "andi", rv_codec_i, rv_fmt_rd_rs1_imm) -OP(slli, "slli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) -OP(srli, "srli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) -OP(srai, "srai", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) OP(add, "add", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(sub, "sub", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sub) -OP(sll, "sll", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(slt, "slt", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_slt) -OP(sltu, "sltu", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sltu) -OP(xor, "xor", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(srl, "srl", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(sra, "sra", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(or, "or", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(and, "and", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(fence, "fence", rv_codec_r_f, rv_fmt_pred_succ) -OP(fence_i, "fence.i", rv_codec_none, rv_fmt_none) -OP(lwu, "lwu", rv_codec_i, rv_fmt_rd_offset_rs1) -OP(ld, "ld", rv_codec_i, rv_fmt_rd_offset_rs1) -OP(sd, "sd", rv_codec_s, rv_fmt_rs2_offset_rs1) +OP(add_uw, "add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(addd, "addd", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(addi, "addi", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addi) +OP(addid, "addid", rv_codec_i, rv_fmt_rd_rs1_imm) OP(addiw, "addiw", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addiw) -OP(slliw, "slliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm) -OP(srliw, "srliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm) -OP(sraiw, "sraiw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm) OP(addw, "addw", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(subw, "subw", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_subw) -OP(sllw, "sllw", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(srlw, "srlw", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(sraw, "sraw", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(ldu, "ldu", rv_codec_i, rv_fmt_rd_offset_rs1) -OP(lq, "lq", rv_codec_i, rv_fmt_rd_offset_rs1) -OP(sq, "sq", rv_codec_s, rv_fmt_rs2_offset_rs1) -OP(addid, "addid", rv_codec_i, rv_fmt_rd_rs1_imm) -OP(sllid, "sllid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm) -OP(srlid, "srlid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm) -OP(sraid, "sraid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm) -OP(addd, "addd", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(subd, "subd", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(slld, "slld", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(srld, "srld", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(srad, "srad", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(mul, "mul", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(mulh, "mulh", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(mulhsu, "mulhsu", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(mulhu, "mulhu", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(div, "div", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(divu, "divu", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(rem, "rem", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(remu, "remu", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(mulw, "mulw", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(divw, "divw", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(divuw, "divuw", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(remw, "remw", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(remuw, "remuw", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(muld, "muld", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(divd, "divd", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(divud, "divud", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(remd, "remd", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(remud, "remud", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(lr_w, "lr.w", rv_codec_r_l, rv_fmt_aqrl_rd_rs1) -OP(sc_w, "sc.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amoswap_w, "amoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(aes32dsi, "aes32dsi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs) +OP(aes32dsmi, "aes32dsmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs) +OP(aes32esi, "aes32esi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs) +OP(aes32esmi, "aes32esmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs) +OP(aes64ds, "aes64ds", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(aes64dsm, "aes64dsm", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(aes64es, "aes64es", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(aes64esm, "aes64esm", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(aes64im, "aes64im", rv_codec_r, rv_fmt_rd_rs1) +OP(aes64ks1i, "aes64ks1i", rv_codec_k_rnum, rv_fmt_rd_rs1_rnum) +OP(aes64ks2, "aes64ks2", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(amoadd_b, "amoadd.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoadd_d, "amoadd.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoadd_h, "amoadd.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoadd_q, "amoadd.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) OP(amoadd_w, "amoadd.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amoxor_w, "amoxor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amoor_w, "amoor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoand_b, "amoand.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoand_d, "amoand.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoand_h, "amoand.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoand_q, "amoand.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) OP(amoand_w, "amoand.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amomin_w, "amomin.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amocas_b, "amocas.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amocas_d, "amocas.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amocas_h, "amocas.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amocas_q, "amocas.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amocas_w, "amocas.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomax_b, "amomax.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomax_d, "amomax.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomax_h, "amomax.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomax_q, "amomax.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) OP(amomax_w, "amomax.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amominu_w, "amominu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomaxu_b, "amomaxu.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomaxu_d, "amomaxu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomaxu_h, "amomaxu.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomaxu_q, "amomaxu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) OP(amomaxu_w, "amomaxu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(lr_d, "lr.d", rv_codec_r_l, rv_fmt_aqrl_rd_rs1) -OP(sc_d, "sc.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amoswap_d, "amoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amoadd_d, "amoadd.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amoxor_d, "amoxor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amoor_d, "amoor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amoand_d, "amoand.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomin_b, "amomin.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) OP(amomin_d, "amomin.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amomax_d, "amomax.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomin_h, "amomin.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomin_q, "amomin.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amomin_w, "amomin.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amominu_b, "amominu.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) OP(amominu_d, "amominu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amomaxu_d, "amomaxu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(lr_q, "lr.q", rv_codec_r_l, rv_fmt_aqrl_rd_rs1) -OP(sc_q, "sc.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amominu_h, "amominu.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amominu_q, "amominu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amominu_w, "amominu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoor_b, "amoor.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoor_d, "amoor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoor_h, "amoor.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoor_q, "amoor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoor_w, "amoor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoswap_b, "amoswap.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoswap_d, "amoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoswap_h, "amoswap.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) OP(amoswap_q, "amoswap.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amoadd_q, "amoadd.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoswap_w, "amoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoxor_b, "amoxor.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoxor_d, "amoxor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(amoxor_h, "amoxor.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) OP(amoxor_q, "amoxor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amoor_q, "amoor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amoand_q, "amoand.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amomin_q, "amomin.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amomax_q, "amomax.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amominu_q, "amominu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amomaxu_q, "amomaxu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(ecall, "ecall", rv_codec_none, rv_fmt_none) -OP(ebreak, "ebreak", rv_codec_none, rv_fmt_none) -OP(uret, "uret", rv_codec_none, rv_fmt_none) -OP(sret, "sret", rv_codec_none, rv_fmt_none) -OP(hret, "hret", rv_codec_none, rv_fmt_none) -OP(mret, "mret", rv_codec_none, rv_fmt_none) -OP(dret, "dret", rv_codec_none, rv_fmt_none) -OP(sfence_vm, "sfence.vm", rv_codec_r, rv_fmt_rs1) -OP(sfence_vma, "sfence.vma", rv_codec_r, rv_fmt_rs1_rs2) -OP(wfi, "wfi", rv_codec_none, rv_fmt_none) -OP(csrrw, "csrrw", rv_codec_i_csr, rv_fmt_rd_csr_rs1) -OP(csrrs, "csrrs", rv_codec_i_csr, rv_fmt_rd_csr_rs1) -OP(csrrc, "csrrc", rv_codec_i_csr, rv_fmt_rd_csr_rs1) -OP(csrrwi, "csrrwi", rv_codec_i_csr, rv_fmt_rd_csr_zimm) -OP(csrrsi, "csrrsi", rv_codec_i_csr, rv_fmt_rd_csr_zimm) -OP(csrrci, "csrrci", rv_codec_i_csr, rv_fmt_rd_csr_zimm) -OP(flw, "flw", rv_codec_i, rv_fmt_frd_offset_rs1) -OP(fsw, "fsw", rv_codec_s, rv_fmt_frs2_offset_rs1) -OP(fmadd_s, "fmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) -OP(fmsub_s, "fmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) -OP(fnmsub_s, "fnmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) -OP(fnmadd_s, "fnmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) -OP(fadd_s, "fadd.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) -OP(fsub_s, "fsub.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) -OP(fmul_s, "fmul.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) -OP(fdiv_s, "fdiv.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) -OP(fsgnj_s, "fsgnj.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_s) -OP(fsgnjn_s, "fsgnjn.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_s) -OP(fsgnjx_s, "fsgnjx.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_s) -OP(fmin_s, "fmin.s", rv_codec_r, rv_fmt_frd_frs1_frs2) -OP(fmax_s, "fmax.s", rv_codec_r, rv_fmt_frd_frs1_frs2) -OP(fsqrt_s, "fsqrt.s", rv_codec_r_m, rv_fmt_rm_frd_frs1) -OP(fle_s, "fle.s", rv_codec_r, rv_fmt_rd_frs1_frs2) -OP(flt_s, "flt.s", rv_codec_r, rv_fmt_rd_frs1_frs2) -OP(feq_s, "feq.s", rv_codec_r, rv_fmt_rd_frs1_frs2) -OP(fcvt_w_s, "fcvt.w.s", rv_codec_r_m, rv_fmt_rm_rd_frs1) -OP(fcvt_wu_s, "fcvt.wu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1) -OP(fcvt_s_w, "fcvt.s.w", rv_codec_r_m, rv_fmt_rm_frd_rs1) -OP(fcvt_s_wu, "fcvt.s.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1) -OP(fmv_x_s, "fmv.x.s", rv_codec_r, rv_fmt_rd_frs1) -OP(fclass_s, "fclass.s", rv_codec_r, rv_fmt_rd_frs1) -OP(fmv_s_x, "fmv.s.x", rv_codec_r, rv_fmt_frd_rs1) -OP(fcvt_l_s, "fcvt.l.s", rv_codec_r_m, rv_fmt_rm_rd_frs1) -OP(fcvt_lu_s, "fcvt.lu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1) -OP(fcvt_s_l, "fcvt.s.l", rv_codec_r_m, rv_fmt_rm_frd_rs1) -OP(fcvt_s_lu, "fcvt.s.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1) -OP(fld, "fld", rv_codec_i, rv_fmt_frd_offset_rs1) -OP(fsd, "fsd", rv_codec_s, rv_fmt_frs2_offset_rs1) -OP(fmadd_d, "fmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) -OP(fmsub_d, "fmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) -OP(fnmsub_d, "fnmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) -OP(fnmadd_d, "fnmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) -OP(fadd_d, "fadd.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) -OP(fsub_d, "fsub.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) -OP(fmul_d, "fmul.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) -OP(fdiv_d, "fdiv.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) -OP(fsgnj_d, "fsgnj.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_d) -OP(fsgnjn_d, "fsgnjn.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_d) -OP(fsgnjx_d, "fsgnjx.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_d) -OP(fmin_d, "fmin.d", rv_codec_r, rv_fmt_frd_frs1_frs2) -OP(fmax_d, "fmax.d", rv_codec_r, rv_fmt_frd_frs1_frs2) -OP(fcvt_s_d, "fcvt.s.d", rv_codec_r_m, rv_fmt_rm_frd_frs1) -OP(fcvt_d_s, "fcvt.d.s", rv_codec_r_m, rv_fmt_rm_frd_frs1) -OP(fsqrt_d, "fsqrt.d", rv_codec_r_m, rv_fmt_rm_frd_frs1) -OP(fle_d, "fle.d", rv_codec_r, rv_fmt_rd_frs1_frs2) -OP(flt_d, "flt.d", rv_codec_r, rv_fmt_rd_frs1_frs2) -OP(feq_d, "feq.d", rv_codec_r, rv_fmt_rd_frs1_frs2) -OP(fcvt_w_d, "fcvt.w.d", rv_codec_r_m, rv_fmt_rm_rd_frs1) -OP(fcvt_wu_d, "fcvt.wu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1) -OP(fcvt_d_w, "fcvt.d.w", rv_codec_r_m, rv_fmt_rm_frd_rs1) -OP(fcvt_d_wu, "fcvt.d.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1) -OP(fclass_d, "fclass.d", rv_codec_r, rv_fmt_rd_frs1) -OP(fcvt_l_d, "fcvt.l.d", rv_codec_r_m, rv_fmt_rm_rd_frs1) -OP(fcvt_lu_d, "fcvt.lu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1) -OP(fmv_x_d, "fmv.x.d", rv_codec_r, rv_fmt_rd_frs1) -OP(fcvt_d_l, "fcvt.d.l", rv_codec_r_m, rv_fmt_rm_frd_rs1) -OP(fcvt_d_lu, "fcvt.d.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1) -OP(fmv_d_x, "fmv.d.x", rv_codec_r, rv_fmt_frd_rs1) -OP(flq, "flq", rv_codec_i, rv_fmt_frd_offset_rs1) -OP(fsq, "fsq", rv_codec_s, rv_fmt_frs2_offset_rs1) -OP(fmadd_q, "fmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) -OP(fmsub_q, "fmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) -OP(fnmsub_q, "fnmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) -OP(fnmadd_q, "fnmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) -OP(fadd_q, "fadd.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) -OP(fsub_q, "fsub.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) -OP(fmul_q, "fmul.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) -OP(fdiv_q, "fdiv.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) -OP(fsgnj_q, "fsgnj.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_q) -OP(fsgnjn_q, "fsgnjn.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_q) -OP(fsgnjx_q, "fsgnjx.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_q) -OP(fmin_q, "fmin.q", rv_codec_r, rv_fmt_frd_frs1_frs2) -OP(fmax_q, "fmax.q", rv_codec_r, rv_fmt_frd_frs1_frs2) -OP(fcvt_s_q, "fcvt.s.q", rv_codec_r_m, rv_fmt_rm_frd_frs1) -OP(fcvt_q_s, "fcvt.q.s", rv_codec_r_m, rv_fmt_rm_frd_frs1) -OP(fcvt_d_q, "fcvt.d.q", rv_codec_r_m, rv_fmt_rm_frd_frs1) -OP(fcvt_q_d, "fcvt.q.d", rv_codec_r_m, rv_fmt_rm_frd_frs1) -OP(fsqrt_q, "fsqrt.q", rv_codec_r_m, rv_fmt_rm_frd_frs1) -OP(fle_q, "fle.q", rv_codec_r, rv_fmt_rd_frs1_frs2) -OP(flt_q, "flt.q", rv_codec_r, rv_fmt_rd_frs1_frs2) -OP(feq_q, "feq.q", rv_codec_r, rv_fmt_rd_frs1_frs2) -OP(fcvt_w_q, "fcvt.w.q", rv_codec_r_m, rv_fmt_rm_rd_frs1) -OP(fcvt_wu_q, "fcvt.wu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1) -OP(fcvt_q_w, "fcvt.q.w", rv_codec_r_m, rv_fmt_rm_frd_rs1) -OP(fcvt_q_wu, "fcvt.q.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1) -OP(fclass_q, "fclass.q", rv_codec_r, rv_fmt_rd_frs1) -OP(fcvt_l_q, "fcvt.l.q", rv_codec_r_m, rv_fmt_rm_rd_frs1) -OP(fcvt_lu_q, "fcvt.lu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1) -OP(fcvt_q_l, "fcvt.q.l", rv_codec_r_m, rv_fmt_rm_frd_rs1) -OP(fcvt_q_lu, "fcvt.q.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1) -OP(fmv_x_q, "fmv.x.q", rv_codec_r, rv_fmt_rd_frs1) -OP(fmv_q_x, "fmv.q.x", rv_codec_r, rv_fmt_frd_rs1) -OP(c_addi4spn, "c.addi4spn", rv_codec_ciw_4spn, NULL, DECOMP(op_addi)) -OP(c_fld, "c.fld", rv_codec_cl_ld, NULL, DECOMP(op_fld)) -OP(c_lw, "c.lw", rv_codec_cl_lw, NULL, DECOMP(op_lw)) -OP(c_flw, "c.flw", rv_codec_cl_lw, NULL, DECOMP(op_flw)) -OP(c_fsd, "c.fsd", rv_codec_cs_sd, NULL, DECOMP(op_fsd)) -OP(c_sw, "c.sw", rv_codec_cs_sw, NULL, DECOMP(op_sw)) -OP(c_fsw, "c.fsw", rv_codec_cs_sw, NULL, DECOMP(op_fsw)) +OP(amoxor_w, "amoxor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(and, "and", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(andi, "andi", rv_codec_i, rv_fmt_rd_rs1_imm) +OP(andn, "andn", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(auipc, "auipc", rv_codec_u, rv_fmt_rd_uoffset) +OP(bclr, "bclr", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(bclri, "bclri", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) +OP(beq, "beq", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_beq) +OP(beqz, "beqz", rv_codec_illegal, rv_fmt_rs1_offset) +OP(bext, "bext", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(bexti, "bexti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) +OP(bge, "bge", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bge) +OP(bgeu, "bgeu", rv_codec_sb, rv_fmt_rs1_rs2_offset) +OP(bgez, "bgez", rv_codec_illegal, rv_fmt_rs1_offset) +OP(bgtz, "bgtz", rv_codec_illegal, rv_fmt_rs2_offset) +OP(binv, "binv", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(binvi, "binvi", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) +OP(blez, "blez", rv_codec_illegal, rv_fmt_rs2_offset) +OP(blt, "blt", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_blt) +OP(bltu, "bltu", rv_codec_sb, rv_fmt_rs1_rs2_offset) +OP(bltz, "bltz", rv_codec_illegal, rv_fmt_rs1_offset) +OP(bne, "bne", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bne) +OP(bnez, "bnez", rv_codec_illegal, rv_fmt_rs1_offset) +OP(brev8, "brev8", rv_codec_r, rv_fmt_rd_rs1) +OP(bset, "bset", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(bseti, "bseti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) +OP(c_add, "c.add", rv_codec_cr, NULL, DECOMP(op_add)) OP(c_addi, "c.addi", rv_codec_ci, NULL, DECOMP(op_addi)) -OP(c_jal, "c.jal", rv_codec_cj_jal, NULL, DECOMP(op_jal)) -OP(c_li, "c.li", rv_codec_ci_li, NULL, DECOMP(op_addi)) OP(c_addi16sp, "c.addi16sp", rv_codec_ci_16sp, NULL, DECOMP(op_addi)) -OP(c_lui, "c.lui", rv_codec_ci_lui, NULL, DECOMP(op_lui)) -OP(c_srli, "c.srli", rv_codec_cb_sh6, NULL, DECOMP(op_srli)) -OP(c_srai, "c.srai", rv_codec_cb_sh6, NULL, DECOMP(op_srai)) -OP(c_andi, "c.andi", rv_codec_cb_imm, NULL, DECOMP(op_andi)) -OP(c_sub, "c.sub", rv_codec_cs, NULL, DECOMP(op_sub)) -OP(c_xor, "c.xor", rv_codec_cs, NULL, DECOMP(op_xor)) -OP(c_or, "c.or", rv_codec_cs, NULL, DECOMP(op_or)) -OP(c_and, "c.and", rv_codec_cs, NULL, DECOMP(op_and)) -OP(c_subw, "c.subw", rv_codec_cs, NULL, DECOMP(op_subw)) +OP(c_addi4spn, "c.addi4spn", rv_codec_ciw_4spn, NULL, DECOMP(op_addi)) +OP(c_addiw, "c.addiw", rv_codec_ci, NULL, DECOMP(op_addiw)) OP(c_addw, "c.addw", rv_codec_cs, NULL, DECOMP(op_addw)) -OP(c_j, "c.j", rv_codec_cj, NULL, DECOMP(op_j)) +OP(c_and, "c.and", rv_codec_cs, NULL, DECOMP(op_and)) +OP(c_andi, "c.andi", rv_codec_cb_imm, NULL, DECOMP(op_andi)) OP(c_beqz, "c.beqz", rv_codec_cb, NULL, DECOMP(op_beqz)) OP(c_bnez, "c.bnez", rv_codec_cb, NULL, DECOMP(op_bnez)) -OP(c_slli, "c.slli", rv_codec_ci_sh6, NULL, DECOMP(op_slli)) +OP(c_ebreak, "c.ebreak", rv_codec_ci_none, NULL, DECOMP(op_ebreak)) +OP(c_fld, "c.fld", rv_codec_cl_ld, NULL, DECOMP(op_fld)) OP(c_fldsp, "c.fldsp", rv_codec_ci_ldsp, NULL, DECOMP(op_fld)) -OP(c_lwsp, "c.lwsp", rv_codec_ci_lwsp, NULL, DECOMP(op_lw)) +OP(c_flw, "c.flw", rv_codec_cl_lw, NULL, DECOMP(op_flw)) OP(c_flwsp, "c.flwsp", rv_codec_ci_lwsp, NULL, DECOMP(op_flw)) -OP(c_jr, "c.jr", rv_codec_cr_jr, NULL, DECOMP(op_jr)) -OP(c_mv, "c.mv", rv_codec_cr_mv, NULL, DECOMP(op_mv)) -OP(c_ebreak, "c.ebreak", rv_codec_ci_none, NULL, DECOMP(op_ebreak)) -OP(c_jalr, "c.jalr", rv_codec_cr_jalr, NULL, DECOMP(op_jalr)) -OP(c_add, "c.add", rv_codec_cr, NULL, DECOMP(op_add)) +OP(c_fsd, "c.fsd", rv_codec_cs_sd, NULL, DECOMP(op_fsd)) OP(c_fsdsp, "c.fsdsp", rv_codec_css_sdsp, NULL, DECOMP(op_fsd)) -OP(c_swsp, "c.swsp", rv_codec_css_swsp, NULL, DECOMP(op_sw)) +OP(c_fsw, "c.fsw", rv_codec_cs_sw, NULL, DECOMP(op_fsw)) OP(c_fswsp, "c.fswsp", rv_codec_css_swsp, NULL, DECOMP(op_fsw)) +OP(c_j, "c.j", rv_codec_cj, NULL, DECOMP(op_j)) +OP(c_jal, "c.jal", rv_codec_cj_jal, NULL, DECOMP(op_jal)) +OP(c_jalr, "c.jalr", rv_codec_cr_jalr, NULL, DECOMP(op_jalr)) +OP(c_jr, "c.jr", rv_codec_cr_jr, NULL, DECOMP(op_jr)) +OP(c_lbu, "c.lbu", rv_codec_zcb_lb, rv_fmt_rs1_rs2_zce_ldst) OP(c_ld, "c.ld", rv_codec_cl_ld, NULL, DECOMP(op_ld)) -OP(c_sd, "c.sd", rv_codec_cs_sd, NULL, DECOMP(op_sd)) -OP(c_addiw, "c.addiw", rv_codec_ci, NULL, DECOMP(op_addiw)) OP(c_ldsp, "c.ldsp", rv_codec_ci_ldsp, NULL, DECOMP(op_ld)) -OP(c_sdsp, "c.sdsp", rv_codec_css_sdsp, NULL, DECOMP(op_sd)) +OP(c_lh, "c.lh", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst) +OP(c_lhu, "c.lhu", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst) +OP(c_li, "c.li", rv_codec_ci_li, NULL, DECOMP(op_addi)) OP(c_lq, "c.lq", rv_codec_cl_lq, NULL, DECOMP(op_lq)) -OP(c_sq, "c.sq", rv_codec_cs_sq, NULL, DECOMP(op_sq)) OP(c_lqsp, "c.lqsp", rv_codec_ci_lqsp, NULL, DECOMP(op_lq)) +OP(c_lui, "c.lui", rv_codec_ci_lui, NULL, DECOMP(op_lui)) +OP(c_lw, "c.lw", rv_codec_cl_lw, NULL, DECOMP(op_lw)) +OP(c_lwsp, "c.lwsp", rv_codec_ci_lwsp, NULL, DECOMP(op_lw)) +OP(c_mop, "c.mop", rv_codec_cmop, rv_fmt_cmop) +OP(c_mul, "c.mul", rv_codec_zcb_mul, rv_fmt_rd_rs2) +OP(c_mv, "c.mv", rv_codec_cr_mv, NULL, DECOMP(op_mv)) +OP(c_not, "c.not", rv_codec_zcb_ext, rv_fmt_rd) +OP(c_or, "c.or", rv_codec_cs, NULL, DECOMP(op_or)) +OP(c_sb, "c.sb", rv_codec_zcb_lb, rv_fmt_rs1_rs2_zce_ldst) +OP(c_sd, "c.sd", rv_codec_cs_sd, NULL, DECOMP(op_sd)) +OP(c_sdsp, "c.sdsp", rv_codec_css_sdsp, NULL, DECOMP(op_sd)) +OP(c_sext_b, "c.sext.b", rv_codec_zcb_ext, rv_fmt_rd) +OP(c_sext_h, "c.sext.h", rv_codec_zcb_ext, rv_fmt_rd) +OP(c_sh, "c.sh", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst) +OP(c_slli, "c.slli", rv_codec_ci_sh6, NULL, DECOMP(op_slli)) +OP(c_sq, "c.sq", rv_codec_cs_sq, NULL, DECOMP(op_sq)) OP(c_sqsp, "c.sqsp", rv_codec_css_sqsp, NULL, DECOMP(op_sq)) -OP(nop, "nop", rv_codec_illegal, rv_fmt_none) -OP(mv, "mv", rv_codec_illegal, rv_fmt_rd_rs1, rvcp_mv) -OP(not, "not", rv_codec_illegal, rv_fmt_rd_rs1) -OP(neg, "neg", rv_codec_illegal, rv_fmt_rd_rs2) -OP(negw, "negw", rv_codec_illegal, rv_fmt_rd_rs2) -OP(sext_w, "sext.w", rv_codec_illegal, rv_fmt_rd_rs1) -OP(seqz, "seqz", rv_codec_illegal, rv_fmt_rd_rs1) -OP(snez, "snez", rv_codec_illegal, rv_fmt_rd_rs2) -OP(sltz, "sltz", rv_codec_illegal, rv_fmt_rd_rs1) -OP(sgtz, "sgtz", rv_codec_illegal, rv_fmt_rd_rs2) -OP(fmv_s, "fmv.s", rv_codec_illegal, rv_fmt_frd_frs1) -OP(fabs_s, "fabs.s", rv_codec_illegal, rv_fmt_frd_frs1) -OP(fneg_s, "fneg.s", rv_codec_illegal, rv_fmt_frd_frs1) -OP(fmv_d, "fmv.d", rv_codec_illegal, rv_fmt_frd_frs1) -OP(fabs_d, "fabs.d", rv_codec_illegal, rv_fmt_frd_frs1) -OP(fneg_d, "fneg.d", rv_codec_illegal, rv_fmt_frd_frs1) -OP(fmv_q, "fmv.q", rv_codec_illegal, rv_fmt_frd_frs1) -OP(fabs_q, "fabs.q", rv_codec_illegal, rv_fmt_frd_frs1) -OP(fneg_q, "fneg.q", rv_codec_illegal, rv_fmt_frd_frs1) -OP(beqz, "beqz", rv_codec_illegal, rv_fmt_rs1_offset) -OP(bnez, "bnez", rv_codec_illegal, rv_fmt_rs1_offset) -OP(blez, "blez", rv_codec_illegal, rv_fmt_rs2_offset) -OP(bgez, "bgez", rv_codec_illegal, rv_fmt_rs1_offset) -OP(bltz, "bltz", rv_codec_illegal, rv_fmt_rs1_offset) -OP(bgtz, "bgtz", rv_codec_illegal, rv_fmt_rs2_offset) -OP(jal_ra, "jal", rv_codec_illegal, rv_fmt_offset) -OP(jalr_ra, "jalr", rv_codec_illegal, rv_fmt_rs1) -OP(j, "j", rv_codec_illegal, rv_fmt_offset) -OP(ret, "ret", rv_codec_illegal, rv_fmt_none) -OP(jr, "jr", rv_codec_illegal, rv_fmt_rs1, rvcp_jr) -OP(rdcycle, "rdcycle", rv_codec_i_csr, rv_fmt_rd) -OP(rdtime, "rdtime", rv_codec_i_csr, rv_fmt_rd) -OP(rdinstret, "rdinstret", rv_codec_i_csr, rv_fmt_rd) -OP(rdcycleh, "rdcycleh", rv_codec_i_csr, rv_fmt_rd) -OP(rdtimeh, "rdtimeh", rv_codec_i_csr, rv_fmt_rd) -OP(rdinstreth, "rdinstreth", rv_codec_i_csr, rv_fmt_rd) -OP(frcsr, "frcsr", rv_codec_i_csr, rv_fmt_rd) -OP(frrm, "frrm", rv_codec_i_csr, rv_fmt_rd) -OP(frflags, "frflags", rv_codec_i_csr, rv_fmt_rd) -OP(fscsr, "fscsr", rv_codec_i_csr, rv_fmt_rd_rs1) -OP(fsrm, "fsrm", rv_codec_i_csr, rv_fmt_rd_rs1) -OP(fsflags, "fsflags", rv_codec_i_csr, rv_fmt_rd_rs1) -OP(fsrmi, "fsrmi", rv_codec_i_csr, rv_fmt_rd_zimm) -OP(fsflagsi, "fsflagsi", rv_codec_i_csr, rv_fmt_rd_zimm) -OP(bseti, "bseti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) -OP(bclri, "bclri", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) -OP(binvi, "binvi", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) -OP(bexti, "bexti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) -OP(rori, "rori", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) -OP(clz, "clz", rv_codec_r, rv_fmt_rd_rs1) -OP(ctz, "ctz", rv_codec_r, rv_fmt_rd_rs1) -OP(cpop, "cpop", rv_codec_r, rv_fmt_rd_rs1) -OP(sext_h, "sext.h", rv_codec_r, rv_fmt_rd_rs1) -OP(sext_b, "sext.b", rv_codec_r, rv_fmt_rd_rs1) -OP(xnor, "xnor", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(orn, "orn", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(andn, "andn", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(rol, "rol", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(ror, "ror", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(sh1add, "sh1add", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(sh2add, "sh2add", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(sh3add, "sh3add", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(sh1add_uw, "sh1add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(sh2add_uw, "sh2add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(sh3add_uw, "sh3add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(c_srai, "c.srai", rv_codec_cb_sh6, NULL, DECOMP(op_srai)) +OP(c_srli, "c.srli", rv_codec_cb_sh6, NULL, DECOMP(op_srli)) +OP(c_sspopchk, "c.sspopchk", rv_codec_cmop_ss, NULL, DECOMP(op_sspopchk)) +OP(c_sspush, "c.sspush", rv_codec_cmop_ss, NULL, DECOMP(op_sspush)) +OP(c_sub, "c.sub", rv_codec_cs, NULL, DECOMP(op_sub)) +OP(c_subw, "c.subw", rv_codec_cs, NULL, DECOMP(op_subw)) +OP(c_sw, "c.sw", rv_codec_cs_sw, NULL, DECOMP(op_sw)) +OP(c_swsp, "c.swsp", rv_codec_css_swsp, NULL, DECOMP(op_sw)) +OP(c_xor, "c.xor", rv_codec_cs, NULL, DECOMP(op_xor)) +OP(c_zext_b, "c.zext.b", rv_codec_zcb_ext, rv_fmt_rd) +OP(c_zext_h, "c.zext.h", rv_codec_zcb_ext, rv_fmt_rd) +OP(c_zext_w, "c.zext.w", rv_codec_zcb_ext, rv_fmt_rd) +OP(cbo_clean, "cbo.clean", rv_codec_r, rv_fmt_rs1) +OP(cbo_flush, "cbo.flush", rv_codec_r, rv_fmt_rs1) +OP(cbo_inval, "cbo.inval", rv_codec_r, rv_fmt_rs1) +OP(cbo_zero, "cbo.zero", rv_codec_r, rv_fmt_rs1) OP(clmul, "clmul", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(clmulr, "clmulr", rv_codec_r, rv_fmt_rd_rs1_rs2) OP(clmulh, "clmulh", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(min, "min", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(minu, "minu", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(max, "max", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(maxu, "maxu", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(clmulr, "clmulr", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(clz, "clz", rv_codec_r, rv_fmt_rd_rs1) OP(clzw, "clzw", rv_codec_r, rv_fmt_rd_rs1) -OP(ctzw, "ctzw", rv_codec_r, rv_fmt_rd_rs1) +OP(cm_jalt, "cm.jalt", rv_codec_zcmt_jt, rv_fmt_zcmt_index) +OP(cm_jt, "cm.jt", rv_codec_zcmt_jt, rv_fmt_zcmt_index) +OP(cm_mva01s, "cm.mva01s", rv_codec_zcmp_cm_mv, rv_fmt_rd_rs2) +OP(cm_mvsa01, "cm.mvsa01", rv_codec_zcmp_cm_mv, rv_fmt_rd_rs2) +OP(cm_pop, "cm.pop", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist) +OP(cm_popret, "cm.popret", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist) +OP(cm_popretz, "cm.popretz", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist) +OP(cm_push, "cm.push", rv_codec_zcmp_cm_pushpop, rv_fmt_push_rlist) +OP(cpop, "cpop", rv_codec_r, rv_fmt_rd_rs1) OP(cpopw, "cpopw", rv_codec_r, rv_fmt_rd_rs1) -OP(slli_uw, "slli.uw", rv_codec_i_sh6, rv_fmt_rd_rs1_imm) -OP(add_uw, "add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(rolw, "rolw", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(rorw, "rorw", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(rev8, "rev8", rv_codec_r, rv_fmt_rd_rs1) -OP(zext_h, "zext.h", rv_codec_r, rv_fmt_rd_rs1) -OP(roriw, "roriw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm) -OP(orc_b, "orc.b", rv_codec_r, rv_fmt_rd_rs1) -OP(bset, "bset", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(bclr, "bclr", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(binv, "binv", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(bext, "bext", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(aes32esmi, "aes32esmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs) -OP(aes32esi, "aes32esi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs) -OP(aes32dsmi, "aes32dsmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs) -OP(aes32dsi, "aes32dsi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs) -OP(aes64ks1i, "aes64ks1i", rv_codec_k_rnum, rv_fmt_rd_rs1_rnum) -OP(aes64ks2, "aes64ks2", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(aes64im, "aes64im", rv_codec_r, rv_fmt_rd_rs1) -OP(aes64esm, "aes64esm", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(aes64es, "aes64es", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(aes64dsm, "aes64dsm", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(aes64ds, "aes64ds", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(sha256sig0, "sha256sig0", rv_codec_r, rv_fmt_rd_rs1) -OP(sha256sig1, "sha256sig1", rv_codec_r, rv_fmt_rd_rs1) -OP(sha256sum0, "sha256sum0", rv_codec_r, rv_fmt_rd_rs1) -OP(sha256sum1, "sha256sum1", rv_codec_r, rv_fmt_rd_rs1) -OP(sha512sig0, "sha512sig0", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(sha512sig1, "sha512sig1", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(sha512sum0, "sha512sum0", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(sha512sum1, "sha512sum1", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(sha512sum0r, "sha512sum0r", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(sha512sum1r, "sha512sum1r", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(sha512sig0l, "sha512sig0l", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(sha512sig0h, "sha512sig0h", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(sha512sig1l, "sha512sig1l", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(sha512sig1h, "sha512sig1h", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(sm3p0, "sm3p0", rv_codec_r, rv_fmt_rd_rs1) -OP(sm3p1, "sm3p1", rv_codec_r, rv_fmt_rd_rs1) -OP(sm4ed, "sm4ed", rv_codec_k_bs, rv_fmt_rs1_rs2_bs) -OP(sm4ks, "sm4ks", rv_codec_k_bs, rv_fmt_rs1_rs2_bs) -OP(brev8, "brev8", rv_codec_r, rv_fmt_rd_rs1) -OP(pack, "pack", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(packh, "packh", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(packw, "packw", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(unzip, "unzip", rv_codec_r, rv_fmt_rd_rs1) -OP(zip, "zip", rv_codec_r, rv_fmt_rd_rs1) -OP(xperm4, "xperm4", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(xperm8, "xperm8", rv_codec_r, rv_fmt_rd_rs1) -OP(vle8_v, "vle8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vle16_v, "vle16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vle32_v, "vle32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vle64_v, "vle64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vse8_v, "vse8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vse16_v, "vse16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vse32_v, "vse32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vse64_v, "vse64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vlm_v, "vlm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vsm_v, "vsm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vlse8_v, "vlse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) -OP(vlse16_v, "vlse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) -OP(vlse32_v, "vlse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) -OP(vlse64_v, "vlse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) -OP(vsse8_v, "vsse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) -OP(vsse16_v, "vsse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) -OP(vsse32_v, "vsse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) -OP(vsse64_v, "vsse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) -OP(vluxei8_v, "vluxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) -OP(vluxei16_v, "vluxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) -OP(vluxei32_v, "vluxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) -OP(vluxei64_v, "vluxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) -OP(vloxei8_v, "vloxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) -OP(vloxei16_v, "vloxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) -OP(vloxei32_v, "vloxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) -OP(vloxei64_v, "vloxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) -OP(vsuxei8_v, "vsuxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) -OP(vsuxei16_v, "vsuxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) -OP(vsuxei32_v, "vsuxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) -OP(vsuxei64_v, "vsuxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) -OP(vsoxei8_v, "vsoxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) -OP(vsoxei16_v, "vsoxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) -OP(vsoxei32_v, "vsoxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) -OP(vsoxei64_v, "vsoxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) -OP(vle8ff_v, "vle8ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vle16ff_v, "vle16ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vle32ff_v, "vle32ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vle64ff_v, "vle64ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vl1re8_v, "vl1re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vl1re16_v, "vl1re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vl1re32_v, "vl1re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vl1re64_v, "vl1re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vl2re8_v, "vl2re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vl2re16_v, "vl2re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vl2re32_v, "vl2re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vl2re64_v, "vl2re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vl4re8_v, "vl4re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vl4re16_v, "vl4re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vl4re32_v, "vl4re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vl4re64_v, "vl4re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vl8re8_v, "vl8re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vl8re16_v, "vl8re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vl8re32_v, "vl8re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vl8re64_v, "vl8re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vs1r_v, "vs1r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vs2r_v, "vs2r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vs4r_v, "vs4r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vs8r_v, "vs8r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) -OP(vadd_vv, "vadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vadd_vx, "vadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vadd_vi, "vadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) -OP(vsub_vv, "vsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vsub_vx, "vsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vrsub_vx, "vrsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vrsub_vi, "vrsub.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) -OP(vwaddu_vv, "vwaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vwaddu_vx, "vwaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vwadd_vv, "vwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vwadd_vx, "vwadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vwsubu_vv, "vwsubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vwsubu_vx, "vwsubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vwsub_vv, "vwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vwsub_vx, "vwsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vwaddu_wv, "vwaddu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vwaddu_wx, "vwaddu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vwadd_wv, "vwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vwadd_wx, "vwadd.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vwsubu_wv, "vwsubu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vwsubu_wx, "vwsubu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vwsub_wv, "vwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vwsub_wx, "vwsub.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vadc_vvm, "vadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl) -OP(vadc_vxm, "vadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl) -OP(vadc_vim, "vadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl) -OP(vmadc_vvm, "vmadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl) -OP(vmadc_vxm, "vmadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl) -OP(vmadc_vim, "vmadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl) -OP(vsbc_vvm, "vsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl) -OP(vsbc_vxm, "vsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl) -OP(vmsbc_vvm, "vmsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl) -OP(vmsbc_vxm, "vmsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl) -OP(vand_vv, "vand.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vand_vx, "vand.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vand_vi, "vand.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) -OP(vor_vv, "vor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vor_vx, "vor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vor_vi, "vor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) -OP(vxor_vv, "vxor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vxor_vx, "vxor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vxor_vi, "vxor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) -OP(vsll_vv, "vsll.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vsll_vx, "vsll.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vsll_vi, "vsll.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) -OP(vsrl_vv, "vsrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vsrl_vx, "vsrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vsrl_vi, "vsrl.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) -OP(vsra_vv, "vsra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vsra_vx, "vsra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vsra_vi, "vsra.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) -OP(vnsrl_wv, "vnsrl.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vnsrl_wx, "vnsrl.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vnsrl_wi, "vnsrl.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) -OP(vnsra_wv, "vnsra.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vnsra_wx, "vnsra.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vnsra_wi, "vnsra.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) -OP(vmseq_vv, "vmseq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmseq_vx, "vmseq.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vmseq_vi, "vmseq.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) -OP(vmsne_vv, "vmsne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmsne_vx, "vmsne.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vmsne_vi, "vmsne.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) -OP(vmsltu_vv, "vmsltu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmsltu_vx, "vmsltu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vmslt_vv, "vmslt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmslt_vx, "vmslt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vmsleu_vv, "vmsleu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmsleu_vx, "vmsleu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vmsleu_vi, "vmsleu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) -OP(vmsle_vv, "vmsle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmsle_vx, "vmsle.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vmsle_vi, "vmsle.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) -OP(vmsgtu_vx, "vmsgtu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vmsgtu_vi, "vmsgtu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) -OP(vmsgt_vx, "vmsgt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vmsgt_vi, "vmsgt.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) -OP(vminu_vv, "vminu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vminu_vx, "vminu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vmin_vv, "vmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmin_vx, "vmin.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vmaxu_vv, "vmaxu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmaxu_vx, "vmaxu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vmax_vv, "vmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmax_vx, "vmax.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vmul_vv, "vmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmul_vx, "vmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vmulh_vv, "vmulh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmulh_vx, "vmulh.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vmulhu_vv, "vmulhu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmulhu_vx, "vmulhu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vmulhsu_vv, "vmulhsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmulhsu_vx, "vmulhsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vdivu_vv, "vdivu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vdivu_vx, "vdivu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vdiv_vv, "vdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vdiv_vx, "vdiv.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vremu_vv, "vremu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vremu_vx, "vremu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vrem_vv, "vrem.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vrem_vx, "vrem.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vwmulu_vv, "vwmulu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vwmulu_vx, "vwmulu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vwmulsu_vv, "vwmulsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vwmulsu_vx, "vwmulsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vwmul_vv, "vwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vwmul_vx, "vwmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vmacc_vv, "vmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) -OP(vmacc_vx, "vmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) -OP(vnmsac_vv, "vnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) -OP(vnmsac_vx, "vnmsac.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) -OP(vmadd_vv, "vmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) -OP(vmadd_vx, "vmadd.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) -OP(vnmsub_vv, "vnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) -OP(vnmsub_vx, "vnmsub.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) -OP(vwmaccu_vv, "vwmaccu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) -OP(vwmaccu_vx, "vwmaccu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) -OP(vwmacc_vv, "vwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) -OP(vwmacc_vx, "vwmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) -OP(vwmaccsu_vv, "vwmaccsu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) -OP(vwmaccsu_vx, "vwmaccsu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) -OP(vwmaccus_vx, "vwmaccus.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) -OP(vmv_v_v, "vmv.v.v", rv_codec_v_r, rv_fmt_vd_vs1) -OP(vmv_v_x, "vmv.v.x", rv_codec_v_r, rv_fmt_vd_rs1) -OP(vmv_v_i, "vmv.v.i", rv_codec_v_i, rv_fmt_vd_imm) -OP(vmerge_vvm, "vmerge.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl) -OP(vmerge_vxm, "vmerge.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl) -OP(vmerge_vim, "vmerge.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl) -OP(vsaddu_vv, "vsaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vsaddu_vx, "vsaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vsaddu_vi, "vsaddu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) -OP(vsadd_vv, "vsadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vsadd_vx, "vsadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vsadd_vi, "vsadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) -OP(vssubu_vv, "vssubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vssubu_vx, "vssubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vssub_vv, "vssub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vssub_vx, "vssub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vaadd_vv, "vaadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vaadd_vx, "vaadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vaaddu_vv, "vaaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vaaddu_vx, "vaaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vasub_vv, "vasub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vasub_vx, "vasub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vasubu_vv, "vasubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vasubu_vx, "vasubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vsmul_vv, "vsmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vsmul_vx, "vsmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vssrl_vv, "vssrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vssrl_vx, "vssrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vssrl_vi, "vssrl.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) -OP(vssra_vv, "vssra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vssra_vx, "vssra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vssra_vi, "vssra.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) -OP(vnclipu_wv, "vnclipu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vnclipu_wx, "vnclipu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vnclipu_wi, "vnclipu.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) -OP(vnclip_wv, "vnclip.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vnclip_wx, "vnclip.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vnclip_wi, "vnclip.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) -OP(vfadd_vv, "vfadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vfadd_vf, "vfadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vfsub_vv, "vfsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vfsub_vf, "vfsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vfrsub_vf, "vfrsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vfwadd_vv, "vfwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vfwadd_vf, "vfwadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vfwadd_wv, "vfwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vfwadd_wf, "vfwadd.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vfwsub_vv, "vfwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vfwsub_vf, "vfwsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vfwsub_wv, "vfwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vfwsub_wf, "vfwsub.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vfmul_vv, "vfmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vfmul_vf, "vfmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vfdiv_vv, "vfdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vfdiv_vf, "vfdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vfrdiv_vf, "vfrdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vfwmul_vv, "vfwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vfwmul_vf, "vfwmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vfmacc_vv, "vfmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) -OP(vfmacc_vf, "vfmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) -OP(vfnmacc_vv, "vfnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) -OP(vfnmacc_vf, "vfnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) -OP(vfmsac_vv, "vfmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) -OP(vfmsac_vf, "vfmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) -OP(vfnmsac_vv, "vfnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) -OP(vfnmsac_vf, "vfnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) -OP(vfmadd_vv, "vfmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) -OP(vfmadd_vf, "vfmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) -OP(vfnmadd_vv, "vfnmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) -OP(vfnmadd_vf, "vfnmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) -OP(vfmsub_vv, "vfmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) -OP(vfmsub_vf, "vfmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) -OP(vfnmsub_vv, "vfnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) -OP(vfnmsub_vf, "vfnmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) -OP(vfwmacc_vv, "vfwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) -OP(vfwmacc_vf, "vfwmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) -OP(vfwnmacc_vv, "vfwnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) -OP(vfwnmacc_vf, "vfwnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) -OP(vfwmsac_vv, "vfwmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) -OP(vfwmsac_vf, "vfwmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) -OP(vfwnmsac_vv, "vfwnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) -OP(vfwnmsac_vf, "vfwnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) -OP(vfsqrt_v, "vfsqrt.v", rv_codec_v_r, rv_fmt_vd_vs2) -OP(vfrsqrt7_v, "vfrsqrt7.v", rv_codec_v_r, rv_fmt_vd_vs2) -OP(vfrec7_v, "vfrec7.v", rv_codec_v_r, rv_fmt_vd_vs2) -OP(vfmin_vv, "vfmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vfmin_vf, "vfmin.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vfmax_vv, "vfmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vfmax_vf, "vfmax.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vfsgnj_vv, "vfsgnj.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vfsgnj_vf, "vfsgnj.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vfsgnjn_vv, "vfsgnjn.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vfsgnjn_vf, "vfsgnjn.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vfsgnjx_vv, "vfsgnjx.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vfsgnjx_vf, "vfsgnjx.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vfslide1up_vf, "vfslide1up.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vfslide1down_vf, "vfslide1down.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vmfeq_vv, "vmfeq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmfeq_vf, "vmfeq.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vmfne_vv, "vmfne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmfne_vf, "vmfne.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vmflt_vv, "vmflt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmflt_vf, "vmflt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vmfle_vv, "vmfle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmfle_vf, "vmfle.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vmfgt_vf, "vmfgt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vmfge_vf, "vmfge.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) -OP(vfclass_v, "vfclass.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfmerge_vfm, "vfmerge.vfm", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vl) -OP(vfmv_v_f, "vfmv.v.f", rv_codec_v_r, rv_fmt_vd_fs1) -OP(vfcvt_xu_f_v, "vfcvt.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfcvt_x_f_v, "vfcvt.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfcvt_f_xu_v, "vfcvt.f.xu.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfcvt_f_x_v, "vfcvt.f.x.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfcvt_rtz_xu_f_v, "vfcvt.rtz.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfcvt_rtz_x_f_v, "vfcvt.rtz.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfwcvt_xu_f_v, "vfwcvt.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfwcvt_x_f_v, "vfwcvt.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfwcvt_f_xu_v, "vfwcvt.f.xu.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfwcvt_f_x_v, "vfwcvt.f.x.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfwcvt_f_f_v, "vfwcvt.f.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfwcvt_rtz_xu_f_v, "vfwcvt.rtz.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfwcvt_rtz_x_f_v, "vfwcvt.rtz.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfncvt_xu_f_w, "vfncvt.xu.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfncvt_x_f_w, "vfncvt.x.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfncvt_f_xu_w, "vfncvt.f.xu.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfncvt_f_x_w, "vfncvt.f.x.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfncvt_f_f_w, "vfncvt.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfncvt_rod_f_f_w, "vfncvt.rod.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfncvt_rtz_xu_f_w, "vfncvt.rtz.xu.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfncvt_rtz_x_f_w, "vfncvt.rtz.x.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vredsum_vs, "vredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vredand_vs, "vredand.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vredor_vs, "vredor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vredxor_vs, "vredxor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vredminu_vs, "vredminu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vredmin_vs, "vredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vredmaxu_vs, "vredmaxu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vredmax_vs, "vredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vwredsumu_vs, "vwredsumu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vwredsum_vs, "vwredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vfredusum_vs, "vfredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vfredosum_vs, "vfredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vfredmin_vs, "vfredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vfredmax_vs, "vfredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vfwredusum_vs, "vfwredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vfwredosum_vs, "vfwredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmand_mm, "vmand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmnand_mm, "vmnand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmandn_mm, "vmandn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmxor_mm, "vmxor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmor_mm, "vmor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmnor_mm, "vmnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmorn_mm, "vmorn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vmxnor_mm, "vmxnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vcpop_m, "vcpop.m", rv_codec_v_r, rv_fmt_rd_vs2_vm) -OP(vfirst_m, "vfirst.m", rv_codec_v_r, rv_fmt_rd_vs2_vm) -OP(vmsbf_m, "vmsbf.m", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vmsif_m, "vmsif.m", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vmsof_m, "vmsof.m", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(viota_m, "viota.m", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vid_v, "vid.v", rv_codec_v_r, rv_fmt_vd_vm) -OP(vmv_x_s, "vmv.x.s", rv_codec_v_r, rv_fmt_rd_vs2) -OP(vmv_s_x, "vmv.s.x", rv_codec_v_r, rv_fmt_vd_rs1) -OP(vfmv_f_s, "vfmv.f.s", rv_codec_v_r, rv_fmt_fd_vs2) -OP(vfmv_s_f, "vfmv.s.f", rv_codec_v_r, rv_fmt_vd_fs1) -OP(vslideup_vx, "vslideup.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vslideup_vi, "vslideup.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) -OP(vslide1up_vx, "vslide1up.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vslidedown_vx, "vslidedown.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vslidedown_vi, "vslidedown.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) -OP(vslide1down_vx, "vslide1down.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vrgather_vv, "vrgather.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vrgatherei16_vv, "vrgatherei16.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) -OP(vrgather_vx, "vrgather.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vrgather_vi, "vrgather.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) -OP(vcompress_vm, "vcompress.vm", rv_codec_v_r, rv_fmt_vd_vs2_vs1) -OP(vmv1r_v, "vmv1r.v", rv_codec_v_r, rv_fmt_vd_vs2) -OP(vmv2r_v, "vmv2r.v", rv_codec_v_r, rv_fmt_vd_vs2) -OP(vmv4r_v, "vmv4r.v", rv_codec_v_r, rv_fmt_vd_vs2) -OP(vmv8r_v, "vmv8r.v", rv_codec_v_r, rv_fmt_vd_vs2) -OP(vzext_vf2, "vzext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vzext_vf4, "vzext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vzext_vf8, "vzext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vsext_vf2, "vsext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vsext_vf4, "vsext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vsext_vf8, "vsext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vsetvli, "vsetvli", rv_codec_vsetvli, rv_fmt_vsetvli) -OP(vsetivli, "vsetivli", rv_codec_vsetivli, rv_fmt_vsetivli) -OP(vsetvl, "vsetvl", rv_codec_r, rv_fmt_rd_rs1_rs2) -OP(c_zext_b, "c.zext.b", rv_codec_zcb_ext, rv_fmt_rd) -OP(c_sext_b, "c.sext.b", rv_codec_zcb_ext, rv_fmt_rd) -OP(c_zext_h, "c.zext.h", rv_codec_zcb_ext, rv_fmt_rd) -OP(c_sext_h, "c.sext.h", rv_codec_zcb_ext, rv_fmt_rd) -OP(c_zext_w, "c.zext.w", rv_codec_zcb_ext, rv_fmt_rd) -OP(c_not, "c.not", rv_codec_zcb_ext, rv_fmt_rd) -OP(c_mul, "c.mul", rv_codec_zcb_mul, rv_fmt_rd_rs2) -OP(c_lbu, "c.lbu", rv_codec_zcb_lb, rv_fmt_rs1_rs2_zce_ldst) -OP(c_lhu, "c.lhu", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst) -OP(c_lh, "c.lh", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst) -OP(c_sb, "c.sb", rv_codec_zcb_lb, rv_fmt_rs1_rs2_zce_ldst) -OP(c_sh, "c.sh", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst) -OP(cm_push, "cm.push", rv_codec_zcmp_cm_pushpop, rv_fmt_push_rlist) -OP(cm_pop, "cm.pop", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist) -OP(cm_popret, "cm.popret", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist) -OP(cm_popretz, "cm.popretz", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist) -OP(cm_mva01s, "cm.mva01s", rv_codec_zcmp_cm_mv, rv_fmt_rd_rs2) -OP(cm_mvsa01, "cm.mvsa01", rv_codec_zcmp_cm_mv, rv_fmt_rd_rs2) -OP(cm_jt, "cm.jt", rv_codec_zcmt_jt, rv_fmt_zcmt_index) -OP(cm_jalt, "cm.jalt", rv_codec_zcmt_jt, rv_fmt_zcmt_index) +OP(csrrc, "csrrc", rv_codec_i_csr, rv_fmt_rd_csr_rs1) +OP(csrrci, "csrrci", rv_codec_i_csr, rv_fmt_rd_csr_zimm) +OP(csrrs, "csrrs", rv_codec_i_csr, rv_fmt_rd_csr_rs1) +OP(csrrsi, "csrrsi", rv_codec_i_csr, rv_fmt_rd_csr_zimm) +OP(csrrw, "csrrw", rv_codec_i_csr, rv_fmt_rd_csr_rs1) +OP(csrrwi, "csrrwi", rv_codec_i_csr, rv_fmt_rd_csr_zimm) +OP(ctz, "ctz", rv_codec_r, rv_fmt_rd_rs1) +OP(ctzw, "ctzw", rv_codec_r, rv_fmt_rd_rs1) OP(czero_eqz, "czero.eqz", rv_codec_r, rv_fmt_rd_rs1_rs2) OP(czero_nez, "czero.nez", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(div, "div", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(divd, "divd", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(divu, "divu", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(divud, "divud", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(divuw, "divuw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(divw, "divw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(dret, "dret", rv_codec_none, rv_fmt_none) +OP(ebreak, "ebreak", rv_codec_none, rv_fmt_none) +OP(ecall, "ecall", rv_codec_none, rv_fmt_none) +OP(fabs_d, "fabs.d", rv_codec_illegal, rv_fmt_frd_frs1) +OP(fabs_q, "fabs.q", rv_codec_illegal, rv_fmt_frd_frs1) +OP(fabs_s, "fabs.s", rv_codec_illegal, rv_fmt_frd_frs1) +OP(fadd_d, "fadd.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fadd_q, "fadd.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fadd_s, "fadd.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fclass_d, "fclass.d", rv_codec_r, rv_fmt_rd_frs1) +OP(fclass_q, "fclass.q", rv_codec_r, rv_fmt_rd_frs1) +OP(fclass_s, "fclass.s", rv_codec_r, rv_fmt_rd_frs1) OP(fcvt_bf16_s, "fcvt.bf16.s", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fcvt_d_l, "fcvt.d.l", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fcvt_d_lu, "fcvt.d.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fcvt_d_q, "fcvt.d.q", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fcvt_d_s, "fcvt.d.s", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fcvt_d_w, "fcvt.d.w", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fcvt_d_wu, "fcvt.d.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fcvt_l_d, "fcvt.l.d", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_l_q, "fcvt.l.q", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_l_s, "fcvt.l.s", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_lu_d, "fcvt.lu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_lu_q, "fcvt.lu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_lu_s, "fcvt.lu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_q_d, "fcvt.q.d", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fcvt_q_l, "fcvt.q.l", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fcvt_q_lu, "fcvt.q.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fcvt_q_s, "fcvt.q.s", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fcvt_q_w, "fcvt.q.w", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fcvt_q_wu, "fcvt.q.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1) OP(fcvt_s_bf16, "fcvt.s.bf16", rv_codec_r_m, rv_fmt_rm_frd_frs1) -OP(vfncvtbf16_f_f_w, "vfncvtbf16.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfwcvtbf16_f_f_v, "vfwcvtbf16.f.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) -OP(vfwmaccbf16_vv, "vfwmaccbf16.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) -OP(vfwmaccbf16_vf, "vfwmaccbf16.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(fcvt_s_d, "fcvt.s.d", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fcvt_s_l, "fcvt.s.l", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fcvt_s_lu, "fcvt.s.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fcvt_s_q, "fcvt.s.q", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fcvt_s_w, "fcvt.s.w", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fcvt_s_wu, "fcvt.s.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1) +OP(fcvt_w_d, "fcvt.w.d", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_w_q, "fcvt.w.q", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_w_s, "fcvt.w.s", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_wu_d, "fcvt.wu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_wu_q, "fcvt.wu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvt_wu_s, "fcvt.wu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fcvtmod_w_d, "fcvtmod.w.d", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fdiv_d, "fdiv.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fdiv_q, "fdiv.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fdiv_s, "fdiv.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fence, "fence", rv_codec_r_f, rv_fmt_pred_succ) +OP(fence_i, "fence.i", rv_codec_none, rv_fmt_none) +OP(feq_d, "feq.d", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(feq_q, "feq.q", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(feq_s, "feq.s", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fld, "fld", rv_codec_i, rv_fmt_frd_offset_rs1) +OP(fle_d, "fle.d", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fle_q, "fle.q", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fle_s, "fle.s", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fleq_d, "fleq.d", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fleq_h, "fleq.h", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fleq_q, "fleq.q", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fleq_s, "fleq.s", rv_codec_r, rv_fmt_rd_frs1_frs2) OP(flh, "flh", rv_codec_i, rv_fmt_frd_offset_rs1) -OP(fsh, "fsh", rv_codec_s, rv_fmt_frs2_offset_rs1) -OP(fmv_h_x, "fmv.h.x", rv_codec_r, rv_fmt_frd_rs1) -OP(fmv_x_h, "fmv.x.h", rv_codec_r, rv_fmt_rd_frs1) -OP(fli_s, "fli.s", rv_codec_fli, rv_fmt_fli) OP(fli_d, "fli.d", rv_codec_fli, rv_fmt_fli) -OP(fli_q, "fli.q", rv_codec_fli, rv_fmt_fli) OP(fli_h, "fli.h", rv_codec_fli, rv_fmt_fli) -OP(fminm_s, "fminm.s", rv_codec_r, rv_fmt_frd_frs1_frs2) -OP(fmaxm_s, "fmaxm.s", rv_codec_r, rv_fmt_frd_frs1_frs2) -OP(fminm_d, "fminm.d", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fli_q, "fli.q", rv_codec_fli, rv_fmt_fli) +OP(fli_s, "fli.s", rv_codec_fli, rv_fmt_fli) +OP(flq, "flq", rv_codec_i, rv_fmt_frd_offset_rs1) +OP(flt_d, "flt.d", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(flt_q, "flt.q", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(flt_s, "flt.s", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fltq_d, "fltq.d", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fltq_h, "fltq.h", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fltq_q, "fltq.q", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(fltq_s, "fltq.s", rv_codec_r, rv_fmt_rd_frs1_frs2) +OP(flw, "flw", rv_codec_i, rv_fmt_frd_offset_rs1) +OP(fmadd_d, "fmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fmadd_q, "fmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fmadd_s, "fmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fmax_d, "fmax.d", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fmax_q, "fmax.q", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fmax_s, "fmax.s", rv_codec_r, rv_fmt_frd_frs1_frs2) OP(fmaxm_d, "fmaxm.d", rv_codec_r, rv_fmt_frd_frs1_frs2) -OP(fminm_q, "fminm.q", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fmaxm_h, "fmaxm.h", rv_codec_r, rv_fmt_frd_frs1_frs2) OP(fmaxm_q, "fmaxm.q", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fmaxm_s, "fmaxm.s", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fmin_d, "fmin.d", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fmin_q, "fmin.q", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fmin_s, "fmin.s", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fminm_d, "fminm.d", rv_codec_r, rv_fmt_frd_frs1_frs2) OP(fminm_h, "fminm.h", rv_codec_r, rv_fmt_frd_frs1_frs2) -OP(fmaxm_h, "fmaxm.h", rv_codec_r, rv_fmt_frd_frs1_frs2) -OP(fround_s, "fround.s", rv_codec_r_m, rv_fmt_rm_frd_frs1) -OP(froundnx_s, "froundnx.s", rv_codec_r_m, rv_fmt_rm_frd_frs1) -OP(fround_d, "fround.d", rv_codec_r_m, rv_fmt_rm_frd_frs1) -OP(froundnx_d, "froundnx.d", rv_codec_r_m, rv_fmt_rm_frd_frs1) -OP(fround_q, "fround.q", rv_codec_r_m, rv_fmt_rm_frd_frs1) -OP(froundnx_q, "froundnx.q", rv_codec_r_m, rv_fmt_rm_frd_frs1) -OP(fround_h, "fround.h", rv_codec_r_m, rv_fmt_rm_frd_frs1) -OP(froundnx_h, "froundnx.h", rv_codec_r_m, rv_fmt_rm_frd_frs1) -OP(fcvtmod_w_d, "fcvtmod.w.d", rv_codec_r_m, rv_fmt_rm_rd_frs1) +OP(fminm_q, "fminm.q", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fminm_s, "fminm.s", rv_codec_r, rv_fmt_frd_frs1_frs2) +OP(fmsub_d, "fmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fmsub_q, "fmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fmsub_s, "fmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fmul_d, "fmul.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fmul_q, "fmul.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fmul_s, "fmul.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fmv_d, "fmv.d", rv_codec_illegal, rv_fmt_frd_frs1) +OP(fmv_d_x, "fmv.d.x", rv_codec_r, rv_fmt_frd_rs1) +OP(fmv_h_x, "fmv.h.x", rv_codec_r, rv_fmt_frd_rs1) +OP(fmv_q, "fmv.q", rv_codec_illegal, rv_fmt_frd_frs1) +OP(fmv_q_x, "fmv.q.x", rv_codec_r, rv_fmt_frd_rs1) +OP(fmv_s, "fmv.s", rv_codec_illegal, rv_fmt_frd_frs1) +OP(fmv_s_x, "fmv.s.x", rv_codec_r, rv_fmt_frd_rs1) +OP(fmv_x_d, "fmv.x.d", rv_codec_r, rv_fmt_rd_frs1) +OP(fmv_x_h, "fmv.x.h", rv_codec_r, rv_fmt_rd_frs1) +OP(fmv_x_q, "fmv.x.q", rv_codec_r, rv_fmt_rd_frs1) +OP(fmv_x_s, "fmv.x.s", rv_codec_r, rv_fmt_rd_frs1) OP(fmvh_x_d, "fmvh.x.d", rv_codec_r, rv_fmt_rd_frs1) -OP(fmvp_d_x, "fmvp.d.x", rv_codec_r, rv_fmt_frd_rs1_rs2) OP(fmvh_x_q, "fmvh.x.q", rv_codec_r, rv_fmt_rd_frs1) +OP(fmvp_d_x, "fmvp.d.x", rv_codec_r, rv_fmt_frd_rs1_rs2) OP(fmvp_q_x, "fmvp.q.x", rv_codec_r, rv_fmt_frd_rs1_rs2) -OP(fleq_s, "fleq.s", rv_codec_r, rv_fmt_rd_frs1_frs2) -OP(fltq_s, "fltq.s", rv_codec_r, rv_fmt_rd_frs1_frs2) -OP(fleq_d, "fleq.d", rv_codec_r, rv_fmt_rd_frs1_frs2) -OP(fltq_d, "fltq.d", rv_codec_r, rv_fmt_rd_frs1_frs2) -OP(fleq_q, "fleq.q", rv_codec_r, rv_fmt_rd_frs1_frs2) -OP(fltq_q, "fltq.q", rv_codec_r, rv_fmt_rd_frs1_frs2) -OP(fleq_h, "fleq.h", rv_codec_r, rv_fmt_rd_frs1_frs2) -OP(fltq_h, "fltq.h", rv_codec_r, rv_fmt_rd_frs1_frs2) -OP(vaesdf_vv, "vaesdf.vv", rv_codec_v_r, rv_fmt_vd_vs2) +OP(fneg_d, "fneg.d", rv_codec_illegal, rv_fmt_frd_frs1) +OP(fneg_q, "fneg.q", rv_codec_illegal, rv_fmt_frd_frs1) +OP(fneg_s, "fneg.s", rv_codec_illegal, rv_fmt_frd_frs1) +OP(fnmadd_d, "fnmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fnmadd_q, "fnmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fnmadd_s, "fnmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fnmsub_d, "fnmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fnmsub_q, "fnmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(fnmsub_s, "fnmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3) +OP(frcsr, "frcsr", rv_codec_i_csr, rv_fmt_rd) +OP(frflags, "frflags", rv_codec_i_csr, rv_fmt_rd) +OP(fround_d, "fround.d", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fround_h, "fround.h", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fround_q, "fround.q", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fround_s, "fround.s", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(froundnx_d, "froundnx.d", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(froundnx_h, "froundnx.h", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(froundnx_q, "froundnx.q", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(froundnx_s, "froundnx.s", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(frrm, "frrm", rv_codec_i_csr, rv_fmt_rd) +OP(fscsr, "fscsr", rv_codec_i_csr, rv_fmt_rd_rs1) +OP(fsd, "fsd", rv_codec_s, rv_fmt_frs2_offset_rs1) +OP(fsflags, "fsflags", rv_codec_i_csr, rv_fmt_rd_rs1) +OP(fsflagsi, "fsflagsi", rv_codec_i_csr, rv_fmt_rd_zimm) +OP(fsgnj_d, "fsgnj.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_d) +OP(fsgnj_q, "fsgnj.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_q) +OP(fsgnj_s, "fsgnj.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_s) +OP(fsgnjn_d, "fsgnjn.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_d) +OP(fsgnjn_q, "fsgnjn.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_q) +OP(fsgnjn_s, "fsgnjn.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_s) +OP(fsgnjx_d, "fsgnjx.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_d) +OP(fsgnjx_q, "fsgnjx.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_q) +OP(fsgnjx_s, "fsgnjx.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_s) +OP(fsh, "fsh", rv_codec_s, rv_fmt_frs2_offset_rs1) +OP(fsq, "fsq", rv_codec_s, rv_fmt_frs2_offset_rs1) +OP(fsqrt_d, "fsqrt.d", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fsqrt_q, "fsqrt.q", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fsqrt_s, "fsqrt.s", rv_codec_r_m, rv_fmt_rm_frd_frs1) +OP(fsrm, "fsrm", rv_codec_i_csr, rv_fmt_rd_rs1) +OP(fsrmi, "fsrmi", rv_codec_i_csr, rv_fmt_rd_zimm) +OP(fsub_d, "fsub.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fsub_q, "fsub.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fsub_s, "fsub.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2) +OP(fsw, "fsw", rv_codec_s, rv_fmt_frs2_offset_rs1) +OP(hret, "hret", rv_codec_none, rv_fmt_none) +OP(illegal, "illegal", rv_codec_none, rv_fmt_none) +OP(j, "j", rv_codec_illegal, rv_fmt_offset) +OP(jal, "jal", rv_codec_uj, rv_fmt_rd_offset, rvcp_jal) +OP(jal_ra, "jal", rv_codec_illegal, rv_fmt_offset) +OP(jalr, "jalr", rv_codec_i, rv_fmt_rd_rs1_offset, rvcp_jalr) +OP(jalr_ra, "jalr", rv_codec_illegal, rv_fmt_rs1) +OP(jr, "jr", rv_codec_illegal, rv_fmt_rs1, rvcp_jr) +OP(lb, "lb", rv_codec_i, rv_fmt_rd_offset_rs1) +OP(lbu, "lbu", rv_codec_i, rv_fmt_rd_offset_rs1) +OP(ld, "ld", rv_codec_i, rv_fmt_rd_offset_rs1) +OP(ldu, "ldu", rv_codec_i, rv_fmt_rd_offset_rs1) +OP(lh, "lh", rv_codec_i, rv_fmt_rd_offset_rs1) +OP(lhu, "lhu", rv_codec_i, rv_fmt_rd_offset_rs1) +OP(lpad, "lpad", rv_codec_lp, rv_fmt_imm) +OP(lq, "lq", rv_codec_i, rv_fmt_rd_offset_rs1) +OP(lr_d, "lr.d", rv_codec_r_l, rv_fmt_aqrl_rd_rs1) +OP(lr_q, "lr.q", rv_codec_r_l, rv_fmt_aqrl_rd_rs1) +OP(lr_w, "lr.w", rv_codec_r_l, rv_fmt_aqrl_rd_rs1) +OP(lui, "lui", rv_codec_u, rv_fmt_rd_uimm) +OP(lw, "lw", rv_codec_i, rv_fmt_rd_offset_rs1) +OP(lwu, "lwu", rv_codec_i, rv_fmt_rd_offset_rs1) +OP(max, "max", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(maxu, "maxu", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(min, "min", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(minu, "minu", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(mnret, "mnret", rv_codec_none, rv_fmt_none) +OP(mop_r, "mop.r", rv_codec_mop_r, rv_fmt_mop_r) +OP(mop_rr, "mop.rr", rv_codec_mop_rr, rv_fmt_mop_rr) +OP(mret, "mret", rv_codec_none, rv_fmt_none) +OP(mul, "mul", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(muld, "muld", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(mulh, "mulh", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(mulhsu, "mulhsu", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(mulhu, "mulhu", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(mulw, "mulw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(mv, "mv", rv_codec_illegal, rv_fmt_rd_rs1, rvcp_mv) +OP(neg, "neg", rv_codec_illegal, rv_fmt_rd_rs2) +OP(negw, "negw", rv_codec_illegal, rv_fmt_rd_rs2) +OP(nop, "nop", rv_codec_illegal, rv_fmt_none) +OP(not, "not", rv_codec_illegal, rv_fmt_rd_rs1) +OP(or, "or", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(orc_b, "orc.b", rv_codec_r, rv_fmt_rd_rs1) +OP(ori, "ori", rv_codec_i, rv_fmt_rd_rs1_imm) +OP(orn, "orn", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(pack, "pack", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(packh, "packh", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(packw, "packw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(rdcycle, "rdcycle", rv_codec_i_csr, rv_fmt_rd) +OP(rdcycleh, "rdcycleh", rv_codec_i_csr, rv_fmt_rd) +OP(rdinstret, "rdinstret", rv_codec_i_csr, rv_fmt_rd) +OP(rdinstreth, "rdinstreth", rv_codec_i_csr, rv_fmt_rd) +OP(rdtime, "rdtime", rv_codec_i_csr, rv_fmt_rd) +OP(rdtimeh, "rdtimeh", rv_codec_i_csr, rv_fmt_rd) +OP(rem, "rem", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(remd, "remd", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(remu, "remu", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(remud, "remud", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(remuw, "remuw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(remw, "remw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(ret, "ret", rv_codec_illegal, rv_fmt_none) +OP(rev8, "rev8", rv_codec_r, rv_fmt_rd_rs1) +OP(rol, "rol", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(rolw, "rolw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(ror, "ror", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(rori, "rori", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) +OP(roriw, "roriw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm) +OP(rorw, "rorw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sb, "sb", rv_codec_s, rv_fmt_rs2_offset_rs1) +OP(sc_d, "sc.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(sc_q, "sc.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(sc_w, "sc.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(sd, "sd", rv_codec_s, rv_fmt_rs2_offset_rs1) +OP(seqz, "seqz", rv_codec_illegal, rv_fmt_rd_rs1) +OP(sext_b, "sext.b", rv_codec_r, rv_fmt_rd_rs1) +OP(sext_h, "sext.h", rv_codec_r, rv_fmt_rd_rs1) +OP(sext_w, "sext.w", rv_codec_illegal, rv_fmt_rd_rs1) +OP(sfence_vm, "sfence.vm", rv_codec_r, rv_fmt_rs1) +OP(sfence_vma, "sfence.vma", rv_codec_r, rv_fmt_rs1_rs2) +OP(sgtz, "sgtz", rv_codec_illegal, rv_fmt_rd_rs2) +OP(sh, "sh", rv_codec_s, rv_fmt_rs2_offset_rs1) +OP(sh1add, "sh1add", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sh1add_uw, "sh1add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sh2add, "sh2add", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sh2add_uw, "sh2add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sh3add, "sh3add", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sh3add_uw, "sh3add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sha256sig0, "sha256sig0", rv_codec_r, rv_fmt_rd_rs1) +OP(sha256sig1, "sha256sig1", rv_codec_r, rv_fmt_rd_rs1) +OP(sha256sum0, "sha256sum0", rv_codec_r, rv_fmt_rd_rs1) +OP(sha256sum1, "sha256sum1", rv_codec_r, rv_fmt_rd_rs1) +OP(sha512sig0, "sha512sig0", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sha512sig0h, "sha512sig0h", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sha512sig0l, "sha512sig0l", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sha512sig1, "sha512sig1", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sha512sig1h, "sha512sig1h", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sha512sig1l, "sha512sig1l", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sha512sum0, "sha512sum0", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sha512sum0r, "sha512sum0r", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sha512sum1, "sha512sum1", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sha512sum1r, "sha512sum1r", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sll, "sll", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(slld, "slld", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(slli, "slli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) +OP(slli_uw, "slli.uw", rv_codec_i_sh6, rv_fmt_rd_rs1_imm) +OP(sllid, "sllid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm) +OP(slliw, "slliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm) +OP(sllw, "sllw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(slt, "slt", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_slt) +OP(slti, "slti", rv_codec_i, rv_fmt_rd_rs1_imm) +OP(sltiu, "sltiu", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_sltiu) +OP(sltu, "sltu", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sltu) +OP(sltz, "sltz", rv_codec_illegal, rv_fmt_rd_rs1) +OP(sm3p0, "sm3p0", rv_codec_r, rv_fmt_rd_rs1) +OP(sm3p1, "sm3p1", rv_codec_r, rv_fmt_rd_rs1) +OP(sm4ed, "sm4ed", rv_codec_k_bs, rv_fmt_rs1_rs2_bs) +OP(sm4ks, "sm4ks", rv_codec_k_bs, rv_fmt_rs1_rs2_bs) +OP(snez, "snez", rv_codec_illegal, rv_fmt_rd_rs2) +OP(sq, "sq", rv_codec_s, rv_fmt_rs2_offset_rs1) +OP(sra, "sra", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(srad, "srad", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(srai, "srai", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) +OP(sraid, "sraid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm) +OP(sraiw, "sraiw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm) +OP(sraw, "sraw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(sret, "sret", rv_codec_none, rv_fmt_none) +OP(srl, "srl", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(srld, "srld", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(srli, "srli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm) +OP(srlid, "srlid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm) +OP(srliw, "srliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm) +OP(srlw, "srlw", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(ssamoswap_d, "ssamoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(ssamoswap_w, "ssamoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) +OP(sspopchk, "sspopchk", rv_codec_r, rv_fmt_rs1) +OP(sspush, "sspush", rv_codec_r, rv_fmt_rs2) +OP(ssrdp, "ssrdp", rv_codec_r, rv_fmt_rd) +OP(sub, "sub", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sub) +OP(subd, "subd", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(subw, "subw", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_subw) +OP(sw, "sw", rv_codec_s, rv_fmt_rs2_offset_rs1) +OP(unzip, "unzip", rv_codec_r, rv_fmt_rd_rs1) +OP(uret, "uret", rv_codec_none, rv_fmt_none) +OP(vaadd_vv, "vaadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vaadd_vx, "vaadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vaaddu_vv, "vaaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vaaddu_vx, "vaaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vadc_vim, "vadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl) +OP(vadc_vvm, "vadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl) +OP(vadc_vxm, "vadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl) +OP(vadd_vi, "vadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vadd_vv, "vadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vadd_vx, "vadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) OP(vaesdf_vs, "vaesdf.vs", rv_codec_v_r, rv_fmt_vd_vs2) -OP(vaesdm_vv, "vaesdm.vv", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vaesdf_vv, "vaesdf.vv", rv_codec_v_r, rv_fmt_vd_vs2) OP(vaesdm_vs, "vaesdm.vs", rv_codec_v_r, rv_fmt_vd_vs2) -OP(vaesef_vv, "vaesef.vv", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vaesdm_vv, "vaesdm.vv", rv_codec_v_r, rv_fmt_vd_vs2) OP(vaesef_vs, "vaesef.vs", rv_codec_v_r, rv_fmt_vd_vs2) -OP(vaesem_vv, "vaesem.vv", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vaesef_vv, "vaesef.vv", rv_codec_v_r, rv_fmt_vd_vs2) OP(vaesem_vs, "vaesem.vs", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vaesem_vv, "vaesem.vv", rv_codec_v_r, rv_fmt_vd_vs2) OP(vaeskf1_vi, "vaeskf1.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm) OP(vaeskf2_vi, "vaeskf2.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm) OP(vaesz_vs, "vaesz.vs", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vand_vi, "vand.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vand_vv, "vand.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vand_vx, "vand.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) OP(vandn_vv, "vandn.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) OP(vandn_vx, "vandn.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vbrev_v, "vbrev.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vasub_vv, "vasub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vasub_vx, "vasub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vasubu_vv, "vasubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vasubu_vx, "vasubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) OP(vbrev8_v, "vbrev8.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vbrev_v, "vbrev.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) OP(vclmul_vv, "vclmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) OP(vclmul_vx, "vclmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) OP(vclmulh_vv, "vclmulh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) OP(vclmulh_vx, "vclmulh.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) OP(vclz_v, "vclz.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vcompress_vm, "vcompress.vm", rv_codec_v_r, rv_fmt_vd_vs2_vs1) +OP(vcpop_m, "vcpop.m", rv_codec_v_r, rv_fmt_rd_vs2_vm) OP(vcpop_v, "vcpop.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) OP(vctz_v, "vctz.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vdiv_vv, "vdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vdiv_vx, "vdiv.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vdivu_vv, "vdivu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vdivu_vx, "vdivu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vfadd_vf, "vfadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfadd_vv, "vfadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfclass_v, "vfclass.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfcvt_f_x_v, "vfcvt.f.x.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfcvt_f_xu_v, "vfcvt.f.xu.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfcvt_rtz_x_f_v, "vfcvt.rtz.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfcvt_rtz_xu_f_v, "vfcvt.rtz.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfcvt_x_f_v, "vfcvt.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfcvt_xu_f_v, "vfcvt.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfdiv_vf, "vfdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfdiv_vv, "vfdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfirst_m, "vfirst.m", rv_codec_v_r, rv_fmt_rd_vs2_vm) +OP(vfmacc_vf, "vfmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfmacc_vv, "vfmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfmadd_vf, "vfmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfmadd_vv, "vfmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfmax_vf, "vfmax.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfmax_vv, "vfmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfmerge_vfm, "vfmerge.vfm", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vl) +OP(vfmin_vf, "vfmin.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfmin_vv, "vfmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfmsac_vf, "vfmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfmsac_vv, "vfmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfmsub_vf, "vfmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfmsub_vv, "vfmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfmul_vf, "vfmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfmul_vv, "vfmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfmv_f_s, "vfmv.f.s", rv_codec_v_r, rv_fmt_fd_vs2) +OP(vfmv_s_f, "vfmv.s.f", rv_codec_v_r, rv_fmt_vd_fs1) +OP(vfmv_v_f, "vfmv.v.f", rv_codec_v_r, rv_fmt_vd_fs1) +OP(vfncvt_f_f_w, "vfncvt.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfncvt_f_x_w, "vfncvt.f.x.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfncvt_f_xu_w, "vfncvt.f.xu.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfncvt_rod_f_f_w, "vfncvt.rod.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfncvt_rtz_x_f_w, "vfncvt.rtz.x.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfncvt_rtz_xu_f_w, "vfncvt.rtz.xu.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfncvt_x_f_w, "vfncvt.x.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfncvt_xu_f_w, "vfncvt.xu.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfncvtbf16_f_f_w, "vfncvtbf16.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfnmacc_vf, "vfnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfnmacc_vv, "vfnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfnmadd_vf, "vfnmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfnmadd_vv, "vfnmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfnmsac_vf, "vfnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfnmsac_vv, "vfnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfnmsub_vf, "vfnmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfnmsub_vv, "vfnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfrdiv_vf, "vfrdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfrec7_v, "vfrec7.v", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vfredmax_vs, "vfredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfredmin_vs, "vfredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfredosum_vs, "vfredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfredusum_vs, "vfredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfrsqrt7_v, "vfrsqrt7.v", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vfrsub_vf, "vfrsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfsgnj_vf, "vfsgnj.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfsgnj_vv, "vfsgnj.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfsgnjn_vf, "vfsgnjn.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfsgnjn_vv, "vfsgnjn.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfsgnjx_vf, "vfsgnjx.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfsgnjx_vv, "vfsgnjx.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfslide1down_vf, "vfslide1down.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfslide1up_vf, "vfslide1up.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfsqrt_v, "vfsqrt.v", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vfsub_vf, "vfsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfsub_vv, "vfsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfwadd_vf, "vfwadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfwadd_vv, "vfwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfwadd_wf, "vfwadd.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfwadd_wv, "vfwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfwcvt_f_f_v, "vfwcvt.f.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfwcvt_f_x_v, "vfwcvt.f.x.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfwcvt_f_xu_v, "vfwcvt.f.xu.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfwcvt_rtz_x_f_v, "vfwcvt.rtz.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfwcvt_rtz_xu_f_v, "vfwcvt.rtz.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfwcvt_x_f_v, "vfwcvt.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfwcvt_xu_f_v, "vfwcvt.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfwcvtbf16_f_f_v, "vfwcvtbf16.f.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vfwmacc_vf, "vfwmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfwmacc_vv, "vfwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfwmaccbf16_vf, "vfwmaccbf16.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfwmaccbf16_vv, "vfwmaccbf16.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfwmsac_vf, "vfwmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfwmsac_vv, "vfwmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfwmul_vf, "vfwmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfwmul_vv, "vfwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfwnmacc_vf, "vfwnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfwnmacc_vv, "vfwnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfwnmsac_vf, "vfwnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm) +OP(vfwnmsac_vv, "vfwnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vfwredosum_vs, "vfwredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfwredusum_vs, "vfwredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfwsub_vf, "vfwsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfwsub_vv, "vfwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vfwsub_wf, "vfwsub.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vfwsub_wv, "vfwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) OP(vghsh_vv, "vghsh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1) OP(vgmul_vv, "vgmul.vv", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vid_v, "vid.v", rv_codec_v_r, rv_fmt_vd_vm) +OP(viota_m, "viota.m", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vl1re16_v, "vl1re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl1re32_v, "vl1re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl1re64_v, "vl1re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl1re8_v, "vl1re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl2re16_v, "vl2re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl2re32_v, "vl2re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl2re64_v, "vl2re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl2re8_v, "vl2re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl4re16_v, "vl4re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl4re32_v, "vl4re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl4re64_v, "vl4re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl4re8_v, "vl4re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl8re16_v, "vl8re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl8re32_v, "vl8re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl8re64_v, "vl8re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vl8re8_v, "vl8re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vle16_v, "vle16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vle16ff_v, "vle16ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vle32_v, "vle32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vle32ff_v, "vle32ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vle64_v, "vle64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vle64ff_v, "vle64ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vle8_v, "vle8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vle8ff_v, "vle8ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vlm_v, "vlm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vloxei16_v, "vloxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vloxei32_v, "vloxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vloxei64_v, "vloxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vloxei8_v, "vloxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vlse16_v, "vlse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) +OP(vlse32_v, "vlse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) +OP(vlse64_v, "vlse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) +OP(vlse8_v, "vlse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) +OP(vluxei16_v, "vluxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vluxei32_v, "vluxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vluxei64_v, "vluxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vluxei8_v, "vluxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vmacc_vv, "vmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vmacc_vx, "vmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) +OP(vmadc_vim, "vmadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl) +OP(vmadc_vvm, "vmadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl) +OP(vmadc_vxm, "vmadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl) +OP(vmadd_vv, "vmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vmadd_vx, "vmadd.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) +OP(vmand_mm, "vmand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmandn_mm, "vmandn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmax_vv, "vmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmax_vx, "vmax.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmaxu_vv, "vmaxu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmaxu_vx, "vmaxu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmerge_vim, "vmerge.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl) +OP(vmerge_vvm, "vmerge.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl) +OP(vmerge_vxm, "vmerge.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl) +OP(vmfeq_vf, "vmfeq.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vmfeq_vv, "vmfeq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmfge_vf, "vmfge.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vmfgt_vf, "vmfgt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vmfle_vf, "vmfle.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vmfle_vv, "vmfle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmflt_vf, "vmflt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vmflt_vv, "vmflt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmfne_vf, "vmfne.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm) +OP(vmfne_vv, "vmfne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmin_vv, "vmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmin_vx, "vmin.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vminu_vv, "vminu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vminu_vx, "vminu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmnand_mm, "vmnand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmnor_mm, "vmnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmor_mm, "vmor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmorn_mm, "vmorn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmsbc_vvm, "vmsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl) +OP(vmsbc_vxm, "vmsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl) +OP(vmsbf_m, "vmsbf.m", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vmseq_vi, "vmseq.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vmseq_vv, "vmseq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmseq_vx, "vmseq.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmsgt_vi, "vmsgt.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vmsgt_vx, "vmsgt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmsgtu_vi, "vmsgtu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vmsgtu_vx, "vmsgtu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmsif_m, "vmsif.m", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vmsle_vi, "vmsle.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vmsle_vv, "vmsle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmsle_vx, "vmsle.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmsleu_vi, "vmsleu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vmsleu_vv, "vmsleu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmsleu_vx, "vmsleu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmslt_vv, "vmslt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmslt_vx, "vmslt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmsltu_vv, "vmsltu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmsltu_vx, "vmsltu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmsne_vi, "vmsne.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vmsne_vv, "vmsne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmsne_vx, "vmsne.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmsof_m, "vmsof.m", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vmul_vv, "vmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmul_vx, "vmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmulh_vv, "vmulh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmulh_vx, "vmulh.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmulhsu_vv, "vmulhsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmulhsu_vx, "vmulhsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmulhu_vv, "vmulhu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmulhu_vx, "vmulhu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vmv1r_v, "vmv1r.v", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vmv2r_v, "vmv2r.v", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vmv4r_v, "vmv4r.v", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vmv8r_v, "vmv8r.v", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vmv_s_x, "vmv.s.x", rv_codec_v_r, rv_fmt_vd_rs1) +OP(vmv_v_i, "vmv.v.i", rv_codec_v_i, rv_fmt_vd_imm) +OP(vmv_v_v, "vmv.v.v", rv_codec_v_r, rv_fmt_vd_vs1) +OP(vmv_v_x, "vmv.v.x", rv_codec_v_r, rv_fmt_vd_rs1) +OP(vmv_x_s, "vmv.x.s", rv_codec_v_r, rv_fmt_rd_vs2) +OP(vmxnor_mm, "vmxnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vmxor_mm, "vmxor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vnclip_wi, "vnclip.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vnclip_wv, "vnclip.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vnclip_wx, "vnclip.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vnclipu_wi, "vnclipu.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vnclipu_wv, "vnclipu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vnclipu_wx, "vnclipu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vnmsac_vv, "vnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vnmsac_vx, "vnmsac.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) +OP(vnmsub_vv, "vnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vnmsub_vx, "vnmsub.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) +OP(vnsra_wi, "vnsra.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vnsra_wv, "vnsra.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vnsra_wx, "vnsra.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vnsrl_wi, "vnsrl.wi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vnsrl_wv, "vnsrl.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vnsrl_wx, "vnsrl.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vor_vi, "vor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vor_vv, "vor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vor_vx, "vor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vredand_vs, "vredand.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vredmax_vs, "vredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vredmaxu_vs, "vredmaxu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vredmin_vs, "vredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vredminu_vs, "vredminu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vredor_vs, "vredor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vredsum_vs, "vredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vredxor_vs, "vredxor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vrem_vv, "vrem.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vrem_vx, "vrem.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vremu_vv, "vremu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vremu_vx, "vremu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) OP(vrev8_v, "vrev8.v", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vrgather_vi, "vrgather.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vrgather_vv, "vrgather.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vrgather_vx, "vrgather.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vrgatherei16_vv, "vrgatherei16.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) OP(vrol_vv, "vrol.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) OP(vrol_vx, "vrol.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vror_vi, "vror.vi", rv_codec_vror_vi, rv_fmt_vd_vs2_uimm_vm) OP(vror_vv, "vror.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) OP(vror_vx, "vror.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vror_vi, "vror.vi", rv_codec_vror_vi, rv_fmt_vd_vs2_uimm_vm) +OP(vrsub_vi, "vrsub.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vrsub_vx, "vrsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vs1r_v, "vs1r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vs2r_v, "vs2r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vs4r_v, "vs4r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vs8r_v, "vs8r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vsadd_vi, "vsadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vsadd_vv, "vsadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vsadd_vx, "vsadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vsaddu_vi, "vsaddu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vsaddu_vv, "vsaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vsaddu_vx, "vsaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vsbc_vvm, "vsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl) +OP(vsbc_vxm, "vsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl) +OP(vse16_v, "vse16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vse32_v, "vse32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vse64_v, "vse64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vse8_v, "vse8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vsetivli, "vsetivli", rv_codec_vsetivli, rv_fmt_vsetivli) +OP(vsetvl, "vsetvl", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(vsetvli, "vsetvli", rv_codec_vsetvli, rv_fmt_vsetvli) +OP(vsext_vf2, "vsext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vsext_vf4, "vsext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vsext_vf8, "vsext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm) OP(vsha2ch_vv, "vsha2ch.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1) OP(vsha2cl_vv, "vsha2cl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1) OP(vsha2ms_vv, "vsha2ms.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1) +OP(vslide1down_vx, "vslide1down.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vslide1up_vx, "vslide1up.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vslidedown_vi, "vslidedown.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vslidedown_vx, "vslidedown.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vslideup_vi, "vslideup.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vslideup_vx, "vslideup.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vsll_vi, "vsll.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vsll_vv, "vsll.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vsll_vx, "vsll.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) OP(vsm3c_vi, "vsm3c.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm) OP(vsm3me_vv, "vsm3me.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1) OP(vsm4k_vi, "vsm4k.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm) -OP(vsm4r_vv, "vsm4r.vv", rv_codec_v_r, rv_fmt_vd_vs2) OP(vsm4r_vs, "vsm4r.vs", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vsm4r_vv, "vsm4r.vv", rv_codec_v_r, rv_fmt_vd_vs2) +OP(vsm_v, "vsm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm) +OP(vsmul_vv, "vsmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vsmul_vx, "vsmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vsoxei16_v, "vsoxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vsoxei32_v, "vsoxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vsoxei64_v, "vsoxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vsoxei8_v, "vsoxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vsra_vi, "vsra.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vsra_vv, "vsra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vsra_vx, "vsra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vsrl_vi, "vsrl.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vsrl_vv, "vsrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vsrl_vx, "vsrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vsse16_v, "vsse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) +OP(vsse32_v, "vsse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) +OP(vsse64_v, "vsse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) +OP(vsse8_v, "vsse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm) +OP(vssra_vi, "vssra.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vssra_vv, "vssra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vssra_vx, "vssra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vssrl_vi, "vssrl.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) +OP(vssrl_vv, "vssrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vssrl_vx, "vssrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vssub_vv, "vssub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vssub_vx, "vssub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vssubu_vv, "vssubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vssubu_vx, "vssubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vsub_vv, "vsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vsub_vx, "vsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vsuxei16_v, "vsuxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vsuxei32_v, "vsuxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vsuxei64_v, "vsuxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vsuxei8_v, "vsuxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm) +OP(vwadd_vv, "vwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwadd_vx, "vwadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwadd_wv, "vwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwadd_wx, "vwadd.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwaddu_vv, "vwaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwaddu_vx, "vwaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwaddu_wv, "vwaddu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwaddu_wx, "vwaddu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwmacc_vv, "vwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vwmacc_vx, "vwmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) +OP(vwmaccsu_vv, "vwmaccsu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vwmaccsu_vx, "vwmaccsu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) +OP(vwmaccu_vv, "vwmaccu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm) +OP(vwmaccu_vx, "vwmaccu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) +OP(vwmaccus_vx, "vwmaccus.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm) +OP(vwmul_vv, "vwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwmul_vx, "vwmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwmulsu_vv, "vwmulsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwmulsu_vx, "vwmulsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwmulu_vv, "vwmulu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwmulu_vx, "vwmulu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwredsum_vs, "vwredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwredsumu_vs, "vwredsumu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwsll_vi, "vwsll.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) OP(vwsll_vv, "vwsll.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) OP(vwsll_vx, "vwsll.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) -OP(vwsll_vi, "vwsll.vi", rv_codec_v_i_u, rv_fmt_vd_vs2_uimm_vm) -OP(amocas_w, "amocas.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amocas_d, "amocas.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amocas_q, "amocas.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(mop_r, "mop.r", rv_codec_mop_r, rv_fmt_mop_r) -OP(mop_rr, "mop.rr", rv_codec_mop_rr, rv_fmt_mop_rr) -OP(c_mop, "c.mop", rv_codec_cmop, rv_fmt_cmop) -OP(amoswap_b, "amoswap.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amoadd_b, "amoadd.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amoxor_b, "amoxor.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amoor_b, "amoor.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amoand_b, "amoand.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amomin_b, "amomin.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amomax_b, "amomax.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amominu_b, "amominu.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amomaxu_b, "amomaxu.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amoswap_h, "amoswap.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amoadd_h, "amoadd.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amoxor_h, "amoxor.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amoor_h, "amoor.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amoand_h, "amoand.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amomin_h, "amomin.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amomax_h, "amomax.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amominu_h, "amominu.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amomaxu_h, "amomaxu.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amocas_b, "amocas.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(amocas_h, "amocas.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(wrs_sto, "wrs.sto", rv_codec_none, rv_fmt_none) +OP(vwsub_vv, "vwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwsub_vx, "vwsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwsub_wv, "vwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwsub_wx, "vwsub.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwsubu_vv, "vwsubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwsubu_vx, "vwsubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vwsubu_wv, "vwsubu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vwsubu_wx, "vwsubu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vxor_vi, "vxor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm) +OP(vxor_vv, "vxor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm) +OP(vxor_vx, "vxor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm) +OP(vzext_vf2, "vzext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vzext_vf4, "vzext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(vzext_vf8, "vzext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm) +OP(wfi, "wfi", rv_codec_none, rv_fmt_none) OP(wrs_nto, "wrs.nto", rv_codec_none, rv_fmt_none) -OP(lpad, "lpad", rv_codec_lp, rv_fmt_imm) -OP(sspush, "sspush", rv_codec_r, rv_fmt_rs2) -OP(sspopchk, "sspopchk", rv_codec_r, rv_fmt_rs1) -OP(ssrdp, "ssrdp", rv_codec_r, rv_fmt_rd) -OP(ssamoswap_w, "ssamoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(ssamoswap_d, "ssamoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1) -OP(c_sspush, "c.sspush", rv_codec_cmop_ss, NULL, DECOMP(op_sspush)) -OP(c_sspopchk, "c.sspopchk", rv_codec_cmop_ss, NULL, DECOMP(op_sspopchk)) -OP(cbo_inval, "cbo.inval", rv_codec_r, rv_fmt_rs1) -OP(cbo_clean, "cbo.clean", rv_codec_r, rv_fmt_rs1) -OP(cbo_flush, "cbo.flush", rv_codec_r, rv_fmt_rs1) -OP(cbo_zero, "cbo.zero", rv_codec_r, rv_fmt_rs1) -OP(mnret, "mnret", rv_codec_none, rv_fmt_none) +OP(wrs_sto, "wrs.sto", rv_codec_none, rv_fmt_none) +OP(xnor, "xnor", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(xor, "xor", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(xori, "xori", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_xori) +OP(xperm4, "xperm4", rv_codec_r, rv_fmt_rd_rs1_rs2) +OP(xperm8, "xperm8", rv_codec_r, rv_fmt_rd_rs1) +OP(zext_h, "zext.h", rv_codec_r, rv_fmt_rd_rs1) +OP(zip, "zip", rv_codec_r, rv_fmt_rd_rs1) --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551106; cv=none; d=zohomail.com; s=zohoarc; b=FmUUHkxjh0klPaWGKO3O54cJQd4M1bgPLv0xdpg/vLfGcgEevEzpm0vJyLc4Hf/6CNKxIPCVXODHSc9LCibpl6CACH/w0fp3SEvngwBSk3vjGy5NyJW552AxHCZDtBHVA8Ylwn1oT8CjX2OumWpPsVbbZ91c1LVm0y9nfqukpVY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551106; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=SdRM7x1qzPNyHLcBH9MizyM4AFSQfbw/UNmU055a3dE=; b=JQq5h87K+XgwlUfSA67wu6VSdpDD+vXqJ347RGz/sy60sOjh6w4GUnk7uJ+c+kiwKMKBwup8Uvckm+UmDiaXCVu/YLptjsg11xE0aOVzxUo/VlPV7no7RqHkl607T8uDN9dgyzFwzkmygUfu0nG+zmDObqCKPvisL54pTcLbvWY= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551106649966.2192557441522; Sun, 23 Aug 2026 22:58:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNc5-0007ge-Lb; Mon, 24 Aug 2026 01:52:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNbw-0007Ag-Gz for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:45 -0400 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNbu-0003Aw-PX for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:44 -0400 Received: by mail-pg1-x536.google.com with SMTP id 41be03b00d2f7-c9b373d5af0so2336502a12.2 for ; Sun, 23 Aug 2026 22:52:42 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.52.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:52:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550761; x=1788155561; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=SdRM7x1qzPNyHLcBH9MizyM4AFSQfbw/UNmU055a3dE=; b=XbIJdFBf1wgDZ1FBPhgfpScGq6pVWVsbgflxdL9FtKBKE06+ou3tMxmJQXjKRgI2nJ PoS5ODnQ3sVofqrBlP6NtTfpz3IDCZquotf3W1hy/yZFVtPuTare8/WTkhvE2k1B//qY B/+81r3M2lKBO6aAFCFC4wpEIr9xEmDfyM8GliiXFjaY92Is0io11BtuegGLsIGRlpQ6 hfoXdx9qSttyCg5gFK9xrW/Tp+uYKN2ZqxZkZ1EzPKcPGqcqVsuMfB9sUpmVydTNMfqM wiK2wlMvIwUmJbmUHsDlqGb7fVS30gWgRSOZowOecHzk+CFA+HwjhfUIRLf5lzl+On7c 3H7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550761; x=1788155561; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=SdRM7x1qzPNyHLcBH9MizyM4AFSQfbw/UNmU055a3dE=; b=f04HRGvn5eQy0JJlDwswvVRM9y0V/iPho5JMuDaqgrcCP57tjbkHA2elEl2JTvU9YK xcrjEMhkhdPhBArAc54AKZqtCpssPw4MIaw3OF4A0EmjumgEHN90xCywHoq37iC0tkx1 RHKKdEp7D4mXMtcOFeSlUmM1YTtQRiLlXVCMOBiMumfWgxO5+DxRi95oegrJ91mniQE2 jZiu8piEpyRQZGcRM6HvDBENkpMUeV65mpxp1xwDBeN5fptrkftXwbanMYICi3sQefe+ pGE46wpg0nCcndt90Kqs+u1goAfnRHkvhV7ZKJeakqVMyXRZXwkKbD6NqMZ2mbfQ07XW zgaA== X-Gm-Message-State: AFuF++kFXvOlYIF1ty/fKhVOxtBmuEOZeuqGKXmvxSmNvq/51aLFCmNw 2lJwOhlAegGjoLyBGoqD1ENKLCxeVaA5eA17ePcubgaVrF6JI35NdenPZo44Rg== X-Gm-Gg: AR+sD13gchJAv+JZBzwFqsrrhpfY19jECtyMxn4t70ayDd9b3HPBfjF5HcDFCOrVb9D spLfQxO47UgOST+BHxoTWqJ6tTrEgH3z6SAdnO6qH+Beh6XbYhrP+wR1ShQobYQVbU+S3jvCt1q SOTNJ2UOyOPJL+Y8s1EMaf84WJyemrSFPXAAR2te5PlszPMiaUUWlaH1uxEYQ0IPao6ht9FA79x LLVRxnuaX3UVDmBumO5GkWmExVbUF6imIFt58F0z+WH5KDPe7N2oe68MlwUj/MCsLBASoY6aYtw zrM2sLJ8Ku4jjhM/ZAaXgFi/nJkyjMtHYp8UgmUgbT5Y/ys+a+ogBlKYS3V966Vfgar3g1ow0EJ a/SlfOL4V+NfK0ONJqXM0R2cXlRns3b5G2YfN46iZpmk8ul2tuHOfJdvV2cy4sASfxOfwW0qXnA uohZzdExz+qR1Xk/1Kmdv4ALj3VkanNHKt8VAyBLysm149zAromGy2mFT5ouhF+IwMAwJ7w3xW8 WiwgMOLYcpJ7lFl X-Received: by 2002:a17:90b:4c4d:b0:380:7688:fbe9 with SMTP id 98e67ed59e1d1-395deffbb5amr27126609a91.8.1787550761341; Sun, 23 Aug 2026 22:52:41 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: wangyang , Alistair Francis Subject: [PULL v2 86/96] target/riscv: honor zicbo* envcfg gating in linux-user mode Date: Mon, 24 Aug 2026 15:47:56 +1000 Message-ID: <20260824054806.2790041-87-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::536; envelope-from=alistair23@gmail.com; helo=mail-pg1-x536.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551109068158500 Content-Type: text/plain; charset="utf-8" From: wangyang In user-only builds check_zicbo_envcfg() skipped the envcfg check entirely (#if !defined(CONFIG_USER_ONLY)), so cbo.inval/cbo.flush/ cbo.zero retired unconditionally in linux-user even though the machine-level envcfg fields are never initialized. Give the user-mode build a senvcfg-based gate, and initialize SENVCFG_CBZE at reset when ext_zicboz is enabled so cbo.zero stays usable while cbo.inval/cbo.flush remain illegal, matching the user-mode view of a typical firmware/kernel setup. Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/4107 Reviewed-by: Alistair Francis Signed-off-by: wangyang Message-ID: <9b2f22fc402b48b8ba81f72be8ed04bc@wangyang25.otcaix.iscas.ac.cn> Signed-off-by: Alistair Francis --- target/riscv/cpu.c | 8 ++++++++ target/riscv/tcg/op_helper.c | 11 ++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index d8f239e41d..79ddde419a 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -1062,6 +1062,14 @@ static void riscv_cpu_reset_hold(Object *obj, ResetT= ype type) #else env->priv =3D PRV_U; env->senvcfg =3D 0; + /* + * Match the user-mode view of a typical firmware/kernel setup where + * cbo.zero is enabled for user mode; the CBCFE/CBIE bits stay zero, + * so the cache-management operations remain illegal in user mode. + */ + if (riscv_cpu_cfg(env)->ext_zicboz) { + env->senvcfg |=3D SENVCFG_CBZE; + } env->menvcfg =3D 0; #endif /* !CONFIG_USER_ONLY */ =20 diff --git a/target/riscv/tcg/op_helper.c b/target/riscv/tcg/op_helper.c index acdccd1a97..a7bd42d2c6 100644 --- a/target/riscv/tcg/op_helper.c +++ b/target/riscv/tcg/op_helper.c @@ -152,7 +152,16 @@ target_ulong helper_csrrw_i128(CPURISCVState *env, int= csr, static void check_zicbo_envcfg(CPURISCVState *env, target_ulong envbits, uintptr_t ra) { -#ifndef CONFIG_USER_ONLY +#if defined(CONFIG_USER_ONLY) + /* + * linux-user: the machine-level envcfg fields are not part of the + * user-mode environment; only the user-mode view of the enabling + * bits (senvcfg, as initialized for the guest) applies. + */ + if (!get_field(env->senvcfg, envbits)) { + riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, ra); + } +#else if ((env->priv < PRV_M) && !get_field(env->menvcfg, envbits)) { riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, ra); } --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550889; cv=none; d=zohomail.com; s=zohoarc; b=JPRuX7nSjIQ+puWGxWlcjI8jPaQlQ8ipMV+r09ErfAn/3tLi+nbvgnO80qlZef2vQwNktIGJxRgKBoCtAmLimVHwAnSy8X4qVWxFXw86Y4IaiWdcRNHu3etS8CcLjzH9gz5eZiRuAO67MtNUtpK+rtVLleg5B35DLhHmqsMuhD0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550889; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=v1HHSGb013dDgNPZxkNVb6ZLlCJeWWRoZwdE2wte10s=; b=CVdWuQuwVL2u9hAYZSq5dFsQEaNGQL1mnJ8WxKunlTe/aypdQVVvXZJJ/gf5wIKrKeXcU8l7ISZ2K+v8Ku70Y1QbV9ADpIHKQ97O0927AxKjGoIm2xRiMlfE5WgKr0V8pDo2VqFv4/7FrncZAzxL6OxkBtmrU2Sn0sDYbTH8/HU= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550889004302.18877657468033; Sun, 23 Aug 2026 22:54:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNcA-0008Nv-Fj; Mon, 24 Aug 2026 01:52:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNbz-0007Jz-Dp for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:47 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNbx-0003BP-NO for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:47 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-38e347638adso2732199a91.0 for ; Sun, 23 Aug 2026 22:52:45 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.52.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:52:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550764; x=1788155564; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=v1HHSGb013dDgNPZxkNVb6ZLlCJeWWRoZwdE2wte10s=; b=piarGNHjD1sQK6CB9Oa8u293NR9PkC/RSu/jrq4rEg0ASObRGxtIBIxiuJKNquRX3K H0vkrEeaVD4VLXobj8rJynJT2iy6eXkO8+tREG0TbJiq8alm5PzNTg3TR25ZJJ7joAtA 3DgZ5lilXv5zePQ2dYcqNaRTqldtdTOCnt0qBVhHpH5XuhmDzbBg8sIhNsw6oR3xyYDt YN3UctFRtMj+bkC+537R8+i5w8C7AAttDbGcVZuMglWgVVXo71WXZztpbppqZYc5mytg pexdv2v1q0jorFFFFE/2mmOL/ohiS5ywY1xbQ8ocvgFaNEsw1GBSPPxFT3xcOunS70wa YGyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550764; x=1788155564; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=v1HHSGb013dDgNPZxkNVb6ZLlCJeWWRoZwdE2wte10s=; b=ai6Bgpfs8+V1HneWrC5KOe0Kd1rysgI4toiggjd8ymhaM7Q2+udUAvRZ8C3KcQVjaf 3rTr0dBLpEe4gZ7z830vjla3mmIq0/Q5LfX4N3JKE6/mXE1UGy0L1GEgWwb1K1d5eOdK DzpZB+eYWWG7UzfW4TxWvcJVeXM1W9IfKwuKeKyP8MG/Xr1sA9QpF0fUSMvP30ZGwct8 fZ2ElwLCzqtqCsg2LQWKER9D2dgXR9f+epXVyfBqTG1s4IYCMU6uzqOePK2sZdP0ikM1 9Rf5AY95fK8h+Eh/N5QfVueSd7h7eJ8inin4jPWA9sEdEoSUcMMObLpXo1onp4Xz+y4/ FSsQ== X-Gm-Message-State: AFuF++nheSH9VD8m1SrkvQAFvqlED7cQhNgj7eyWSKaiXFpV1+753PDy W7dcfPuTIcH+8pslU5ZU/mIapOQ2BCuflNeeK4O/+/j0FFy2ySzTjfkGCXoxTg== X-Gm-Gg: AR+sD11O7IjnMI9uT2c0ebac7tiTA+jGTzEOxk9jg5nv5WnxEsSD6V/6ofQzye91H7U bFDvzs2+2j/7b1SyrPNvdOOpZ/J8m46/uIRi2YIUdMw/qdTadixiVEXjrtUn+6qEL78wq+iQIb5 Lvu4DsuQZ37vgKBhHcaG/ZlC/zNx3RHccPNfVyAyw2MvIZD3jna85qyg9jG2SsV5riLZuAGvB0x N5D/gJYPiXSMcl1LJN/2PUwr8oL5FV4DtHsMNsQQmlDtmY8BrRQJ7gbcrrC774rZiI5uzfkJTK0 qq1YjkSCvmp71NAfD/j9ZLE9amjUDlbyOYP75Gtf3HAo2Z6od2XFTVRstmspJNaslZrsxJSUF8J v+VEH9bumbck4OSazAjennGuH6ozbbWbChR/+ykVKfgJHDDdePj2vwbAp3z93tucH9z3/by2niK 5x0f88X+AECbXtw2GUetnXTavlWxvTpAt1ZPTfTGFgLwm2lUW9oTGOzd+8DBp/7kTJ67pvdwoR+ jLQLw== X-Received: by 2002:a17:90b:538f:b0:38e:b400:a860 with SMTP id 98e67ed59e1d1-395df29e128mr30347283a91.13.1787550764470; Sun, 23 Aug 2026 22:52:44 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: wangyang , Alistair Francis Subject: [PULL v2 87/96] target/riscv: reject FMV.X.W/FMV.W.X under Zfinx Date: Mon, 24 Aug 2026 15:47:57 +1000 Message-ID: <20260824054806.2790041-88-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102a; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102a.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550890071158500 Content-Type: text/plain; charset="utf-8" From: wangyang Zfinx explicitly excludes the FMV transfer instructions, but trans_fmv_x_w/trans_fmv_w_x used REQUIRE_ZFINX_OR_F so a Zfinx-only CPU accepted them. Require RVF instead so the transfers trap with an illegal instruction when only Zfinx is present. Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/4108 Reviewed-by: Alistair Francis Signed-off-by: wangyang Message-ID: <36c7cfebd27b4b6e8bcdd00e09e9dda0@wangyang25.otcaix.iscas.ac.cn> Signed-off-by: Alistair Francis --- target/riscv/tcg/insn_trans/trans_rvf.c.inc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/target/riscv/tcg/insn_trans/trans_rvf.c.inc b/target/riscv/tcg= /insn_trans/trans_rvf.c.inc index 481f7282da..636dec1664 100644 --- a/target/riscv/tcg/insn_trans/trans_rvf.c.inc +++ b/target/riscv/tcg/insn_trans/trans_rvf.c.inc @@ -434,7 +434,8 @@ static bool trans_fmv_x_w(DisasContext *ctx, arg_fmv_x_= w *a) { /* NOTE: This was FMV.X.S in an earlier version of the ISA spec! */ REQUIRE_FPU; - REQUIRE_ZFINX_OR_F(ctx); + /* Zfinx explicitly excludes the FMV transfer instructions. */ + REQUIRE_EXT(ctx, RVF); =20 TCGv dest =3D dest_gpr(ctx, a->rd); TCGv_i64 src1 =3D get_fpr_hs(ctx, a->rs1); @@ -537,7 +538,8 @@ static bool trans_fmv_w_x(DisasContext *ctx, arg_fmv_w_= x *a) { /* NOTE: This was FMV.S.X in an earlier version of the ISA spec! */ REQUIRE_FPU; - REQUIRE_ZFINX_OR_F(ctx); + /* Zfinx explicitly excludes the FMV transfer instructions. */ + REQUIRE_EXT(ctx, RVF); =20 TCGv_i64 dest =3D dest_fpr(ctx, a->rd); TCGv src =3D get_gpr(ctx, a->rs1, EXT_ZERO); --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550856; cv=none; d=zohomail.com; s=zohoarc; b=DouMoWnXhrxsT/jUNkX9ACcbi19M8u7e/E9/2ExFbDfbW5DTMI7ubIWriELHJ+9giEpGZhxMD3qiP1x1yt1/znzCojBKJZPJ78eDIhxlRcVMIdWFeQRFh3Og+Xj4jO+jGlSCOHizlvd/gEJyeRW2RkCupzfhPmkUmn6f3DqB0fo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550856; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=aHib+VBpVmiPANdQmekp+Cwzw4eMIzE03qptIJvCC3Q=; b=O+U+mHITr+TF5+eYk33ZyhKibFfsyXC1YfXDzpww/QQaU1LKl0w2uA/fhLbvT9zTYhgkPfUFIQu5lCZu4xR7F1XHunjpY2G4zpt/nYyQjCiwHmbjQaNnHpJUAy2IDPXvh+RSQdef2zHD8LzxrmZjkHbR4DImcUW0DSo9Hj2vqkA= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550856465765.6193291309479; Sun, 23 Aug 2026 22:54:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNcA-0008OE-Fe; Mon, 24 Aug 2026 01:52:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNc2-0007Tc-Dl for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:50 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNc0-0003Bx-Le for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:50 -0400 Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-38511175ad3so2886238a91.2 for ; Sun, 23 Aug 2026 22:52:48 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.52.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:52:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550767; x=1788155567; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=aHib+VBpVmiPANdQmekp+Cwzw4eMIzE03qptIJvCC3Q=; b=RX6b8RtEpwYVRvsJ49ZMPZfBW+lT5OEEGrbyI2RDPxEooGT8Yvn61K3D1/Ns4R4/dQ s8yp5Pchuot2p4v6N+m0fBU7u0H3ptGuCLhVy54WHgJtMIIxX7qPwwr6T7NhalmMEgYw GjG42taiCjmPAli97gGKlmG4tATyD28RfK7SUZF8TpCthJrsQfJqloR1uFBKc9wmLOuY O0EBgtLKDv5aSN+IxMe8scdKWbiKAALcexHv85mZL/7AcAIoycHzniZscnRLev8ISG82 k0xgUz9P10xJF0R5mBfRsfhVYKKRoMH8OBSqyxBcSZpOrZZNT08FI13KOtGWTdiLZ5Dn vZLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550767; x=1788155567; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=aHib+VBpVmiPANdQmekp+Cwzw4eMIzE03qptIJvCC3Q=; b=HPZjLqzMkIohg0y4J0E6ud2GeVxYuacj0OCFok4M/i78ZOitm8e75T8EWW0tFZA6uT QUh+DAaYwTjUOWM8P4lI4/sUO6yCN+QwIzHMTY/YfDYmDQiHuKmg3wV3Ar7KpUf8iPSF oPPVBwXd0qtB/X91VTjNr78KTfwQauQG8JVWMoxKAFPuQ5yYQxxPVSfKUo1i25b7w/5Y qpeW5iO+SqEHmX2j97pRA0U7OnVsX9kI0veWv3LHSZH3zAoTxpdodgTLCTksUAVqfjtA GrCeyxtzXSZNyUmFiPhxhqCrcuN7EmNFiaJrEgwIBVEAndus2krOKUbJwISZqy7YNQhY VYrA== X-Gm-Message-State: AFuF++kWJjP4lxi9Pwnk+fVbCqwpoDnVMoIIHGUPhE1W793Yw/4t4FbI hKXrqh0B1dIvjwXXp/hcWEKwZFmhgfpOv+lvzqoDoYlufw6c+gngmZEbHJWJ9w== X-Gm-Gg: AR+sD11FXSd3YyUQbqvXw7M2ENssw4vpP0nG5EseTpQjmzpIa6sbhH5AVrt0ZmGeD3s EFpsHu4koGynN6vxtp2JvlLaeiaMW7QfU0MSPICP/wxOTgPljwvTOTgkfK+RPJsxIGpRvphaT2G oZEoo1c9IJdht/NVteP5/P0as2xDowbrF+iKtiVQcoKOnyzprx2RLHAgcN4TVpih5EhCoEjy7uo hX3KNx0/pFAKim/9bmxBXo9QpCCebBSmYzUz30mBvC/X64CHUuMRcBGgDRQFqmsWbg6WfduD1Ez CysGH48Be7cWg7Ly21xxBFX1Aj2LLgItSBLnyg1i40q+bwW4vV1qqrUmyZwAd/QkJ4qPB2UFRvN 3TteSVdTEukH1bYDhse9AQfCHRskJwbM0vJAYNYpAanXOzHWrU+pQ5dxBMngNEaiuQKzcnIgAp/ GSfaSR9E87jwuXrfmkJPjFgdN3cMPi07Aek69byAgPLl0vEid8eIf4Y/3VxMPjHKqx+v0JUNTOJ /85pg== X-Received: by 2002:a17:90b:1c90:b0:393:19a3:4f1 with SMTP id 98e67ed59e1d1-395c351d788mr41514235a91.6.1787550767386; Sun, 23 Aug 2026 22:52:47 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: wangyang , Alistair Francis Subject: [PULL v2 88/96] target/riscv: enforce even register constraints for Zdinx fcvt pairs Date: Mon, 24 Aug 2026 15:47:58 +1000 Message-ID: <20260824054806.2790041-89-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1031; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1031.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550858656158500 Content-Type: text/plain; charset="utf-8" From: wangyang fcvt.d.h and fcvt.h.d access a 64-bit double held in a register pair, so under Zdinx/Zhinxmin the odd-rd (fcvt.d.h) and odd-rs1 (fcvt.h.d) encodings are reserved. Add the missing REQUIRE_EVEN checks so those encodings raise an illegal-instruction exception instead of retiring. Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/4109 Reviewed-by: Alistair Francis Signed-off-by: wangyang Message-ID: Signed-off-by: Alistair Francis --- target/riscv/tcg/insn_trans/trans_rvzfh.c.inc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/target/riscv/tcg/insn_trans/trans_rvzfh.c.inc b/target/riscv/t= cg/insn_trans/trans_rvzfh.c.inc index 88711fb076..b17ef9541c 100644 --- a/target/riscv/tcg/insn_trans/trans_rvzfh.c.inc +++ b/target/riscv/tcg/insn_trans/trans_rvzfh.c.inc @@ -419,6 +419,7 @@ static bool trans_fcvt_d_h(DisasContext *ctx, arg_fcvt_= d_h *a) REQUIRE_FPU; REQUIRE_ZFHMIN_OR_ZHINXMIN(ctx); REQUIRE_ZDINX_OR_D(ctx); + REQUIRE_EVEN(ctx, a->rd); =20 TCGv_i64 dest =3D dest_fpr(ctx, a->rd); TCGv_i64 src1 =3D get_fpr_hs(ctx, a->rs1); @@ -453,6 +454,7 @@ static bool trans_fcvt_h_d(DisasContext *ctx, arg_fcvt_= h_d *a) REQUIRE_FPU; REQUIRE_ZFHMIN_OR_ZHINXMIN(ctx); REQUIRE_ZDINX_OR_D(ctx); + REQUIRE_EVEN(ctx, a->rs1); =20 TCGv_i64 dest =3D dest_fpr(ctx, a->rd); TCGv_i64 src1 =3D get_fpr_d(ctx, a->rs1); --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550875; cv=none; d=zohomail.com; s=zohoarc; b=IxuPHEijHLCmECcnupaUof3TrHoeCJ9wtI3Qw3k0LCkX/DV8d28eqhd/dwcj4djOFsQXMGwUdWa+r+MWsq/Mh1F8NEzn0cAFhD3dyNLAk7GGRhVDyaSAMDioCS6wxkunXdIiMU0ckUPOCxCnIMeLOrUNNbcnbTNTPF2Qi9ussSI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550875; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=2bo/j1CDuuQMd0oLr1kU7Y1aV/gYiZ5tDVaJf2ZCz7I=; b=oF+wltcvxCmeTqP/NCzFu0l2PYa6BQ4jCrscyeWroOYZt8hUGsJI4+7jMPMWiauG5lT4qvIDqwwb4iEERyy4oqUGxm0xHd+gbNiGk26KotvQVjT/2HYCzUK/xFwppU11bHvkJnUVWbsdfa64+nGUDLO8tAk0pkIR8VVPWH8fhtQ= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550875500348.2327451108903; Sun, 23 Aug 2026 22:54:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNcD-0000IH-6k; Mon, 24 Aug 2026 01:53:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNc5-0007gi-Id for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:53 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNc3-0003Ca-Uv for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:53 -0400 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-38d489b6b71so3409547a91.0 for ; Sun, 23 Aug 2026 22:52:51 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.52.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:52:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550771; x=1788155571; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=2bo/j1CDuuQMd0oLr1kU7Y1aV/gYiZ5tDVaJf2ZCz7I=; b=ZeVuD2vTdHxJM+2FLd10WPNG7bMjSXmTUT7eRzbfAi2J+rtMTyzAbqc7jAHWjDLT7t Ax1UtOlfnPxM12f8XC7pFxGjW6hA4MCXOtGcaSctFCYdo/CT1zPIkj4jpP0lAUycqhyj O0UNzwI0pHGefS9YQjDJMMeWJlnS4v4lnahEkNVWoJVLMDBBeaJWbr33qc2PyXucJDr1 MAkF7zl7WmcyhPPcuLKTLyLYa/j2NK1B9JpeKpiqAiv8oe7Ov/PNJgGYl0+BvWxnlnXw 5aG+IhETbMiA9CpAhV+NUNYJ+t6O520MfL76TQH374YvhxDndoXbUnTNQqtbieHpv+L1 B7IA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550771; x=1788155571; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=2bo/j1CDuuQMd0oLr1kU7Y1aV/gYiZ5tDVaJf2ZCz7I=; b=HaKuX3gdqYGj2owoXTQXezJelAiLaXKiqTuyxwEVRMtN9OSi5bcbDv+qpDopiVdHqJ miTGErg9Pl14KljQ+K/WletY1HJ6n5F1gqIZdtutNpPxdKhzPcBDWM/zAPhihpJqBzHF UIRnP4aZ5l7UQUJtRVU4kH3VSzm6W0MCPX5mM3RBrgy0EBTqgYK8Ml2nIg1ScDU5xc0n HSsjUPC0i2DC5lwvbOxe+r2V/SZ1wZLsbD6yqwNTyEgor/gAfWjZpm+H9/2bXD/gtqTM LC+geWsUNyc3PC8J7KNPaMJNIkUjtBH6F5YOu8AVw1v9sGlpavtZqZbttDy2vqCgAC0h 5UhA== X-Gm-Message-State: AFuF++n0tdcz+o/HXBkZ91CiFCV8dWSKenjD/P5Ur2g0BOMawM/kuk28 LJiIOWs/bnk6rzsgH5Pp0IGVXYgVSxte80gprjj+V1Oja7l84tP8owqUGIlRkQ== X-Gm-Gg: AR+sD13ETPs+q5Mv7ml0Vs96Xagfs/juxwFEgxTro8A4guAULoZwMObZ4D0bwTaXina Bd4DosDPSARjNSxltNqMW8QSTL+AIe4nyz+xUVU+77WnLzPipIPx/yksQAfbdg5PAkFz5dcY8PN zEIRUNf29Zfbqe90fUJuLlxDSV4l9P94S3pYL6j9Fjcb4XS1n8uxr3+uJ0dRMGl+5KjPGFWXmaQ vcLgZR1Sxc1HO7PF5fhuTwjchN8NDQbE/pGPk88K37pLjWLO2zP3igzOsFbp01V0MF0ZFVqdfyC +/srW3WzMjgVXUNzQ+145TODUhna9ngrZmmxXeHZ7cgcrxNcVxQOVia+zst4e6O+4Qkj2V8xOSw 8Y0eVL+DiZFx9fUS/L1IJIP+lgOj0+CTcLsAVfRlvjVUgMofPaKqWhWea0YRth0kQ2yJRPs5F2E cjPfk1X3s/GtgMWUQ5uyfsPJEU3V2oVDmJtCEZXfSlqUaC1jRyIo2OU+Za2kSaaedBqNiF8b63W H3F3Q== X-Received: by 2002:a17:90b:4f91:b0:381:6c5:3f63 with SMTP id 98e67ed59e1d1-395c33a6e92mr40631985a91.6.1787550770554; Sun, 23 Aug 2026 22:52:50 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Chao Liu , Bin Meng , Alistair Francis Subject: [PULL v2 89/96] tests/qtest: remove trace output from k230 watchdog test Date: Mon, 24 Aug 2026 15:47:59 +1000 Message-ID: <20260824054806.2790041-90-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1034; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1034.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550875772158500 Content-Type: text/plain; charset="utf-8" From: Chao Liu The interrupt mode test does not depend on trace output, but passes a trace file to QEMU. This makes startup fail when QEMU is built without the log or simple trace backend, so qtest cannot connect. Drop the unnecessary trace option. Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/4126 Signed-off-by: Chao Liu Reviewed-by: Bin Meng Message-ID: <20260813054329.35425-1-chao.liu@processmission.com> Signed-off-by: Alistair Francis --- tests/qtest/k230-wdt-test.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/qtest/k230-wdt-test.c b/tests/qtest/k230-wdt-test.c index c8eaeaf1ae..b1131f42e3 100644 --- a/tests/qtest/k230-wdt-test.c +++ b/tests/qtest/k230-wdt-test.c @@ -76,7 +76,7 @@ static void test_counter_restart(void) =20 static void test_interrupt_mode(void) { - QTestState *qts =3D qtest_init("-machine k230 --trace k230_*,file=3Dk2= 30.log"); + QTestState *qts =3D qtest_init("-machine k230"); =20 /* Set interrupt mode and enable watchdog */ qtest_writel(qts, WDT_BASE + K230_WDT_CR, --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550912; cv=none; d=zohomail.com; s=zohoarc; b=D62C+4YtTqReRwjgjwFZZXvPopmjM0k0PEVskuzX0EwI6I3Myn8+xm+djq/0eW6sO70ZrtbllAsRbkEA3bHu5Ri1jkXavTTZ75cbz/fDu+euf42ft15jtWHzvqinwhOprsmDRcuM7mnh36N04XGX38ka0bMVr5zO/QJkqZIsWRY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550912; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Xa78VJXkRTr/R10IbacHsImvODmXgVktvTMEhHcpiSY=; b=jwknQpWQMa4mw7QqSRF17F/Nr1cTHh5GupzxgsbWpzCoGzPh4bZWBWS9iTK115c8ro2AVUKCpvWci8aoPObRk5+p+s54WauP8yLeV5JU9nvcj9/Km7+EvNUVKui6eYn4J738qDY1Lu606WFVOK20+8eCvsVhCzMHBmo6kEpPgiw= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550912555345.25884108231696; Sun, 23 Aug 2026 22:55:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNcE-0000XK-77; Mon, 24 Aug 2026 01:53:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNc9-0008J1-NT for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:57 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNc8-0003Ex-2e for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:52:57 -0400 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-2cf452def93so28805405ad.1 for ; Sun, 23 Aug 2026 22:52:55 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.52.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:52:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550775; x=1788155575; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Xa78VJXkRTr/R10IbacHsImvODmXgVktvTMEhHcpiSY=; b=pei0Sc3AJwGyRG4Mn1D1BlwzcCQTUlk/xFS/AIC3CDPgKsliAUTqJoLV6ndsSgktnG MqcRhfjqsm3ohgylya+t0djSlfTLDrbmYHIkmzC7QN5q144sINKXCMXRTH2uwbn1zWEN XmHYe8AXoELVKjle//9OV+bZBK+aZUcSc8WkONsuR/yIDdY20T9tqCfsDXbUHUgxuAcp +si8UzaNMZOBKq0KpKOozDiRamG09GXlZFmYLkkLInHBsB45WdfpCris0kjoKEHJXml0 3+oipxjyezo4Ixfa87dVlBpPgL18nBCY83VMsH53hrxkDQLYsqo6YivObfh1D9yW/ouk kp5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550775; x=1788155575; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Xa78VJXkRTr/R10IbacHsImvODmXgVktvTMEhHcpiSY=; b=LV3EXVaZYRPROm8Kqg9ZQN6rP/B7iFG3uQxVcSynzZi9mylkYhPfubtf4yIvhdhLMx 6Kp+h2IyWU6diSnk5nX4LXx6DZtcqIRzA14Xu3wcDBeW0+ZolBpmD31U9zoPXDqmdnCr F897WXjC+5XjCol6q9clqtPfaifE5d9gKNL7w0ikDe5BlbAGY2zZxPOOoKpZGIbJn9jW fUorkgNc9NyPUqXX7oWShxvgMm7O8s/ECngPUcwC3iq3CY8mSx1Pkyp4eGWd7I5GAYWl q6GRLVCvWKCGHe+X7P988wZlbxrXy4rPOD4ZCzPXl21LmBR3jGXNc1pGQYJpcJ5xVjBU PEIg== X-Gm-Message-State: AFuF++nVU5x/iUM0XbfSezwQzuUV1x26id1+Do5Nwi94reZnnAluLchn FBfWGjCjy7Q4qZEGrkc1G60eJm/1sV89QnE+lRRpTvRsCb09cHd94a0Kz4Ypeg== X-Gm-Gg: AR+sD12MLte6NpZe0UhCjxYrfngdt0ZOjH3aXFTQ2T790M6S0aKUBBvBIjneGJ4/2iB LquM/Qwt1It2mZ8aHhlUyMrz/nuTAm9j9P8F5I62G6GUUco4QRUNLvJpwis+K4QOWpEKAy6jXpK dTxmkzpBRlYpvsjXe3MWAL+4kxKRhoz5P/syP7Z7Qh33IkA5oSXzMd6G9SzU4zwUZBzTI/owRo4 Rh3moEDQyG80JPL2/Orhn12no1SDMj1J8Zx+hz6gNgfiYdFMu6QG9AaSXPbE/IQSdM0VicJwDjD mtk4i936s7uG6xXReY8XLyWu+zR2qAdB/+d1eIv6VFYjiMmannmLmXsHc8Gg6Tvc7DaTxIPBfRS 1tOA84bjMqLzuQ9717X/S/qugN2Ur3Rnks/6ZGHjzRIaCZSoNOi+HO6NzKFrRygc2iTOgCj762L k+maRqYU+6Lr+adpEAQaYevGErfZg+QyqUbM+NgbyqEhqhhkD62tqUwaeVVQoEt2sk5kIgQDy8h 7BivAbO2WbPjfce2eFDabqJRphg X-Received: by 2002:a17:90b:2e4b:b0:38f:de94:bf34 with SMTP id 98e67ed59e1d1-395c514b5cbmr22308232a91.10.1787550774750; Sun, 23 Aug 2026 22:52:54 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Joel Stanley , Anton Johansson , Max Chou , Alistair Francis Subject: [PULL v2 90/96] target/riscv: Restore register dump zero padding Date: Mon, 24 Aug 2026 15:48:00 +1000 Message-ID: <20260824054806.2790041-91-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=alistair23@gmail.com; helo=mail-pl1-x629.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550914449158500 Content-Type: text/plain; charset="utf-8" From: Joel Stanley The register values lost their leading zeroes when the underlying type was changed, resulting in mismatched padding and harder to read output. Print with a runtime field width based on MXL, so values are 16 hex digits on rv64 and 8 on rv32, matching the csr and fp dump. This avoids adding target_ulong back into the dump. Fixes: c4e6bc63853c ("target/riscv: Fix size of gpr and gprh") Signed-off-by: Joel Stanley Reviewed-by: Anton Johansson Reviewed-by: Max Chou Message-ID: <20260813032421.54438-1-joel@jms.id.au> Signed-off-by: Alistair Francis --- target/riscv/cpu.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 79ddde419a..a13177b7b7 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -651,6 +651,9 @@ static void riscv_cpu_dump_state(CPUState *cs, FILE *f,= int flags) { RISCVCPU *cpu =3D RISCV_CPU(cs); CPURISCVState *env =3D &cpu->env; + bool rv32 =3D riscv_cpu_is_32bit(cpu); + int width =3D rv32 ? 8 : 16; + uint64_t mask =3D rv32 ? UINT32_MAX : UINT64_MAX; int i, j; uint8_t *p; =20 @@ -665,7 +668,7 @@ static void riscv_cpu_dump_state(CPUState *cs, FILE *f,= int flags) qemu_fprintf(f, " %-13s %d\n", "elp", env->elp); } #endif - qemu_fprintf(f, " %-13s %" PRIx64 "\n", "pc", env->pc); + qemu_fprintf(f, " %-13s %0*" PRIx64 "\n", "pc", width, env->pc & mask); #if defined(CONFIG_TCG) && !defined(CONFIG_USER_ONLY) for (i =3D 0; i < ARRAY_SIZE(csr_ops); i++) { int csrno =3D i; @@ -692,8 +695,8 @@ static void riscv_cpu_dump_state(CPUState *cs, FILE *f,= int flags) #endif =20 for (i =3D 0; i < 32; i++) { - qemu_fprintf(f, " %-8s %" PRIx64, - riscv_int_regnames[i], env->gpr[i]); + qemu_fprintf(f, " %-8s %0*" PRIx64, + riscv_int_regnames[i], width, env->gpr[i] & mask); if ((i & 3) =3D=3D 3) { qemu_fprintf(f, "\n"); } --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550843; cv=none; d=zohomail.com; s=zohoarc; b=V/KWhFVdy1Yge1spae9mhHnMv/4fhL8+z6fjTfQqAtlhK8qIM8PU4flSa8hkqcfAHAmJwLaWCU2Kc20Xa+fOad7EyKXFFNeN6olKunSJVvkWegN/p8/zGhNcyZfeHpEkSn95+JGigtMPbDAJf9ShwwSdY4Ixdy7HtH93s8qBbD0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550843; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=fHznkkcv3gS+qybKIUYty1mKyqPU0IGiBPNOFxV3iB0=; b=Ll2zQbANqQF082mnyDgaXe8+T138L1zYeTKeg4/zmo0gOyW6vbCGkP5FLWeVBgpg4VB14OueCyueR22dnbt943Uvh8y9ijbF18NQvFOEqoMMa7OSo1EXA68AVOl5Q78IS/yUncMzPqejkBCdkOuDdAkRZHVWlGxMaKU8bAUJC+E= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550843925782.3454113082323; Sun, 23 Aug 2026 22:54:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNcF-0000gs-SO; Mon, 24 Aug 2026 01:53:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNcD-0000WU-SA for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:53:01 -0400 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNcC-0003Fz-6m for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:53:01 -0400 Received: by mail-pj1-x102c.google.com with SMTP id 98e67ed59e1d1-38f0f132f56so2956531a91.0 for ; Sun, 23 Aug 2026 22:52:59 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.52.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:52:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550779; x=1788155579; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=fHznkkcv3gS+qybKIUYty1mKyqPU0IGiBPNOFxV3iB0=; b=hBhT0x69rrs6rMMidzWNqp8GzBbzWx11ztB0oCabGP3K7g94q+ikkzzAgn8/lP10yd Zvk8jLWCA3abZkShiBs80+7luvIV2nehQU17SHAx0BmdeoUzlwWuiZOQozTH22/VozMP SKMZcwaut+HsPxgmVR+8CYCzRwyR/7Ix7/Nqb1Zs5etppCDnrYJ7jdNY68n4OnvbZj78 qYX3rI/pFffsPmyxLbPJXw/E6hRo0+oyV/ZX089sMzstpFM7K+dpDjOaj09glffx7TXt +k7RMl9t8ROESj7e9Xp/L0lFfrnMmDMY60m/qKGqWOFGBZ5ODmpU2GaKzyusOwlNezZl +pvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550779; x=1788155579; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=fHznkkcv3gS+qybKIUYty1mKyqPU0IGiBPNOFxV3iB0=; b=r+P3kiDGfGpcANQNbrv5wpY9W3oXCms23ct77/rAf93xR4ReZZdPJcYDG3SbwOLnzq e8wKhIYEmphTGIAHpnzIlNOq2uDi6XmMJu/GObaFSauaNpqr4XBecL/efo14sqgclTDW nHAUtQBQc6/+TJeRwRP43o3EJPTcPhOwvcfIpxwQswcvbrrJAxk1/9LBr/YUrL7UeFON Gtr/NMH6NaPdDWniAr5masFYklLnlZzHe4hNDzoWpgpwkrAhJWOkHM1RNqubJjrubY3i H12jo0Ee6KPATaCBZ9kLWwypndOIzO1dEg730aG7CkJd6pUPVm4M7/FBc2QKMzAqVN3l t/jg== X-Gm-Message-State: AFuF++k/M8Q7bEQ+0g5bmq8KZ+ib0T8e4ym0BUGJazmLCmZGeLdqB/S2 qneuKVbW39CbdapQqzVORmEJsQT/PG6qENgDhZfqv1mQNDyK98ue4MsJlSA32g== X-Gm-Gg: AR+sD12uXsKQcl7tp7Dq3XbakgZyDjf9rHx4PYDHIUApj+vsLYovIcbplvBQk5FH1up MvJIalBVYlXbyeWOvxuZomf/D539ch5K2G59dj1JJrKCCXFxBPEKPEdVMXEizO0LeYh/YhkB7A7 ktEiTYBZpmj4hFSUowT4utVnfhAMtT2Mmib8mcxEYjeAnl79PJO1+qDZ5EJyNhGL0mT/MA4DBCG fkiVfTNo4vq9yGvQDZBoSiMHwv0nI405Wwbj2NWbulkgumJDNTD2YB4IQDZNO8NvDgLGQtckcWe d1cRJSJT4eAkpbx8tzcCZGpVkeks3txIq0jCzlpMyzgzurNw2q1jgiadWBVX3gPdjrBoj0dMUqM /v6+xaxRVAEyqA6Bk6lu8UayP1CbTouA2bWQ3adngzM4sLIx9vyTUy81MWJ1Nfohj2RvdMnQmJm tAEml0VvznxA96fCb73cKZiBGI0+IoU9jnT3ni/kgYMkiZ6QWOzf8lSj58fsVIMBYhZ245cgtjT s6Vkg== X-Received: by 2002:a17:90b:39a3:b0:384:927f:3db9 with SMTP id 98e67ed59e1d1-395c4bdddaemr18676983a91.1.1787550778878; Sun, 23 Aug 2026 22:52:58 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9trot?= , Daniel Henrique Barboza , Alistair Francis , Chao Liu Subject: [PULL v2 91/96] target/riscv: Fix sstatus update in rv128 Date: Mon, 24 Aug 2026 15:48:01 +1000 Message-ID: <20260824054806.2790041-92-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102c; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102c.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550845908158500 From: Fr=C3=A9d=C3=A9ric P=C3=A9trot The sstatus register assignment was performed before the write mask was fully constructed, leading to an incomplete update of sstatus fields on the experimental rv128 target. Move the sstatus write after the mask completion so the full write mask is applied correctly. Signed-off-by: Fr=C3=A9d=C3=A9ric P=C3=A9trot Reviewed-by: Daniel Henrique Barboza Reviewed-by: Alistair Francis Reviewed-by: Chao Liu Message-ID: <20260819105655.33391-2-frederic.petrot@univ-grenoble-alpes.fr> Signed-off-by: Alistair Francis --- target/riscv/tcg/csr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target/riscv/tcg/csr.c b/target/riscv/tcg/csr.c index ffd751caa5..9cc6297328 100644 --- a/target/riscv/tcg/csr.c +++ b/target/riscv/tcg/csr.c @@ -3998,7 +3998,7 @@ static RISCVException read_sstatus_i128(CPURISCVState= *env, int csrno, Int128 *val) { uint64_t mask =3D sstatus_v1_10_mask; - uint64_t sstatus =3D env->mstatus & mask; + uint64_t sstatus; if (env->xl !=3D MXL_RV32 || env->debugger) { mask |=3D SSTATUS64_UXL; } @@ -4009,7 +4009,7 @@ static RISCVException read_sstatus_i128(CPURISCVState= *env, int csrno, if (env_archcpu(env)->cfg.ext_zicfilp) { mask |=3D SSTATUS_SPELP; } - + sstatus =3D env->mstatus & mask; *val =3D int128_make128(sstatus, add_status_sd(MXL_RV128, sstatus)); return RISCV_EXCP_NONE; } --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551152; cv=none; d=zohomail.com; s=zohoarc; b=dykBRRFu/SfbvR7mE+bQViMdKLbd3edn4tcNj5aoYFtHyCSXwGWtD0RfTlYYClfMXAvlWgueya+kZC9Wy8d0VCTW3zriAd7XJD2XjhJl+wIpG3jFrkr3uM5rfJmpH6WVR/aNjfraQBrHocnuvamjBEDR5UnW6RZ2WXf/WjvGSK8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551152; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=oecC5ZHB+mDg+64qzcXgOyLmh0fryebbjbeCqefnTnc=; b=EPb3Xd9AAFseLb8eAeijobcsJdTKihm1wL8T8m8xx4YfVPL0f7kLILatk3Lx7RVvwPdKuh0UFCe50KRDLeBLTUYC0kMlIbYGgyiXXkzcP7lr7N3O1/YYjb3CliiOz8b0V55ICrnyg5s+vT7GBQYSUw+qaKD/p06mEqDuBpHOKP4= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551152689917.3413470165735; Sun, 23 Aug 2026 22:59:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNcL-0001EO-1T; Mon, 24 Aug 2026 01:53:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNcI-00018b-8W for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:53:06 -0400 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNcG-0003Gs-Gq for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:53:05 -0400 Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-2d5cad1a6baso28259085ad.3 for ; Sun, 23 Aug 2026 22:53:04 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.52.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:53:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550783; x=1788155583; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=oecC5ZHB+mDg+64qzcXgOyLmh0fryebbjbeCqefnTnc=; b=HmnlcrQ7kz/3WDouMqeh7oZ8n0+Ppt6oddEjynfuTPw2ISNikc3+q4kz2fp6RbpsQS eTu+4c8EjOQnIpq9i0xg13ghYVhRVpEoFkuU1YExG0tSZXWW5rE5y/TTg8nizRRsGXz0 wa8BoLBWi6Pvs2c2O3KG7zyKxj7X6KWcXIqWzXtXixcJMenCCAT8rVGsNYFXa2OBS6P9 G/VlSeYvdCo8qhanCAkDYwqKePZ7oqqylUAqBu3D4L1N0ec3wJGHdqvNGVv4WMhpxsD/ LBSSB8twN6QE1jvTfrMN+teBdhkrStqow9MIM79/7hzVeW2xlBZEVGmdEDF4QpxIjhkv HNAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550783; x=1788155583; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=oecC5ZHB+mDg+64qzcXgOyLmh0fryebbjbeCqefnTnc=; b=iahTPM1F8Kjq1PeCtq5Z3ANCxo6pV3EyROyvnv95C5E+1VRVDZQ6WicdDLubf5UqOV zfJDv+/JTaJYP1Gd0n9TXdRE4VblUk1yNUrvFAKtv6vMj8T+Xe783rRwpjtWsexBcZnW Tf6gdquz0cLaYVbaSLJ6pH4rsqHIKQHzRja538AtoiOlZgXUlaDzIMJIyvsv0QeaVqr0 tk8hhU8WKIYg8umen2JlmGcF/y9rBY19Cg62n+YIpqEfQ8NfO4p3k78w/45+/tJC7Qt4 WduZR+4FwN/LmqrQFg8KPvd3oTTozR7KU1YthfGt1GvrsbTP0K0c3eMRJ6DfZOFLwOQ2 yuGQ== X-Gm-Message-State: AFuF++li8EfTiXPpqH3xR3gRrRC+vGM9hRXzEh8qbj8o9H1/rZr1QQIH zFyrhWaX2uE3atjmbZS4qikFcP0neV28MNFtf5XKJml27onrnAQ4RxfI0wHulg== X-Gm-Gg: AR+sD11biu3H9MXuTMUnvvUtGOJ7bufauPM8TM0e/ghhcb00YFsqsovu+gE7obF/6Mj o95Btef0WSzDpt+50/g9XzycXbkaY/PYBA0AkbT89ZtLUFAJul8+2iciPcMsBom5TA3+X4JirmI RNk0ODlhUXVnksmCSd6t2bevXBp/AgjN736lufLD5zkFHOKD0AqPr0NFG2RDEV9tvShUNn2ti6X zlcrh7BpOb1mthOe73oVuBlkvlQwJ6wj1VYDuNefBptj7fJBO9xYsdogormtZuePyzcBIfK5HMx c2rHYm/IFljg0iQrvBJy4nZmtzoY9tKY50HqiMXvesEj1OZhxUtXWdPAah4SMoaScBifioVFIi+ GjT7R3V8USxbr3M18iYr8Mc4zjG5/dr5AV1o2cn+elWapLmk5nH43LdJObqBtZgy6m5aBg663Bw mv/L31pVybNcT8JOtRPjEp5tP1+Y4iZD7vepe4udPFkkrRtN7KtSYkvR8vr6lpPBygOe6FaSOyy MUaVvVLcM8= X-Received: by 2002:a17:90b:5646:b0:38d:f5bb:e0f4 with SMTP id 98e67ed59e1d1-395c33367ebmr44746567a91.1.1787550783020; Sun, 23 Aug 2026 22:53:03 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9trot?= , Daniel Henrique Barboza , Chao Liu , Alistair Francis Subject: [PULL v2 92/96] target/riscv: Allow UXL to be 3 in mstatus on rv128 Date: Mon, 24 Aug 2026 15:48:02 +1000 Message-ID: <20260824054806.2790041-93-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62e; envelope-from=alistair23@gmail.com; helo=mail-pl1-x62e.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551155079158500 From: Fr=C3=A9d=C3=A9ric P=C3=A9trot Valid UXL field values for mstatus were restricted to fix a reported issue, but this inadvertently broke the experimental rv128 support where a value of 3 validly represents 128-bit execution. Update the mstatus write logic to permit UXL=3D3 when running on an rv128 CPU. Fixes: dcd028517749 ("target/riscv: Apply UXL WARL handling to vsstatus") Signed-off-by: Fr=C3=A9d=C3=A9ric P=C3=A9trot Reviewed-by: Daniel Henrique Barboza Reviewed-by: Chao Liu Message-ID: <20260819105655.33391-3-frederic.petrot@univ-grenoble-alpes.fr> Signed-off-by: Alistair Francis --- target/riscv/tcg/csr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target/riscv/tcg/csr.c b/target/riscv/tcg/csr.c index 9cc6297328..4c8959a33d 100644 --- a/target/riscv/tcg/csr.c +++ b/target/riscv/tcg/csr.c @@ -2014,8 +2014,8 @@ static uint64_t riscv_write_uxl(CPURISCVState *env, u= int64_t val, RISCVMXL xl =3D riscv_cpu_mxl(env); uint64_t uxl =3D get_field(val, field); =20 - if (uxl =3D=3D MXL_RV128) { - uxl =3D xl =3D=3D MXL_RV128 ? MXL_RV64 : xl; + if (xl !=3D MXL_RV128 && uxl =3D=3D MXL_RV128) { + uxl =3D xl; val =3D set_field(val, field, uxl); } =20 --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551182; cv=none; d=zohomail.com; s=zohoarc; b=KVkNYDS2i1zh9KuFxdks47Z/WhGWsF2DvCUpmwv1Kq7Fz4q61oXV5+s81yScHVZSUwDi2EV/fhzjUFQSukPG2wwQhkyAK3uN38bvGCZ6oD4BQuN4HCiV03G/fWijh3TPKAOD+UjJSHpRqHH1cc9G4FyUFvdguhSkndFuA07qqpw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551182; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=g7vCLZFyzm937jgIhV3Z2Vex0I/08uZ3yWQtzgoRbwM=; b=kT8ySx0DnS8THWZJorjeDJMW7IeYuOpflePSMDXPhsfqIBZJ3dxPgQfuLVQ1iWSb5Mc5HhNdy3oJFcpoQMi99VLf90HNswCte0mVbeV84KAAp2YAmcxLSQz+mdtol6ReBTfWqF+xA2Rx8yfnQzMeR/z0BrNd5Dxku4xer6C5UTU= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551182099421.5903045289664; Sun, 23 Aug 2026 22:59:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNcN-0001Jp-6a; Mon, 24 Aug 2026 01:53:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNcL-0001GK-LE for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:53:09 -0400 Received: from mail-pg1-x52a.google.com ([2607:f8b0:4864:20::52a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNcJ-0003Hm-Us for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:53:09 -0400 Received: by mail-pg1-x52a.google.com with SMTP id 41be03b00d2f7-cbedda4c154so1807379a12.1 for ; Sun, 23 Aug 2026 22:53:07 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.53.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:53:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550786; x=1788155586; darn=nongnu.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=g7vCLZFyzm937jgIhV3Z2Vex0I/08uZ3yWQtzgoRbwM=; b=kniknyZnFJTwyOonVlmK6mR/XXPBozNp7oVJLo0CyN02Paq8l3OiXDbQL3viWuqzky T5aOZCoMmQoePA0jzsktkd+YVA6FJ4u2Bzf7DF2rObP9G6wfFqkh3z9HvNBKKp9U4YWz Bu/Pr1ijg063tdWocnlQJUgK7clG2qOzmWs1hTFvfKLZLk9nRkCU5Y8eJgES9uEnNU21 WxH/FLuc+Cjw/j/QT7ayCl/Jh7c1hgks334BF7ud1S5Izz8iPyBI5biYSIYNG6lISJpg v5F2daP3E4dcfSn9OwWdFE4I7tZgYNehd/T39GkvTF/PiaaOJ4adSJIIBmbzPmahjqeu Uxpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550786; x=1788155586; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=g7vCLZFyzm937jgIhV3Z2Vex0I/08uZ3yWQtzgoRbwM=; b=Mcy4FUDu2xn8/UKPArItJhUsOcyDGbrPy2f3yvjWoDXHi8SLrklUCoaGi87JwnNKAD XDlqr7kUDzg0g98tgWPjWashetv6Kl/YPOPFT/UlKcjlVxs2GVZV3jjioAU4MymO7OO2 LQg+2fiicIEohxuAZXmJWvN1+Wkc75G/Ka8nnEobUHwwtzoxeHihOPZYt5GfXooAbdxD VBVy1fca3hMxkY/veNFxyODPklLRp8E6A8oM/O6qy1fK3P2rN0qF2SBpNTMOdlAOt3Lq HfnxEVVetVPtJCwD/8GwMDsXZaI1dBy8sSfWFqeLMxuCr97ExfyJTba+cqxfUWxBO9W2 xjhw== X-Gm-Message-State: AFuF++lToGrSCglLGQ8/4Ek388O6/6N2BQVKRN1tcq6aNP0KttH6uW6U pOcr3/SU7QkkRfMbpAEy4IC/VLKR7B0TozTNSoEJirWKOZxmwuPC4HNBexjvtw== X-Gm-Gg: AR+sD11uWtDEdrq1HB8wsP/SyaGmx0UWo2tDP6Q3GmSQe9Q560MgKzwEFSBE0eeEfq1 e/9i5TkG8tu6q9tZxfUMFAczYBo3myYWB+QErU4ASgUhyAt+vl0f97LcXBlxgbzMkMYacj8obSA xCfL2/33Nj8N14YtwWRDD/cNl+03TOTbzienJHlZyeZ4xjzrpXesnDX1z+hZ/fPcH6u7OnpYjPr PJet2x7zafgjJPvzzdyc30p3v4IG7LNe7DIqmzdgWM6QCP13rBxmoq0tYnuOjSD2y1SB2/JX/5p o0UlIx6eQT1DkRd1hTuo6N0mE5pCDcM4IJbPdxOWdezFGWne/Uf+u89np2MEHZC2n76Tvk7I371 P8TzxQ4uzb8/KZHnuJJjo210NQ45s3ZpgBy2s/0+mTiqDMIoG9eB/CizCMUmCwKxEPKJRWmLtVp IJARl0LrowYvW+cONgGIGxo5k4Cl9aQyeSiivAe/LuA4/E322AChiRGz8JkooztwpV9qNua7+iw 2ysww== X-Received: by 2002:a17:90b:580f:b0:380:f389:447b with SMTP id 98e67ed59e1d1-395c386d163mr47850617a91.11.1787550786502; Sun, 23 Aug 2026 22:53:06 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Vladimir Isaev , Alistair Francis , Chao Liu Subject: [PULL v2 93/96] riscv: csr: do not drop C bit on misa write Date: Mon, 24 Aug 2026 15:48:03 +1000 Message-ID: <20260824054806.2790041-94-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52a; envelope-from=alistair23@gmail.com; helo=mail-pg1-x52a.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551182990158500 From: Vladimir Isaev According to spec: > Writing misa may increase IALIGN, e.g., by disabling the "C" extension. > If an instruction that would write misa increases IALIGN, and the > subsequent instruction=E2=80=99s address is not IALIGN-bit aligned, the > write to misa is suppressed, leaving misa unchanged. So attempt to disable C extension if next instruction is not aligned should= not change the misa. Reviewed-by: Alistair Francis Signed-off-by: Vladimir Isaev Reviewed-by: Chao Liu Message-ID: <20260817150653.40357-2-vvisaev@gmail.com> Signed-off-by: Alistair Francis --- target/riscv/tcg/csr.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/target/riscv/tcg/csr.c b/target/riscv/tcg/csr.c index 4c8959a33d..002f7e69c1 100644 --- a/target/riscv/tcg/csr.c +++ b/target/riscv/tcg/csr.c @@ -2187,9 +2187,13 @@ static RISCVException write_misa(CPURISCVState *env,= int csrno, /* Mask extensions that are not supported by this hart */ val &=3D env->misa_ext_mask; =20 - /* Suppress 'C' if next instruction is not aligned. */ - if ((val & RVC) && (get_next_pc(env, ra) & 3) !=3D 0) { - val &=3D ~RVC; + /* drop write if RVC is cleared and next instruction is not aligned */ + if ((env->misa_ext & RVC) && !(val & RVC) && + (get_next_pc(env, ra) & 3) !=3D 0) { + qemu_log_mask(LOG_GUEST_ERROR, "Unable to write MISA ext value " + "0x%x, MISA.C disable failed\n", env->misa_ext); + + return RISCV_EXCP_NONE; } =20 /* Disable RVG if any of its dependencies are disabled */ --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551195; cv=none; d=zohomail.com; s=zohoarc; b=GiDnDmdWuDEQ/ss3ZGvvLd3VsCZ0yYtPKLRo0cgwPiaYjjNV68dEll+jkRjpD3XB2YSmduqXEMMRp/rou2Lprcg0e10nL7UgCwQ0xdUFFEoZeZRsR4oZ7NFSW4L+qxUHJBxsnJiWrdtUbbJVH76fZmjBAeUJ/xERB0Mlfc2OPUc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551195; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=E8fww6SheAAob+IWhdtbx0dCzxTAUBtVsPa0wdfQKz0=; b=fAlwtZugKoNOT7oq2JrumxrAZnzo6ViYcAk2PvdJBw6K2WN9kfQ5GCxdqtBfRLXmxPiDNpiQBImJuMVMCjApZ+xfLTDY7aqS8hAjPzgnUkbOgsF7X90Z4nVoYqYn4PeZjKBqYYAtR26T67ILamA0kVm6MwI6d+qH7nPHa/vSiug= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551195417460.544552384114; Sun, 23 Aug 2026 22:59:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNcR-0001YC-FQ; Mon, 24 Aug 2026 01:53:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNcP-0001PQ-Ap for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:53:13 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNcN-0003IX-CY for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:53:13 -0400 Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-38dc69c74b8so3272007a91.0 for ; Sun, 23 Aug 2026 22:53:11 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.53.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:53:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550790; x=1788155590; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=E8fww6SheAAob+IWhdtbx0dCzxTAUBtVsPa0wdfQKz0=; b=r1v32N6nLlq8iKCn9RX0j3ISbxNnzW0wt7TKpBRwALwF9fsWRBuWWCipIscw9OIAdF lOyc/xndj5yLPVjQFXtFUaVREnhU8+3jCJb4SddvGkDdMxO0y/K+cB46zH/5QSSfDVeJ CWMhEvu0AvgKJMQY2GjU/t8/dTOeFKAiMugQ+8zVU1Vq1vQbsAskfxPpjb96GtrrqfF4 hb60zWvf28VYLzgbwHkCplnex1foFaiYvn4y7F4MjEzJybVOOAPL6GH+tka6ku3BfCA9 Sg6bL099hocCY3SQ1WlLLNVQXrumFpSfAyqc3mou6LooD7Tt7X3I5t9JYOQ2T9b3mdd7 oDkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550790; x=1788155590; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=E8fww6SheAAob+IWhdtbx0dCzxTAUBtVsPa0wdfQKz0=; b=oqxQtJDa6Vsvy1+ZJa9fRelawGK/AW4DAjrTjzg2DyP6APkDcgg+R/TwMovns52M6C Eyx+gXxyXQ64sFWbATSglARPD0UiGRbGg7A5a9WXKUy/se5XtMNXzts2c8yf+aBPH0o0 rQNHzR4TV1HiCZderYkvMq+omOvsw/XfmKF8iShwyd9y6tqgFNukaGd1sONen63RpTQT CHlVt/uiHTOdSTkrlc+s6jYNfeid+3qLhsqcAPgDjMK4lit7SpP7i7SFwRAZRbL9ElF+ 5Elw8OdZ0nKg8D6NVXJ+ey8ntTmLfg3+CRMvDGojUQ4/1uKU5xtj8+Ec880qPkNsd+Ey FlPQ== X-Gm-Message-State: AFuF++l+Y4V9aHXUq0AwubJf3x6cABeV+SvKbaWIOINCQT1rV9R1zZlC CvgOTRYKw/SoUQ8bH1jiMKVN+PUDgcIkPrTuTjM/AfWurCUf5oFhnrUT+UhHEw== X-Gm-Gg: AR+sD13cERLh8iRb4Si25FFRcfH/nVeY6yoJ9/2Yn5vDXq8XKAAHbdASb6HYgNFkSoS bKfG3n5MT00E3PS+PU9fUn5CE6T8s8Dv738N6axCPiO03SZw9jCO2wd4u96nmzQNDUwYJyy/WHi cLO66EAeY3nPUT6Wbm5qiH4iID4i4QNtmRY1Grzi4od98vmH8E/+slQ5r7mWMQtsMgvx4uXPb1X Y07P4zUtI0mFfTaGXWTt0I6vRfqPclBHeX/mOMHizZ1nuXpxm1K6w/txkm3bF9T3+JMsfFBd7Hy oihtT2B5G8ahQCmW6D1U57aTuBIIO066TN3I4nVCAIiQ+zsAc9II+qp4YHwZCOu/zP7H30Map+G AjSeZvCDsPm3QJ5558/bdSoCmfhRbPsN+zpIX2mtJIMNoz2OQvzdz+oZiftQeO5V19ZZZLTH5nb 1FyJCZFQFvMDOicuQP7wNh6eWSgmCxa0JEONkxnM+rlyGwinp4VZYqOpMvw+wblv7Re5pTGWRlI DRnBA== X-Received: by 2002:a17:90b:560e:b0:38e:97f0:aa4b with SMTP id 98e67ed59e1d1-395df617b34mr31707868a91.13.1787550789953; Sun, 23 Aug 2026 22:53:09 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Vladimir Isaev , Nicholas Piggin , Alistair Francis Subject: [PULL v2 94/96] tests/tcg/riscv64: add misa write test Date: Mon, 24 Aug 2026 15:48:04 +1000 Message-ID: <20260824054806.2790041-95-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102e; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102e.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551197069158500 Content-Type: text/plain; charset="utf-8" From: Vladimir Isaev Link: https://lore.kernel.org/r/20260321144554.606417-2-npiggin@gmail.com Suggested-by: Nicholas Piggin Signed-off-by: Vladimir Isaev Message-ID: <20260817150653.40357-3-vvisaev@gmail.com> Signed-off-by: Alistair Francis --- tests/tcg/riscv64/Makefile.softmmu-target | 4 ++ tests/tcg/riscv64/test-misa-w.S | 88 +++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 tests/tcg/riscv64/test-misa-w.S diff --git a/tests/tcg/riscv64/Makefile.softmmu-target b/tests/tcg/riscv64/= Makefile.softmmu-target index fac0474746..6a219c306c 100644 --- a/tests/tcg/riscv64/Makefile.softmmu-target +++ b/tests/tcg/riscv64/Makefile.softmmu-target @@ -67,5 +67,9 @@ EXTRA_RUNS +=3D run-test-zicclsm-off run-test-zicclsm-off: test-zicclsm-off $(call run-test, $<, $(QEMU) -cpu rv64$(comma)v=3Dtrue$(comma)zfh=3Dtrue$= (comma)zicclsm=3Dfalse $(QEMU_OPTS)$<) =20 +EXTRA_RUNS +=3D run-test-misa-w +run-test-misa-w: test-misa-w + $(call run-test, $<, $(QEMU) -cpu rv64$(comma)x-misa-w=3Dtrue$(comma)c=3D= true$(comma)v=3Dtrue $(QEMU_OPTS)$<) + # We don't currently support the multiarch system tests undefine MULTIARCH_TESTS diff --git a/tests/tcg/riscv64/test-misa-w.S b/tests/tcg/riscv64/test-misa-= w.S new file mode 100644 index 0000000000..7f1eb30023 --- /dev/null +++ b/tests/tcg/riscv64/test-misa-w.S @@ -0,0 +1,88 @@ +/* + * Test for MISA changing C and related IALIGN alignment cases + * + * This test verifies that the "C" extension can be cleared and set in MIS= A, + * that a branch to 2-byte aligned instructions can be executed when "C" is + * enabled, and that a write to MISA which would increase IALIGN and cause + * the next instruction to be unaligned is ignored. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#define RVC (1 << ('C'-'A')) +#define RVV (1 << ('V'-'A')) + +.option norvc + .text + .global _start +_start: + lla t0, trap + csrw mtvec, t0 + + csrr t0, misa + li t1, RVC + not t1, t1 + and t0, t0, t1 + csrw misa, t0 + csrr t1, misa + li a0, 2 # fail code + bne t0, t1, _exit # Could not clear RVC in MISA + + li t1, RVC + or t0, t0, t1 + csrw misa, t0 + csrr t1, misa + li a0, 3 # fail code + bne t0, t1, _exit # Could not set RVC in MISA + + j unalign +. =3D . + 2 +unalign: + + li t1, RVC + not t1, t1 + and t0, t0, t1 + csrw misa, t0 + csrr t1, misa + li a0, 4 # fail code + beq t0, t1, _exit # Was able to clear RVC in MISA + + li t0, (RVC|RVV) + not t0, t0 + and t0, t0, t1 + csrw misa, t0 + csrr t0, misa + li a0, 5 # fail code + bne t0, t1, _exit # MISA write was not ignored (RVV was cleared) + + j realign +. =3D . + 2 +realign: + + # Success! + li a0, 0 + j _exit + +trap: + # Any trap is a fail code 1 + li a0, 1 + +# Exit code in a0 +_exit: + lla a1, semiargs + li t0, 0x20026 # ADP_Stopped_ApplicationExit + sd t0, 0(a1) + sd a0, 8(a1) + li a0, 0x20 # TARGET_SYS_EXIT_EXTENDED + + # Semihosting call sequence + .balign 16 + slli zero, zero, 0x1f + ebreak + srai zero, zero, 0x7 + j . + + .data + .balign 16 +semiargs: + .space 16 --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787550845; cv=none; d=zohomail.com; s=zohoarc; b=Zsimh4+36s5mFgnDoroDjYB104Q2RkNAGMINqKIuiziyBYqAUKl/oOeCtKsYnfIRlOXgXdpOoS+/DXTTYY+e83e1eGOZK71RucmKTBf6E2sTgbWfoR/GmfjEsMZ3hg+FyAgRXKnKkPr6wHww69Yw2nhtXtnUwEMiDHHLOmylg2M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787550845; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=6F951Dj73cRUnbMDFWDOvChFepiHGGhTEiS7TDO+nT4=; b=aCYCoX/Bm2uqKmY+HKEMP+VVCIZIDX7wqmk5CTlDMCtnj49BKewSHAmlovJT/4gBKEBHjvgl8j8dGP2jOZnNnKpjz8zGBxhxqhKPM/xVfnCMxvGnmmtmVXwWUTZ6DHv4wBg/F83FrVtQ1+13c/qjgd61ZKuUADUNBLkEgjnendM= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787550845109727.0371735378466; Sun, 23 Aug 2026 22:54:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNcT-0001s3-5m; Mon, 24 Aug 2026 01:53:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNcS-0001gr-4O for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:53:16 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNcQ-0003J1-C0 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:53:15 -0400 Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-395ea741d07so1004890a91.1 for ; Sun, 23 Aug 2026 22:53:13 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.53.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:53:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550793; x=1788155593; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=6F951Dj73cRUnbMDFWDOvChFepiHGGhTEiS7TDO+nT4=; b=EW9yEp9HVh6uXFsMYSxYyssx7eEfgEZffY+drtWPLsfU/SGlBREOLOjxT9UqwasiMX 3AgONexRvOFCOBCGAc1el+Y0F5B1Rb/PbQDA0xgl3SE6ZCjcGBL7EfPxHxahGNCvmnGR SAA67S8jXm3qtJf0ZlJri0eS5fdnxKdWJYEoSAxwy3C6WeyiCxh2jxxW0P2KnW41Tc0h 8a9yrh8+1NnKEB7GAQmUYD8gpm9btqEqOVkGR5q1lmOzGHDC093JNnQJAs6ecY9XNaxE 1+hgGXhb5eof8qo2gUBhpEdHasl2r4ezQzQHTezmrrf5GB3oQNqLpXOT3rrEiTDlv2Uy lqBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550793; x=1788155593; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=6F951Dj73cRUnbMDFWDOvChFepiHGGhTEiS7TDO+nT4=; b=Ef0U0dhYjEiTzoeThs+P6IDsTCbKH287pq3gviy+kguFHuU8mwRJnYyMTfQnxdDP6f VyCCBGgZX1ummW75YYsPfhioZlJDdgu15Y6FAhZh2GC5/O5wul3iFXcEmvdNkt8z43Ml CBnbmjq7vXUYHW9veujlHeQxK0pZF8pkzgbZSpWNeydxlfOJoXmCeUQmc4FRDslD2Qyh qQayFS0THSfINtBHxwb+g7vquqXhkixv39P3SZQ9gdwanBqclCUk3XX4Rw2zsqLpET/9 AUD226FM7YPUDnMquQkQ90W9fmFkuHeZpzmNicRkIcD/KkiNVI4MpENMMDSLd1JtXWn1 oydQ== X-Gm-Message-State: AFuF++nRFhiNnyKlccA7uUMjE2w78YKwCxgJk8HCw/mr2Lw/CRaI0+fx fLkBppFGCu0BDlMr066A2EDvg8kwtdx4XtIefhiL4FXJzPN8gIY03EKCKPzjhQ== X-Gm-Gg: AR+sD127crPUsQwOOswC9Tm9zDXiDww2mfE55d2aZJamSMLTlhO+bj1+yyTlDd/YsaN BHZG12SNkj2vKcxydq1pRS18Z1+GJ0Y193q4kfxzTjH4qsMwkpt9fMB4IcAbwjdICJhwWgavhiY PE8BynDEGkg54bLt8JCteitHKepIw4Qr0GhygTWZVecekVS3z3qd2Af8YDp0HCNblBEn/Z6+vPH 0QqQYfmi1RT5zNyq2N6VGM7+ingeZaSl83ZJKV9e3vCNIVAIT32F02Nbf6eb69JWrWnsbp0ZXgV ieZeRubhVsqWg3waQsWP31goEzyF95wpjz0MK8ANnb90spMGgLPx6WwYZsDpTL3mPfGDFsjbEqU Zdcnv3B248RmYAPqhMD1vq8GYoOnx4hx6FBvych+WTKvj0MeXGq5bGgCeTko6MFL07YLjVeRZoq 0Cb0wgA99sE9AjyT2NS8h8v/LwkXP6ZTpbxrFzmK4+dk3sk7PrBHWm8J+xMVH0/3rEk9MLwERh5 yDnCpZJQAMtmpFM X-Received: by 2002:a17:90b:53d0:b0:38e:bbf1:de3f with SMTP id 98e67ed59e1d1-395c359a74bmr42157484a91.12.1787550792991; Sun, 23 Aug 2026 22:53:12 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: Xu Liu , Alistair Francis Subject: [PULL v2 95/96] target/riscv: Make Zcmt JVT loads endian-aware Date: Mon, 24 Aug 2026 15:48:05 +1000 Message-ID: <20260824054806.2790041-96-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102e; envelope-from=alistair23@gmail.com; helo=mail-pj1-x102e.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787550847617158500 Content-Type: text/plain; charset="utf-8" From: Xu Liu The Zcmt specification says JVT table entries follow the current data endianness. Support that behavior as described by the specification so big-endian guests can use JVT tables stored in big-endian form. Signed-off-by: Xu Liu Reviewed-by: Alistair Francis Message-ID: <02050B1BBB8815BE+20260817083005.2392-1-liuxu@nucleisys.com> Signed-off-by: Alistair Francis --- target/riscv/tcg/zce_helper.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/target/riscv/tcg/zce_helper.c b/target/riscv/tcg/zce_helper.c index 15bf0a99c8..c6ba4c1a47 100644 --- a/target/riscv/tcg/zce_helper.c +++ b/target/riscv/tcg/zce_helper.c @@ -18,12 +18,14 @@ =20 #include "qemu/osdep.h" #include "cpu.h" +#include "internals.h" #include "exec/helper-proto.h" #include "accel/tcg/cpu-ldst.h" =20 target_ulong HELPER(cm_jalt)(CPURISCVState *env, uint32_t index) { unsigned mmu_index =3D cpu_mmu_index(env_cpu(env), true); + MemOp endian =3D mo_endian_env(env); MemOpIdx oi; =20 #if !defined(CONFIG_USER_ONLY) @@ -45,11 +47,11 @@ target_ulong HELPER(cm_jalt)(CPURISCVState *env, uint32= _t index) } =20 if (xlen =3D=3D 32) { - oi =3D make_memop_idx(MO_LEUL, mmu_index); + oi =3D make_memop_idx(MO_UL | endian, mmu_index); t0 =3D base + (index << 2); target =3D cpu_ldl_code_mmu(env, t0, oi, 0); } else { - oi =3D make_memop_idx(MO_LEUQ, mmu_index); + oi =3D make_memop_idx(MO_UQ | endian, mmu_index); t0 =3D base + (index << 3); target =3D cpu_ldq_code_mmu(env, t0, oi, 0); } --=20 2.54.0 From nobody Sat Sep 26 21:37:56 2026 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; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1787551009; cv=none; d=zohomail.com; s=zohoarc; b=XAGdIooKUjeWF80AwwOTeURUFUCtrVox7G2h3qqCogiombsUfhOp6Hu1Te9EZghmBcX0Nhhx5C4FhAzdBJCL8RnLe11CC/Vo+AlYBrAmm9dhy6ssWzQ07K1zGWA7iyOg8hq6Xz8Z00SXv3JMXYVKeEKty+dcrREuE3RuzU30/2s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787551009; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=PPNgUHd+lJe4a9U4qvFdC9kJEshhAclF3rpUjR0wmls=; b=jHRf+9k9L7RM12RnqgrsE95Ru0hRWQegJrFBvmiyqY4ES2PX9MHNi7HlglDToMiRJhdTPae9mn9cqA9vClEU4h8bCV3QL2V6OhvtI763I2dvAVjXcnrvusFqg7tPzowEYxWM3Ed3FEEn24ZEpTmJZYga0vA6asH2ytOqATAMuNU= ARC-Authentication-Results: i=1; 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; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787551008979720.2498237252505; Sun, 23 Aug 2026 22:56:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wyNcY-0002Za-Cd; Mon, 24 Aug 2026 01:53:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wyNcV-0002FO-Th for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:53:19 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wyNcT-0003Jj-E0 for qemu-devel@nongnu.org; Mon, 24 Aug 2026 01:53:19 -0400 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-38dc69c74b8so3272079a91.0 for ; Sun, 23 Aug 2026 22:53:17 -0700 (PDT) Received: from toolbx.alistair23.me ([2403:581e:fdf9:0:13b2:851f:d9cb:44c5]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-395c917d2f2sm4046005a91.3.2026.08.23.22.53.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Aug 2026 22:53:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787550796; x=1788155596; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=PPNgUHd+lJe4a9U4qvFdC9kJEshhAclF3rpUjR0wmls=; b=q3OulLLQi2R+u383hJ6Pp2J6tX96gJvNdcQsOOeIMiAcKj8MLVoW3cy4Xp+q7q/XnK AwPmyuVResbqxlZoISooLStuGTCfS+CAZ/lwYUrovEi9pvWUMRUvnqFM5hwGjMDvT7C4 naj69IFrBoOoyjkVpsch0e91HCTn1hAM+uf+FL010IDzJW3MWJsjljfhnTY1cCbrigS2 HPThShYON+JLIZk94yFnkqsnVrjqhUP1PkemAGsobJClBV2eed90W7jezlhOcgmZ67gr sTzSZGa9RCyr28ZbDGThJvpguq90CC/PkncNcTT/zyXxOpF09J3TChLB5+Za8x4z7Waa +lkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787550796; x=1788155596; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=PPNgUHd+lJe4a9U4qvFdC9kJEshhAclF3rpUjR0wmls=; b=PHqLHBONxh6JjuoRmkjzWdOjCH80kVylURDaACVKYh11OS/ltzwVBoSO6jnpdLhpSa 9QQRDPtj3FM5Y6IIeB0hSiDsBFpHr7sQI01Mt1iOEfONkmC1yCpXMtyyljOau430YKpD qXTu5blg2PZcGwUUzl19HmtY6qMpWxm8L7vppNvoVzMSafr5Rkwqgcvbsj5KhAyBaQS4 fQU56eIPZB6ceZ5t6eMEU8EGLKGs2je3rdI2up5I+clI9AizQW59+K+kUXIVaHeyL7aQ t9hTH3OJa5IYOESd/lXcdENqavcWG+chPrvQ9HhG2YYGlFDj/WuPzd8d6eK84VUiVmx1 kaDA== X-Gm-Message-State: AFuF++lM3RSZRahFuc61hjRh/V46qF+TCtiB5xPtLUoQP7eINEslt+R8 VUU07NbaPY4krtkqDQSHg/ufF/NwEULgwC02Oksb3iPHqXkdS7jeyQKKjKERig== X-Gm-Gg: AR+sD11b2PDxvW2nEEyANgHi9DeX7l8UJ2stNuI9Ru9y22roxxW0qWjd9WOcfAA5iLO rIWy+w+8Kv+etvnayt+dSBfOeGDeG9NBPXAeSBKdPpnOqDgO5sQMf+fkCK4GCI9Fdaqs2PqyNuN AXHSGa/pbOBuZB5xpDCU8BILNdtYNrLzG6yVDxyahXynCXm9Dq0QH1mFJtEVfmXynIGrNgK5ejw Dwp5YjjjaRaTtfGRpFSW2FuTPlDvsym4VLe7HLhrYlBZuUuADLPN12g9j8n4jd1ItMY2kwIL10Y ts1+VG6Muq8eMpRF5s5wjjs701yLbP89kdP0+kuO16eb8itnP0kJ0OwFuzbE5qb5Ivbv6kF6cCj x1eBWWElZ/3Bo0WAyYFy4VUrVgi72FsLM+9ANaymcZ25ebB+LDeSWWBCMdogIrGqXn75ud0psyy e9Js/ZCmqyjmyP2RVyI7cLujnaQuB1TkAnTgyJYfeLkbgEkf5IF1fbFYtFWggQ6dDjigMgFy51w H4BYw== X-Received: by 2002:a17:90b:164a:b0:390:b41a:b92a with SMTP id 98e67ed59e1d1-395deeaa2dfmr26778907a91.4.1787550796056; Sun, 23 Aug 2026 22:53:16 -0700 (PDT) From: alistair23@gmail.com X-Google-Original-From: alistair.francis@wdc.com To: qemu-devel@nongnu.org Cc: "Christian S. Lima" , Alistair Francis Subject: [PULL v2 96/96] target/riscv/tcg: sret in virtual user mode raises virtual instruction exception Date: Mon, 24 Aug 2026 15:48:06 +1000 Message-ID: <20260824054806.2790041-97-alistair.francis@wdc.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260824054806.2790041-1-alistair.francis@wdc.com> References: <20260824054806.2790041-1-alistair.francis@wdc.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1034; envelope-from=alistair23@gmail.com; helo=mail-pj1-x1034.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1787551010298158500 Content-Type: text/plain; charset="utf-8" From: "Christian S. Lima" Currently, when a `sret` is executed in virtual user mode, qemu raise an `illegal instruction exception`, but in this case the correct behavior is to raise a `virtual instruction exception` and the code already contains a check to it, but it's not enough to catch. This patch is useful to improve the correctness of the virtualization of the risc v architecture. Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3622 Signed-off-by: Christian S. Lima Reviewed-by: Alistair Francis Message-ID: <20260808031849.59726-1-christianslima@proton.me> Signed-off-by: Alistair Francis --- target/riscv/tcg/op_helper.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/target/riscv/tcg/op_helper.c b/target/riscv/tcg/op_helper.c index a7bd42d2c6..3e94005d2b 100644 --- a/target/riscv/tcg/op_helper.c +++ b/target/riscv/tcg/op_helper.c @@ -308,6 +308,11 @@ target_ulong helper_sret(CPURISCVState *env) const privilege_mode_t src_priv =3D env->priv; const bool src_virt =3D env->virt_enabled; =20 + if ((env->virt_enabled && env->priv < PRV_S) || + (env->virt_enabled && get_field(env->hstatus, HSTATUS_VTSR))) { + riscv_raise_exception(env, RISCV_EXCP_VIRT_INSTRUCTION_FAULT, GETP= C()); + } + if (!(env->priv >=3D PRV_S)) { riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); } @@ -323,10 +328,6 @@ target_ulong helper_sret(CPURISCVState *env) riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC()); } =20 - if (env->virt_enabled && get_field(env->hstatus, HSTATUS_VTSR)) { - riscv_raise_exception(env, RISCV_EXCP_VIRT_INSTRUCTION_FAULT, GETP= C()); - } - mstatus =3D env->mstatus; prev_priv =3D get_field(mstatus, MSTATUS_SPP); mstatus =3D set_field(mstatus, MSTATUS_SIE, --=20 2.54.0