X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fgenemit.c;h=a367f46a8ccbf0029f97cdee6de243e8e92a944d;hb=ecfefb70ee92eb56b3e3cc52134b06e05a423c42;hp=08b51f821ff533d7ca14bdc8d47ed352567ad92a;hpb=8dd12969ce5c0aae631243096677d13406eb6931;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/genemit.c b/gcc/genemit.c index 08b51f821ff..a367f46a8cc 100644 --- a/gcc/genemit.c +++ b/gcc/genemit.c @@ -16,8 +16,8 @@ for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING. If not, write to the Free -Software Foundation, 59 Temple Place - Suite 330, Boston, MA -02111-1307, USA. */ +Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301, USA. */ #include "bconfig.h" @@ -341,7 +341,7 @@ gen_insn (rtx insn, int lineno) if (i != XVECLEN (insn, 1) - 1) { struct clobber_pat *p; - struct clobber_ent *link = xmalloc (sizeof (struct clobber_ent)); + struct clobber_ent *link = XNEW (struct clobber_ent); int j; link->code_number = insn_code_number; @@ -377,7 +377,7 @@ gen_insn (rtx insn, int lineno) if (p == 0) { - p = xmalloc (sizeof (struct clobber_pat)); + p = XNEW (struct clobber_pat); p->insns = 0; p->pattern = insn; @@ -428,15 +428,18 @@ gen_insn (rtx insn, int lineno) } else { + char *used = XCNEWVEC (char, operands); + printf (" return gen_rtx_PARALLEL (VOIDmode, gen_rtvec (%d", XVECLEN (insn, 1)); for (i = 0; i < XVECLEN (insn, 1); i++) { printf (",\n\t\t"); - gen_exp (XVECEXP (insn, 1, i), DEFINE_INSN, NULL); + gen_exp (XVECEXP (insn, 1, i), DEFINE_INSN, used); } printf ("));\n}\n\n"); + XDELETEVEC (used); } } @@ -447,6 +450,7 @@ gen_expand (rtx expand) { int operands; int i; + char *used; if (strlen (XSTR (expand, 0)) == 0) fatal ("define_expand lacks a name"); @@ -530,6 +534,9 @@ gen_expand (rtx expand) Use emit_insn to add them to the sequence being accumulated. But don't do this if the user's code has set `no_more' nonzero. */ + used = XCNEWVEC (char, + MAX (operands, MAX (max_scratch_opno, max_dup_opno) + 1)); + for (i = 0; i < XVECLEN (expand, 1); i++) { rtx next = XVECEXP (expand, 1, i); @@ -560,13 +567,15 @@ gen_expand (rtx expand) printf (" emit ("); else printf (" emit_insn ("); - gen_exp (next, DEFINE_EXPAND, NULL); + gen_exp (next, DEFINE_EXPAND, used); printf (");\n"); if (GET_CODE (next) == SET && GET_CODE (SET_DEST (next)) == PC && GET_CODE (SET_SRC (next)) == LABEL_REF) printf (" emit_barrier ();"); } + XDELETEVEC (used); + /* Call `get_insns' to extract the list of all the insns emitted within this gen_... function. */ @@ -599,7 +608,7 @@ gen_split (rtx split) max_operand_vec (split, 2); operands = MAX (max_opno, MAX (max_dup_opno, max_scratch_opno)) + 1; unused = (operands == 0 ? " ATTRIBUTE_UNUSED" : ""); - used = xcalloc (1, operands); + used = XCNEWVEC (char, operands); /* Output the prototype, function name and argument declarations. */ if (GET_CODE (split) == DEFINE_PEEPHOLE2) @@ -836,6 +845,7 @@ from the machine description file `md'. */\n\n"); printf ("#include \"expr.h\"\n"); printf ("#include \"optabs.h\"\n"); printf ("#include \"real.h\"\n"); + printf ("#include \"dfp.h\"\n"); printf ("#include \"flags.h\"\n"); printf ("#include \"output.h\"\n"); printf ("#include \"insn-config.h\"\n"); @@ -844,6 +854,7 @@ from the machine description file `md'. */\n\n"); printf ("#include \"resource.h\"\n"); printf ("#include \"reload.h\"\n"); printf ("#include \"toplev.h\"\n"); + printf ("#include \"tm-constrs.h\"\n"); printf ("#include \"ggc.h\"\n\n"); printf ("#include \"basic-block.h\"\n\n"); printf ("#define FAIL return (end_sequence (), _val)\n"); @@ -894,10 +905,3 @@ from the machine description file `md'. */\n\n"); fflush (stdout); return (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE); } - -/* Define this so we can link with print-rtl.o to get debug_rtx function. */ -const char * -get_insn_name (int code ATTRIBUTE_UNUSED) -{ - return NULL; -}