Hello,

Le 07/10/2021 à 19:47, Richard Henderson a écrit :
> Shortly, the set of supported XL will not be just 32 and 64,
> and representing that properly using the enumeration will be
> imperative.
> 
> Two places, booting and gdb, intentionally use misa_mxl_max
> to emphasize the use of the reset value of misa.mxl, and not
> the current cpu state.
> 
> Signed-off-by: Richard Henderson <richard.hender...@linaro.org>
> ---
>  target/riscv/cpu.h            |  9 ++++++++-
>  hw/riscv/boot.c               |  2 +-
>  semihosting/arm-compat-semi.c |  2 +-
>  target/riscv/cpu.c            | 24 ++++++++++++++----------
>  target/riscv/cpu_helper.c     | 12 ++++++------
>  target/riscv/csr.c            | 24 ++++++++++++------------
>  target/riscv/gdbstub.c        |  2 +-
>  target/riscv/monitor.c        |  4 ++--
>  8 files changed, 45 insertions(+), 34 deletions(-)


> diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h
> @@ -522,7 +522,7 @@ static RISCVException write_mstatus(CPURISCVState *env, 
> int csrno,
>  
>      dirty = ((mstatus & MSTATUS_FS) == MSTATUS_FS) |
>              ((mstatus & MSTATUS_XS) == MSTATUS_XS);
> -    if (riscv_cpu_is_32bit(env)) {
> +    if (riscv_cpu_mxl(env) == MXL_RV32) {
>          mstatus = set_field(mstatus, MSTATUS32_SD, dirty);
>      } else {
>          mstatus = set_field(mstatus, MSTATUS64_SD, dirty);

I believe we miss the settings of the SXL and UXL fields that are needed
by cpu_get_xl

diff --git a/target/riscv/csr.c b/target/riscv/csr.c
index 9c0753bc8b..c4a479ddd2 100644
--- a/target/riscv/csr.c
+++ b/target/riscv/csr.c
@@ -526,6 +526,9 @@ static RISCVException write_mstatus(CPURISCVState *env, int
csrno,
         mstatus = set_field(mstatus, MSTATUS32_SD, dirty);
     } else {
         mstatus = set_field(mstatus, MSTATUS64_SD, dirty);
+        /* SXL and UXL fields are for now read only */
+        mstatus = set_field(mstatus, MSTATUS64_SXL, MXL_RV64);
+        mstatus = set_field(mstatus, MSTATUS64_UXL, MXL_RV64);
     }
     env->mstatus = mstatus;

Frédéric
-- 
+---------------------------------------------------------------------------+
| Frédéric Pétrot, Pr. Grenoble INP-Ensimag/TIMA,   Ensimag deputy director |
| Mob/Pho: +33 6 74 57 99 65/+33 4 76 57 48 70      Ad augusta  per angusta |
| http://tima.univ-grenoble-alpes.fr frederic.pet...@univ-grenoble-alpes.fr |
+---------------------------------------------------------------------------+

Reply via email to