- if(arch_register_req_is(req, limited)) {
- bitset_pos_t elm;
- bitset_t *bs = bitset_alloca(req->cls->n_regs);
- req->limited(req->limited_env, bs);
- strncat(buf, " limited:", len);
- bitset_foreach(bs, elm) {
- strncat(buf, " ", len);
- strncat(buf, req->cls->regs[elm].name, len);
+ fprintf(F, "%s", req->cls->name);
+
+ if (arch_register_req_is(req, limited)) {
+ unsigned n_regs = req->cls->n_regs;
+ unsigned i;
+
+ fprintf(F, " limited to");
+ for (i = 0; i < n_regs; ++i) {
+ if (rbitset_is_set(req->limited, i)) {
+ const arch_register_t *reg = &req->cls->regs[i];
+ fprintf(F, " %s", reg->name);
+ }
+ }
+ }
+
+ if (arch_register_req_is(req, should_be_same)) {
+ const unsigned other = req->other_same;
+ int i;
+
+ fprintf(F, " same as");
+ for (i = 0; 1U << i <= other; ++i) {
+ if (other & (1U << i)) {
+ ir_fprintf(F, " %+F", get_irn_n(skip_Proj_const(node), i));
+ }
+ }
+ }
+
+ if (arch_register_req_is(req, must_be_different)) {
+ const unsigned other = req->other_different;
+ int i;
+
+ fprintf(F, " different from");
+ for (i = 0; 1U << i <= other; ++i) {
+ if (other & (1U << i)) {
+ ir_fprintf(F, " %+F", get_irn_n(skip_Proj_const(node), i));
+ }