[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v8 00/35] Hexagon patch series
From: |
Taylor Simpson |
Subject: |
[PATCH v8 00/35] Hexagon patch series |
Date: |
Sun, 7 Feb 2021 23:45:50 -0600 |
This series adds support for the Hexagon processor with Linux user support
See patch 02 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_v8.
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 patch 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 default container (debian-hexagon-cross) uses a toolchain built
by rev.ng. Alternatively, there is a container that will build the toolchain
locally (debian-hexagon-cross-build-local).
Here are the commands to verify the code:
mkdir build
cd build
../configure --target-list=hexagon-linux-user
make
make check-tcg
*** 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/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 v8 ***
Address feedback from Philippe Mathieu-Daud� <f4bug@amsat.org>
Make RAISE_FP_EXCEPTION conditional on CONFIG_USER_ONLY
Enable build in 32-bit mode
Remove extern from function prototypes in header files
Fixed issues running under gitlab-ci
Use qemu .inc file naming convention
Address feedback from Richard Henderson <<richard.henderson@linaro.org>
Don't set PC at the beginning of every packet
Don't set slot_cancelled at the beginning of every packet
Don't set pred_written at the beginning of every packet
Only update execution counters at the end of TB
Reduce the amount of code that gets compiled when HEX_DEBUG is off
Fix bug uncovered in sanitizers-enabled build
Fix bug uncovered in clang build
*** Changes in v7 ***
Address feedback from Philippe Mathieu-Daud� <f4bug@amsat.org>
Update copyright to 2021
Use GString instead of <string.h> for disassembly
Remove mixed declarations (interleaving statements and declarations)
Change 4 to sizeof(uint32_t)
Address feedback from Alex Benn�e <alex.bennee@linaro.org>
Break TCG tests patch into multiple patches
Remove pthread_cancel test (submitted as a standalone patch)
*** 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 (1):
Add Dockerfile for hexagon
Taylor Simpson (34):
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 - multiarch
Hexagon (tests/tcg/hexagon) TCG tests - atomics/load/store/misc
Hexagon (tests/tcg/hexagon) TCG tests - floating point
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 | 54 +
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 | 34 +
target/hexagon/attribs.h | 35 +
target/hexagon/conv_emu.h | 31 +
target/hexagon/cpu-param.h | 29 +
target/hexagon/cpu.h | 159 ++
target/hexagon/cpu_bits.h | 58 +
target/hexagon/decode.h | 32 +
target/hexagon/fma_emu.h | 36 +
target/hexagon/gen_tcg.h | 319 +++
target/hexagon/genptr.h | 25 +
target/hexagon/helper.h | 88 +
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 | 37 +
target/hexagon/macros.h | 592 ++++++
target/hexagon/opcodes.h | 58 +
target/hexagon/printinsn.h | 27 +
target/hexagon/reg_fields.h | 36 +
target/hexagon/translate.h | 93 +
target/hexagon/attribs_def.h.inc | 97 +
target/hexagon/reg_fields_def.h.inc | 41 +
disas/hexagon.c | 65 +
linux-user/elfload.c | 16 +
linux-user/hexagon/cpu_loop.c | 100 +
linux-user/hexagon/signal.c | 276 +++
target/hexagon/arch.c | 300 +++
target/hexagon/conv_emu.c | 177 ++
target/hexagon/cpu.c | 318 +++
target/hexagon/decode.c | 957 +++++++++
target/hexagon/fma_emu.c | 702 +++++++
target/hexagon/gdbstub.c | 47 +
target/hexagon/gen_dectree_import.c | 188 ++
target/hexagon/gen_semantics.c | 88 +
target/hexagon/genptr.c | 331 +++
target/hexagon/iclass.c | 73 +
target/hexagon/op_helper.c | 1064 ++++++++++
target/hexagon/opcodes.c | 142 ++
target/hexagon/printinsn.c | 146 ++
target/hexagon/reg_fields.c | 27 +
target/hexagon/translate.c | 748 +++++++
tests/tcg/hexagon/atomics.c | 139 ++
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 | 380 ++++
tests/tcg/hexagon/preg_alias.c | 169 ++
MAINTAINERS | 9 +
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 | 39 +
target/hexagon/gen_op_regs.py | 110 +
target/hexagon/gen_opcodes_def.py | 36 +
target/hexagon/gen_printinsn.py | 173 ++
target/hexagon/gen_shortcode.py | 60 +
target/hexagon/gen_tcg_func_table.py | 58 +
target/hexagon/gen_tcg_funcs.py | 485 +++++
target/hexagon/hex_common.py | 234 +++
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 | 1531 ++++++++++++++
target/hexagon/imported/mpy.idef | 1208 +++++++++++
target/hexagon/imported/shift.idef | 1066 ++++++++++
target/hexagon/imported/subinsns.idef | 149 ++
target/hexagon/imported/system.idef | 68 +
target/hexagon/meson.build | 193 ++
target/meson.build | 1 +
.../debian-hexagon-cross-build-local.docker | 18 +
.../debian-hexagon-cross.build-toolchain.sh | 141 ++
.../docker/dockerfiles/debian-hexagon-cross.docker | 1 +
tests/tcg/configure.sh | 8 +-
tests/tcg/hexagon/Makefile.target | 46 +
tests/tcg/hexagon/first.S | 56 +
tests/tcg/hexagon/float_convs.ref | 748 +++++++
tests/tcg/hexagon/float_madds.ref | 768 +++++++
104 files changed, 23339 insertions(+), 2 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/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/translate.h
create mode 100644 target/hexagon/attribs_def.h.inc
create mode 100644 target/hexagon/reg_fields_def.h.inc
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/reg_fields.c
create mode 100644 target/hexagon/translate.c
create mode 100644 tests/tcg/hexagon/atomics.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 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 100644
tests/docker/dockerfiles/debian-hexagon-cross-build-local.docker
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
--
2.7.4
- [PATCH v8 00/35] Hexagon patch series,
Taylor Simpson <=
- [PATCH v8 02/35] Hexagon (target/hexagon) README, Taylor Simpson, 2021/02/08
- [PATCH v8 12/35] Hexagon (target/hexagon) instruction attributes, Taylor Simpson, 2021/02/08
- [PATCH v8 01/35] Hexagon Update MAINTAINERS file, Taylor Simpson, 2021/02/08
- [PATCH v8 14/35] Hexagon (target/hexagon) instruction printing, Taylor Simpson, 2021/02/08
- [PATCH v8 04/35] Hexagon (target/hexagon) scalar core definition, Taylor Simpson, 2021/02/08
- [PATCH v8 11/35] Hexagon (target/hexagon) register fields, Taylor Simpson, 2021/02/08
- [PATCH v8 03/35] Hexagon (include/elf.h) ELF machine definition, Taylor Simpson, 2021/02/08