[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 07/24] target/arm: Fix MVE widening/narrowing VLDR/VSTR offset cal
From: |
Peter Maydell |
Subject: |
[PULL 07/24] target/arm: Fix MVE widening/narrowing VLDR/VSTR offset calculation |
Date: |
Fri, 2 Jul 2021 13:59:37 +0100 |
In do_ldst(), the calculation of the offset needs to be based on the
size of the memory access, not the size of the elements in the
vector. This meant we were getting it wrong for the widening and
narrowing variants of the various VLDR and VSTR insns.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20210628135835.6690-2-peter.maydell@linaro.org
---
target/arm/translate-mve.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/target/arm/translate-mve.c b/target/arm/translate-mve.c
index 67462bdf27d..e9a5442a724 100644
--- a/target/arm/translate-mve.c
+++ b/target/arm/translate-mve.c
@@ -120,7 +120,8 @@ static bool mve_skip_first_beat(DisasContext *s)
}
}
-static bool do_ldst(DisasContext *s, arg_VLDR_VSTR *a, MVEGenLdStFn *fn)
+static bool do_ldst(DisasContext *s, arg_VLDR_VSTR *a, MVEGenLdStFn *fn,
+ unsigned msize)
{
TCGv_i32 addr;
uint32_t offset;
@@ -141,7 +142,7 @@ static bool do_ldst(DisasContext *s, arg_VLDR_VSTR *a,
MVEGenLdStFn *fn)
return true;
}
- offset = a->imm << a->size;
+ offset = a->imm << msize;
if (!a->a) {
offset = -offset;
}
@@ -178,22 +179,22 @@ static bool trans_VLDR_VSTR(DisasContext *s,
arg_VLDR_VSTR *a)
{ gen_helper_mve_vstrw, gen_helper_mve_vldrw },
{ NULL, NULL }
};
- return do_ldst(s, a, ldstfns[a->size][a->l]);
+ return do_ldst(s, a, ldstfns[a->size][a->l], a->size);
}
-#define DO_VLDST_WIDE_NARROW(OP, SLD, ULD, ST) \
+#define DO_VLDST_WIDE_NARROW(OP, SLD, ULD, ST, MSIZE) \
static bool trans_##OP(DisasContext *s, arg_VLDR_VSTR *a) \
{ \
static MVEGenLdStFn * const ldstfns[2][2] = { \
{ gen_helper_mve_##ST, gen_helper_mve_##SLD }, \
{ NULL, gen_helper_mve_##ULD }, \
}; \
- return do_ldst(s, a, ldstfns[a->u][a->l]); \
+ return do_ldst(s, a, ldstfns[a->u][a->l], MSIZE); \
}
-DO_VLDST_WIDE_NARROW(VLDSTB_H, vldrb_sh, vldrb_uh, vstrb_h)
-DO_VLDST_WIDE_NARROW(VLDSTB_W, vldrb_sw, vldrb_uw, vstrb_w)
-DO_VLDST_WIDE_NARROW(VLDSTH_W, vldrh_sw, vldrh_uw, vstrh_w)
+DO_VLDST_WIDE_NARROW(VLDSTB_H, vldrb_sh, vldrb_uh, vstrb_h, MO_8)
+DO_VLDST_WIDE_NARROW(VLDSTB_W, vldrb_sw, vldrb_uw, vstrb_w, MO_8)
+DO_VLDST_WIDE_NARROW(VLDSTH_W, vldrh_sw, vldrh_uw, vstrh_w, MO_16)
static bool trans_VDUP(DisasContext *s, arg_VDUP *a)
{
--
2.20.1
- [PULL 00/24] target-arm queue, Peter Maydell, 2021/07/02
- [PULL 01/24] docs/system/arm: Add quanta-q7l1-bmc reference, Peter Maydell, 2021/07/02
- [PULL 03/24] hw/arm: Add basic power management to raspi., Peter Maydell, 2021/07/02
- [PULL 05/24] target/arm: Check NaN mode before silencing NaN, Peter Maydell, 2021/07/02
- [PULL 02/24] docs/system/arm: Add quanta-gbs-bmc reference, Peter Maydell, 2021/07/02
- [PULL 04/24] tests: Boot and halt a Linux guest on the Raspberry Pi 2 machine, Peter Maydell, 2021/07/02
- [PULL 07/24] target/arm: Fix MVE widening/narrowing VLDR/VSTR offset calculation,
Peter Maydell <=
- [PULL 08/24] target/arm: Fix bugs in MVE VRMLALDAVH, VRMLSLDAVH, Peter Maydell, 2021/07/02
- [PULL 12/24] target/arm: Implement MVE logical immediate insns, Peter Maydell, 2021/07/02
- [PULL 13/24] target/arm: Implement MVE vector shift left by immediate insns, Peter Maydell, 2021/07/02
- [PULL 20/24] target/arm: Implement MVE VADDLV, Peter Maydell, 2021/07/02
- [PULL 21/24] target/arm: Implement MVE long shifts by immediate, Peter Maydell, 2021/07/02
- [PULL 18/24] target/arm: Implement MVE saturating narrowing shifts, Peter Maydell, 2021/07/02
- [PULL 11/24] target/arm: Use dup_const() instead of bitfield_replicate(), Peter Maydell, 2021/07/02
- [PULL 17/24] target/arm: Implement MVE VSHRN, VRSHRN, Peter Maydell, 2021/07/02
- [PULL 06/24] hw/gpio/gpio_pwr: use shutdown function for reboot, Peter Maydell, 2021/07/02
- [PULL 09/24] target/arm: Make asimd_imm_const() public, Peter Maydell, 2021/07/02