From: Alessandro Di Federico <a...@rev.ng> This patchset introduces the idef-parser for target/hexagon.
It's the fourth iteration of the patchset and includes fixes suggested in previous iterations. `idef-parser` is a build-time tool built using flex and bison. Its aim is to generate a large part of the tiny code generator frontend for Hexagon. The prototype of idef-parser has been presented at KVM Forum 2019 ("QEMU-Hexagon: Automatic Translation of the ISA Manual Pseudcode to Tiny Code Instructions"): https://www.youtube.com/watch?v=3EpnTYBOXCI `target/hexagon/idef-parser/README.rst` provides an overview of the parser and its inner working. A couple of notes: * `idef-parser` also supports certain things that are not used in the most recently submitted version of the "Hexagon patch series". However, they will be needed and stripping them out of the parser is quite a bit of work. * The build on the CI fails for the cross-i386-* jobs. This seems to be due to the fact that, despite we specified glib as a native dependency, meson still chooses the i386 bit version of the library, as opposed to the x86-64. Help on this matter is appreciated. The `clang-user` build fails too, but seems to be due reasons not concerning this patchset. * Unlike the last iteration of this patchset, we no longer use local temps, which were detrimental for performance. Now, in order to handle side effects in ternary operators, the parser keeps track of nested ternary operators and their conditions. We then exploit that information to turn the side effect itself into a `movcond`. This is done by emitting a series of `and` instructions on the nested ternary operator conditions. Alessandro Di Federico (5): tcg: expose TCGCond manipulation routines target/hexagon: update MAINTAINERS for idef-parser target/hexagon: import README for idef-parser target/hexagon: prepare input for the idef-parser target/hexagon: call idef-parser functions Niccolò Izzo (2): target/hexagon: introduce new helper functions target/hexagon: import additional tests Paolo Montesel (5): target/hexagon: make slot number an unsigned target/hexagon: make helper functions non-static target/hexagon: expose next PC in DisasContext target/hexagon: import lexer for idef-parser target/hexagon: import parser for idef-parser MAINTAINERS | 8 + include/tcg/tcg-cond.h | 101 + include/tcg/tcg.h | 70 +- target/hexagon/README | 5 + target/hexagon/gen_idef_parser_funcs.py | 114 + target/hexagon/gen_tcg_funcs.py | 28 +- target/hexagon/genptr.c | 201 +- target/hexagon/genptr.h | 28 + target/hexagon/hex_common.py | 10 + target/hexagon/idef-parser/README.rst | 447 ++++ target/hexagon/idef-parser/idef-parser.h | 254 ++ target/hexagon/idef-parser/idef-parser.lex | 611 +++++ target/hexagon/idef-parser/idef-parser.y | 947 +++++++ target/hexagon/idef-parser/macros.inc | 150 ++ target/hexagon/idef-parser/parser-helpers.c | 2374 +++++++++++++++++ target/hexagon/idef-parser/parser-helpers.h | 347 +++ target/hexagon/idef-parser/prepare | 24 + target/hexagon/macros.h | 11 +- target/hexagon/meson.build | 67 +- target/hexagon/translate.c | 3 +- target/hexagon/translate.h | 1 + tests/docker/dockerfiles/alpine.docker | 2 + tests/docker/dockerfiles/centos7.docker | 2 + tests/docker/dockerfiles/centos8.docker | 2 + tests/docker/dockerfiles/debian10.docker | 3 + .../dockerfiles/fedora-i386-cross.docker | 3 + .../dockerfiles/fedora-win32-cross.docker | 3 + .../dockerfiles/fedora-win64-cross.docker | 3 + tests/docker/dockerfiles/fedora.docker | 2 + tests/docker/dockerfiles/opensuse-leap.docker | 2 + tests/docker/dockerfiles/ubuntu.docker | 3 + tests/docker/dockerfiles/ubuntu1804.docker | 3 + tests/docker/dockerfiles/ubuntu2004.docker | 5 +- tests/tcg/hexagon/Makefile.target | 36 +- tests/tcg/hexagon/crt.S | 28 + tests/tcg/hexagon/test_abs.S | 20 + tests/tcg/hexagon/test_add.S | 20 + tests/tcg/hexagon/test_andp.S | 23 + tests/tcg/hexagon/test_bitcnt.S | 42 + tests/tcg/hexagon/test_bitsplit.S | 25 + tests/tcg/hexagon/test_call.S | 63 + tests/tcg/hexagon/test_clobber.S | 35 + tests/tcg/hexagon/test_cmp.S | 34 + tests/tcg/hexagon/test_cmpy.S | 31 + tests/tcg/hexagon/test_djump.S | 24 + tests/tcg/hexagon/test_dotnew.S | 39 + tests/tcg/hexagon/test_dstore.S | 29 + tests/tcg/hexagon/test_ext.S | 18 + tests/tcg/hexagon/test_fibonacci.S | 33 + tests/tcg/hexagon/test_hello.S | 21 + tests/tcg/hexagon/test_hl.S | 19 + tests/tcg/hexagon/test_hwloops.S | 25 + tests/tcg/hexagon/test_jmp.S | 25 + tests/tcg/hexagon/test_lsr.S | 39 + tests/tcg/hexagon/test_mpyi.S | 20 + tests/tcg/hexagon/test_overflow.S | 63 + tests/tcg/hexagon/test_packet.S | 26 + tests/tcg/hexagon/test_reorder.S | 31 + tests/tcg/hexagon/test_round.S | 31 + tests/tcg/hexagon/test_vavgw.S | 33 + tests/tcg/hexagon/test_vcmpb.S | 32 + tests/tcg/hexagon/test_vcmpw.S | 29 + tests/tcg/hexagon/test_vcmpy.S | 50 + tests/tcg/hexagon/test_vlsrw.S | 23 + tests/tcg/hexagon/test_vmaxh.S | 37 + tests/tcg/hexagon/test_vminh.S | 37 + tests/tcg/hexagon/test_vpmpyh.S | 30 + tests/tcg/hexagon/test_vspliceb.S | 33 + 68 files changed, 6849 insertions(+), 89 deletions(-) create mode 100644 include/tcg/tcg-cond.h create mode 100644 target/hexagon/gen_idef_parser_funcs.py create mode 100644 target/hexagon/idef-parser/README.rst create mode 100644 target/hexagon/idef-parser/idef-parser.h create mode 100644 target/hexagon/idef-parser/idef-parser.lex create mode 100644 target/hexagon/idef-parser/idef-parser.y create mode 100644 target/hexagon/idef-parser/macros.inc create mode 100644 target/hexagon/idef-parser/parser-helpers.c create mode 100644 target/hexagon/idef-parser/parser-helpers.h create mode 100755 target/hexagon/idef-parser/prepare create mode 100644 tests/tcg/hexagon/crt.S create mode 100644 tests/tcg/hexagon/test_abs.S create mode 100644 tests/tcg/hexagon/test_add.S create mode 100644 tests/tcg/hexagon/test_andp.S create mode 100644 tests/tcg/hexagon/test_bitcnt.S create mode 100644 tests/tcg/hexagon/test_bitsplit.S create mode 100644 tests/tcg/hexagon/test_call.S create mode 100644 tests/tcg/hexagon/test_clobber.S create mode 100644 tests/tcg/hexagon/test_cmp.S create mode 100644 tests/tcg/hexagon/test_cmpy.S create mode 100644 tests/tcg/hexagon/test_djump.S create mode 100644 tests/tcg/hexagon/test_dotnew.S create mode 100644 tests/tcg/hexagon/test_dstore.S create mode 100644 tests/tcg/hexagon/test_ext.S create mode 100644 tests/tcg/hexagon/test_fibonacci.S create mode 100644 tests/tcg/hexagon/test_hello.S create mode 100644 tests/tcg/hexagon/test_hl.S create mode 100644 tests/tcg/hexagon/test_hwloops.S create mode 100644 tests/tcg/hexagon/test_jmp.S create mode 100644 tests/tcg/hexagon/test_lsr.S create mode 100644 tests/tcg/hexagon/test_mpyi.S create mode 100644 tests/tcg/hexagon/test_overflow.S create mode 100644 tests/tcg/hexagon/test_packet.S create mode 100644 tests/tcg/hexagon/test_reorder.S create mode 100644 tests/tcg/hexagon/test_round.S create mode 100644 tests/tcg/hexagon/test_vavgw.S create mode 100644 tests/tcg/hexagon/test_vcmpb.S create mode 100644 tests/tcg/hexagon/test_vcmpw.S create mode 100644 tests/tcg/hexagon/test_vcmpy.S create mode 100644 tests/tcg/hexagon/test_vlsrw.S create mode 100644 tests/tcg/hexagon/test_vmaxh.S create mode 100644 tests/tcg/hexagon/test_vminh.S create mode 100644 tests/tcg/hexagon/test_vpmpyh.S create mode 100644 tests/tcg/hexagon/test_vspliceb.S -- 2.31.1