summaryrefslogtreecommitdiffstats
path: root/target-sparc/translate.c
diff options
context:
space:
mode:
authorRichard Henderson2012-10-06 01:55:09 +0200
committerBlue Swirl2012-10-07 18:39:34 +0200
commitfe1755cbb21c34a40234e2c380d049b9b031c4e2 (patch)
treee5519b38d29f356f9892d12e4f51817ebf7f9c64 /target-sparc/translate.c
parenttarget-sparc: Cleanup "global" temporary allocation (diff)
downloadqemu-fe1755cbb21c34a40234e2c380d049b9b031c4e2.tar.gz
qemu-fe1755cbb21c34a40234e2c380d049b9b031c4e2.tar.xz
qemu-fe1755cbb21c34a40234e2c380d049b9b031c4e2.zip
target-sparc: Fall through from not-taken trap
Now that we've cleaned up global temporary allocation, we can continue translating the fallthru path of a conditional trap. Signed-off-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
Diffstat (limited to 'target-sparc/translate.c')
-rw-r--r--target-sparc/translate.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/target-sparc/translate.c b/target-sparc/translate.c
index 48c245eeb2..a7f64074f2 100644
--- a/target-sparc/translate.c
+++ b/target-sparc/translate.c
@@ -2573,13 +2573,15 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
gen_helper_raise_exception(cpu_env, trap);
tcg_temp_free_i32(trap);
- if (cond != 8) {
+ if (cond == 8) {
+ /* An unconditional trap ends the TB. */
+ dc->is_br = 1;
+ goto jmp_insn;
+ } else {
+ /* A conditional trap falls through to the next insn. */
gen_set_label(l1);
- gen_op_next_insn();
- tcg_gen_exit_tb(0);
+ break;
}
- dc->is_br = 1;
- goto jmp_insn;
} else if (xop == 0x28) {
rs1 = GET_FIELD(insn, 13, 17);
switch(rs1) {