target/arm: Fix calculation of LTP mask when LR is 0
In mve_element_mask(), we calculate a mask for tail predication which should have a number of 1 bits based on the value of LR. However, our MAKE_64BIT_MASK() macro has undefined behaviour when passed a zero length. Special case this to give the all-zeroes mask we require. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
fdcf2269c4
commit
3f4f1880c2
@ -64,7 +64,8 @@ static uint16_t mve_element_mask(CPUARMState *env)
|
||||
*/
|
||||
int masklen = env->regs[14] << env->v7m.ltpsize;
|
||||
assert(masklen <= 16);
|
||||
mask &= MAKE_64BIT_MASK(0, masklen);
|
||||
uint16_t ltpmask = masklen ? MAKE_64BIT_MASK(0, masklen) : 0;
|
||||
mask &= ltpmask;
|
||||
}
|
||||
|
||||
if ((env->condexec_bits & 0xf) == 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user