[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 4/4] target/riscv: add vector configure instruction
From: |
Richard Henderson |
Subject: |
Re: [PATCH v4 4/4] target/riscv: add vector configure instruction |
Date: |
Tue, 11 Feb 2020 08:56:13 -0800 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 |
On 2/10/20 8:12 AM, LIU Zhiwei wrote:
> static inline void cpu_get_tb_cpu_state(CPURISCVState *env, target_ulong *pc,
> - target_ulong *cs_base, uint32_t
> *flags)
> + target_ulong *cs_base, uint32_t
> *pflags)
> {
> + uint32_t flags = 0;
> + uint32_t vlmax;
> + uint8_t vl_eq_vlmax;
bool.
> +
> *pc = env->pc;
> *cs_base = 0;
> +
> + if (env->misa & RVV) {
> + vlmax = vext_get_vlmax(env_archcpu(env), env->vext.vtype);
> + vl_eq_vlmax = (env->vext.vstart == 0) && (vlmax == env->vext.vl);
You might as well move the variable declarations inside this block.
> +target_ulong HELPER(vsetvl)(CPURISCVState *env, target_ulong s1,
> + target_ulong s2)
Indentation.
> +{
> + int vlmax, vl;
> + RISCVCPU *cpu = env_archcpu(env);
> + uint16_t sew = 1 << FIELD_EX64(s2, VTYPE, SEW);
> +
> + if (sew > cpu->cfg.elen) { /* only set vill bit. */
> + env->vext.vtype = FIELD_DP64(0, VTYPE, VILL, 1);
> + env->vext.vl = 0;
> + env->vext.vstart = 0;
> + return 0;
> + }
You're missing checks against EDIV, VILL and the RESERVED field == 0.
> +
> + vlmax = vext_get_vlmax(cpu, s2);
> + if (s1 <= vlmax) {
> + vl = s1;
> + } else {
> + vl = vlmax;
> + }
> + env->vext.vl = vl;
> + env->vext.vtype = s2;
> + env->vext.vstart = 0;
> + return vl;
> +}
>
r~