Anton pointed out this endianness issue with HVX, and found this region length issue along the way.
Fixed in v2: * byte access helpers now all use hexagon_ prefix. * Predicate bytes are extracted from 32-bit words rather than 64-bit words, matching the host-native predicate layout. * Gather only reads memory for lanes that are both in range and predicate enabled. So dropped lanes cannot fault or otherwise access memory. * The gather region-length test now places an out-of-range offset on an inaccessible page, verifying that a dropped lane performs no read. Added v2 commits: * fix for histogram predicates - were using the wrong size * test to cover predicate byte permutation Brian Cain (5): target/hexagon: fix HVX big-endian byte access target/hexagon: fix HVX scatter/gather region-length check tests/tcg/hexagon: add vgather/vscatter region-length tests target/hexagon: fix HVX predicate save size for histogram ops tests/tcg/hexagon: check the two HVX predicate build paths agree target/hexagon/gen_tcg_hvx.h | 10 +- target/hexagon/mmvec/macros.h | 50 +++++---- target/hexagon/mmvec/mmvec.h | 18 ++++ target/hexagon/cpu.c | 17 +-- target/hexagon/genptr.c | 3 +- target/hexagon/mmvec/system_ext_mmvec.c | 2 +- target/hexagon/op_helper.c | 17 ++- tests/tcg/hexagon/hvx_misc.c | 45 ++++++++ tests/tcg/hexagon/scatter_gather.c | 138 +++++++++++++++++++++++- 9 files changed, 261 insertions(+), 39 deletions(-) -- 2.34.1
