|
|
1.1 ! root 1: /* Generate from machine description: ! 2: ! 3: - some macros CODE_FOR_... giving the insn_code_number value ! 4: for each of the defined standard insn names. ! 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 "hconfig.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: extern rtx read_rtx (); ! 37: ! 38: char *xmalloc (); ! 39: static void fatal (); ! 40: void fancy_abort (); ! 41: ! 42: static int insn_code_number; ! 43: ! 44: static void ! 45: gen_insn (insn) ! 46: rtx insn; ! 47: { ! 48: /* Don't mention instructions whose names are the null string. ! 49: They are in the machine description just to be recognized. */ ! 50: if (strlen (XSTR (insn, 0)) != 0) ! 51: printf (" CODE_FOR_%s = %d,\n", XSTR (insn, 0), ! 52: insn_code_number); ! 53: } ! 54: ! 55: char * ! 56: xmalloc (size) ! 57: unsigned size; ! 58: { ! 59: register char *val = (char *) malloc (size); ! 60: ! 61: if (val == 0) ! 62: fatal ("virtual memory exhausted"); ! 63: return val; ! 64: } ! 65: ! 66: char * ! 67: xrealloc (ptr, size) ! 68: char *ptr; ! 69: unsigned size; ! 70: { ! 71: char *result = (char *) realloc (ptr, size); ! 72: if (!result) ! 73: fatal ("virtual memory exhausted"); ! 74: return result; ! 75: } ! 76: ! 77: static void ! 78: fatal (s, a1, a2) ! 79: char *s; ! 80: { ! 81: fprintf (stderr, "gencodes: "); ! 82: fprintf (stderr, s, a1, a2); ! 83: fprintf (stderr, "\n"); ! 84: exit (FATAL_EXIT_CODE); ! 85: } ! 86: ! 87: /* More 'friendly' abort that prints the line and file. ! 88: config.h can #define abort fancy_abort if you like that sort of thing. */ ! 89: ! 90: void ! 91: fancy_abort () ! 92: { ! 93: fatal ("Internal gcc abort."); ! 94: } ! 95: ! 96: int ! 97: main (argc, argv) ! 98: int argc; ! 99: char **argv; ! 100: { ! 101: rtx desc; ! 102: FILE *infile; ! 103: register int c; ! 104: ! 105: obstack_init (rtl_obstack); ! 106: ! 107: if (argc <= 1) ! 108: fatal ("No input file name."); ! 109: ! 110: infile = fopen (argv[1], "r"); ! 111: if (infile == 0) ! 112: { ! 113: perror (argv[1]); ! 114: exit (FATAL_EXIT_CODE); ! 115: } ! 116: ! 117: init_rtl (); ! 118: ! 119: printf ("/* Generated automatically by the program `gencodes'\n\ ! 120: from the machine description file `md'. */\n\n"); ! 121: ! 122: printf ("#ifndef MAX_INSN_CODE\n\n"); ! 123: ! 124: /* Read the machine description. */ ! 125: ! 126: insn_code_number = 0; ! 127: printf ("enum insn_code {\n"); ! 128: ! 129: while (1) ! 130: { ! 131: c = read_skip_spaces (infile); ! 132: if (c == EOF) ! 133: break; ! 134: ungetc (c, infile); ! 135: ! 136: desc = read_rtx (infile); ! 137: if (GET_CODE (desc) == DEFINE_INSN || GET_CODE (desc) == DEFINE_EXPAND) ! 138: { ! 139: gen_insn (desc); ! 140: insn_code_number++; ! 141: } ! 142: if (GET_CODE (desc) == DEFINE_PEEPHOLE ! 143: || GET_CODE (desc) == DEFINE_SPLIT) ! 144: { ! 145: insn_code_number++; ! 146: } ! 147: } ! 148: ! 149: printf (" CODE_FOR_nothing };\n"); ! 150: ! 151: printf ("\n#define MAX_INSN_CODE ((int) CODE_FOR_nothing)\n"); ! 152: ! 153: printf ("#endif /* MAX_INSN_CODE */\n"); ! 154: ! 155: fflush (stdout); ! 156: exit (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE); ! 157: /* NOTREACHED */ ! 158: return 0; ! 159: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.