qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] tcg/i386: Bound shift count expanding sari_vec


From: Richard Henderson
Subject: Re: [PATCH] tcg/i386: Bound shift count expanding sari_vec
Date: Sun, 15 Mar 2020 12:00:42 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1

Ping.

On 3/10/20 10:21 PM, Richard Henderson wrote:
> A given RISU testcase for SVE can produce
> 
> tcg-op-vec.c:511: do_shifti: Assertion `i >= 0 && i < (8 << vece)' failed.
> 
> because expand_vec_sari gave a shift count of 32 to a MO_32
> vector shift.
> 
> In 44f1441dbe1, we changed from direct expansion of vector opcodes
> to re-use of the tcg expanders.  So while the comment correctly notes
> that the hw will handle such a shift count, we now have to take our
> own sanity checks into account.  Which is easy in this particular case.
> 
> Fixes: 44f1441dbe1
> Signed-off-by: Richard Henderson <address@hidden>
> ---
>  tcg/i386/tcg-target.inc.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/tcg/i386/tcg-target.inc.c b/tcg/i386/tcg-target.inc.c
> index cdedcb2b25..223dba9c8c 100644
> --- a/tcg/i386/tcg-target.inc.c
> +++ b/tcg/i386/tcg-target.inc.c
> @@ -3391,12 +3391,15 @@ static void expand_vec_sari(TCGType type, unsigned 
> vece,
>  
>      case MO_64:
>          if (imm <= 32) {
> -            /* We can emulate a small sign extend by performing an arithmetic
> +            /*
> +             * We can emulate a small sign extend by performing an arithmetic
>               * 32-bit shift and overwriting the high half of a 64-bit logical
> -             * shift (note that the ISA says shift of 32 is valid).
> +             * shift.  Note that the ISA says shift of 32 is valid, but TCG
> +             * does not, so we have to bound the smaller shift -- we get the
> +             * same result in the high half either way.
>               */
>              t1 = tcg_temp_new_vec(type);
> -            tcg_gen_sari_vec(MO_32, t1, v1, imm);
> +            tcg_gen_sari_vec(MO_32, t1, v1, MIN(imm, 31));
>              tcg_gen_shri_vec(MO_64, v0, v1, imm);
>              vec_gen_4(INDEX_op_x86_blend_vec, type, MO_32,
>                        tcgv_vec_arg(v0), tcgv_vec_arg(v0),
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]