+ if (a_attr->ent != b_attr->ent || a_attr->offset != b_attr->offset)
+ return 1;
+
+ return _node_cmp_attr((be_node_attr_t*) a_attr, (be_node_attr_t*) b_attr);
+}
+
+static int Return_cmp_attr(ir_node *a, ir_node *b) {
+ be_return_attr_t *a_attr = get_irn_attr(a);
+ be_return_attr_t *b_attr = get_irn_attr(b);
+
+ if (a_attr->num_ret_vals != b_attr->num_ret_vals)
+ return 1;
+
+ return _node_cmp_attr((be_node_attr_t*) a_attr, (be_node_attr_t*) b_attr);
+}
+
+static int Stack_cmp_attr(ir_node *a, ir_node *b) {
+ be_stack_attr_t *a_attr = get_irn_attr(a);
+ be_stack_attr_t *b_attr = get_irn_attr(b);
+
+ if (a_attr->offset != b_attr->offset)
+ return 1;
+
+ return _node_cmp_attr((be_node_attr_t*) a_attr, (be_node_attr_t*) b_attr);
+}
+
+static int Call_cmp_attr(ir_node *a, ir_node *b) {
+ be_call_attr_t *a_attr = get_irn_attr(a);
+ be_call_attr_t *b_attr = get_irn_attr(b);
+
+ if (a_attr->ent != b_attr->ent ||
+ a_attr->call_tp != b_attr->call_tp)
+ return 1;
+
+ return _node_cmp_attr((be_node_attr_t*) a_attr, (be_node_attr_t*) b_attr);
+}
+
+static INLINE be_req_t *get_be_req(const ir_node *node, int pos)
+{
+ int idx;
+ be_node_attr_t *attr;
+ be_reg_data_t *rd;
+
+ assert(is_be_node(node));
+ attr = get_irn_attr(node);
+
+ if(pos < 0) {
+ idx = -(pos + 1);
+ } else {
+ idx = pos;
+ assert(idx < get_irn_arity(node));
+ }
+ assert(idx < ARR_LEN(attr->reg_data));
+ rd = &attr->reg_data[idx];
+
+ return pos < 0 ? &rd->req : &rd->in_req;
+}
+
+static INLINE arch_register_req_t *get_req(const ir_node *node, int pos)
+{
+ be_req_t *bereq = get_be_req(node, pos);
+ return &bereq->req;