Annotation of gcc/genflags.c, revision 1.1

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: }

unix.superglobalmegacorp.com

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