]> git.proxmox.com Git - mirror_qemu.git/commit
target/arm: Implement MVE FP max/min across vector
authorPeter Maydell <peter.maydell@linaro.org>
Wed, 1 Sep 2021 08:02:37 +0000 (09:02 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Wed, 1 Sep 2021 10:08:17 +0000 (11:08 +0100)
commit29f80e7d831f123268fcc15c5516b06eeec5eab5
tree7eb991f1aedb632e3cd213ae4a92340b96d7ebaa
parent2c8cb5888e998d7ba8e36c312644a11d832dbe9c
target/arm: Implement MVE FP max/min across vector

Implement the MVE VMAXNMV, VMINNMV, VMAXNMAV, VMINNMAV insns.  These
calculate the maximum or minimum of floating point elements across a
vector, starting with a value in a general purpose register and
returning the result there.

The pseudocode silences a possible SNaN in the accumulating result
on every iteration (by calling FPConvertNaN), but we do it only
on the input ra, because if none of the inputs to float*_maxnum
or float*_minnum are SNaNs then the result can't be an SNaN.

Note that we can't use the float*_maxnuma() etc functions we defined
earlier for VMAXNMA and VMINNMA, because we mustn't take the absolute
value of the starting general-purpose register value, which could be
negative.

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