- not = new_rd_ia32_Not(dbg, irg, block, in2);
- arch_set_irn_register(cg->arch_env, not, in2_reg);
- sched_add_before(irn, not);
-
- stc = new_rd_ia32_Stc(dbg, irg, block);
- arch_set_irn_register(cg->arch_env, stc,
- &ia32_flags_regs[REG_EFLAGS]);
- sched_add_before(irn, stc);
-
- adc = new_rd_ia32_Adc(dbg, irg, block, noreg, noreg, nomem, not,
- in1, stc);
- arch_set_irn_register(cg->arch_env, adc, out_reg);
- sched_add_before(irn, adc);
-
- set_irn_mode(adc, mode_T);
- adc_flags = new_r_Proj(irg, block, adc, mode_Iu, pn_ia32_Adc_flags);
- arch_set_irn_register(cg->arch_env, adc_flags,
- &ia32_flags_regs[REG_EFLAGS]);
-
- cmc = new_rd_ia32_Cmc(dbg, irg, block, adc_flags);
- arch_set_irn_register(cg->arch_env, cmc,
- &ia32_flags_regs[REG_EFLAGS]);
- sched_add_before(irn, cmc);
-
- exchange(flags_proj, cmc);
- if (res_proj != NULL) {
- set_Proj_pred(res_proj, adc);
- set_Proj_proj(res_proj, pn_ia32_Adc_res);
+ ir_node *cmc;
+ ir_node *nnot;
+ ir_node *adc;
+ ir_node *adc_flags;
+
+ carry = new_bd_ia32_Stc(dbgi, block);
+
+carry:
+ nnot = new_bd_ia32_Not(dbgi, block, in2);
+ arch_set_irn_register(nnot, in2_reg);
+ sched_add_before(irn, nnot);
+
+ arch_set_irn_register(carry, &ia32_registers[REG_EFLAGS]);
+ sched_add_before(irn, carry);
+
+ adc = new_bd_ia32_Adc(dbgi, block, noreg, noreg, nomem, nnot, in1, carry);
+ arch_set_irn_register(adc, out_reg);
+ set_ia32_commutative(adc);
+
+ if (flags_proj != NULL) {
+ set_irn_mode(adc, mode_T);
+ adc_flags = new_r_Proj(adc, mode_Iu, pn_ia32_Adc_flags);
+ arch_set_irn_register(adc_flags, &ia32_registers[REG_EFLAGS]);
+
+ cmc = new_bd_ia32_Cmc(dbgi, block, adc_flags);
+ arch_set_irn_register(cmc, &ia32_registers[REG_EFLAGS]);
+ sched_add_after(irn, cmc);
+ exchange(flags_proj, cmc);