mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 08:43:55 -06:00
Hexagon (target/hexagon) Use QEMU decodetree (16-bit instructions)
Section 10.3 of the Hexagon V73 Programmer's Reference Manual A duplex is encoded as a 32-bit instruction with bits [15:14] set to 00. The sub-instructions that comprise a duplex are encoded as 13-bit fields in the duplex. Create a decoder for each subinstruction class (a, l1, l2, s1, s2). Extend gen_trans_funcs.py to handle all instructions rather than filter by instruction class. There is a g_assert_not_reached() in decode_insns() in decode.c to verify we never try to use the old decoder on 16-bit instructions. Signed-off-by: Taylor Simpson <ltaylorsimpson@gmail.com> Reviewed-by: Brian Cain <bcain@quicinc.com> Message-Id: <20240115221443.365287-3-ltaylorsimpson@gmail.com> Signed-off-by: Brian Cain <bcain@quicinc.com>
This commit is contained in:
parent
1547a2d339
commit
f6c01009b5
5 changed files with 188 additions and 12 deletions
|
@ -154,6 +154,51 @@ hvx_decode_generated = custom_target(
|
|||
)
|
||||
hexagon_ss.add(hvx_decode_generated)
|
||||
|
||||
subinsn_a_decode_generated = custom_target(
|
||||
'subinsn_a_decode_generated',
|
||||
output: 'subinsn_a_decode_generated',
|
||||
depends: [iset_py, semantics_generated],
|
||||
env: {'PYTHONPATH': meson.current_build_dir()},
|
||||
command: [python, files('gen_decodetree.py'), semantics_generated, 'SUBINSN_A', '@OUTPUT@'],
|
||||
)
|
||||
hexagon_ss.add(subinsn_a_decode_generated)
|
||||
|
||||
subinsn_l1_decode_generated = custom_target(
|
||||
'subinsn_l1_decode_generated',
|
||||
output: 'subinsn_l1_decode_generated',
|
||||
depends: [iset_py, semantics_generated],
|
||||
env: {'PYTHONPATH': meson.current_build_dir()},
|
||||
command: [python, files('gen_decodetree.py'), semantics_generated, 'SUBINSN_L1', '@OUTPUT@'],
|
||||
)
|
||||
hexagon_ss.add(subinsn_l1_decode_generated)
|
||||
|
||||
subinsn_l2_decode_generated = custom_target(
|
||||
'subinsn_l2_decode_generated',
|
||||
output: 'subinsn_l2_decode_generated',
|
||||
depends: [iset_py, semantics_generated],
|
||||
env: {'PYTHONPATH': meson.current_build_dir()},
|
||||
command: [python, files('gen_decodetree.py'), semantics_generated, 'SUBINSN_L2', '@OUTPUT@'],
|
||||
)
|
||||
hexagon_ss.add(subinsn_l2_decode_generated)
|
||||
|
||||
subinsn_s1_decode_generated = custom_target(
|
||||
'subinsn_s1_decode_generated',
|
||||
output: 'subinsn_s1_decode_generated',
|
||||
depends: [iset_py, semantics_generated],
|
||||
env: {'PYTHONPATH': meson.current_build_dir()},
|
||||
command: [python, files('gen_decodetree.py'), semantics_generated, 'SUBINSN_S1', '@OUTPUT@'],
|
||||
)
|
||||
hexagon_ss.add(subinsn_s1_decode_generated)
|
||||
|
||||
subinsn_s2_decode_generated = custom_target(
|
||||
'subinsn_s2_decode_generated',
|
||||
output: 'subinsn_s2_decode_generated',
|
||||
depends: [iset_py, semantics_generated],
|
||||
env: {'PYTHONPATH': meson.current_build_dir()},
|
||||
command: [python, files('gen_decodetree.py'), semantics_generated, 'SUBINSN_S2', '@OUTPUT@'],
|
||||
)
|
||||
hexagon_ss.add(subinsn_s2_decode_generated)
|
||||
|
||||
#
|
||||
# Run the QEMU decodetree.py script to produce the instruction decoder
|
||||
#
|
||||
|
@ -176,6 +221,51 @@ decode_hvx_generated = custom_target(
|
|||
)
|
||||
hexagon_ss.add(decode_hvx_generated)
|
||||
|
||||
decode_subinsn_a_generated = custom_target(
|
||||
'decode_subinsn_a_generated.c.inc',
|
||||
output: 'decode_subinsn_a_generated.c.inc',
|
||||
input: subinsn_a_decode_generated,
|
||||
env: {'PYTHONPATH': meson.current_build_dir()},
|
||||
command: [python, files(decodetree_py), subinsn_a_decode_generated, ['--static-decode=decode_subinsn_a', '--insnwidth=16'], '-o', '@OUTPUT@'],
|
||||
)
|
||||
hexagon_ss.add(decode_subinsn_a_generated)
|
||||
|
||||
decode_subinsn_l1_generated = custom_target(
|
||||
'decode_subinsn_l1_generated.c.inc',
|
||||
output: 'decode_subinsn_l1_generated.c.inc',
|
||||
input: subinsn_l1_decode_generated,
|
||||
env: {'PYTHONPATH': meson.current_build_dir()},
|
||||
command: [python, files(decodetree_py), subinsn_l1_decode_generated, ['--static-decode=decode_subinsn_l1', '--insnwidth=16'], '-o', '@OUTPUT@'],
|
||||
)
|
||||
hexagon_ss.add(decode_subinsn_l1_generated)
|
||||
|
||||
decode_subinsn_l2_generated = custom_target(
|
||||
'decode_subinsn_l2_generated.c.inc',
|
||||
output: 'decode_subinsn_l2_generated.c.inc',
|
||||
input: subinsn_l2_decode_generated,
|
||||
env: {'PYTHONPATH': meson.current_build_dir()},
|
||||
command: [python, files(decodetree_py), subinsn_l2_decode_generated, ['--static-decode=decode_subinsn_l2', '--insnwidth=16'], '-o', '@OUTPUT@'],
|
||||
)
|
||||
hexagon_ss.add(decode_subinsn_l2_generated)
|
||||
|
||||
decode_subinsn_s1_generated = custom_target(
|
||||
'decode_subinsn_s1_generated.c.inc',
|
||||
output: 'decode_subinsn_s1_generated.c.inc',
|
||||
input: subinsn_s1_decode_generated,
|
||||
env: {'PYTHONPATH': meson.current_build_dir()},
|
||||
command: [python, files(decodetree_py), subinsn_s1_decode_generated, ['--static-decode=decode_subinsn_s1', '--insnwidth=16'], '-o', '@OUTPUT@'],
|
||||
)
|
||||
hexagon_ss.add(decode_subinsn_s1_generated)
|
||||
|
||||
decode_subinsn_s2_generated = custom_target(
|
||||
'decode_subinsn_s2_generated.c.inc',
|
||||
output: 'decode_subinsn_s2_generated.c.inc',
|
||||
input: subinsn_s2_decode_generated,
|
||||
env: {'PYTHONPATH': meson.current_build_dir()},
|
||||
command: [python, files(decodetree_py), subinsn_s2_decode_generated, ['--static-decode=decode_subinsn_s2', '--insnwidth=16'], '-o', '@OUTPUT@'],
|
||||
)
|
||||
hexagon_ss.add(decode_subinsn_s2_generated)
|
||||
|
||||
#
|
||||
# Generate the trans_* functions that the decoder will use
|
||||
#
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue