- set_irn_pinned(new_op, get_irn_pinned(node));
- set_ia32_op_type(new_op, ia32_AddrModeD);
- set_ia32_ls_mode(new_op, mode);
-
- set_ia32_exc_label(new_op, be_get_Proj_for_pn(node, pn_Store_X_except) != NULL);
- set_address(new_op, &addr);
- SET_IA32_ORIG_NODE(new_op, ia32_get_old_node_name(env_cg, node));
-
- return new_op;
-}
-
-static ir_node *try_create_TestJmp(ir_node *block, dbg_info *dbgi, long pnc,
- ir_node *cmp_left, ir_node *cmp_right,
- int use_am)
-{
- ir_node *arg_left;
- ir_node *arg_right;
- ir_node *res;
- ir_mode *mode;
- long pure_pnc = pnc & ~ia32_pn_Cmp_Unsigned;
- ia32_address_mode_t am;
- ia32_address_t *addr = &am.addr;
-
- if(cmp_right != NULL && !is_Const_0(cmp_right))
- return NULL;
-
- if(is_And(cmp_left) && (pure_pnc == pn_Cmp_Eq || pure_pnc == pn_Cmp_Lg)) {
- mode = get_irn_mode(cmp_left);
- arg_left = get_And_left(cmp_left);
- arg_right = get_And_right(cmp_left);
- } else {
- mode = get_irn_mode(cmp_left);
- arg_left = cmp_left;
- arg_right = cmp_left;
- }
-
- if(mode == mode_b)
- mode = mode_Iu;
-
- assert(get_mode_size_bits(mode) <= 32);
- match_arguments(&am, block, arg_left, arg_right, 1, 1, use_am, 1);
- if(am.flipped)
- pnc = get_inversed_pnc(pnc);
-
- if(get_mode_size_bits(mode) == 8) {
- res = new_rd_ia32_TestJmp8Bit(dbgi, current_ir_graph, block, addr->base,
- addr->index, addr->mem, am.new_op1,
- am.new_op2, pnc);
- } else {
- res = new_rd_ia32_TestJmp(dbgi, current_ir_graph, block, addr->base,
- addr->index, addr->mem, am.new_op1, am.new_op2,
- pnc);
- }
- set_am_attributes(res, &am);
- set_ia32_ls_mode(res, mode);