+
+ attr->exec_units = execution_units;
+#ifndef NDEBUG
+ attr->attr_type |= IA32_ATTR_ia32_attr_t;
+#endif
+
+ attr->out_flags = NEW_ARR_D(int, obst, n_res);
+ memset(attr->out_flags, 0, n_res * sizeof(attr->out_flags[0]));
+
+ attr->slots = NEW_ARR_D(const arch_register_t*, obst, n_res);
+ /* void* cast to suppress an incorrect warning on MSVC */
+ memset((void*)attr->slots, 0, n_res * sizeof(attr->slots[0]));
+}
+
+void
+init_ia32_x87_attributes(ir_node *res)
+{
+#ifndef NDEBUG
+ ia32_attr_t *attr = get_ia32_attr(res);
+ attr->attr_type |= IA32_ATTR_ia32_x87_attr_t;
+#else
+ (void) res;
+#endif
+ ia32_current_cg->do_x87_sim = 1;
+}
+
+void
+init_ia32_asm_attributes(ir_node *res)
+{
+#ifndef NDEBUG
+ ia32_attr_t *attr = get_ia32_attr(res);
+ attr->attr_type |= IA32_ATTR_ia32_asm_attr_t;
+#else
+ (void) res;
+#endif
+}
+
+void
+init_ia32_immediate_attributes(ir_node *res, ir_entity *symconst,
+ int symconst_sign, long offset)
+{
+ ia32_immediate_attr_t *attr = get_irn_generic_attr(res);
+
+#ifndef NDEBUG
+ attr->attr.attr_type |= IA32_ATTR_ia32_immediate_attr_t;
+#endif
+ attr->symconst = symconst;
+ attr->sc_sign = symconst_sign;
+ attr->offset = offset;
+}
+
+void
+init_ia32_copyb_attributes(ir_node *res, unsigned size) {
+ ia32_copyb_attr_t *attr = get_irn_generic_attr(res);
+
+#ifndef NDEBUG
+ attr->attr.attr_type |= IA32_ATTR_ia32_copyb_attr_t;
+#endif
+ attr->size = size;
+}
+
+void
+init_ia32_condcode_attributes(ir_node *res, long pnc) {
+ ia32_condcode_attr_t *attr = get_irn_generic_attr(res);
+
+#ifndef NDEBUG
+ attr->attr.attr_type |= IA32_ATTR_ia32_condcode_attr_t;
+#endif
+ attr->pn_code = pnc;
+}
+
+ir_node *get_ia32_result_proj(const ir_node *node)
+{
+ const ir_edge_t *edge;
+
+ foreach_out_edge(node, edge) {
+ ir_node *proj = get_edge_src_irn(edge);
+ if(get_Proj_proj(proj) == 0) {
+ return proj;
+ }
+ }
+ return NULL;