On 11/10/21 8:04 AM, LIU Zhiwei wrote:
We need not specially process vtype when XLEN changes.
Signed-off-by: LIU Zhiwei <zhiwei_liu@c-sky.com>
---
target/riscv/cpu.h | 1 +
target/riscv/csr.c | 15 ++++++++++++++-
target/riscv/machine.c | 1 +
target/riscv/vector_helper.c | 7 ++-----
4 files changed, 18 insertions(+), 6 deletions(-)
This patch should come before patch 6, which is over-complicated.
Comments should be added to show that this bit is now missing from vtype.
diff --git a/target/riscv/machine.c b/target/riscv/machine.c
index 19e982d3f0..cc4dda4b93 100644
--- a/target/riscv/machine.c
+++ b/target/riscv/machine.c
@@ -104,6 +104,7 @@ static const VMStateDescription vmstate_vector = {
VMSTATE_UINTTL(env.vl, RISCVCPU),
VMSTATE_UINTTL(env.vstart, RISCVCPU),
VMSTATE_UINTTL(env.vtype, RISCVCPU),
+ VMSTATE_UINTTL(env.vill, RISCVCPU),
VMSTATE_END_OF_LIST()
This will need a bump to version.
@@ -45,11 +45,8 @@ target_ulong HELPER(vsetvl)(CPURISCVState *env,
target_ulong s1,
}
if ((sew > cpu->cfg.elen) || vill || (ediv != 0) || (reserved
!= 0)) {
/* only set vill bit. */
- if (xlen < TARGET_LONG_BITS) {
- env->vtype = FIELD_DP64(0, VTYPE, VILL_XLEN32, 1);
- } else {
- env->vtype = FIELD_DP64(0, VTYPE, VILL, 1);
- }
+ env->vill = 1;
+ env->vtype = 0;
This is fine.
You're missing the updates to cpu_get_tb_cpu_state.