mirror of https://github.com/xemu-project/xemu.git
target/riscv: Fix shift count overflow
The result of (8 - 3 - vlmul) is negative when vlmul >= 6, and results in wrong vill. Signed-off-by: demin.han <demin.han@starfivetech.com> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Message-ID: <20240225174114.5298-1-demin.han@starfivetech.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
a506c4289d
commit
938dd05ea1
|
@ -44,6 +44,7 @@ target_ulong HELPER(vsetvl)(CPURISCVState *env, target_ulong s1,
|
|||
target_ulong reserved = s2 &
|
||||
MAKE_64BIT_MASK(R_VTYPE_RESERVED_SHIFT,
|
||||
xlen - 1 - R_VTYPE_RESERVED_SHIFT);
|
||||
uint16_t vlen = cpu->cfg.vlenb << 3;
|
||||
int8_t lmul;
|
||||
|
||||
if (vlmul & 4) {
|
||||
|
@ -53,10 +54,8 @@ target_ulong HELPER(vsetvl)(CPURISCVState *env, target_ulong s1,
|
|||
* VLEN * LMUL >= SEW
|
||||
* VLEN >> (8 - lmul) >= sew
|
||||
* (vlenb << 3) >> (8 - lmul) >= sew
|
||||
* vlenb >> (8 - 3 - lmul) >= sew
|
||||
*/
|
||||
if (vlmul == 4 ||
|
||||
cpu->cfg.vlenb >> (8 - 3 - vlmul) < sew) {
|
||||
if (vlmul == 4 || (vlen >> (8 - vlmul)) < sew) {
|
||||
vill = true;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue