static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, TCGArg *args,

                            TCGArg dst, TCGArg src)

{

    if (temps_are_copies(dst, src)) {

        tcg_op_remove(s, op);

        return;

    }



    if (temp_is_const(src)) {

        tcg_opt_gen_movi(s, op, args, dst, temps[src].val);

        return;

    }



    TCGOpcode new_op = op_to_mov(op->opc);

    tcg_target_ulong mask;



    op->opc = new_op;



    reset_temp(dst);

    mask = temps[src].mask;

    if (TCG_TARGET_REG_BITS > 32 && new_op == INDEX_op_mov_i32) {

        /* High bits of the destination are now garbage.  */

        mask |= ~0xffffffffull;

    }

    temps[dst].mask = mask;



    assert(!temp_is_const(src));



    if (s->temps[src].type == s->temps[dst].type) {

        temps[dst].next_copy = temps[src].next_copy;

        temps[dst].prev_copy = src;

        temps[temps[dst].next_copy].prev_copy = dst;

        temps[src].next_copy = dst;

        temps[dst].is_const = false;

    }



    args[0] = dst;

    args[1] = src;

}

static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, TCGArg *args,

                            TCGArg dst, TCGArg src)

{

    if (temps_are_copies(dst, src)) {

        tcg_op_remove(s, op);

        return;

    }



    if (temp_is_const(src)) {

        tcg_opt_gen_movi(s, op, args, dst, temps[src].val);

        return;

    }



    TCGOpcode new_op = op_to_mov(op->opc);

    tcg_target_ulong mask;



    op->opc = new_op;



    reset_temp(dst);

    mask = temps[src].mask;

    if (TCG_TARGET_REG_BITS > 32 && new_op == INDEX_op_mov_i32) {

        

        mask |= ~0xffffffffull;

    }

    temps[dst].mask = mask;



    assert(!temp_is_const(src));



    if (s->temps[src].type == s->temps[dst].type) {

        temps[dst].next_copy = temps[src].next_copy;

        temps[dst].prev_copy = src;

        temps[temps[dst].next_copy].prev_copy = dst;

        temps[src].next_copy = dst;

        temps[dst].is_const = false;

    }



    args[0] = dst;

    args[1] = src;

}

static void FUNC_0(TCGContext *VAR_0, TCGOp *VAR_1, TCGArg *VAR_2,

                            TCGArg VAR_3, TCGArg VAR_4)

{

    if (temps_are_copies(VAR_3, VAR_4)) {

        tcg_op_remove(VAR_0, VAR_1);

        return;

    }



    if (temp_is_const(VAR_4)) {

        tcg_opt_gen_movi(VAR_0, VAR_1, VAR_2, VAR_3, temps[VAR_4].val);

        return;

    }



    TCGOpcode new_op = op_to_mov(VAR_1->opc);

    tcg_target_ulong mask;



    VAR_1->opc = new_op;



    reset_temp(VAR_3);

    mask = temps[VAR_4].mask;

    if (TCG_TARGET_REG_BITS > 32 && new_op == INDEX_op_mov_i32) {

        

        mask |= ~0xffffffffull;

    }

    temps[VAR_3].mask = mask;



    assert(!temp_is_const(VAR_4));



    if (VAR_0->temps[VAR_4].type == VAR_0->temps[VAR_3].type) {

        temps[VAR_3].next_copy = temps[VAR_4].next_copy;

        temps[VAR_3].prev_copy = VAR_4;

        temps[temps[VAR_3].next_copy].prev_copy = VAR_3;

        temps[VAR_4].next_copy = VAR_3;

        temps[VAR_3].is_const = false;

    }



    VAR_2[0] = VAR_3;

    VAR_2[1] = VAR_4;

}

static void FUNC_0(TCGContext *VAR_0, TCGOp *VAR_1, TCGArg *VAR_2,
TCGArg VAR_3, TCGArg VAR_4)
{ if (temps_are_copies(VAR_3, VAR_4)) { tcg_op_remove(VAR_0, VAR_1); return; } if (temp_is_const(VAR_4)) { tcg_opt_gen_movi(VAR_0, VAR_1, VAR_2, VAR_3, temps[VAR_4].val); return; } TCGOpcode new_op = op_to_mov(VAR_1->opc); tcg_target_ulong mask; VAR_1->opc = new_op; reset_temp(VAR_3); mask = temps[VAR_4].mask; if (TCG_TARGET_REG_BITS > 32 && new_op == INDEX_op_mov_i32) { mask |= ~0xffffffffull; } temps[VAR_3].mask = mask; assert(!temp_is_const(VAR_4)); if (VAR_0->temps[VAR_4].type == VAR_0->temps[VAR_3].type) { temps[VAR_3].next_copy = temps[VAR_4].next_copy; temps[VAR_3].prev_copy = VAR_4; temps[temps[VAR_3].next_copy].prev_copy = VAR_3; temps[VAR_4].next_copy = VAR_3; temps[VAR_3].is_const = false; } VAR_2[0] = VAR_3; VAR_2[1] = VAR_4; }