/**
* Register mapping for firm nodes. Stolen from bearch_firm :)
+ * Calculate requirements for register parameter.
+ * @author Christian Wuerdig
* $Id$
*/
#ifdef HAVE_CONFIG_H
};
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]
};
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;
}
return 0;
assert(0 && "unsupported Proj(Load) number");
}
- else if (is_ia32_St(pred)) {
- return 0;
- }
- else if (is_ia32_CondJmp(pred)) {
- return 0;
- }
- else if (is_ia32_SwitchJmp(pred)) {
- return 0;
- }
- else if (is_ia32_Cdq(pred) || is_ia32_Mulh(pred)) {
+ else if (is_ia32_Cdq(pred) || is_ia32_MulS(pred) || is_ia32_Mulh(pred)) {
if (nr == pn_EAX)
return 0;
if (nr == pn_EDX)
return 1;
assert(0 && "unsupported DivMod");
}
- else if (is_ia32_fDiv(pred)) {
- if (nr == pn_Quot_res)
- return 0;
- else
- assert(0 && "there should be no more Projs for a fDiv");
- }
- else if (get_irn_mode(proj) == mode_X && nr == pn_Start_X_initial_exec) {
- return 0;
- }
- else if (is_Proj(pred)) {
+ else if (get_irn_opcode(pred) == iro_Start) {
return nr;
}
- else if (get_irn_opcode(pred) == iro_Start) {
+ else if (is_ia32_CopyB(pred) || is_ia32_CopyB_i(pred)) {
return nr;
}
// assert(0 && "unsupported Proj(X)");
- return nr;
+ return 0;
}