Annotation of gcc/genflags.c, revision 1.1.1.2

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 ();
1.1.1.2 ! root       36: extern rtx read_rtx ();
1.1       root       37: 
                     38: char *xmalloc ();
                     39: static void fatal ();
                     40: void fancy_abort ();
                     41: 
                     42: static void
                     43: gen_insn (insn)
                     44:      rtx insn;
                     45: {
                     46:   char *p;
                     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:     return;
                     52: 
                     53:   printf ("#define HAVE_%s ", XSTR (insn, 0));
                     54:   if (strlen (XSTR (insn, 2)) == 0)
                     55:     printf ("1\n");
                     56:   else
                     57:     {
                     58:       /* Write the macro definition, putting \'s at the end of each line,
                     59:         if more than one.  */
                     60:       printf ("(");
                     61:       for (p = XSTR (insn, 2); *p; p++)
                     62:        {
                     63:          if (*p == '\n')
                     64:            printf (" \\\n");
                     65:          else
                     66:            printf ("%c", *p);
                     67:        }
                     68:       printf (")\n");
                     69:     }
                     70:       
                     71:   printf ("extern rtx gen_%s ();\n", XSTR (insn, 0));
                     72: }
                     73: 
                     74: char *
                     75: xmalloc (size)
                     76:      unsigned size;
                     77: {
                     78:   register char *val = (char *) malloc (size);
                     79: 
                     80:   if (val == 0)
                     81:     fatal ("virtual memory exhausted");
                     82: 
                     83:   return val;
                     84: }
                     85: 
                     86: char *
                     87: xrealloc (ptr, size)
                     88:      char *ptr;
                     89:      unsigned size;
                     90: {
                     91:   char *result = (char *) realloc (ptr, size);
                     92:   if (!result)
                     93:     fatal ("virtual memory exhausted");
                     94:   return result;
                     95: }
                     96: 
                     97: static void
                     98: fatal (s, a1, a2)
                     99:      char *s;
                    100: {
                    101:   fprintf (stderr, "genflags: ");
                    102:   fprintf (stderr, s, a1, a2);
                    103:   fprintf (stderr, "\n");
                    104:   exit (FATAL_EXIT_CODE);
                    105: }
                    106: 
                    107: /* More 'friendly' abort that prints the line and file.
                    108:    config.h can #define abort fancy_abort if you like that sort of thing.  */
                    109: 
                    110: void
                    111: fancy_abort ()
                    112: {
                    113:   fatal ("Internal gcc abort.");
                    114: }
                    115: 
                    116: int
                    117: main (argc, argv)
                    118:      int argc;
                    119:      char **argv;
                    120: {
                    121:   rtx desc;
                    122:   FILE *infile;
                    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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.