[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v6 00/35] Hexagon patch series
From: |
Alex Bennée |
Subject: |
Re: [PATCH v6 00/35] Hexagon patch series |
Date: |
Tue, 12 Jan 2021 19:42:00 +0000 |
User-agent: |
mu4e 1.5.7; emacs 28.0.50 |
Taylor Simpson <tsimpson@quicinc.com> writes:
> This series adds support for the Hexagon processor with Linux user support
>
> See patch 02/33 Hexagon README for detailed information.
>
> This series assumes int128_or() is implemented.
> https://lists.nongnu.org/archive/html/qemu-devel/2020-10/msg06004.html
>
> The series is also available at https://github.com/quic/qemu on branch
> small_series_v6.
>
>
> Once the series is applied, the Hexagon port will pass "make check-tcg".
> The series also includes Hexagon-specific tests in tcg/tests/hexagon.
>
> The final 3 patches in the series add docker support. Thanks to Alessandro
> Di Federico <ale@rev.ng> and Brian Cain <bcain@quicinc.com> for making this
> happen. The container files will build a Hexagon toolchain from source.
> Alternatively, this command will get a pre-built container
> docker pull revng/qemu:debian-hexagon-cross
> Ultimately, we'll a method to create a container without building the
> toolchain.
>
> Once the container is set up, here are the commands to verify the code:
> mkdir build
> cd build
> ../configure --target-list=hexagon-linux-user
> make
> make check-tcg DOCKER_IMAGE=debian-hexagon-cross \
> DOCKER_CROSS_CC_GUEST=hexagon-unknown-linux-musl-clang
check-tcg should be picking up the DOCKER_IMAGE and
DOCKER_CROSS_CC_GUEST values from the configure.sh script settings which
get dumped in $BLDIR/tests/tcg/config-hexagon.mak
You can run just the hexagon tests with:
make run-tcg-tests-hexagon-linux-user
>
>
> *** Known checkpatch issues ***
>
> The following are known checkpatch errors in the series
> target/hexagon/reg_fields.h Complex macro
> target/hexagon/attribs.h Complex macro
> target/hexagon/decode.c Complex macro
> target/hexagon/q6v_decode.c Macro needs do - while
> target/hexagon/printinsn.c Macro needs do - while
> target/hexagon/gen_semantics.c Suspicious ; after while (0)
> target/hexagon/gen_dectree_import.c Complex macro
> target/hexagon/gen_dectree_import.c Suspicious ; after while (0)
> target/hexagon/opcodes.c Complex macro
> target/hexagon/iclass.h Complex macro
> configure.sh Line over 90 characters
> tests/tcg/configure.sh Line over 90 characters
> scripts/qemu-binfmt-conf.sh Line over 90 characters
>
> The following are known checkpatch warnings in the series
> target/hexagon/fma_emu.c Comments inside macro definition
> target/hexagon/gen_tcg_funcs.py Line over 80 characters
> scripts/qemu-binfmt-conf.sh Line over 80 characters
>
> *** Changes in v6 ***
> Correct QEMU_GENERATE implementations for fLSBNEW0/fLSBNEW1
> Change Python file handling to use with statement
> Change import hex_common to be explicit
> Generator cleanup
> Change N?N (new value) to value instead of register number for consistency
> Fixed bud in reading control register pair
> Add ctx_log_reg_write_pair
> Clean up control reg offset from HEX_REG_SA0
> Fix errors in FP instructions uncovered by musl libc-tests
> Added unit tests
>
> *** Changes in v5 ***
> Bug fixes
> Properly implement circular addressing
> memw(r1++I:circ(m0)) = r2
> Make gen_cmpnd_cmp_jmp execute in 2 parts
>
> Address remaining blocker items from Richard Henderson's review.
> Use qemu softfloat
> Use const where appropriate
> Break tcg_funcs_generated.h into two files - functions and table
> Change struct and enum type names to CamelCase
> Include packet in raw bytes in assembly
> Use DEF_HELPER_FLAGS where possible
> Fix merge_bytes endianness and overlap test by doing the store before load
> Use bitmask instead of string in decoding
> Add comments to decoder
> Use qemu/int128.h
> Use qemu/bitops.h for instruction attributes
> Add bitmask for ctx->reg_log
> Note we still have the array/idx for iteration during
> gen_commit_packet
> Change opcode_syntax to be created at compile time in gen_dectree_import.c
> Remove unused tmp variables
> Isolate hex_arch_types to imported files
> Fix git am whitespace warnings
>
> Address items from Philippe Mathieu-Daudé's review
> Split utility functions patch into 3 digestable patches
> Fixed type "definition"
> Change all exit codes to be either 0 or 1
> Validated build with gcc 4.8, 5.5, and *****
> Removed qemu/osdep.h and qemu/host-utils.h from macros.h
>
> Address items from Laurent Vivier's review
> Don't filter out __NR_syscalls
> Remove syscall_nr_generators from linux-user/hexagon/meson.build
> Remove subdir('hexagon') from linux-user/meson.build
> Generate syscall_nr.h from 5.5 Linux kernel
>
>
> *** Changes in v4 ***
> Convert target/hexagon/Makefile.objs to meson.build
>
> Address portions of feedback from Richard Henderson. Here is the table
> of items from Richard's review.
> Patch Item Blocker Status
> Use qemu softfloat Yes
> Use qemu decodetree.py No
> Several Use const when appropriate Yes
> Several Remove anything after g_assert_not_reached Yes DONE
> Several Fix log_store32/64 add/remove/add in patch series Yes DONE
> Several Follow naming guidelines for structs and enums Yes
> 4 Move decls to cpu-param.h Yes DONE
> 4 Remove CONFIG_USER_ONLY ifdef's Yes DONE
> 4 Remove DEBUG_HEXAGON Yes Partially
> 4 Remove stack pointer modification hack Yes DONE
> 4 Add property x-lldb-compat to control output Yes DONE
> 6 Include instruction and raw bytes in disassembly Yes
> 7 Use DEF_HELPER_FLAGS No
> 07, 26 Endianness of merge_bytes Yes
> 7 Fix overlap test Yes
> 7 Remove HELPER(debug_value)/HELPER(debug_value_i64) Yes DONE
> 9 Include "qemu/osdep.h" instead of <stdint.h> Yes DONE
> Several Stick with stdint.h types except in imported files Yes DONE
> 11 Remove description from reg field definitions Yes DONE
> 13 Move regmap.h into decode.c Yes DONE
> 14, 27 Use bit mask instead of strings in decoding No
> 14 Add comments to decoder Yes
> 16 Use qemu/int128.h No
> 17 Squash patches dealing with imported files Yes DONE
> 24 Use qemu/bitops.h for instruction attributes No
> 24 Fix initialization of opcode_short_semantics Yes DONE
> 24 Change if (p == NULL) { g_assert_not_reached(); }
> to assert(p != NULL) No DONE
> 25 Expand DECL/READ/WRITE/FREE macros in generator Yes DONE
> 26 Rewrite fINSERT*, fEXTRACT*, f?XTN macros Yes DONE
> 26 Investigate fRND macro No DONE
> 26 Change REG = REG to (VOID)REG to suppress warning Yes DONE
> 27 Remove multiple includes of imported/iclass.def Yes DONE
> 28 Move genptr_helpers.h into genptr.c Yes DONE
> 28 Remove unneeded temps No DONE
> 28 Use tcg_gen_deposit_tl and tcg_gen_extract_tl
> when dealing with p3_0 No DONE
> 29 Size opcode_genptr[] properly and initialize
> with [TAG] = generate_##TAG Yes DONE
> 30 Don't generate helpers for overridden instructions Yes DONE
> Don't include "gen_tcg.h" in helper.h Yes DONE
> 31 Use bitmask for ctx->reg_log instead of an array Yes
> 31 Use tcg_gen_extract_i32 for gen_slot_cancelled_check Yes DONE
> 31 Properly deal with reading instructions across
> a page boundary and too many instructions before
> finding end-of-packet Yes DONE
> 31 Don't set PC at the beginning of every packet No
> 31 Don't set slot_cancelled unless needed No
> 31 Don't set hex_pred_written unless needed No
> 31 Change cancelled variable to not local Yes DONE
> 31 Remove unnecessary temp Yes DONE
> 31 Let tcg_gen_addi_tl check for zero Yes DONE
> 31 Move gen_exec_counters to end of TB No
> 31 Move end of TB handling to hexagon_tr_tb_stop Yes DONE
> Generate two lists for TCG functions instead of
> the DEF_TCG_FUNC macro Yes DONE
>
>
> *** Changes in v3 ***
> Remove substantial portions of the code to facilitate review
> - Plan to submit subsequent patches
> - Hexagon Vector eXtensions (HVX)
> - Circular and bit-reverse addressiong
> - Add/sub-with-carry
> - Unused insn_t and pkt_t fields
> - Unused instruction attributes
> - All TCG overrides except instructions with multiple definitions
> - Unused macros
> - Unused reg fields
> - COUNT_HEX_HELPERS
> Use Laurent's gensyscall.sh script to generate linux-user/hexagon/syscall_nr.h
> Handle mem_noshuf
> Remove "RsV = RsV" per review feedback
> Simplify include file structure
> Add directed tests in <qemu>/tests/tcg/hexagon
> Change fWRAP_* macros to fGEN_TCG_*
>
> *** Changes in v2 ***
> - Use scripts/git.orderfile
> - Create a README with the code overview in patch 0001
> - Change #define's in hex_regs.h to an enum
> - Replace hard coded disassembly buffer length (1028) with #define
> - Move Hexagon architecture types patch earlier in series
> - Replace #include standard header files with #include "qemu/osdep.h"
> - Prefix all header file #ifndef's with HEXAGON_
> - Update python version to python3
> - #include "tcg/tcg.h" in genptr_helpers.h
> - Change target/hexagon/Makefile.objs to support out-of-tree build
> - Updated copyright to include year 2020
> - Bug fixes
> Fix some problems with HEX_DEBUG output
> Fix bug in circular addressing
> - Optimizations to reduce the amount of TCG code generated
> Change pred_written from an array to a bit mask
>
>
>
> Alessandro Di Federico (3):
> Add Dockerfile for hexagon
> Auto-import Docker support files
> Add newline when generating Dockerfile
>
> Taylor Simpson (32):
> Hexagon Update MAINTAINERS file
> Hexagon (target/hexagon) README
> Hexagon (include/elf.h) ELF machine definition
> Hexagon (target/hexagon) scalar core definition
> Hexagon (disas) disassembler
> Hexagon (target/hexagon) register names
> Hexagon (target/hexagon) scalar core helpers
> Hexagon (target/hexagon) GDB Stub
> Hexagon (target/hexagon) architecture types
> Hexagon (target/hexagon) instruction and packet types
> Hexagon (target/hexagon) register fields
> Hexagon (target/hexagon) instruction attributes
> Hexagon (target/hexagon) instruction/packet decode
> Hexagon (target/hexagon) instruction printing
> Hexagon (target/hexagon/arch.[ch]) utility functions
> Hexagon (target/hexagon/conv_emu.[ch]) utility functions
> Hexagon (target/hexagon/fma_emu.[ch]) utility functions
> Hexagon (target/hexagon/imported) arch import
> Hexagon (target/hexagon) generator phase 1 - C preprocessor for
> semantics
> Hexagon (target/hexagon) generator phase 2 - generate header files
> Hexagon (target/hexagon) generator phase 3 - C preprocessor for decode
> tree
> Hexagon (target/hexagon) generater phase 4 - decode tree
> Hexagon (target/hexagon) opcode data structures
> Hexagon (target/hexagon) macros
> Hexagon (target/hexagon) instruction classes
> Hexagon (target/hexagon) TCG generation
> Hexagon (target/hexagon) TCG for instructions with multiple
> definitions
> Hexagon (target/hexagon) TCG for floating point instructions
> Hexagon (target/hexagon) translation
> Hexagon (linux-user/hexagon) Linux user emulation
> Hexagon (tests/tcg/hexagon) TCG tests
> Hexagon build infrastructure
>
> default-configs/targets/hexagon-linux-user.mak | 1 +
> meson.build | 1 +
> include/disas/dis-asm.h | 1 +
> include/elf.h | 1 +
> linux-user/hexagon/sockbits.h | 18 +
> linux-user/hexagon/syscall_nr.h | 322 +++
> linux-user/hexagon/target_cpu.h | 44 +
> linux-user/hexagon/target_elf.h | 40 +
> linux-user/hexagon/target_fcntl.h | 18 +
> linux-user/hexagon/target_signal.h | 34 +
> linux-user/hexagon/target_structs.h | 46 +
> linux-user/hexagon/target_syscall.h | 36 +
> linux-user/hexagon/termbits.h | 18 +
> linux-user/qemu.h | 2 +
> linux-user/syscall_defs.h | 33 +
> target/hexagon/arch.h | 35 +
> target/hexagon/attribs.h | 30 +
> target/hexagon/attribs_def.h | 97 +
> target/hexagon/conv_emu.h | 31 +
> target/hexagon/cpu-param.h | 29 +
> target/hexagon/cpu.h | 159 ++
> target/hexagon/cpu_bits.h | 59 +
> target/hexagon/decode.h | 32 +
> target/hexagon/fma_emu.h | 37 +
> target/hexagon/gen_tcg.h | 319 +++
> target/hexagon/genptr.h | 25 +
> target/hexagon/helper.h | 85 +
> target/hexagon/hex_arch_types.h | 38 +
> target/hexagon/hex_regs.h | 83 +
> target/hexagon/iclass.h | 50 +
> target/hexagon/insn.h | 74 +
> target/hexagon/internal.h | 39 +
> target/hexagon/macros.h | 591 ++++++
> target/hexagon/opcodes.h | 63 +
> target/hexagon/printinsn.h | 28 +
> target/hexagon/reg_fields.h | 36 +
> target/hexagon/reg_fields_def.h | 41 +
> target/hexagon/translate.h | 91 +
> disas/hexagon.c | 68 +
> linux-user/elfload.c | 16 +
> linux-user/hexagon/cpu_loop.c | 99 +
> linux-user/hexagon/signal.c | 276 +++
> target/hexagon/arch.c | 294 +++
> target/hexagon/conv_emu.c | 177 ++
> target/hexagon/cpu.c | 314 +++
> target/hexagon/decode.c | 581 ++++++
> target/hexagon/fma_emu.c | 701 +++++++
> target/hexagon/gdbstub.c | 47 +
> target/hexagon/gen_dectree_import.c | 187 ++
> target/hexagon/gen_semantics.c | 88 +
> target/hexagon/genptr.c | 234 +++
> target/hexagon/iclass.c | 73 +
> target/hexagon/op_helper.c | 1016 ++++++++++
> target/hexagon/opcodes.c | 142 ++
> target/hexagon/printinsn.c | 158 ++
> target/hexagon/q6v_decode.c | 385 ++++
> target/hexagon/reg_fields.c | 27 +
> target/hexagon/translate.c | 687 +++++++
> tests/tcg/hexagon/atomics.c | 122 ++
> tests/tcg/hexagon/clrtnew.c | 56 +
> tests/tcg/hexagon/dual_stores.c | 60 +
> tests/tcg/hexagon/fpstuff.c | 370 ++++
> tests/tcg/hexagon/mem_noshuf.c | 328 +++
> tests/tcg/hexagon/misc.c | 360 ++++
> tests/tcg/hexagon/preg_alias.c | 106 +
> tests/tcg/hexagon/pthread_cancel.c | 43 +
> MAINTAINERS | 8 +
> disas/meson.build | 1 +
> scripts/gensyscalls.sh | 1 +
> scripts/qemu-binfmt-conf.sh | 6 +-
> target/hexagon/README | 235 +++
> target/hexagon/dectree.py | 351 ++++
> target/hexagon/gen_helper_funcs.py | 220 ++
> target/hexagon/gen_helper_protos.py | 150 ++
> target/hexagon/gen_op_attribs.py | 40 +
> target/hexagon/gen_op_regs.py | 111 +
> target/hexagon/gen_opcodes_def.py | 37 +
> target/hexagon/gen_printinsn.py | 174 ++
> target/hexagon/gen_shortcode.py | 63 +
> target/hexagon/gen_tcg_func_table.py | 58 +
> target/hexagon/gen_tcg_funcs.py | 532 +++++
> target/hexagon/hex_common.py | 216 ++
> target/hexagon/imported/allidefs.def | 30 +
> target/hexagon/imported/alu.idef | 1258 ++++++++++++
> target/hexagon/imported/branch.idef | 326 +++
> target/hexagon/imported/compare.idef | 619 ++++++
> target/hexagon/imported/encode.def | 124 ++
> target/hexagon/imported/encode_pp.def | 2110
> ++++++++++++++++++++
> target/hexagon/imported/encode_subinsn.def | 149 ++
> target/hexagon/imported/float.idef | 312 +++
> target/hexagon/imported/iclass.def | 51 +
> target/hexagon/imported/ldst.idef | 286 +++
> target/hexagon/imported/macros.def | 1526 ++++++++++++++
> target/hexagon/imported/mpy.idef | 1208 +++++++++++
> target/hexagon/imported/shift.idef | 1066 ++++++++++
> target/hexagon/imported/subinsns.idef | 149 ++
> target/hexagon/imported/system.idef | 65 +
> target/hexagon/meson.build | 187 ++
> target/meson.build | 1 +
> tests/docker/docker.py | 12 +-
> .../debian-hexagon-cross.build-toolchain.sh | 141 ++
> .../docker/dockerfiles/debian-hexagon-cross.docker | 18 +
> tests/tcg/configure.sh | 8 +-
> tests/tcg/hexagon/Makefile.target | 48 +
> tests/tcg/hexagon/first.S | 56 +
> tests/tcg/hexagon/float_convs.ref | 748 +++++++
> tests/tcg/hexagon/float_madds.ref | 768 +++++++
> 107 files changed, 23165 insertions(+), 6 deletions(-)
> create mode 100644 default-configs/targets/hexagon-linux-user.mak
> create mode 100644 linux-user/hexagon/sockbits.h
> create mode 100644 linux-user/hexagon/syscall_nr.h
> create mode 100644 linux-user/hexagon/target_cpu.h
> create mode 100644 linux-user/hexagon/target_elf.h
> create mode 100644 linux-user/hexagon/target_fcntl.h
> create mode 100644 linux-user/hexagon/target_signal.h
> create mode 100644 linux-user/hexagon/target_structs.h
> create mode 100644 linux-user/hexagon/target_syscall.h
> create mode 100644 linux-user/hexagon/termbits.h
> create mode 100644 target/hexagon/arch.h
> create mode 100644 target/hexagon/attribs.h
> create mode 100644 target/hexagon/attribs_def.h
> create mode 100644 target/hexagon/conv_emu.h
> create mode 100644 target/hexagon/cpu-param.h
> create mode 100644 target/hexagon/cpu.h
> create mode 100644 target/hexagon/cpu_bits.h
> create mode 100644 target/hexagon/decode.h
> create mode 100644 target/hexagon/fma_emu.h
> create mode 100644 target/hexagon/gen_tcg.h
> create mode 100644 target/hexagon/genptr.h
> create mode 100644 target/hexagon/helper.h
> create mode 100644 target/hexagon/hex_arch_types.h
> create mode 100644 target/hexagon/hex_regs.h
> create mode 100644 target/hexagon/iclass.h
> create mode 100644 target/hexagon/insn.h
> create mode 100644 target/hexagon/internal.h
> create mode 100644 target/hexagon/macros.h
> create mode 100644 target/hexagon/opcodes.h
> create mode 100644 target/hexagon/printinsn.h
> create mode 100644 target/hexagon/reg_fields.h
> create mode 100644 target/hexagon/reg_fields_def.h
> create mode 100644 target/hexagon/translate.h
> create mode 100644 disas/hexagon.c
> create mode 100644 linux-user/hexagon/cpu_loop.c
> create mode 100644 linux-user/hexagon/signal.c
> create mode 100644 target/hexagon/arch.c
> create mode 100644 target/hexagon/conv_emu.c
> create mode 100644 target/hexagon/cpu.c
> create mode 100644 target/hexagon/decode.c
> create mode 100644 target/hexagon/fma_emu.c
> create mode 100644 target/hexagon/gdbstub.c
> create mode 100644 target/hexagon/gen_dectree_import.c
> create mode 100644 target/hexagon/gen_semantics.c
> create mode 100644 target/hexagon/genptr.c
> create mode 100644 target/hexagon/iclass.c
> create mode 100644 target/hexagon/op_helper.c
> create mode 100644 target/hexagon/opcodes.c
> create mode 100644 target/hexagon/printinsn.c
> create mode 100644 target/hexagon/q6v_decode.c
> create mode 100644 target/hexagon/reg_fields.c
> create mode 100644 target/hexagon/translate.c
> create mode 100644 tests/tcg/hexagon/atomics.c
> create mode 100644 tests/tcg/hexagon/clrtnew.c
> create mode 100644 tests/tcg/hexagon/dual_stores.c
> create mode 100644 tests/tcg/hexagon/fpstuff.c
> create mode 100644 tests/tcg/hexagon/mem_noshuf.c
> create mode 100644 tests/tcg/hexagon/misc.c
> create mode 100644 tests/tcg/hexagon/preg_alias.c
> create mode 100644 tests/tcg/hexagon/pthread_cancel.c
> create mode 100644 target/hexagon/README
> create mode 100755 target/hexagon/dectree.py
> create mode 100755 target/hexagon/gen_helper_funcs.py
> create mode 100755 target/hexagon/gen_helper_protos.py
> create mode 100755 target/hexagon/gen_op_attribs.py
> create mode 100755 target/hexagon/gen_op_regs.py
> create mode 100755 target/hexagon/gen_opcodes_def.py
> create mode 100755 target/hexagon/gen_printinsn.py
> create mode 100755 target/hexagon/gen_shortcode.py
> create mode 100755 target/hexagon/gen_tcg_func_table.py
> create mode 100755 target/hexagon/gen_tcg_funcs.py
> create mode 100755 target/hexagon/hex_common.py
> create mode 100644 target/hexagon/imported/allidefs.def
> create mode 100644 target/hexagon/imported/alu.idef
> create mode 100644 target/hexagon/imported/branch.idef
> create mode 100644 target/hexagon/imported/compare.idef
> create mode 100644 target/hexagon/imported/encode.def
> create mode 100644 target/hexagon/imported/encode_pp.def
> create mode 100644 target/hexagon/imported/encode_subinsn.def
> create mode 100644 target/hexagon/imported/float.idef
> create mode 100644 target/hexagon/imported/iclass.def
> create mode 100644 target/hexagon/imported/ldst.idef
> create mode 100755 target/hexagon/imported/macros.def
> create mode 100644 target/hexagon/imported/mpy.idef
> create mode 100644 target/hexagon/imported/shift.idef
> create mode 100644 target/hexagon/imported/subinsns.idef
> create mode 100644 target/hexagon/imported/system.idef
> create mode 100644 target/hexagon/meson.build
> create mode 100755
> tests/docker/dockerfiles/debian-hexagon-cross.build-toolchain.sh
> create mode 100644 tests/docker/dockerfiles/debian-hexagon-cross.docker
> create mode 100644 tests/tcg/hexagon/Makefile.target
> create mode 100644 tests/tcg/hexagon/first.S
> create mode 100644 tests/tcg/hexagon/float_convs.ref
> create mode 100644 tests/tcg/hexagon/float_madds.ref
--
Alex Bennée