X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fia32%2Fia32_map_regs.c;h=c9bb092a1813e56c9a38785d816c247eba4764ce;hb=a61c3426415a95aea3e7ba1444d97782c471e681;hp=378b15e0de80d46dba7645e6000c7b48921176c1;hpb=7378f4a755ffdffdde608a822644869643f2c523;p=libfirm diff --git a/ir/be/ia32/ia32_map_regs.c b/ir/be/ia32/ia32_map_regs.c index 378b15e0d..c9bb092a1 100644 --- a/ir/be/ia32/ia32_map_regs.c +++ b/ir/be/ia32/ia32_map_regs.c @@ -1,5 +1,7 @@ /** * Register mapping for firm nodes. Stolen from bearch_firm :) + * Calculate requirements for register parameter. + * @author Christian Wuerdig * $Id$ */ #ifdef HAVE_CONFIG_H @@ -38,26 +40,26 @@ const arch_register_t *gpreg_param_reg_this[] = { }; const arch_register_t *fpreg_param_reg_std[] = { - &ia32_fp_regs[REG_XMM0], - &ia32_fp_regs[REG_XMM1], - &ia32_fp_regs[REG_XMM2], - &ia32_fp_regs[REG_XMM3], - &ia32_fp_regs[REG_XMM4], - &ia32_fp_regs[REG_XMM5], - &ia32_fp_regs[REG_XMM6], - &ia32_fp_regs[REG_XMM7] + &ia32_xmm_regs[REG_XMM0], + &ia32_xmm_regs[REG_XMM1], + &ia32_xmm_regs[REG_XMM2], + &ia32_xmm_regs[REG_XMM3], + &ia32_xmm_regs[REG_XMM4], + &ia32_xmm_regs[REG_XMM5], + &ia32_xmm_regs[REG_XMM6], + &ia32_xmm_regs[REG_XMM7] }; const arch_register_t *fpreg_param_reg_this[] = { NULL, /* in case of a "this" pointer, the first parameter must not be a float */ - &ia32_fp_regs[REG_XMM0], - &ia32_fp_regs[REG_XMM1], - &ia32_fp_regs[REG_XMM2], - &ia32_fp_regs[REG_XMM3], - &ia32_fp_regs[REG_XMM4], - &ia32_fp_regs[REG_XMM5], - &ia32_fp_regs[REG_XMM6], - &ia32_fp_regs[REG_XMM7] + &ia32_xmm_regs[REG_XMM0], + &ia32_xmm_regs[REG_XMM1], + &ia32_xmm_regs[REG_XMM2], + &ia32_xmm_regs[REG_XMM3], + &ia32_xmm_regs[REG_XMM4], + &ia32_xmm_regs[REG_XMM5], + &ia32_xmm_regs[REG_XMM6], + &ia32_xmm_regs[REG_XMM7] }; @@ -115,10 +117,14 @@ void ia32_build_8bit_reg_map(pmap *reg_map) { pmap_insert(reg_map, &ia32_gp_regs[REG_EDX], "dl"); } -char *ia32_get_mapped_reg_name(pmap *reg_map, const arch_register_t *reg) { +const char *ia32_get_mapped_reg_name(pmap *reg_map, const arch_register_t *reg) { pmap_entry *e = pmap_find(reg_map, (void *)reg); - assert(e && "missing map init?"); + //assert(e && "missing map init?"); + if (! e) { + printf("FIXME: ia32map_regs.c:122: returning fake register name for ia32 with 32 register\n"); + return reg->name; + } return e->value; } @@ -251,16 +257,17 @@ long ia32_translate_proj_pos(const ir_node *proj) { return 1; } else if (is_ia32_DivMod(pred)) { - if (nr == pn_DivMod_res_div || pn_Div_res) + if (nr == pn_DivMod_res_div) return 0; - if (nr == pn_DivMod_res_mod || pn_Mod_res) + if (nr == pn_DivMod_res_mod) return 1; + assert(0 && "unsupported DivMod"); } - else if (is_ia32_fDiv(pred)) { + else if (is_ia32_xDiv(pred)) { if (nr == pn_Quot_res) return 0; else - assert(0 && "there should be no more Projs for a fDiv"); + assert(0 && "there should be no more Projs for a xDiv"); } else if (get_irn_mode(proj) == mode_X && nr == pn_Start_X_initial_exec) { return 0;