summaryrefslogtreecommitdiff
path: root/target-cris/translate_v10.c
diff options
context:
space:
mode:
authorEdgar E. Iglesias <edgar@axis.com>2011-01-10 23:24:36 +0100
committerEdgar E. Iglesias <edgar@axis.com>2011-01-10 23:24:36 +0100
commit5cabc5ccfe180241a9086bd9bcbb1b5de8f3fc72 (patch)
treeb2853c0ef6166141514881886efef252345f65b0 /target-cris/translate_v10.c
parentb09cd072df07c63997cc81b6767f2e145d9496e5 (diff)
downloadqemu-5cabc5ccfe180241a9086bd9bcbb1b5de8f3fc72.tar.gz
cris: Allow more TB chaining for crisv10
Signed-off-by: Edgar E. Iglesias <edgar@axis.com>
Diffstat (limited to 'target-cris/translate_v10.c')
-rw-r--r--target-cris/translate_v10.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/target-cris/translate_v10.c b/target-cris/translate_v10.c
index 6944827a57..41db158965 100644
--- a/target-cris/translate_v10.c
+++ b/target-cris/translate_v10.c
@@ -1060,15 +1060,15 @@ static unsigned int dec10_ind(DisasContext *dc)
break;
case CRISV10_IND_JUMP_M:
if (dc->src == 15) {
- LOG_DIS("jump.%d %d r%d r%d\n", size,
+ LOG_DIS("jump.%d %d r%d r%d direct\n", size,
dc->opcode, dc->src, dc->dst);
imm = ldl_code(dc->pc + 2);
if (dc->mode == CRISV10_MODE_AUTOINC)
insn_len += size;
t_gen_mov_preg_TN(dc, dc->dst, tcg_const_tl(dc->pc + insn_len));
- tcg_gen_movi_tl(env_btarget, imm);
- cris_prepare_jmp(dc, JMP_INDIRECT);
+ dc->jmp_pc = imm;
+ cris_prepare_jmp(dc, JMP_DIRECT);
dc->delayed_branch--; /* v10 has no dslot here. */
} else {
if (dc->dst == 14) {
@@ -1184,7 +1184,9 @@ static unsigned int crisv10_decoder(DisasContext *dc)
if (dc->clear_prefix && dc->tb_flags & PFIX_FLAG) {
dc->tb_flags &= ~PFIX_FLAG;
tcg_gen_andi_tl(cpu_PR[PR_CCS], cpu_PR[PR_CCS], ~PFIX_FLAG);
- dc->cpustate_changed = 1;
+ if (dc->tb_flags != dc->tb->flags) {
+ dc->cpustate_changed = 1;
+ }
}
/* CRISv10 locks out interrupts on dslots. */