aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgenii Prokopiev <evgenii.prokopiev@syntacore.com>2024-10-02 11:44:36 +0300
committerAlistair Francis <alistair.francis@wdc.com>2024-10-30 11:22:07 +1000
commit5a60026cad4e9dba929cab4f63229e4b9110cf0a (patch)
treeefe01472102cc9f6a5daf4623228f5bb5260e114
parent58d49b5895f2e0b5cfe4b2901bf24f3320b74f29 (diff)
downloadqemu-5a60026cad4e9dba929cab4f63229e4b9110cf0a.zip
qemu-5a60026cad4e9dba929cab4f63229e4b9110cf0a.tar.gz
qemu-5a60026cad4e9dba929cab4f63229e4b9110cf0a.tar.bz2
target/riscv/csr.c: Fix an access to VXSAT
The register VXSAT should be RW only to the first bit. The remaining bits should be 0. The RISC-V Instruction Set Manual Volume I: Unprivileged Architecture The vxsat CSR has a single read-write least-significant bit (vxsat[0]) that indicates if a fixed-point instruction has had to saturate an output value to fit into a destination format. Bits vxsat[XLEN-1:1] should be written as zeros. Signed-off-by: Evgenii Prokopiev <evgenii.prokopiev@syntacore.com> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20241002084436.89347-1-evgenii.prokopiev@syntacore.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
-rw-r--r--target/riscv/csr.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/target/riscv/csr.c b/target/riscv/csr.c
index ea35603..c88ee12 100644
--- a/target/riscv/csr.c
+++ b/target/riscv/csr.c
@@ -734,7 +734,7 @@ static RISCVException write_vxrm(CPURISCVState *env, int csrno,
static RISCVException read_vxsat(CPURISCVState *env, int csrno,
target_ulong *val)
{
- *val = env->vxsat;
+ *val = env->vxsat & BIT(0);
return RISCV_EXCP_NONE;
}
@@ -744,7 +744,7 @@ static RISCVException write_vxsat(CPURISCVState *env, int csrno,
#if !defined(CONFIG_USER_ONLY)
env->mstatus |= MSTATUS_VS;
#endif
- env->vxsat = val;
+ env->vxsat = val & BIT(0);
return RISCV_EXCP_NONE;
}