target/arm: Move computation of index in handle_simd_dupe
Coverity reports a BAD_SHIFT with ctz32(imm5), with imm5 == 0. This is an invalid encoding, but we diagnose that just below by rejecting size > 3. Avoid the warning by sinking the computation of index below the check. Reported-by: Coverity (CID 1421965) Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Message-id: 20200320160622.8040-4-richard.henderson@linaro.org Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
3944d58db3
commit
550a04893c
|
@ -7422,7 +7422,7 @@ static void handle_simd_dupe(DisasContext *s, int is_q, int rd, int rn,
|
|||
int imm5)
|
||||
{
|
||||
int size = ctz32(imm5);
|
||||
int index = imm5 >> (size + 1);
|
||||
int index;
|
||||
|
||||
if (size > 3 || (size == 3 && !is_q)) {
|
||||
unallocated_encoding(s);
|
||||
|
@ -7433,6 +7433,7 @@ static void handle_simd_dupe(DisasContext *s, int is_q, int rd, int rn,
|
|||
return;
|
||||
}
|
||||
|
||||
index = imm5 >> (size + 1);
|
||||
tcg_gen_gvec_dup_mem(size, vec_full_reg_offset(s, rd),
|
||||
vec_reg_offset(s, rn, index, size),
|
||||
is_q ? 16 : 8, vec_full_reg_size(s));
|
||||
|
|
Loading…
Reference in a new issue