Revision ff21f70a
b/target-microblaze/translate.c | ||
---|---|---|
993 | 993 |
static void dec_br(DisasContext *dc) |
994 | 994 |
{ |
995 | 995 |
unsigned int dslot, link, abs; |
996 |
int mem_index = cpu_mmu_index(dc->env); |
|
996 | 997 |
|
997 | 998 |
dslot = dc->ir & (1 << 20); |
998 | 999 |
abs = dc->ir & (1 << 19); |
... | ... | |
1016 | 1017 |
if (abs) { |
1017 | 1018 |
tcg_gen_movi_tl(env_btaken, 1); |
1018 | 1019 |
tcg_gen_mov_tl(env_btarget, *(dec_alu_op_b(dc))); |
1019 |
if (link && !(dc->tb_flags & IMM_FLAG) |
|
1020 |
&& (dc->imm == 8 || dc->imm == 0x18)) |
|
1021 |
t_gen_raise_exception(dc, EXCP_BREAK); |
|
1022 |
if (dc->imm == 0) |
|
1023 |
t_gen_raise_exception(dc, EXCP_DEBUG); |
|
1020 |
if (link && !dslot) { |
|
1021 |
if (!(dc->tb_flags & IMM_FLAG) && (dc->imm == 8 || dc->imm == 0x18)) |
|
1022 |
t_gen_raise_exception(dc, EXCP_BREAK); |
|
1023 |
if (dc->imm == 0) { |
|
1024 |
if ((dc->tb_flags & MSR_EE_FLAG) && mem_index == MMU_USER_IDX) { |
|
1025 |
tcg_gen_movi_tl(cpu_SR[SR_ESR], ESR_EC_PRIVINSN); |
|
1026 |
t_gen_raise_exception(dc, EXCP_HW_EXCP); |
|
1027 |
return; |
|
1028 |
} |
|
1029 |
|
|
1030 |
t_gen_raise_exception(dc, EXCP_DEBUG); |
|
1031 |
} |
|
1032 |
} |
|
1024 | 1033 |
} else { |
1025 | 1034 |
if (!dc->type_b || (dc->tb_flags & IMM_FLAG)) { |
1026 | 1035 |
tcg_gen_movi_tl(env_btaken, 1); |
Also available in: Unified diff