Skip to content

Commit

Permalink
target/riscv: update mstatus.SD when FS is set dirty
Browse files Browse the repository at this point in the history
remove the check becuase SD bit should summarize FS and XS fields
unconditionally.

Signed-off-by: ShihPo Hung <shihpo.hung@sifive.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
(cherry picked from commit 82f0146)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
  • Loading branch information
arcbbb authored and mdroth committed Jun 22, 2020
1 parent 690e300 commit e727aa1
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 3 deletions.
3 changes: 1 addition & 2 deletions target/riscv/csr.c
Expand Up @@ -341,8 +341,7 @@ static int write_mstatus(CPURISCVState *env, int csrno, target_ulong val)

mstatus = (mstatus & ~mask) | (val & mask);

dirty = (riscv_cpu_fp_enabled(env) &&
((mstatus & MSTATUS_FS) == MSTATUS_FS)) |
dirty = ((mstatus & MSTATUS_FS) == MSTATUS_FS) |
((mstatus & MSTATUS_XS) == MSTATUS_XS);
mstatus = set_field(mstatus, MSTATUS_SD, dirty);
env->mstatus = mstatus;
Expand Down
2 changes: 1 addition & 1 deletion target/riscv/translate.c
Expand Up @@ -394,7 +394,7 @@ static void mark_fs_dirty(DisasContext *ctx)

tmp = tcg_temp_new();
tcg_gen_ld_tl(tmp, cpu_env, offsetof(CPURISCVState, mstatus));
tcg_gen_ori_tl(tmp, tmp, MSTATUS_FS);
tcg_gen_ori_tl(tmp, tmp, MSTATUS_FS | MSTATUS_SD);
tcg_gen_st_tl(tmp, cpu_env, offsetof(CPURISCVState, mstatus));
tcg_temp_free(tmp);
}
Expand Down

0 comments on commit e727aa1

Please sign in to comment.