target/arm: Implement MVE long shifts by register
commit0aa4b4c358bfced42306de697e6408cabf922cf5
authorPeter Maydell <peter.maydell@linaro.org>
Mon, 28 Jun 2021 13:58:33 +0000 (28 14:58 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Fri, 2 Jul 2021 10:48:37 +0000 (2 11:48 +0100)
treecc52069dd0a0862fd25527e878b7e3e74b5037d3
parentf4ae6c8cbda8d9b21290e9b8ae21b785ca24aace
target/arm: Implement MVE long shifts by register

Implement the MVE long shifts by register, which perform shifts on a
pair of general-purpose registers treated as a 64-bit quantity, with
the shift count in another general-purpose register, which might be
either positive or negative.

Like the long-shifts-by-immediate, these encodings sit in the space
that was previously the UNPREDICTABLE MOVS/ORRS with Rm==13,15.
Because LSLL_rr and ASRL_rr overlap with both MOV_rxri/ORR_rrri and
also with CSEL (as one of the previously-UNPREDICTABLE Rm==13 cases),
we have to move the CSEL pattern into the same decodetree group.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20210628135835.6690-17-peter.maydell@linaro.org
target/arm/helper-mve.h
target/arm/mve_helper.c
target/arm/t32.decode
target/arm/translate.c
target/arm/translate.h