static void tcg_out_brcond(TCGContext *s, TCGMemOp ext, TCGCond c, TCGArg a,

                           TCGArg b, bool b_const, int label)

{

    TCGLabel *l = &s->labels[label];

    intptr_t offset;

    bool need_cmp;



    if (b_const && b == 0 && (c == TCG_COND_EQ || c == TCG_COND_NE)) {

        need_cmp = false;

    } else {

        need_cmp = true;

        tcg_out_cmp(s, ext, a, b, b_const);

    }



    if (!l->has_value) {

        tcg_out_reloc(s, s->code_ptr, R_AARCH64_CONDBR19, label, 0);

        offset = tcg_in32(s) >> 5;

    } else {

        offset = l->u.value_ptr - s->code_ptr;

        assert(offset == sextract64(offset, 0, 19));

    }



    if (need_cmp) {

        tcg_out_insn(s, 3202, B_C, c, offset);

    } else if (c == TCG_COND_EQ) {

        tcg_out_insn(s, 3201, CBZ, ext, a, offset);

    } else {

        tcg_out_insn(s, 3201, CBNZ, ext, a, offset);

    }

}

static void tcg_out_brcond(TCGContext *s, TCGMemOp ext, TCGCond c, TCGArg a,

                           TCGArg b, bool b_const, int label)

{

    TCGLabel *l = &s->labels[label];

    intptr_t offset;

    bool need_cmp;



    if (b_const && b == 0 && (c == TCG_COND_EQ || c == TCG_COND_NE)) {

        need_cmp = false;

    } else {

        need_cmp = true;

        tcg_out_cmp(s, ext, a, b, b_const);

    }



    if (!l->has_value) {

        tcg_out_reloc(s, s->code_ptr, R_AARCH64_CONDBR19, label, 0);

        offset = tcg_in32(s) >> 5;

    } else {

        offset = l->u.value_ptr - s->code_ptr;

        assert(offset == sextract64(offset, 0, 19));

    }



    if (need_cmp) {

        tcg_out_insn(s, 3202, B_C, c, offset);

    } else if (c == TCG_COND_EQ) {

        tcg_out_insn(s, 3201, CBZ, ext, a, offset);

    } else {

        tcg_out_insn(s, 3201, CBNZ, ext, a, offset);

    }

}

static void FUNC_0(TCGContext *VAR_0, TCGMemOp VAR_1, TCGCond VAR_2, TCGArg VAR_3,

                           TCGArg VAR_4, bool VAR_5, int VAR_6)

{

    TCGLabel *l = &VAR_0->labels[VAR_6];

    intptr_t offset;

    bool need_cmp;



    if (VAR_5 && VAR_4 == 0 && (VAR_2 == TCG_COND_EQ || VAR_2 == TCG_COND_NE)) {

        need_cmp = false;

    } else {

        need_cmp = true;

        tcg_out_cmp(VAR_0, VAR_1, VAR_3, VAR_4, VAR_5);

    }



    if (!l->has_value) {

        tcg_out_reloc(VAR_0, VAR_0->code_ptr, R_AARCH64_CONDBR19, VAR_6, 0);

        offset = tcg_in32(VAR_0) >> 5;

    } else {

        offset = l->u.value_ptr - VAR_0->code_ptr;

        assert(offset == sextract64(offset, 0, 19));

    }



    if (need_cmp) {

        tcg_out_insn(VAR_0, 3202, B_C, VAR_2, offset);

    } else if (VAR_2 == TCG_COND_EQ) {

        tcg_out_insn(VAR_0, 3201, CBZ, VAR_1, VAR_3, offset);

    } else {

        tcg_out_insn(VAR_0, 3201, CBNZ, VAR_1, VAR_3, offset);

    }

}

static void FUNC_0(TCGContext *VAR_0, TCGMemOp VAR_1, TCGCond VAR_2, TCGArg VAR_3,
TCGArg VAR_4, bool VAR_5, int VAR_6)
{ TCGLabel *l = &VAR_0->labels[VAR_6]; intptr_t offset; bool need_cmp; if (VAR_5 && VAR_4 == 0 && (VAR_2 == TCG_COND_EQ || VAR_2 == TCG_COND_NE)) { need_cmp = false; } else { need_cmp = true; tcg_out_cmp(VAR_0, VAR_1, VAR_3, VAR_4, VAR_5); } if (!l->has_value) { tcg_out_reloc(VAR_0, VAR_0->code_ptr, R_AARCH64_CONDBR19, VAR_6, 0); offset = tcg_in32(VAR_0) >> 5; } else { offset = l->u.value_ptr - VAR_0->code_ptr; assert(offset == sextract64(offset, 0, 19)); } if (need_cmp) { tcg_out_insn(VAR_0, 3202, B_C, VAR_2, offset); } else if (VAR_2 == TCG_COND_EQ) { tcg_out_insn(VAR_0, 3201, CBZ, VAR_1, VAR_3, offset); } else { tcg_out_insn(VAR_0, 3201, CBNZ, VAR_1, VAR_3, offset); } }