target/arm: Fix MVE 48-bit SQRSHRL for small right shifts
authorPeter Maydell <peter.maydell@linaro.org>
Fri, 13 Aug 2021 16:11:48 +0000 (17:11 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Wed, 25 Aug 2021 09:48:48 +0000 (10:48 +0100)
commitfdcf2269c4e0e4f5ca3a389290a71d7aa98bd5c7
treef76078403ccb304148d3c0ac2884fbe34bf98617
parent95351aa76c8f68564c4be547c1d19d9cabffc147
target/arm: Fix MVE 48-bit SQRSHRL for small right shifts

We got an edge case wrong in the 48-bit SQRSHRL implementation: if
the shift is to the right, although it always makes the result
smaller than the input value it might not be within the 48-bit range
the result is supposed to be if the input had some bits in [63..48]
set and the shift didn't bring all of those within the [47..0] range.

Handle this similarly to the way we already do for this case in
do_uqrshl48_d(): extend the calculated result from 48 bits,
and return that if not saturating or if it doesn't change the
result; otherwise fall through to return a saturated value.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
target/arm/mve_helper.c