[PATCH v6 0/6] target/riscv: Support the true Zicclsm extension

frank.chang@sifive.com posted 6 patches 1 week, 5 days ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20260713035135.3996990-1-frank.chang@sifive.com
Maintainers: Alistair Francis <Alistair.Francis@wdc.com>, Palmer Dabbelt <palmer@dabbelt.com>, Weiwei Li <liwei1518@gmail.com>, Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>, Liu Zhiwei <zhiwei_liu@linux.alibaba.com>, Chao Liu <chao.liu@processmission.com>
hw/riscv/sifive_u.c                         | 11 ++--
target/riscv/cpu.c                          | 10 +++-
target/riscv/cpu_cfg_fields.h.inc           |  2 +
target/riscv/tcg/insn_trans/trans_rvi.c.inc |  6 ++
target/riscv/tcg/insn_trans/trans_rvv.c.inc | 18 +++++-
target/riscv/tcg/vector_helper.c            | 65 ++++++++++++++++-----
6 files changed, 88 insertions(+), 24 deletions(-)
[PATCH v6 0/6] target/riscv: Support the true Zicclsm extension
Posted by frank.chang@sifive.com 1 week, 5 days ago
From: Frank Chang <frank.chang@sifive.com>

Support the true Zicclsm extension so that we can trap misaligned accesses
when Zicclsm is disabled.

To enable/disable Zicclsm, simply set zicclsm=[true|false], e.g.:
  -cpu rv64,zicclsm=[true|false]

QEMU will raise a misaligned load/store exception when executing misaligned
load/store instructions if Zicclsm is disabled.

Changelog:
  v6:
    * Reorder and squash Zicclsm CPU property and RVA22U64 profile patches to
      make every single commit to pass `make check`.
  v5:
    * Add Zicclsm to RVA22U64 profile explicitly.
    * Rebase to the latest riscv-to-apply.next.
  v4:
    * Align ROM reset vector data at 8-byte aligned offsets.
  v3:
    * Enable Zicclsm for the compatible CPUs.
    * Rebase to the latest riscv-to-apply.next.
  v2:
    * Use (size_memop(size) | mo_endian_env(env)) to calculate MemOp.
    * Use (log2_esz << MO_ASHIFT) to calculate aligment MemOp for
      vector load/store whole register instructions.

Frank Chang (6):
  target/riscv: Add Zicclsm CPU option
  target/riscv: Enable Zicclsm for the compatible CPUs
  hw/riscv: sifive_u: Align ROM reset vector data
  target/riscv: Support raising misaligned exceptions for scalar
    loads/stores
  target/riscv: Support raising misaligned exceptions for vector
    loads/stores
  target/riscv: Expose Zicclsm as a CPU property and update RVA22U64
    profile

 hw/riscv/sifive_u.c                         | 11 ++--
 target/riscv/cpu.c                          | 10 +++-
 target/riscv/cpu_cfg_fields.h.inc           |  2 +
 target/riscv/tcg/insn_trans/trans_rvi.c.inc |  6 ++
 target/riscv/tcg/insn_trans/trans_rvv.c.inc | 18 +++++-
 target/riscv/tcg/vector_helper.c            | 65 ++++++++++++++++-----
 6 files changed, 88 insertions(+), 24 deletions(-)

--
2.43.0
Re: [PATCH v6 0/6] target/riscv: Support the true Zicclsm extension
Posted by Alistair Francis 1 week, 5 days ago
On Mon, 2026-07-13 at 11:51 +0800, frank.chang@sifive.com wrote:
> From: Frank Chang <frank.chang@sifive.com>
> 
> Support the true Zicclsm extension so that we can trap misaligned
> accesses
> when Zicclsm is disabled.
> 
> To enable/disable Zicclsm, simply set zicclsm=[true|false], e.g.:
>   -cpu rv64,zicclsm=[true|false]
> 
> QEMU will raise a misaligned load/store exception when executing
> misaligned
> load/store instructions if Zicclsm is disabled.
> 
> Changelog:
>   v6:
>     * Reorder and squash Zicclsm CPU property and RVA22U64 profile
> patches to
>       make every single commit to pass `make check`.
>   v5:
>     * Add Zicclsm to RVA22U64 profile explicitly.
>     * Rebase to the latest riscv-to-apply.next.
>   v4:
>     * Align ROM reset vector data at 8-byte aligned offsets.
>   v3:
>     * Enable Zicclsm for the compatible CPUs.
>     * Rebase to the latest riscv-to-apply.next.
>   v2:
>     * Use (size_memop(size) | mo_endian_env(env)) to calculate MemOp.
>     * Use (log2_esz << MO_ASHIFT) to calculate aligment MemOp for
>       vector load/store whole register instructions.
> 
> Frank Chang (6):
>   target/riscv: Add Zicclsm CPU option
>   target/riscv: Enable Zicclsm for the compatible CPUs
>   hw/riscv: sifive_u: Align ROM reset vector data
>   target/riscv: Support raising misaligned exceptions for scalar
>     loads/stores
>   target/riscv: Support raising misaligned exceptions for vector
>     loads/stores
>   target/riscv: Expose Zicclsm as a CPU property and update RVA22U64
>     profile

This has missed the 11.1 release window [1]. So it will now need to
include unit tests and a user of the extension (submitted toolchain
support patches) according to [2].

1: https://wiki.qemu.org/Planning/11.1
2:
https://wiki.qemu.org/Documentation/Platforms/RISCV#RISC-V_Foundation_Extensions

Alistair

> 
>  hw/riscv/sifive_u.c                         | 11 ++--
>  target/riscv/cpu.c                          | 10 +++-
>  target/riscv/cpu_cfg_fields.h.inc           |  2 +
>  target/riscv/tcg/insn_trans/trans_rvi.c.inc |  6 ++
>  target/riscv/tcg/insn_trans/trans_rvv.c.inc | 18 +++++-
>  target/riscv/tcg/vector_helper.c            | 65 ++++++++++++++++---
> --
>  6 files changed, 88 insertions(+), 24 deletions(-)
> 
> --
> 2.43.0
> 
Re: [PATCH v6 0/6] target/riscv: Support the true Zicclsm extension
Posted by Daniel Henrique Barboza 1 week, 2 days ago

On 7/13/2026 1:01 AM, Alistair Francis wrote:
> On Mon, 2026-07-13 at 11:51 +0800, frank.chang@sifive.com wrote:
>> From: Frank Chang <frank.chang@sifive.com>
>>
>> Support the true Zicclsm extension so that we can trap misaligned
>> accesses
>> when Zicclsm is disabled.
>>
>> To enable/disable Zicclsm, simply set zicclsm=[true|false], e.g.:
>>    -cpu rv64,zicclsm=[true|false]
>>
>> QEMU will raise a misaligned load/store exception when executing
>> misaligned
>> load/store instructions if Zicclsm is disabled.
>>
>> Changelog:
>>    v6:
>>      * Reorder and squash Zicclsm CPU property and RVA22U64 profile
>> patches to
>>        make every single commit to pass `make check`.
>>    v5:
>>      * Add Zicclsm to RVA22U64 profile explicitly.
>>      * Rebase to the latest riscv-to-apply.next.
>>    v4:
>>      * Align ROM reset vector data at 8-byte aligned offsets.
>>    v3:
>>      * Enable Zicclsm for the compatible CPUs.
>>      * Rebase to the latest riscv-to-apply.next.
>>    v2:
>>      * Use (size_memop(size) | mo_endian_env(env)) to calculate MemOp.
>>      * Use (log2_esz << MO_ASHIFT) to calculate aligment MemOp for
>>        vector load/store whole register instructions.
>>
>> Frank Chang (6):
>>    target/riscv: Add Zicclsm CPU option
>>    target/riscv: Enable Zicclsm for the compatible CPUs
>>    hw/riscv: sifive_u: Align ROM reset vector data
>>    target/riscv: Support raising misaligned exceptions for scalar
>>      loads/stores
>>    target/riscv: Support raising misaligned exceptions for vector
>>      loads/stores
>>    target/riscv: Expose Zicclsm as a CPU property and update RVA22U64
>>      profile
> 
> This has missed the 11.1 release window [1]. So it will now need to
> include unit tests and a user of the extension (submitted toolchain
> support patches) according to [2].
> 
> 1: https://wiki.qemu.org/Planning/11.1
> 2:
> https://wiki.qemu.org/Documentation/Platforms/RISCV#RISC-V_Foundation_Extensions

zicclsm is supported by GCC since

-----------
commit 5c18df44fd1387653595869c9145c63fffb8cfac
Author: Monk Chiang <monk.chiang@sifive.com>
Date:   Thu Feb 1 17:14:18 2024 +0800

     RISC-V: Add minimal support for 7 new unprivileged extensions

     The RISC-V Profiles specification here:
     https://github.com/riscv/riscv-profiles/blob/main/profiles.adoc#7-new-isa-extensions

     These extensions don't add any new features but
     describe existing features. So this patch only adds parsing.

     Za64rs: Reservation set size of 64 bytes
     Za128rs: Reservation set size of 128 bytes
     Ziccif: Main memory supports instruction fetch with atomicity requirement
     Ziccrse: Main memory supports forward progress on LR/SC sequences
     Ziccamoa: Main memory supports all atomics in A
     Zicclsm: Main memory supports misaligned loads/stores
     Zic64b: Cache block size isf 64 bytes
-----------


I think we're good w.r.t a user/use for it.  Thanks,

Daniel



> 
> Alistair
> 
>>
>>   hw/riscv/sifive_u.c                         | 11 ++--
>>   target/riscv/cpu.c                          | 10 +++-
>>   target/riscv/cpu_cfg_fields.h.inc           |  2 +
>>   target/riscv/tcg/insn_trans/trans_rvi.c.inc |  6 ++
>>   target/riscv/tcg/insn_trans/trans_rvv.c.inc | 18 +++++-
>>   target/riscv/tcg/vector_helper.c            | 65 ++++++++++++++++---
>> --
>>   6 files changed, 88 insertions(+), 24 deletions(-)
>>
>> --
>> 2.43.0
>>