mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 16:23:55 -06:00
target/riscv: change vext_get_vlmax() arguments
We'll re-use the logic froim vext_get_vlmax() in 2 other occurrences in the next patch, but first we need to make it independent of both 'cpu' and 'vtype'. To do that, add 'vlenb', 'vsew' and 'lmul' as parameters instead. Adapt the two existing callers. In cpu_get_tb_cpu_state(), rename 'sew' to 'vsew' to be less ambiguous about what we're encoding into *pflags. In HELPER(vsetvl) the following changes were made: - add a 'vsew' var to store vsew. Use it in the shift to get 'sew'; - the existing 'lmul' var was renamed to 'vlmul'; - add a new 'lmul' var to store 'lmul' encoded like DisasContext:lmul. Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20240122161107.26737-12-dbarboza@ventanamicro.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
24a6aeecfe
commit
cd21576de6
3 changed files with 20 additions and 14 deletions
|
@ -81,13 +81,16 @@ void cpu_get_tb_cpu_state(CPURISCVState *env, vaddr *pc,
|
|||
* which is not supported by GVEC. So we set vl_eq_vlmax flag to true
|
||||
* only when maxsz >= 8 bytes.
|
||||
*/
|
||||
uint32_t vlmax = vext_get_vlmax(cpu, env->vtype);
|
||||
uint32_t sew = FIELD_EX64(env->vtype, VTYPE, VSEW);
|
||||
uint32_t maxsz = vlmax << sew;
|
||||
|
||||
/* lmul encoded as in DisasContext::lmul */
|
||||
int8_t lmul = sextract32(FIELD_EX64(env->vtype, VTYPE, VLMUL), 0, 3);
|
||||
uint32_t vsew = FIELD_EX64(env->vtype, VTYPE, VSEW);
|
||||
uint32_t vlmax = vext_get_vlmax(cpu->cfg.vlenb, vsew, lmul);
|
||||
uint32_t maxsz = vlmax << vsew;
|
||||
bool vl_eq_vlmax = (env->vstart == 0) && (vlmax == env->vl) &&
|
||||
(maxsz >= 8);
|
||||
flags = FIELD_DP32(flags, TB_FLAGS, VILL, env->vill);
|
||||
flags = FIELD_DP32(flags, TB_FLAGS, SEW, sew);
|
||||
flags = FIELD_DP32(flags, TB_FLAGS, SEW, vsew);
|
||||
flags = FIELD_DP32(flags, TB_FLAGS, LMUL,
|
||||
FIELD_EX64(env->vtype, VTYPE, VLMUL));
|
||||
flags = FIELD_DP32(flags, TB_FLAGS, VL_EQ_VLMAX, vl_eq_vlmax);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue