X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fia32%2Fia32_new_nodes.c;h=2ddc4678d262e9e2ce4b07d42b899911dd6a932b;hb=fa4ec191e159484f0fcbea2ef044deaa2ab2d293;hp=a45e74700e6f241df622648aea49aaedfd0d03a2;hpb=fc2fb901866adb3c72414d1026a19a0b66454beb;p=libfirm diff --git a/ir/be/ia32/ia32_new_nodes.c b/ir/be/ia32/ia32_new_nodes.c index a45e74700..2ddc4678d 100644 --- a/ir/be/ia32/ia32_new_nodes.c +++ b/ir/be/ia32/ia32_new_nodes.c @@ -9,9 +9,11 @@ #include "config.h" #endif -#ifdef _WIN32 +#ifdef HAVE_MALLOC_H #include -#else +#endif + +#ifdef HAVE_ALLOCA_H #include #endif @@ -34,16 +36,6 @@ #include "ia32_new_nodes.h" #include "gen_ia32_regalloc_if.h" -#ifdef obstack_chunk_alloc -# undef obstack_chunk_alloc -# define obstack_chunk_alloc xmalloc -#else -# define obstack_chunk_alloc xmalloc -# define obstack_chunk_free free -#endif - -extern int obstack_printf(struct obstack *obst, char *fmt, ...); - /** * Returns the ident of a SymConst. * @param symc The SymConst @@ -445,8 +437,8 @@ ia32_am_type_t get_ia32_am_support(const ir_node *node) { * Sets the supported addrmode of an ia32 node */ void set_ia32_am_support(ir_node *node, ia32_am_type_t am_tp) { - ia32_attr_t *attr = get_ia32_attr(node); - attr->data.am_support = am_tp; + ia32_attr_t *attr = get_ia32_attr(node); + attr->data.am_support = am_tp; } /** @@ -461,8 +453,8 @@ ia32_am_flavour_t get_ia32_am_flavour(const ir_node *node) { * Sets the addrmode flavour of an ia32 node */ void set_ia32_am_flavour(ir_node *node, ia32_am_flavour_t am_flavour) { - ia32_attr_t *attr = get_ia32_attr(node); - attr->data.am_flavour = am_flavour; + ia32_attr_t *attr = get_ia32_attr(node); + attr->data.am_flavour = am_flavour; } /** @@ -765,6 +757,38 @@ void set_ia32_res_mode(ir_node *node, ir_mode *mode) { attr->res_mode = mode; } +/** + * Gets the source mode of conversion. + */ +ir_mode *get_ia32_src_mode(const ir_node *node) { + ia32_attr_t *attr = get_ia32_attr(node); + return attr->src_mode; +} + +/** + * Sets the source mode of conversion. + */ +void set_ia32_src_mode(ir_node *node, ir_mode *mode) { + ia32_attr_t *attr = get_ia32_attr(node); + attr->src_mode = mode; +} + +/** + * Gets the target mode of conversion. + */ +ir_mode *get_ia32_tgt_mode(const ir_node *node) { + ia32_attr_t *attr = get_ia32_attr(node); + return attr->tgt_mode; +} + +/** + * Sets the target mode of conversion. + */ +void set_ia32_tgt_mode(ir_node *node, ir_mode *mode) { + ia32_attr_t *attr = get_ia32_attr(node); + attr->tgt_mode = mode; +} + /** * Gets the frame entity assigned to this node; */ @@ -1161,7 +1185,7 @@ void alloc_ia32_reg_slots(ir_node *node, int num) { ia32_attr_t *attr = get_ia32_attr(node); if (num) { - attr->slots = NEW_ARR_D(arch_register_t*, get_irg_obstack(get_irn_irg(node)), num); + attr->slots = (const arch_register_t **)NEW_ARR_D(arch_register_t*, get_irg_obstack(get_irn_irg(node)), num); memset(attr->slots, 0, sizeof(attr->slots[0]) * num); } else { @@ -1195,11 +1219,17 @@ void init_ia32_attributes(ir_node *node, arch_irn_flags_t flags, const ia32_regi /* default compare operation to compare immediate ops */ int ia32_compare_immop_attr(ia32_attr_t *a, ia32_attr_t *b) { + int equ = 0; + if (a->data.tp == b->data.tp) { - return a->cnst == b->cnst; + equ = (a->cnst == b->cnst); + equ = equ ? (a->data.use_frame == b->data.use_frame) : 0; + + if (equ && a->data.use_frame && b->data.use_frame) + equ = (a->frame_ent == b->frame_ent); } - return 1; + return !equ; } /* copies the ia32 attributes */ @@ -1212,7 +1242,7 @@ static void ia32_copy_attr(const ir_node *old_node, ir_node *new_node) { memcpy(attr_new, attr_old, sizeof(*attr_new)); /* copy the register slots */ - attr_new->slots = NEW_ARR_D(arch_register_t*, get_irg_obstack(get_irn_irg(new_node)), n_res); + attr_new->slots = (const arch_register_t **)NEW_ARR_D(arch_register_t*, get_irg_obstack(get_irn_irg(new_node)), n_res); memcpy((void *)attr_new->slots, (void *)attr_old->slots, sizeof(attr_new->slots[0]) * n_res); } @@ -1228,9 +1258,5 @@ void ia32_register_copy_attr_func(void) { } } -static void ia32_register_additional_opcodes(int n) { - /* we don't need any additional opcodes */ -} - /* Include the generated constructor functions */ #include "gen_ia32_new_nodes.c.inl"