|
|
1.1 ! root 1: /* Generate from machine description: ! 2: ! 3: - some flags HAVE_... saying which simple standard instructions are ! 4: available for this machine. ! 5: Copyright (C) 1987, 1991 Free Software Foundation, Inc. ! 6: ! 7: This file is part of GNU CC. ! 8: ! 9: GNU CC is free software; you can redistribute it and/or modify ! 10: it under the terms of the GNU General Public License as published by ! 11: the Free Software Foundation; either version 2, or (at your option) ! 12: any later version. ! 13: ! 14: GNU CC is distributed in the hope that it will be useful, ! 15: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 16: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 17: GNU General Public License for more details. ! 18: ! 19: You should have received a copy of the GNU General Public License ! 20: along with GNU CC; see the file COPYING. If not, write to ! 21: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ ! 22: ! 23: ! 24: #include <stdio.h> ! 25: #include "config.h" ! 26: #include "rtl.h" ! 27: #include "obstack.h" ! 28: ! 29: static struct obstack obstack; ! 30: struct obstack *rtl_obstack = &obstack; ! 31: ! 32: #define obstack_chunk_alloc xmalloc ! 33: #define obstack_chunk_free free ! 34: ! 35: extern void free (); ! 36: ! 37: char *xmalloc (); ! 38: static void fatal (); ! 39: void fancy_abort (); ! 40: ! 41: static void ! 42: gen_insn (insn) ! 43: rtx insn; ! 44: { ! 45: char *p; ! 46: ! 47: /* Don't mention instructions whose names are the null string. ! 48: They are in the machine description just to be recognized. */ ! 49: if (strlen (XSTR (insn, 0)) == 0) ! 50: return; ! 51: ! 52: printf ("#define HAVE_%s ", XSTR (insn, 0)); ! 53: if (strlen (XSTR (insn, 2)) == 0) ! 54: printf ("1\n"); ! 55: else ! 56: { ! 57: /* Write the macro definition, putting \'s at the end of each line, ! 58: if more than one. */ ! 59: printf ("("); ! 60: for (p = XSTR (insn, 2); *p; p++) ! 61: { ! 62: if (*p == '\n') ! 63: printf (" \\\n"); ! 64: else ! 65: printf ("%c", *p); ! 66: } ! 67: printf (")\n"); ! 68: } ! 69: ! 70: printf ("extern rtx gen_%s ();\n", XSTR (insn, 0)); ! 71: } ! 72: ! 73: char * ! 74: xmalloc (size) ! 75: unsigned size; ! 76: { ! 77: register char *val = (char *) malloc (size); ! 78: ! 79: if (val == 0) ! 80: fatal ("virtual memory exhausted"); ! 81: ! 82: return val; ! 83: } ! 84: ! 85: char * ! 86: xrealloc (ptr, size) ! 87: char *ptr; ! 88: unsigned size; ! 89: { ! 90: char *result = (char *) realloc (ptr, size); ! 91: if (!result) ! 92: fatal ("virtual memory exhausted"); ! 93: return result; ! 94: } ! 95: ! 96: static void ! 97: fatal (s, a1, a2) ! 98: char *s; ! 99: { ! 100: fprintf (stderr, "genflags: "); ! 101: fprintf (stderr, s, a1, a2); ! 102: fprintf (stderr, "\n"); ! 103: exit (FATAL_EXIT_CODE); ! 104: } ! 105: ! 106: /* More 'friendly' abort that prints the line and file. ! 107: config.h can #define abort fancy_abort if you like that sort of thing. */ ! 108: ! 109: void ! 110: fancy_abort () ! 111: { ! 112: fatal ("Internal gcc abort."); ! 113: } ! 114: ! 115: int ! 116: main (argc, argv) ! 117: int argc; ! 118: char **argv; ! 119: { ! 120: rtx desc; ! 121: FILE *infile; ! 122: extern rtx read_rtx (); ! 123: register int c; ! 124: ! 125: obstack_init (rtl_obstack); ! 126: ! 127: if (argc <= 1) ! 128: fatal ("No input file name."); ! 129: ! 130: infile = fopen (argv[1], "r"); ! 131: if (infile == 0) ! 132: { ! 133: perror (argv[1]); ! 134: exit (FATAL_EXIT_CODE); ! 135: } ! 136: ! 137: init_rtl (); ! 138: ! 139: printf ("/* Generated automatically by the program `genflags'\n\ ! 140: from the machine description file `md'. */\n\n"); ! 141: ! 142: /* Read the machine description. */ ! 143: ! 144: while (1) ! 145: { ! 146: c = read_skip_spaces (infile); ! 147: if (c == EOF) ! 148: break; ! 149: ungetc (c, infile); ! 150: ! 151: desc = read_rtx (infile); ! 152: if (GET_CODE (desc) == DEFINE_INSN || GET_CODE (desc) == DEFINE_EXPAND) ! 153: gen_insn (desc); ! 154: } ! 155: ! 156: fflush (stdout); ! 157: exit (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE); ! 158: /* NOTREACHED */ ! 159: return 0; ! 160: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.