aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2020-10-19 16:12:52 +0100
committerPeter Maydell <peter.maydell@linaro.org>2020-10-20 16:12:01 +0100
commit514101c0b931f0a11a40d29d26af1cc40482f951 (patch)
treeacef62bcd70271affae73af8e862b0e09fcdea83
parentb3267ff675dd410b4c2a569e209cb7d468cf1873 (diff)
downloadqemu-514101c0b931f0a11a40d29d26af1cc40482f951.zip
qemu-514101c0b931f0a11a40d29d26af1cc40482f951.tar.gz
qemu-514101c0b931f0a11a40d29d26af1cc40482f951.tar.bz2
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. Suggested-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 20201019151301.2046-2-peter.maydell@linaro.org
-rw-r--r--scripts/decodetree.py2
1 files changed, 1 insertions, 1 deletions
diff --git a/scripts/decodetree.py b/scripts/decodetree.py
index 60fd3b5e..c1bf3cf 100644
--- a/scripts/decodetree.py
+++ b/scripts/decodetree.py
@@ -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