be_set_emitter(op_ia32_Cmp, bemit_cmp);
be_set_emitter(op_ia32_Const, bemit_mov_const);
be_set_emitter(op_ia32_Conv_I2I, bemit_conv_i2i);
- be_set_emitter(op_ia32_Conv_I2I8Bit, bemit_conv_i2i);
be_set_emitter(op_ia32_CopyB_i, bemit_copybi);
be_set_emitter(op_ia32_Cwtl, bemit_cwtl);
be_set_emitter(op_ia32_Dec, bemit_dec);
case iro_ia32_Lea:
case iro_ia32_Conv_I2I:
- case iro_ia32_Conv_I2I8Bit:
case iro_ia32_CMovcc:
case iro_ia32_Minus64Bit:
return 0;
} else {
pred = pred_proj;
}
- if (!is_ia32_Conv_I2I(pred) && !is_ia32_Conv_I2I8Bit(pred))
+ if (!is_ia32_Conv_I2I(pred))
return;
if (get_ia32_op_type(pred) != ia32_Normal)
return;
ir_mode *load_mode;
ir_mode *conv_mode;
- if (!is_ia32_Conv_I2I(node) && !is_ia32_Conv_I2I8Bit(node))
+ if (!is_ia32_Conv_I2I(node))
return;
- assert((int)n_ia32_Conv_I2I_val == (int)n_ia32_Conv_I2I8Bit_val);
pred = get_irn_n(node, n_ia32_Conv_I2I_val);
if (!is_Proj(pred))
return;
int conv_mode_bits;
int pred_mode_bits;
- if (!is_ia32_Conv_I2I(node) && !is_ia32_Conv_I2I8Bit(node))
+ if (!is_ia32_Conv_I2I(node))
return;
- assert((int)n_ia32_Conv_I2I_val == (int)n_ia32_Conv_I2I8Bit_val);
pred_proj = get_irn_n(node, n_ia32_Conv_I2I_val);
if (is_Proj(pred_proj))
pred = get_Proj_pred(pred_proj);
else
pred = pred_proj;
- if (!is_ia32_Conv_I2I(pred) && !is_ia32_Conv_I2I8Bit(pred))
+ if (!is_ia32_Conv_I2I(pred))
return;
/* we know that after a conv, the upper bits are sign extended
/* Argh:We must change the opcode to 8bit AND copy the register constraints */
if (get_mode_size_bits(conv_mode) == 8) {
const arch_register_req_t **reqs = arch_get_irn_register_reqs_in(node);
- set_irn_op(pred, op_ia32_Conv_I2I8Bit);
+ set_irn_op(pred, op_ia32_Conv_I2I);
arch_set_irn_register_reqs_in(pred, reqs);
}
} else {
/* Argh:We must change the opcode to 8bit AND copy the register constraints */
if (get_mode_size_bits(conv_mode) == 8) {
const arch_register_req_t **reqs = arch_get_irn_register_reqs_in(node);
- set_irn_op(result_conv, op_ia32_Conv_I2I8Bit);
+ set_irn_op(result_conv, op_ia32_Conv_I2I);
arch_set_irn_register_reqs_in(result_conv, reqs);
}
}
Conv_I2I => {
op_flags => [ "uses_memory", "fragile" ],
state => "exc_pinned",
- reg_req => { in => [ "gp", "gp", "none", "gp" ],
- out => [ "gp", "none", "none", "none", "none" ] },
- ins => [ "base", "index", "mem", "val" ],
- outs => [ "res", "flags", "M", "X_regular", "X_except" ],
- emit => "mov%#Ml %#AS3, %D0",
- am => "source,unary",
- latency => 1,
- attr => "ir_mode *smaller_mode",
- init_attr => "attr->ls_mode = smaller_mode;",
- mode => $mode_gp,
-},
-
-Conv_I2I8Bit => {
- op_flags => [ "uses_memory", "fragile" ],
- state => "exc_pinned",
- reg_req => { in => [ "gp", "gp", "none", "eax ebx ecx edx" ],
- out => [ "gp", "none", "none", "none", "none" ] },
+ constructors => {
+ "" => {
+ reg_req => { in => [ "gp", "gp", "none", "gp" ],
+ out => [ "gp", "none", "none", "none", "none" ] }
+ },
+ "8bit" => {
+ reg_req => { in => [ "gp", "gp", "none", "eax ebx ecx edx" ],
+ out => [ "gp", "none", "none", "none", "none" ] }
+ }
+ },
ins => [ "base", "index", "mem", "val" ],
outs => [ "res", "flags", "M", "X_regular", "X_except" ],
emit => "mov%#Ml %#AS3, %D0",
/* we might need to conv the result up */
if (get_mode_size_bits(mode) > 8) {
- new_node = new_bd_ia32_Conv_I2I8Bit(dbgi, new_block, noreg_GP, noreg_GP,
- nomem, new_node, mode_Bu);
+ new_node = new_bd_ia32_Conv_I2I_8bit(dbgi, new_block, noreg_GP, noreg_GP, nomem, new_node, mode_Bu);
SET_IA32_ORIG_NODE(new_node, orig_node);
}
ir_node *(*func)(dbg_info*, ir_node*, ir_node*, ir_node*, ir_node*, ir_node*, ir_mode*);
func = get_mode_size_bits(mode) == 8 ?
- new_bd_ia32_Conv_I2I8Bit : new_bd_ia32_Conv_I2I;
+ new_bd_ia32_Conv_I2I_8bit : new_bd_ia32_Conv_I2I;
return func(dbgi, block, base, index, mem, val, mode);
}
case pn_Load_X_regular:
return new_rd_Proj(dbgi, new_pred, mode_X, pn_ia32_Load_X_regular);
}
- } else if (is_ia32_Conv_I2I(new_pred) ||
- is_ia32_Conv_I2I8Bit(new_pred)) {
+ } else if (is_ia32_Conv_I2I(new_pred)) {
set_irn_mode(new_pred, mode_T);
switch ((pn_Load)proj) {
case pn_Load_res:
SET_IA32_ORIG_NODE(set, node);
/* conv to 32bit */
- conv = new_bd_ia32_Conv_I2I8Bit(dbgi, block, noreg_GP, noreg_GP, nomem, set, mode_Bu);
+ conv = new_bd_ia32_Conv_I2I_8bit(dbgi, block, noreg_GP, noreg_GP, nomem, set, mode_Bu);
SET_IA32_ORIG_NODE(conv, node);
/* neg */
SET_IA32_ORIG_NODE(new_node, node);
/* conv to 32bit */
- new_node = new_bd_ia32_Conv_I2I8Bit(dbgi, new_block, noreg_GP, noreg_GP,
- nomem, new_node, mode_Bu);
+ new_node = new_bd_ia32_Conv_I2I_8bit(dbgi, new_block, noreg_GP, noreg_GP, nomem, new_node, mode_Bu);
SET_IA32_ORIG_NODE(new_node, node);
return new_node;
}