Message ID | 20201028191712.4910-2-peter.maydell@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Fix some Neon insns on big-endian hosts | expand |
On 10/28/20 8:17 PM, Peter Maydell wrote: > In the neon_padd/pmax/pmin helpers for float16, a cut-and-paste error > meant we were using the H4() address swizzler macro rather than the > H2() which is required for 2-byte data. This had no effect on > little-endian hosts but meant we put the result data into the > destination Dreg in the wrong order on big-endian hosts. > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> > --- > target/arm/vec_helper.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
On 10/28/20 8:45 PM, Philippe Mathieu-Daudé wrote: > On 10/28/20 8:17 PM, Peter Maydell wrote: >> In the neon_padd/pmax/pmin helpers for float16, a cut-and-paste error >> meant we were using the H4() address swizzler macro rather than the >> H2() which is required for 2-byte data. This had no effect on >> little-endian hosts but meant we put the result data into the >> destination Dreg in the wrong order on big-endian hosts. >> >> Signed-off-by: Peter Maydell <peter.maydell@linaro.org> >> --- >> target/arm/vec_helper.c | 8 ++++---- >> 1 file changed, 4 insertions(+), 4 deletions(-) > > Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index a973454e4f4..30d76d05beb 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -1858,10 +1858,10 @@ DO_ABA(gvec_uaba_d, uint64_t) r2 = float16_##OP(m[H2(0)], m[H2(1)], fpst); \ r3 = float16_##OP(m[H2(2)], m[H2(3)], fpst); \ \ - d[H4(0)] = r0; \ - d[H4(1)] = r1; \ - d[H4(2)] = r2; \ - d[H4(3)] = r3; \ + d[H2(0)] = r0; \ + d[H2(1)] = r1; \ + d[H2(2)] = r2; \ + d[H2(3)] = r3; \ } DO_NEON_PAIRWISE(neon_padd, add)
In the neon_padd/pmax/pmin helpers for float16, a cut-and-paste error meant we were using the H4() address swizzler macro rather than the H2() which is required for 2-byte data. This had no effect on little-endian hosts but meant we put the result data into the destination Dreg in the wrong order on big-endian hosts. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- target/arm/vec_helper.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)