On Fri, 13 May 2022 at 17:16, Richard Henderson
<richard.hender...@linaro.org> wrote:
>
> On 5/13/22 08:54, Peter Maydell wrote:
> >> +    s390_vec_write_element64(v1, 0, k << es);
> >
> > Specifically here, because k is 32 bit but s390_vec_write_element64()
> > takes a uint64_t argument, we will do the shift as a signed 32 bit
> > value before widening to 64 bits, so if the values of 'k' and 'es'
> > are such that we might shift beyond bit 32 we'll get the wrong
> > value. It looks like 'es' is one of the MO_* values, so generally
> > small, but the upper bound on 'k' is a bit less obvious to me.
> > Is the overflow-of-32-bits case impossible?
>
> No, the upper bound of (k << es) is 16.
>
> We perform the operation with k in units of element size, so that indexing 
> works nicely,
> then convert back to units of bytes at the end to report results.  It's a 
> byte index into
> the vector register, with 16 as an indicator of match not found + eos not 
> found.

Cool; I've marked the coverity issue as a false positive.

thanks
-- PMM

Reply via email to