|
|
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:
1.1.1.4 ! root 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 1, or (at your option)
! 12: any later version.
! 13:
1.1 root 14: GNU CC is distributed in the hope that it will be useful,
1.1.1.4 ! root 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. */
1.1 root 22:
23:
24: #include <stdio.h>
1.1.1.2 root 25: #include "config.h"
1.1 root 26: #include "rtl.h"
1.1.1.2 root 27: #include "obstack.h"
1.1 root 28:
29: struct obstack obstack;
1.1.1.2 root 30: struct obstack *rtl_obstack = &obstack;
1.1 root 31:
32: #define obstack_chunk_alloc xmalloc
33: #define obstack_chunk_free free
34: extern int xmalloc ();
35: extern void free ();
36:
37: void fatal ();
38:
39: void
40: gen_insn (insn)
41: rtx insn;
42: {
43: /* Don't mention instructions whose names are the null string.
44: They are in the machine description just to be recognized. */
45: if (strlen (XSTR (insn, 0)) == 0)
46: return;
47:
1.1.1.3 root 48: printf ("#define HAVE_%s (%s)\n", XSTR (insn, 0),
1.1 root 49: strlen (XSTR (insn, 2)) ? XSTR (insn, 2) : "1");
50: printf ("extern rtx gen_%s ();\n", XSTR (insn, 0));
51: }
52:
1.1.1.2 root 53: int
1.1 root 54: xmalloc (size)
55: {
56: register int val = malloc (size);
57:
58: if (val == 0)
1.1.1.2 root 59: fatal ("virtual memory exhausted");
1.1 root 60:
61: return val;
62: }
63:
64: int
65: xrealloc (ptr, size)
66: char *ptr;
67: int size;
68: {
69: int result = realloc (ptr, size);
70: if (!result)
1.1.1.2 root 71: fatal ("virtual memory exhausted");
1.1 root 72: return result;
73: }
74:
75: void
76: fatal (s, a1, a2)
77: {
78: fprintf (stderr, "genflags: ");
79: fprintf (stderr, s, a1, a2);
80: fprintf (stderr, "\n");
1.1.1.2 root 81: exit (FATAL_EXIT_CODE);
1.1 root 82: }
83:
1.1.1.2 root 84: int
1.1 root 85: main (argc, argv)
86: int argc;
87: char **argv;
88: {
89: rtx desc;
90: FILE *infile;
91: extern rtx read_rtx ();
92: register int c;
93:
1.1.1.2 root 94: obstack_init (rtl_obstack);
1.1 root 95:
96: if (argc <= 1)
97: fatal ("No input file name.");
98:
99: infile = fopen (argv[1], "r");
100: if (infile == 0)
101: {
102: perror (argv[1]);
1.1.1.2 root 103: exit (FATAL_EXIT_CODE);
1.1 root 104: }
105:
106: init_rtl ();
107:
108: printf ("/* Generated automatically by the program `genflags'\n\
109: from the machine description file `md'. */\n\n");
110:
111: /* Read the machine description. */
112:
113: while (1)
114: {
115: c = read_skip_spaces (infile);
116: if (c == EOF)
117: break;
118: ungetc (c, infile);
119:
120: desc = read_rtx (infile);
1.1.1.2 root 121: if (GET_CODE (desc) == DEFINE_INSN || GET_CODE (desc) == DEFINE_EXPAND)
122: gen_insn (desc);
1.1 root 123: }
124:
1.1.1.2 root 125: fflush (stdout);
126: exit (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE);
1.1 root 127: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.