@ -653,6 +653,7 @@ static void tcg_out_movext3(TCGContext *s, const TCGMovExtend *i1,
# define C_O1_I4(O1, I1, I2, I3, I4) C_PFX5(c_o1_i4_, O1, I1, I2, I3, I4),
# define C_N1_I2(O1, I1, I2) C_PFX3(c_n1_i2_, O1, I1, I2),
# define C_N1O1_I1(O1, O2, I1) C_PFX3(c_n1o1_i1_, O1, O2, I1),
# define C_N2_I1(O1, O2, I1) C_PFX3(c_n2_i1_, O1, O2, I1),
# define C_O2_I1(O1, O2, I1) C_PFX3(c_o2_i1_, O1, O2, I1),
@ -676,6 +677,7 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOpcode);
# undef C_O1_I3
# undef C_O1_I4
# undef C_N1_I2
# undef C_N1O1_I1
# undef C_N2_I1
# undef C_O2_I1
# undef C_O2_I2
@ -696,6 +698,7 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOpcode);
# define C_O1_I4(O1, I1, I2, I3, I4) { .args_ct_str = { #O1, #I1, #I2, #I3, #I4 } },
# define C_N1_I2(O1, I1, I2) { .args_ct_str = { "&" #O1, #I1, #I2 } },
# define C_N1O1_I1(O1, O2, I1) { .args_ct_str = { "&" #O1, #O2, #I1 } },
# define C_N2_I1(O1, O2, I1) { .args_ct_str = { "&" #O1, "&" #O2, #I1 } },
# define C_O2_I1(O1, O2, I1) { .args_ct_str = { #O1, #O2, #I1 } },
@ -718,6 +721,7 @@ static const TCGTargetOpDef constraint_sets[] = {
# undef C_O1_I3
# undef C_O1_I4
# undef C_N1_I2
# undef C_N1O1_I1
# undef C_N2_I1
# undef C_O2_I1
# undef C_O2_I2
@ -738,6 +742,7 @@ static const TCGTargetOpDef constraint_sets[] = {
# define C_O1_I4(O1, I1, I2, I3, I4) C_PFX5(c_o1_i4_, O1, I1, I2, I3, I4)
# define C_N1_I2(O1, I1, I2) C_PFX3(c_n1_i2_, O1, I1, I2)
# define C_N1O1_I1(O1, O2, I1) C_PFX3(c_n1o1_i1_, O1, O2, I1)
# define C_N2_I1(O1, O2, I1) C_PFX3(c_n2_i1_, O1, O2, I1)
# define C_O2_I1(O1, O2, I1) C_PFX3(c_o2_i1_, O1, O2, I1)
@ -2988,6 +2993,7 @@ static void process_op_defs(TCGContext *s)
. pair = 2 ,
. pair_index = o ,
. regs = def - > args_ct [ o ] . regs < < 1 ,
. newreg = def - > args_ct [ o ] . newreg ,
} ;
def - > args_ct [ o ] . pair = 1 ;
def - > args_ct [ o ] . pair_index = i ;
@ -3004,6 +3010,7 @@ static void process_op_defs(TCGContext *s)
. pair = 1 ,
. pair_index = o ,
. regs = def - > args_ct [ o ] . regs > > 1 ,
. newreg = def - > args_ct [ o ] . newreg ,
} ;
def - > args_ct [ o ] . pair = 2 ;
def - > args_ct [ o ] . pair_index = i ;
@ -5036,17 +5043,21 @@ static void tcg_reg_alloc_op(TCGContext *s, const TCGOp *op)
break ;
case 1 : /* first of pair */
tcg_debug_assert ( ! arg_ct - > newreg ) ;
if ( arg_ct - > oalias ) {
reg = new_args [ arg_ct - > alias_index ] ;
break ;
} else if ( arg_ct - > newreg ) {
reg = tcg_reg_alloc_pair ( s , arg_ct - > regs ,
i_allocated_regs | o_allocated_regs ,
output_pref ( op , k ) ,
ts - > indirect_base ) ;
} else {
reg = tcg_reg_alloc_pair ( s , arg_ct - > regs , o_allocated_regs ,
output_pref ( op , k ) ,
ts - > indirect_base ) ;
}
reg = tcg_reg_alloc_pair ( s , arg_ct - > regs , o_allocated_regs ,
output_pref ( op , k ) , ts - > indirect_base ) ;
break ;
case 2 : /* second of pair */
tcg_debug_assert ( ! arg_ct - > newreg ) ;
if ( arg_ct - > oalias ) {
reg = new_args [ arg_ct - > alias_index ] ;
} else {