53 lines
1.8 KiB
Diff
53 lines
1.8 KiB
Diff
|
|
From 6b1b8553ea3810e497d225d64e98dd6eac7b4e2c Mon Sep 17 00:00:00 2001
|
||
|
|
From: qihao_yewu <qihao_yewu@cmss.chinamobile.com>
|
||
|
|
Date: Tue, 5 Nov 2024 03:21:00 -0500
|
||
|
|
Subject: [PATCH] target/riscv/csr.c: Fix an access to VXSAT
|
||
|
|
|
||
|
|
cheery-pick from 5a60026cad4e9dba929cab4f63229e4b9110cf0a
|
||
|
|
|
||
|
|
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>
|
||
|
|
Signed-off-by: qihao_yewu <qihao_yewu@cmss.chinamobile.com>
|
||
|
|
---
|
||
|
|
target/riscv/csr.c | 4 ++--
|
||
|
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/target/riscv/csr.c b/target/riscv/csr.c
|
||
|
|
index fde7ce1a53..d1bb7bc0d3 100644
|
||
|
|
--- a/target/riscv/csr.c
|
||
|
|
+++ b/target/riscv/csr.c
|
||
|
|
@@ -704,7 +704,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;
|
||
|
|
}
|
||
|
|
|
||
|
|
@@ -714,7 +714,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;
|
||
|
|
}
|
||
|
|
|
||
|
|
--
|
||
|
|
2.41.0.windows.1
|
||
|
|
|