This series adds support for the Hexagon Vector eXtensions (HVX) These instructions are documented here https://developer.qualcomm.com/downloads/qualcomm-hexagon-v66-hvx-programmer-s-reference-manual
Hexagon HVX is a wide vector engine with 128 byte vectors. See patch 01 Hexagon HVX README for more information. *** Known checkpatch issues *** The following are known checkpatch errors in the series target/hexagon/gen_semantics.c Suspicious ; after while (0) tests/tcg/hexagon/hvx_misc.c Spaces around operator in macro invocation *** Changes in v4 *** Address feedback from Richard Henderson <richard.hender...@linaro.org> - Use tcg_gen_gvec_orc/tcg_gen_gvec_andc Add tests for the following opcodes V6_pred_or V6_pred_or_n V6_pred_and V6_pred_and_n V6_pred_xor Probe the HVX stores at the beginning of gen_commit_packet See patches 11 (helper functions) and 12 (TCG generation) Use tcg_constant_* instead of tcg_const_* *** Changes in v3 *** Clean up gen_log_vreg_write - Remove has_vhist parameter Remove VRegs_updated_tmp from runtime state - Check there is exactly one tmp for vhist at TCG generation time Remove VRegs_select from runtime state Add test_max_temps test to tests/tcg/hexagon/hvx_misc.c Don't pass slot to HVX helpers *** Changes in v2 *** Address feedback from Richard Henderson <richard.hender...@linaro.org> - Remove zero_vector from CPUHexagonState - Remove gather_issued from CPUHexagonState - Remove is_gather_store_insn from DisasContext and CPUHexagonState - Change VStoreLog.mask to a bitmap - Change VTCMStoreLog.mask to a bitmap - Convert future_VRegs, tmp_Vregs to allocate as-needed - Don't cast away const - Remove/simplify count_leading_ones_2 - Control HVX dump with CPU_DUMP_FPU Remove HVX support from target/hexagon/gdbstub.c - Hexagon uses lldb which will require support for qRegisterInfo in the target-independent gdbstub. Will contribute this separately Convert the histogram instructions to execute at the end of packet commit - This is necessary to allocate future_VRegs as-needed Additional tests added in tests/tcg/hexagon Added helper overrides for several instructions - As a result, cleaned up utility functions Additional_cleanup - Change TCGv_ptr to not _local_ - Remove env argument from gen_commit_hvx Taylor Simpson (30): Hexagon HVX (target/hexagon) README Hexagon HVX (target/hexagon) add Hexagon Vector eXtensions (HVX) to core Hexagon HVX (target/hexagon) register names Hexagon HVX (target/hexagon) instruction attributes Hexagon HVX (target/hexagon) macros Hexagon HVX (target/hexagon) import macro definitions Hexagon HVX (target/hexagon) semantics generator Hexagon HVX (target/hexagon) semantics generator - part 2 Hexagon HVX (target/hexagon) C preprocessor for decode tree Hexagon HVX (target/hexagon) instruction utility functions Hexagon HVX (target/hexagon) helper functions Hexagon HVX (target/hexagon) TCG generation Hexagon HVX (target/hexagon) helper overrides infrastructure Hexagon HVX (target/hexagon) helper overrides for histogram instructions Hexagon HVX (target/hexagon) helper overrides - vector assign & cmov Hexagon HVX (target/hexagon) helper overrides - vector add & sub Hexagon HVX (target/hexagon) helper overrides - vector shifts Hexagon HVX (target/hexagon) helper overrides - vector max/min Hexagon HVX (target/hexagon) helper overrides - vector logical ops Hexagon HVX (target/hexagon) helper overrides - vector compares Hexagon HVX (target/hexagon) helper overrides - vector splat and abs Hexagon HVX (target/hexagon) helper overrides - vector loads Hexagon HVX (target/hexagon) helper overrides - vector stores Hexagon HVX (target/hexagon) import semantics Hexagon HVX (target/hexagon) instruction decoding Hexagon HVX (target/hexagon) import instruction encodings Hexagon HVX (tests/tcg/hexagon) vector_add_int test Hexagon HVX (tests/tcg/hexagon) hvx_misc test Hexagon HVX (tests/tcg/hexagon) scatter_gather test Hexagon HVX (tests/tcg/hexagon) histogram test target/hexagon/cpu.h | 35 +- target/hexagon/gen_tcg_hvx.h | 903 +++++++++ target/hexagon/helper.h | 16 + target/hexagon/hex_arch_types.h | 5 + target/hexagon/hex_regs.h | 1 + target/hexagon/insn.h | 3 + target/hexagon/internal.h | 3 + target/hexagon/macros.h | 22 + target/hexagon/mmvec/decode_ext_mmvec.h | 24 + target/hexagon/mmvec/macros.h | 354 ++++ target/hexagon/mmvec/mmvec.h | 83 + target/hexagon/mmvec/system_ext_mmvec.h | 29 + target/hexagon/translate.h | 61 + tests/tcg/hexagon/hvx_histogram_input.h | 717 +++++++ tests/tcg/hexagon/hvx_histogram_row.h | 24 + target/hexagon/attribs_def.h.inc | 22 + target/hexagon/cpu.c | 80 +- target/hexagon/decode.c | 28 +- target/hexagon/gen_dectree_import.c | 13 + target/hexagon/gen_semantics.c | 33 + target/hexagon/genptr.c | 188 ++ target/hexagon/mmvec/decode_ext_mmvec.c | 236 +++ target/hexagon/mmvec/system_ext_mmvec.c | 66 + target/hexagon/op_helper.c | 282 ++- target/hexagon/translate.c | 243 ++- tests/tcg/hexagon/hvx_histogram.c | 88 + tests/tcg/hexagon/hvx_misc.c | 469 +++++ tests/tcg/hexagon/scatter_gather.c | 1011 ++++++++++ tests/tcg/hexagon/vector_add_int.c | 61 + target/hexagon/README | 81 +- target/hexagon/gen_helper_funcs.py | 115 +- target/hexagon/gen_helper_protos.py | 19 +- target/hexagon/gen_tcg_funcs.py | 257 ++- target/hexagon/hex_common.py | 13 + target/hexagon/imported/allext.idef | 25 + target/hexagon/imported/allext_macros.def | 25 + target/hexagon/imported/allextenc.def | 20 + target/hexagon/imported/allidefs.def | 1 + target/hexagon/imported/encode.def | 1 + target/hexagon/imported/macros.def | 88 + target/hexagon/imported/mmvec/encode_ext.def | 794 ++++++++ target/hexagon/imported/mmvec/ext.idef | 2606 ++++++++++++++++++++++++++ target/hexagon/imported/mmvec/macros.def | 842 +++++++++ target/hexagon/meson.build | 15 +- tests/tcg/hexagon/Makefile.target | 12 + tests/tcg/hexagon/hvx_histogram_row.S | 294 +++ 46 files changed, 10261 insertions(+), 47 deletions(-) create mode 100644 target/hexagon/gen_tcg_hvx.h create mode 100644 target/hexagon/mmvec/decode_ext_mmvec.h create mode 100644 target/hexagon/mmvec/macros.h create mode 100644 target/hexagon/mmvec/mmvec.h create mode 100644 target/hexagon/mmvec/system_ext_mmvec.h create mode 100644 tests/tcg/hexagon/hvx_histogram_input.h create mode 100644 tests/tcg/hexagon/hvx_histogram_row.h create mode 100644 target/hexagon/mmvec/decode_ext_mmvec.c create mode 100644 target/hexagon/mmvec/system_ext_mmvec.c create mode 100644 tests/tcg/hexagon/hvx_histogram.c create mode 100644 tests/tcg/hexagon/hvx_misc.c create mode 100644 tests/tcg/hexagon/scatter_gather.c create mode 100644 tests/tcg/hexagon/vector_add_int.c create mode 100644 target/hexagon/imported/allext.idef create mode 100644 target/hexagon/imported/allext_macros.def create mode 100644 target/hexagon/imported/allextenc.def create mode 100644 target/hexagon/imported/mmvec/encode_ext.def create mode 100644 target/hexagon/imported/mmvec/ext.idef create mode 100755 target/hexagon/imported/mmvec/macros.def create mode 100644 tests/tcg/hexagon/hvx_histogram_row.S -- 2.7.4