- /* Only one proj is used -> We must add a second proj and */
- /* connect this one to a Keep node to eat up the second */
- /* destroyed register. */
- /* We also renumber the Firm projs into ia32 projs. */
-
- switch (get_irn_opcode(node)) {
- case iro_Div:
- /* add Proj-Keep for mod res */
- in_keep[0] = new_rd_Proj(dbgi, irg, block, res, mode_Iu, pn_ia32_Div_mod_res);
- be_new_Keep(&ia32_reg_classes[CLASS_ia32_gp], irg, block, 1, in_keep);
- break;
- case iro_Mod:
- /* add Proj-Keep for div res */
- in_keep[0] = new_rd_Proj(dbgi, irg, block, res, mode_Iu, pn_ia32_Div_div_res);
- be_new_Keep(&ia32_reg_classes[CLASS_ia32_gp], irg, block, 1, in_keep);
- break;
- case iro_DivMod:
- /* check, which Proj-Keep, we need to add */
- proj_div = be_get_Proj_for_pn(node, pn_DivMod_res_div);
- proj_mod = be_get_Proj_for_pn(node, pn_DivMod_res_mod);
-
- if (proj_div && proj_mod) {
- /* nothing to be done */
- }
- else if (! proj_div && ! proj_mod) {
- assert(0 && "Missing DivMod result proj");
- }
- else if (! proj_div) {
- /* We have only mod result: add div res Proj-Keep */
- in_keep[0] = new_rd_Proj(dbgi, irg, block, res, mode_Iu, pn_ia32_Div_div_res);
- be_new_Keep(&ia32_reg_classes[CLASS_ia32_gp], irg, block, 1, in_keep);
- }
- else {
- /* We have only div result: add mod res Proj-Keep */
- in_keep[0] = new_rd_Proj(dbgi, irg, block, res, mode_Iu, pn_ia32_Div_mod_res);
- be_new_Keep(&ia32_reg_classes[CLASS_ia32_gp], irg, block, 1, in_keep);
- }
- break;
- default:
- assert(0 && "Div, Mod, or DivMod expected.");
- break;
+ /* check, which Proj-Keep, we need to add */
+ i = 0;
+ if (proj_div == NULL) {
+ /* We have only mod result: add div res Proj-Keep */
+ in_keep[i] = new_rd_Proj(dbgi, irg, block, res, mode_Iu, pn_ia32_Div_div_res);
+ ++i;
+ }
+ if (proj_mod == NULL) {
+ /* We have only div result: add mod res Proj-Keep */
+ in_keep[i] = new_rd_Proj(dbgi, irg, block, res, mode_Iu, pn_ia32_Div_mod_res);
+ ++i;