target/arm: Implement MVE VMULL (polynomial)
commitc1bd78cb06afb37e4043d2b0db000abfecab5fe4
authorPeter Maydell <peter.maydell@linaro.org>
Fri, 13 Aug 2021 16:11:50 +0000 (13 17:11 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Wed, 25 Aug 2021 09:48:49 +0000 (25 10:48 +0100)
tree43597baa663872f6d280ef3ab9c26beb06b89f96
parent41704cc262d6f451470c2074560bc7309064865d
target/arm: Implement MVE VMULL (polynomial)

Implement the MVE VMULL (polynomial) insn.  Unlike Neon, this comes
in two flavours: 8x8->16 and a 16x16->32.  Also unlike Neon, the
inputs are in either the low or the high half of each double-width
element.

The assembler for this insn indicates the size with "P8" or "P16",
encoded into bit 28 as size = 0 or 1. We choose to follow the
same encoding as VQDMULL and decode this into a->size as MO_16
or MO_32 indicating the size of the result elements. This then
carries through to the helper function names where it then
matches up with the existing pmull_h() which does an 8x8->16
operation and a new pmull_w() which does the 16x16->32.

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