- printf ("#ifdef HAVE_mov");
- for (p = cc_names[i]; *p; p++)
- printf ("%c", *p >= 'A' && *p <= 'Z' ? *p - 'A' + 'a' : *p);
- printf ("\n");
- printf (" if (HAVE_mov");
- for (p = cc_names[i]; *p; p++)
- printf ("%c", *p >= 'A' && *p <= 'Z' ? *p - 'A' + 'a' : *p);
- printf (")\n");
- printf (" mov_optab->handlers[(int) %smode].insn_code = CODE_FOR_mov",
- cc_names[i]);
- for (p = cc_names[i]; *p; p++)
- printf ("%c", *p >= 'A' && *p <= 'Z' ? *p - 'A' + 'a' : *p);
- printf (";\n#endif\n");
- }
+ rtx elt = XVECEXP (split, 0, i);
+ if (GET_CODE (elt) == MATCH_SCRATCH)
+ {
+ int last_insn_nr = insn_nr;
+ int cur_insn_nr = insn_nr;
+ int j;
+ for (j = i + 1; j < XVECLEN (split, 0); j++)
+ if (GET_CODE (XVECEXP (split, 0, j)) == MATCH_DUP)
+ {
+ if (XINT (XVECEXP (split, 0, j), 0) == XINT (elt, 0))
+ last_insn_nr = cur_insn_nr;
+ }
+ else if (GET_CODE (XVECEXP (split, 0, j)) != MATCH_SCRATCH)
+ cur_insn_nr++;
+ printf (" first_insn = recog_next_insn (curr_insn, %d);\n", insn_nr);
+ if (last_insn_nr > insn_nr)
+ printf (" last_insn = recog_next_insn (curr_insn, %d);\n",
+ last_insn_nr - 1);
+ else
+ printf (" last_insn = 0;\n");
+ printf (" if ((operands[%d] = find_free_register (first_insn, last_insn, \"%s\", %smode, &_regs_allocated)) == NULL_RTX)\n\
+ return NULL;\n",
+ XINT (elt, 0),
+ XSTR (elt, 1),
+ GET_MODE_NAME (GET_MODE (elt)));