diff options
| author | Richard Henderson | 2012-10-06 01:55:09 +0200 |
|---|---|---|
| committer | Blue Swirl | 2012-10-07 18:39:34 +0200 |
| commit | fe1755cbb21c34a40234e2c380d049b9b031c4e2 (patch) | |
| tree | e5519b38d29f356f9892d12e4f51817ebf7f9c64 /target-sparc/translate.c | |
| parent | target-sparc: Cleanup "global" temporary allocation (diff) | |
| download | qemu-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.c | 12 |
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) { |
