qemu/target/hppa/translate.c
/* Emit an unconditional branch to a direct target, which may or may not
   have already had nullification handled.  */
Emit an unconditional branch to a direct target, which may or may not
have already had nullification handled.
Emit an unconditional branch to a direct target which may or may not have already had nullification handled .
static DisasJumpType do_dbranch(DisasContext *ctx, target_ureg dest,
                                unsigned link, bool is_n)
{
    if (ctx->null_cond.c == TCG_COND_NEVER && ctx->null_lab == NULL) {
        if (link != 0) {
            copy_iaoq_entry(cpu_gr[link], ctx->iaoq_n, ctx->iaoq_n_var);
        }
        ctx->iaoq_n = dest;
        if (is_n) {
            ctx->null_cond.c = TCG_COND_ALWAYS;
        }
        return DISAS_NEXT;
    } else {
        nullify_over(ctx);
        if (link != 0) {
            copy_iaoq_entry(cpu_gr[link], ctx->iaoq_n, ctx->iaoq_n_var);
        }
        if (is_n && use_nullify_skip(ctx)) {
            nullify_set(ctx, 0);
            gen_goto_tb(ctx, 0, dest, dest + 4);
        } else {
            nullify_set(ctx, is_n);
            gen_goto_tb(ctx, 0, ctx->iaoq_b, dest);
        }
        nullify_end(ctx, DISAS_NEXT);
        nullify_set(ctx, 0);
        gen_goto_tb(ctx, 1, ctx->iaoq_b, ctx->iaoq_n);
        return DISAS_NORETURN;
    }
}
static DisasJumpType do_dbranch ( DisasContext * ctx , target_ureg dest , unsigned link , bool is_n ) { if ( ctx -> null_cond . c == TCG_COND_NEVER && ctx -> null_lab == NULL ) { if ( link != 0 ) { copy_iaoq_entry ( cpu_gr [ link ] , ctx -> iaoq_n , ctx -> iaoq_n_var ) ; } ctx -> iaoq_n = dest ; if ( is_n ) { ctx -> null_cond . c = TCG_COND_ALWAYS ; } return DISAS_NEXT ; } else { nullify_over ( ctx ) ; if ( link != 0 ) { copy_iaoq_entry ( cpu_gr [ link ] , ctx -> iaoq_n , ctx -> iaoq_n_var ) ; } if ( is_n && use_nullify_skip ( ctx ) ) { nullify_set ( ctx , 0 ) ; gen_goto_tb ( ctx , 0 , dest , dest + 4 ) ; } else { nullify_set ( ctx , is_n ) ; gen_goto_tb ( ctx , 0 , ctx -> iaoq_b , dest ) ; } nullify_end ( ctx , DISAS_NEXT ) ; nullify_set ( ctx , 0 ) ; gen_goto_tb ( ctx , 1 , ctx -> iaoq_b , ctx -> iaoq_n ) ; return DISAS_NORETURN ; } }
Emit an unconditional branch to a direct target, which may or may not
have already had nullification handled.
Emit an unconditional branch to a direct target which may or may not have already had nullification handled .