On Wed, Oct 14, 2026 at 2:52 PM Brian Cain <[email protected]> wrote:
>
> v83 and v85 introduce new ISA extensions:
> - CFI/restricted branches
> - scalar atomic operations
> - scalar float operations
> - trap2 instruction
> - vector stack, used by HLX
>
> The HLX vector coprocessor, also introduced by these new revisions, is
> not included in this series.
>
> The cross-toolchain doesn't yet support these opcodes.  So in our tests,
> we've manually encoded the instructions using ".word" directives and we
> invoke the tests with the explicit '-cpu'.  The directives will be replaced
> with the mnemonics and explicit '-cpu' removed once the assembler has the
> necessary support.  I expect LLVM 24.x will include these instructions.
>
> Brian Cain (12):
>   target/hexagon: sort tag_rev_info entries by version
>   Hexagon: add v85 CPU model
>   hw/hexagon: add v85 machines
>   linux-user/hexagon: report ISA HWCAP through v85
>   target/hexagon: add v85 scalar atomics
>   target/hexagon: add v83 trap2 and vector stack instructions
>   target/hexagon: generate vector frame instructions with IDEF parser
>   target/hexagon: reject reserved L4_loadw_phys encoding from v83
>   target/hexagon: preserve callr target when Rs is LR
>   target/hexagon: implement control flow integrity (CFI)
>   target/hexagon: add vsf* instructions
>   tests/tcg/hexagon: add v85 scalar tests
>
>  docs/system/hexagon/emulation.rst           |   2 +-
>  include/hw/hexagon/hexagon.h                |   6 +-
>  linux-user/hexagon/target_elf.h             |   2 +
>  target/hexagon/cpu-qom.h                    |   4 +
>  target/hexagon/cpu.h                        |   3 +
>  target/hexagon/cpu_bits.h                   |   2 +
>  target/hexagon/gen_tcg.h                    |  93 +++++++++++-
>  target/hexagon/gen_tcg_sys.h                |   6 +
>  target/hexagon/genptr.h                     |  12 ++
>  target/hexagon/helper.h                     |   5 +
>  target/hexagon/hex_regs.h                   |   2 +
>  target/hexagon/idef-parser/parser-helpers.h |   1 +
>  target/hexagon/macros.h                     |  12 ++
>  target/hexagon/translate.h                  |   4 +
>  tests/tcg/hexagon/cfi_tgts.h                |  16 ++
>  hw/hexagon/machine_cfg_v85na_1.h.inc        |  50 +++++++
>  hw/hexagon/machine_cfg_v85qa_1.h.inc        |  51 +++++++
>  target/hexagon/attribs_def.h.inc            |   2 +
>  target/hexagon/reg_fields_def.h.inc         |   1 +
>  hw/hexagon/hexagon_dsp.c                    |  48 +++++-
>  linux-user/hexagon/cpu_loop.c               |  10 ++
>  linux-user/hexagon/elfload.c                |  10 ++
>  target/hexagon/cpu.c                        |  10 +-
>  target/hexagon/decode.c                     |   5 +
>  target/hexagon/genptr.c                     |  95 +++++++++++-
>  target/hexagon/hex_interrupts.c             |   3 +
>  target/hexagon/hexswi.c                     |  16 ++
>  target/hexagon/idef-parser/parser-helpers.c |  14 ++
>  target/hexagon/machine.c                    |   3 +-
>  target/hexagon/op_helper.c                  |  73 +++++++++
>  target/hexagon/translate.c                  |  53 ++++++-
>  tests/tcg/hexagon/atomics.c                 | 102 +++++++++++++
>  tests/tcg/hexagon/cfi_user.c                |  63 ++++++++
>  tests/tcg/hexagon/check_rev_gating.c        |  10 ++
>  tests/tcg/hexagon/invalid-encoding.c        |  20 +++
>  tests/tcg/hexagon/trap2.c                   |  34 +++++
>  tests/tcg/hexagon/v83_scalar_fp.c           |  98 ++++++++++++
>  tests/tcg/hexagon/vallocframe.c             | 111 ++++++++++++++
>  target/hexagon/tag_rev_info.c.inc           |  82 ++++++++--
>  target/hexagon/gen_idef_parser_funcs.py     |   4 +-
>  target/hexagon/idef-parser/idef-parser.lex  |   8 +
>  target/hexagon/idef-parser/idef-parser.y    |   9 +-
>  target/hexagon/imported/alu.idef            |   3 +
>  target/hexagon/imported/branch.idef         |  38 +++++
>  target/hexagon/imported/encode_pp.def       |  43 +++++-
>  target/hexagon/imported/encode_subinsn.def  |   1 +
>  target/hexagon/imported/float.idef          |  49 ++++++
>  target/hexagon/imported/ldst.idef           |  15 ++
>  target/hexagon/imported/macros.def          |  10 ++
>  target/hexagon/imported/subinsns.idef       |   2 +
>  target/hexagon/imported/system.idef         |   9 ++
>  tests/tcg/hexagon/cfi_tgts.S                | 157 ++++++++++++++++++++
>  tests/tcg/hexagon/meson.build               |  19 ++-
>  53 files changed, 1470 insertions(+), 31 deletions(-)
>  create mode 100644 tests/tcg/hexagon/cfi_tgts.h
>  create mode 100644 hw/hexagon/machine_cfg_v85na_1.h.inc
>  create mode 100644 hw/hexagon/machine_cfg_v85qa_1.h.inc
>  create mode 100644 tests/tcg/hexagon/cfi_user.c
>  create mode 100644 tests/tcg/hexagon/trap2.c
>  create mode 100644 tests/tcg/hexagon/v83_scalar_fp.c
>  create mode 100644 tests/tcg/hexagon/vallocframe.c
>  create mode 100644 tests/tcg/hexagon/cfi_tgts.S
>
> --
> 2.34.1
>

General notes:

1. The series does not bisect (Patches 5-9):
A_RESTRICT_TARGET is undeclared. Patch 5 adds
S2_allocframe_rb to ldst.idef, but the attribute comes in patch 10.
Moving those two lines to patch 10 fixes it.

2. The no idef parser build is broken after commit 7 (Patches 7-12):
patch 7 drops the fGEN_TCG_V2_v{,de}allocframe_* overrides, and
patch 10 adds S2/SS2_allocframe_rb without overrides. Should we
keep the ones in commit 7 and add some for the additions in commit 10?

Reply via email to