From 399a8c766c0526b51cd180e1b1c776d6dc95bad8 Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Thu, 17 Jun 2021 13:15:52 +0100 Subject: target/arm: Implement MVE VNEG Implement the MVE VNEG insn (both integer and floating point forms). Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson Message-id: 20210617121628.20116-9-peter.maydell@linaro.org --- target/arm/mve_helper.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'target/arm/mve_helper.c') diff --git a/target/arm/mve_helper.c b/target/arm/mve_helper.c index 2cf28f054b..7b662f9e03 100644 --- a/target/arm/mve_helper.c +++ b/target/arm/mve_helper.c @@ -294,3 +294,15 @@ DO_1OP(vabsw, 4, int32_t, DO_ABS) /* We can do these 64 bits at a time */ DO_1OP(vfabsh, 8, uint64_t, DO_FABSH) DO_1OP(vfabss, 8, uint64_t, DO_FABSS) + +#define DO_NEG(N) (-(N)) +#define DO_FNEGH(N) ((N) ^ dup_const(MO_16, 0x8000)) +#define DO_FNEGS(N) ((N) ^ dup_const(MO_32, 0x80000000)) + +DO_1OP(vnegb, 1, int8_t, DO_NEG) +DO_1OP(vnegh, 2, int16_t, DO_NEG) +DO_1OP(vnegw, 4, int32_t, DO_NEG) + +/* We can do these 64 bits at a time */ +DO_1OP(vfnegh, 8, uint64_t, DO_FNEGH) +DO_1OP(vfnegs, 8, uint64_t, DO_FNEGS) -- cgit 1.4.1