This series fixes four RISC-V instruction legality defects in the
translator:

  target/riscv: honor zicbo* envcfg gating in linux-user mode
    cbo.inval/cbo.flush/cbo.zero retired unconditionally in linux-user
    because check_zicbo_envcfg() skipped the envcfg check entirely in
    user-only builds.  Add 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

  target/riscv: reject FMV.X.W/FMV.W.X under Zfinx
    Zfinx explicitly excludes the FMV transfer instructions, but the
    translators 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

  target/riscv: enforce even register constraints for Zdinx fcvt pairs
    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

  target/riscv: make cm.mva01s/cm.mvsa01 high-sreg forms illegal on RV32E
    The Zcmp pseudocode marks cm.mva01s/cm.mvsa01 as reserved on RV32E
    when either compressed saved-register selector is above s1, but the
    translators only checked REQUIRE_ZCMP.  Add a gate that returns
    false when RVE is enabled and either operand exceeds x9, so the
    high-sreg forms raise an illegal-instruction exception while the
    s0/s1 forms and all RV32I forms keep retiring.
    Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/4110

Each fix was verified with an affected/fixed probe pair against QEMU
builds and native RISC-V hardware, with legal-encoding controls
regressing unchanged.  All four patches were reviewed by Alistair
Francis in the v1 thread; v2 adds this cover letter per his request and
records the Reviewed-by tags, with no code changes.

wangyang (4):
  target/riscv: honor zicbo* envcfg gating in linux-user mode
  target/riscv: reject FMV.X.W/FMV.W.X under Zfinx
  target/riscv: enforce even register constraints for Zdinx fcvt pairs
  target/riscv: make cm.mva01s/cm.mvsa01 high-sreg forms illegal on RV32E

Reply via email to