mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-11-25 17:36:17 +00:00
decodetree: Fix codegen for non-overlapping group inside overlapping group
For nested groups like:
{
[
pattern 1
pattern 2
]
pattern 3
}
the intended behaviour is that patterns 1 and 2 must not
overlap with each other; if the insn matches neither then
we fall through to pattern 3 as the next thing in the
outer overlapping group.
Currently we generate incorrect code for this situation,
because in the code path for a failed match inside the
inner non-overlapping group we generate a "return" statement,
which causes decode to stop entirely rather than continuing
to the next thing in the outer group.
Generate a "break" instead, so that decode flow behaves
as required for this nested group case.
Backports 514101c0b931f0a11a40d29d26af1cc40482f951
This commit is contained in:
parent
f7e831a7e4
commit
51093daf5f
|
|
@ -548,7 +548,7 @@ class Tree:
|
|||
output(ind, ' /* ',
|
||||
str_match_bits(innerbits, innermask), ' */\n')
|
||||
s.output_code(i + 4, extracted, innerbits, innermask)
|
||||
output(ind, ' return false;\n')
|
||||
output(ind, ' break;\n')
|
||||
output(ind, '}\n')
|
||||
# end Tree
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue