Re: [PATCH v2 2/2] target/riscv: Allow UXL to be 3 in mstatus on rv128
Chao Liu via <[email protected]>
| Newsgroups | org.nongnu.qemu-riscv,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
On Wed, Aug 19, 2026 at 12:56:55PM +0800, [email protected] wrote: > From: Frédéric Pétrot <[email protected]> > > 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=3 when running on > an rv128 CPU. > > Fixes: dcd028517749 ("target/riscv: Apply UXL WARL handling to vsstatus") > Signed-off-by: Frédéric Pétrot <[email protected]> > Reviewed-by: Daniel Henrique Barboza <[email protected]> Reviewed-by: Chao Liu <[email protected]> Thanks, Chao > --- > 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, uint64_t val, > RISCVMXL xl = riscv_cpu_mxl(env); > uint64_t uxl = get_field(val, field); > > - if (uxl == MXL_RV128) { > - uxl = xl == MXL_RV128 ? MXL_RV64 : xl; > + if (xl != MXL_RV128 && uxl == MXL_RV128) { > + uxl = xl; > val = set_field(val, field, uxl); > } > > -- > 2.43.0 >