|
|
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 Free Software Foundation, Inc.
6:
7: This file is part of GNU CC.
8:
9: GNU CC is distributed in the hope that it will be useful,
10: but WITHOUT ANY WARRANTY. No author or distributor
11: accepts responsibility to anyone for the consequences of using it
12: or for whether it serves any particular purpose or works at all,
13: unless he says so in writing. Refer to the GNU CC General Public
14: License for full details.
15:
16: Everyone is granted permission to copy, modify and redistribute
17: GNU CC, but only under the conditions described in the
18: GNU CC General Public License. A copy of this license is
19: supposed to have been given to you along with GNU CC so you
20: can know your rights and responsibilities. It should be in a
21: file named COPYING. Among other things, the copyright notice
22: and this notice must be preserved on all copies. */
23:
24:
25: #include <stdio.h>
1.1.1.2 root 26: #include "config.h"
1.1 root 27: #include "rtl.h"
1.1.1.2 root 28: #include "obstack.h"
1.1 root 29:
30: struct obstack obstack;
1.1.1.2 root 31: struct obstack *rtl_obstack = &obstack;
1.1 root 32:
33: #define obstack_chunk_alloc xmalloc
34: #define obstack_chunk_free free
35: extern int xmalloc ();
36: extern void free ();
37:
38: void fatal ();
39:
40: void
41: gen_insn (insn)
42: rtx insn;
43: {
44: /* Don't mention instructions whose names are the null string.
45: They are in the machine description just to be recognized. */
46: if (strlen (XSTR (insn, 0)) == 0)
47: return;
48:
1.1.1.3 ! root 49: printf ("#define HAVE_%s (%s)\n", XSTR (insn, 0),
1.1 root 50: strlen (XSTR (insn, 2)) ? XSTR (insn, 2) : "1");
51: printf ("extern rtx gen_%s ();\n", XSTR (insn, 0));
52: }
53:
1.1.1.2 root 54: int
1.1 root 55: xmalloc (size)
56: {
57: register int val = malloc (size);
58:
59: if (val == 0)
1.1.1.2 root 60: fatal ("virtual memory exhausted");
1.1 root 61:
62: return val;
63: }
64:
65: int
66: xrealloc (ptr, size)
67: char *ptr;
68: int size;
69: {
70: int result = realloc (ptr, size);
71: if (!result)
1.1.1.2 root 72: fatal ("virtual memory exhausted");
1.1 root 73: return result;
74: }
75:
76: void
77: fatal (s, a1, a2)
78: {
79: fprintf (stderr, "genflags: ");
80: fprintf (stderr, s, a1, a2);
81: fprintf (stderr, "\n");
1.1.1.2 root 82: exit (FATAL_EXIT_CODE);
1.1 root 83: }
84:
1.1.1.2 root 85: int
1.1 root 86: main (argc, argv)
87: int argc;
88: char **argv;
89: {
90: rtx desc;
91: FILE *infile;
92: extern rtx read_rtx ();
93: register int c;
94:
1.1.1.2 root 95: obstack_init (rtl_obstack);
1.1 root 96:
97: if (argc <= 1)
98: fatal ("No input file name.");
99:
100: infile = fopen (argv[1], "r");
101: if (infile == 0)
102: {
103: perror (argv[1]);
1.1.1.2 root 104: exit (FATAL_EXIT_CODE);
1.1 root 105: }
106:
107: init_rtl ();
108:
109: printf ("/* Generated automatically by the program `genflags'\n\
110: from the machine description file `md'. */\n\n");
111:
112: /* Read the machine description. */
113:
114: while (1)
115: {
116: c = read_skip_spaces (infile);
117: if (c == EOF)
118: break;
119: ungetc (c, infile);
120:
121: desc = read_rtx (infile);
1.1.1.2 root 122: if (GET_CODE (desc) == DEFINE_INSN || GET_CODE (desc) == DEFINE_EXPAND)
123: gen_insn (desc);
1.1 root 124: }
125:
1.1.1.2 root 126: fflush (stdout);
127: exit (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE);
1.1 root 128: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.