Add HVX contexts to Hexagon translation, necessary for system emulation.
Change the HVX instruction translation to access the context via a base
pointer.
Modeling the HVX context mapping while avoiding the need to copy the
context when the OS scheduler decides to remap them required some general
TCG gvec changes to enable some more _var forms.
In v4:
- moved the linux-user hvx_ctx from ArchCPU to CPUArchState, eliminating
linux-user/main.c change.
- `tests/functional/hexagon: add HVX tests` is the patch that lacks any R-b
In v3:
- fixed HVX context alignment declarations
- created hex_hvx_ptr global for sysemu, abstraction hex_hvx() to refer
to the context.
- added some test cases (reset Marco's R-b)
In v2:
- Removed unused default hvx context from target/hexagon/cpu.[ch], add a
hexagon_hvx_select_context() to the reset instead.
- combined the HVX pointer, QOM context, and SSR:XA selection work commits
into `share HVX contexts among CPUs`.
v3: https://lore.kernel.org/qemu-devel/20260913155928.365928-1-brian.cain@oss.qualcomm.com/
v2: https://lore.kernel.org/qemu-devel/20260911204334.1264922-1-brian.cain@oss.qualcomm.com/
v1: https://lore.kernel.org/qemu-devel/20260910153221.1674285-1-brian.cain@oss.qualcomm.com/
Brian Cain (6):
tcg: split out _var forms of gvec logical, abs and min/max ops
tcg: add base arguments to the gvec 2s, dup_i32 and cmp expanders
tcg: split out _var forms of gvec saturating/mul/shift-immediate ops
target/hexagon: raise an exception for HVX with SSR:XE clear
target/hexagon: share HVX contexts among CPUs
tests/functional/hexagon: add HVX tests
include/hw/hexagon/hexagon.h | 1 +
include/hw/hexagon/hexagon_hvx_context.h | 27 +
include/tcg/tcg-op-gvec-common.h | 97 +++
target/hexagon/cpu.h | 26 +-
target/hexagon/cpu_helper.h | 1 +
target/hexagon/gen_tcg_hvx.h | 608 ++++++++++---------
target/hexagon/genptr.h | 8 +
target/hexagon/mmvec/macros.h | 14 +-
target/hexagon/translate.h | 13 +-
hw/hexagon/hex-subsys.c | 36 ++
hw/hexagon/hexagon_hvx_context.c | 84 +++
target/hexagon/cpu.c | 32 +-
target/hexagon/cpu_helper.c | 72 +++
target/hexagon/gdbstub.c | 16 +-
target/hexagon/genptr.c | 102 ++--
target/hexagon/machine.c | 12 +
target/hexagon/op_helper.c | 37 +-
target/hexagon/translate.c | 71 ++-
tcg/tcg-op-gvec.c | 617 ++++++++++++++------
hw/hexagon/meson.build | 1 +
target/hexagon/hex_common.py | 179 +++---
tests/functional/hexagon/test_arch_tests.py | 7 +
tests/functional/hexagon/test_systests.py | 6 +
23 files changed, 1446 insertions(+), 621 deletions(-)
create mode 100644 include/hw/hexagon/hexagon_hvx_context.h
create mode 100644 hw/hexagon/hexagon_hvx_context.c
--
2.34.1