[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 17/55] target/arm: Implement MVE VMVN (register)
From: |
Peter Maydell |
Subject: |
[PATCH 17/55] target/arm: Implement MVE VMVN (register) |
Date: |
Mon, 7 Jun 2021 17:57:43 +0100 |
Implement the MVE VMVN(register) operation. Note that for
predication this operation is byte-by-byte.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
target/arm/helper-mve.h | 2 ++
target/arm/mve.decode | 3 +++
target/arm/mve_helper.c | 4 ++++
target/arm/translate-mve.c | 5 +++++
4 files changed, 14 insertions(+)
diff --git a/target/arm/helper-mve.h b/target/arm/helper-mve.h
index 4c89387587d..f1dc52f7a50 100644
--- a/target/arm/helper-mve.h
+++ b/target/arm/helper-mve.h
@@ -47,3 +47,5 @@ DEF_HELPER_FLAGS_3(mve_vrev32h, TCG_CALL_NO_WG, void, env,
ptr, ptr)
DEF_HELPER_FLAGS_3(mve_vrev64b, TCG_CALL_NO_WG, void, env, ptr, ptr)
DEF_HELPER_FLAGS_3(mve_vrev64h, TCG_CALL_NO_WG, void, env, ptr, ptr)
DEF_HELPER_FLAGS_3(mve_vrev64w, TCG_CALL_NO_WG, void, env, ptr, ptr)
+
+DEF_HELPER_FLAGS_3(mve_vmvn, TCG_CALL_NO_WG, void, env, ptr, ptr)
diff --git a/target/arm/mve.decode b/target/arm/mve.decode
index 16ee511a5cb..ff8afb682fb 100644
--- a/target/arm/mve.decode
+++ b/target/arm/mve.decode
@@ -30,6 +30,7 @@
@vldst_wn ... u:1 ... . . . . l:1 . rn:3 qd:3 . ... .. imm:7 &vldr_vstr
@1op .... .... .... size:2 .. .... .... .... .... &1op qd=%qd qm=%qm
+@1op_nosz .... .... .... .... .... .... .... .... &1op qd=%qd qm=%qm size=0
# Vector loads and stores
@@ -74,3 +75,5 @@ VCLZ 1111 1111 1 . 11 .. 00 ... 0 0100 11 . 0 ...
0 @1op
VREV16 1111 1111 1 . 11 .. 00 ... 0 0001 01 . 0 ... 0 @1op
VREV32 1111 1111 1 . 11 .. 00 ... 0 0000 11 . 0 ... 0 @1op
VREV64 1111 1111 1 . 11 .. 00 ... 0 0000 01 . 0 ... 0 @1op
+
+VMVN 1111 1111 1 . 11 00 00 ... 0 0101 11 . 0 ... 0 @1op_nosz
diff --git a/target/arm/mve_helper.c b/target/arm/mve_helper.c
index 055606b905f..2aacc733166 100644
--- a/target/arm/mve_helper.c
+++ b/target/arm/mve_helper.c
@@ -264,3 +264,7 @@ DO_1OP(vrev32h, 4, uint32_t, H4, hswap32)
DO_1OP(vrev64b, 8, uint64_t, , bswap64)
DO_1OP(vrev64h, 8, uint64_t, , hswap64)
DO_1OP(vrev64w, 8, uint64_t, , wswap64)
+
+#define DO_NOT(N) (~(N))
+
+DO_1OP(vmvn, 1, uint8_t, H1, DO_NOT)
diff --git a/target/arm/translate-mve.c b/target/arm/translate-mve.c
index 6f3d4796072..6e5c3df7179 100644
--- a/target/arm/translate-mve.c
+++ b/target/arm/translate-mve.c
@@ -244,3 +244,8 @@ static bool trans_VREV64(DisasContext *s, arg_1op *a)
};
return do_1op(s, a, fns[a->size]);
}
+
+static bool trans_VMVN(DisasContext *s, arg_1op *a)
+{
+ return do_1op(s, a, gen_helper_mve_vmvn);
+}
--
2.20.1
- Re: [PATCH 21/55] target/arm: Implement MVE VAND, VBIC, VORR, VORN, VEOR, (continued)
- [PATCH 32/55] target/arm: Implement MVE VRMLALDAVH, VRMLSLDAVH, Peter Maydell, 2021/06/07
- [PATCH 18/55] target/arm: Implement MVE VABS, Peter Maydell, 2021/06/07
- [PATCH 17/55] target/arm: Implement MVE VMVN (register),
Peter Maydell <=
- [PATCH 22/55] target/arm: Implement MVE VADD, VSUB, VMUL, Peter Maydell, 2021/06/07
- [PATCH 19/55] target/arm: Implement MVE VNEG, Peter Maydell, 2021/06/07
- [PATCH 25/55] target/arm: Implement MVE VMAX, VMIN, Peter Maydell, 2021/06/07
- [PATCH 28/55] target/arm: Implement MVE VMULL, Peter Maydell, 2021/06/07
- [PATCH 16/55] target/arm: Implement MVE VREV16, VREV32, VREV64, Peter Maydell, 2021/06/07