On 11 February 2011 15:10, <christophe.l...@st.com> wrote: > +uint32_t HELPER(neon_rshl_s32)(uint32_t valop, uint32_t shiftop) > +{ > + int32_t dest; > + int32_t val = (int32_t)valop; > + int8_t shift = (int8_t)shiftop; > + if (shift >= 32) { > + dest = 0; > + } else if (shift < -32) { > + dest = val >> 31;
This is the wrong answer: large rounding right shifts give zero. > + } else if (shift == -32) { > + dest = val >> 31; > + dest++; > + dest >>= 1; These three lines will always result in dest becoming 0 regardless of the input value. I'm going to post a patch which fixes these as part of getting the answers right for VRSHL by large shift counts in general. -- PMM