Revision ff21f70a target-microblaze/translate.c

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