[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 02/11] target/arm: Move neon_element_offset to translate.c
From: |
Richard Henderson |
Subject: |
[PATCH v2 02/11] target/arm: Move neon_element_offset to translate.c |
Date: |
Thu, 29 Oct 2020 19:26:09 -0700 |
This will shortly have users outside of translate-neon.c.inc.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
target/arm/translate.c | 20 ++++++++++++++++++++
target/arm/translate-neon.c.inc | 19 -------------------
2 files changed, 20 insertions(+), 19 deletions(-)
diff --git a/target/arm/translate.c b/target/arm/translate.c
index 1b61e50f9c..bf0b5cac61 100644
--- a/target/arm/translate.c
+++ b/target/arm/translate.c
@@ -1102,6 +1102,26 @@ static long neon_full_reg_offset(unsigned reg)
return offsetof(CPUARMState, vfp.zregs[reg >> 1].d[reg & 1]);
}
+/*
+ * Return the offset of a 2**SIZE piece of a NEON register, at index ELE,
+ * where 0 is the least significant end of the register.
+ */
+static long neon_element_offset(int reg, int element, MemOp size)
+{
+ int element_size = 1 << size;
+ int ofs = element * element_size;
+#ifdef HOST_WORDS_BIGENDIAN
+ /*
+ * Calculate the offset assuming fully little-endian,
+ * then XOR to account for the order of the 8-byte units.
+ */
+ if (element_size < 8) {
+ ofs ^= 8 - element_size;
+ }
+#endif
+ return neon_full_reg_offset(reg) + ofs;
+}
+
static inline long vfp_reg_offset(bool dp, unsigned reg)
{
if (dp) {
diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.inc
index e259e24c05..96ab2248fc 100644
--- a/target/arm/translate-neon.c.inc
+++ b/target/arm/translate-neon.c.inc
@@ -60,25 +60,6 @@ static inline int neon_3same_fp_size(DisasContext *s, int x)
#include "decode-neon-ls.c.inc"
#include "decode-neon-shared.c.inc"
-/* Return the offset of a 2**SIZE piece of a NEON register, at index ELE,
- * where 0 is the least significant end of the register.
- */
-static inline long
-neon_element_offset(int reg, int element, MemOp size)
-{
- int element_size = 1 << size;
- int ofs = element * element_size;
-#ifdef HOST_WORDS_BIGENDIAN
- /* Calculate the offset assuming fully little-endian,
- * then XOR to account for the order of the 8-byte units.
- */
- if (element_size < 8) {
- ofs ^= 8 - element_size;
- }
-#endif
- return neon_full_reg_offset(reg) + ofs;
-}
-
static void neon_load_element(TCGv_i32 var, int reg, int ele, MemOp mop)
{
long offset = neon_element_offset(reg, ele, mop & MO_SIZE);
--
2.25.1
- [PATCH v2 00/11] target/arm: Fix neon reg offsets, Richard Henderson, 2020/10/29
- [PATCH v2 01/11] target/arm: Introduce neon_full_reg_offset, Richard Henderson, 2020/10/29
- [PATCH v2 02/11] target/arm: Move neon_element_offset to translate.c,
Richard Henderson <=
- [PATCH v2 04/11] target/arm: Use neon_element_offset in vfp_reg_offset, Richard Henderson, 2020/10/29
- [PATCH v2 03/11] target/arm: Use neon_element_offset in neon_load/store_reg, Richard Henderson, 2020/10/29
- [PATCH v2 06/11] target/arm: Expand read/write_neon_element32 to all MemOp, Richard Henderson, 2020/10/29
- [PATCH v2 05/11] target/arm: Add read/write_neon_element32, Richard Henderson, 2020/10/29
- [PATCH v2 07/11] target/arm: Rename neon_load_reg32 to vfp_load_reg32, Richard Henderson, 2020/10/29
- [PATCH v2 08/11] target/arm: Add read/write_neon_element64, Richard Henderson, 2020/10/29
- [PATCH v2 10/11] target/arm: Simplify do_long_3d and do_2scalar_long, Richard Henderson, 2020/10/29
- [PATCH v2 11/11] target/arm: Improve do_prewiden_3d, Richard Henderson, 2020/10/29
- [PATCH v2 09/11] target/arm: Rename neon_load_reg64 to vfp_load_reg64, Richard Henderson, 2020/10/29
- Re: [PATCH v2 00/11] target/arm: Fix neon reg offsets, Peter Maydell, 2020/10/30