On 2/10/20 8:12 AM, LIU Zhiwei wrote: > +static int vs(CPURISCVState *env, int csrno) > +{ > + return 0; > +}
This should at least be testing RVV, a-la smode(). You probably want to have all of the other tests vs RVV in this file use this function, since this will need to grow the system mode enable test. > @@ -158,8 +167,10 @@ static int read_fcsr(CPURISCVState *env, int csrno, > target_ulong *val) > return -1; > } > #endif > - *val = (riscv_cpu_get_fflags(env) << FSR_AEXC_SHIFT) > - | (env->frm << FSR_RD_SHIFT); > + *val = (env->vext.vxrm << FSR_VXRM_SHIFT) > + | (env->vext.vxsat << FSR_VXSAT_SHIFT) > + | (riscv_cpu_get_fflags(env) << FSR_AEXC_SHIFT) > + | (env->frm << FSR_RD_SHIFT); > return 0; > } While we can be perfectly happy shifting 0's into place here, it would probably be clearer to conditionalize on vs(). > @@ -172,10 +183,60 @@ static int write_fcsr(CPURISCVState *env, int csrno, > target_ulong val) > env->mstatus |= MSTATUS_FS; > #endif > env->frm = (val & FSR_RD) >> FSR_RD_SHIFT; > + env->vext.vxrm = (val & FSR_VXRM) >> FSR_VXRM_SHIFT; > + env->vext.vxsat = (val & FSR_VXSAT) >> FSR_VXSAT_SHIFT; > riscv_cpu_set_fflags(env, (val & FSR_AEXC) >> FSR_AEXC_SHIFT); > return 0; > } You *must* test vs() here. r~