Annotation of gcc/gencodes.c, revision 1.1.1.4

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.
1.1.1.4 ! root        5:    Copyright (C) 1987, 1991, 1995 Free Software Foundation, Inc.
1.1       root        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
1.1.1.4 ! root       21: the Free Software Foundation, 59 Temple Place - Suite 330,
        !            22: Boston, MA 02111-1307, USA.  */
1.1       root       23: 
                     24: 
                     25: #include <stdio.h>
1.1.1.3   root       26: #include "hconfig.h"
1.1       root       27: #include "rtl.h"
                     28: #include "obstack.h"
                     29: 
                     30: static struct obstack obstack;
                     31: struct obstack *rtl_obstack = &obstack;
                     32: 
                     33: #define obstack_chunk_alloc xmalloc
                     34: #define obstack_chunk_free free
                     35: 
                     36: extern void free ();
1.1.1.2   root       37: extern rtx read_rtx ();
1.1       root       38: 
                     39: char *xmalloc ();
                     40: static void fatal ();
                     41: void fancy_abort ();
                     42: 
                     43: static int insn_code_number;
                     44: 
                     45: static void
                     46: gen_insn (insn)
                     47:      rtx insn;
                     48: {
1.1.1.4 ! root       49:   /* Don't mention instructions whose names are the null string
        !            50:      or begin with '*'.  They are in the machine description just
        !            51:      to be recognized.  */
        !            52:   if (XSTR (insn, 0)[0] != 0 && XSTR (insn, 0)[0] != '*')
1.1       root       53:     printf ("  CODE_FOR_%s = %d,\n", XSTR (insn, 0),
                     54:            insn_code_number);
                     55: }
                     56: 
                     57: char *
                     58: xmalloc (size)
                     59:      unsigned size;
                     60: {
                     61:   register char *val = (char *) malloc (size);
                     62: 
                     63:   if (val == 0)
                     64:     fatal ("virtual memory exhausted");
                     65:   return val;
                     66: }
                     67: 
                     68: char *
                     69: xrealloc (ptr, size)
                     70:      char *ptr;
                     71:      unsigned size;
                     72: {
                     73:   char *result = (char *) realloc (ptr, size);
                     74:   if (!result)
                     75:     fatal ("virtual memory exhausted");
                     76:   return result;
                     77: }
                     78: 
                     79: static void
                     80: fatal (s, a1, a2)
                     81:      char *s;
                     82: {
                     83:   fprintf (stderr, "gencodes: ");
                     84:   fprintf (stderr, s, a1, a2);
                     85:   fprintf (stderr, "\n");
                     86:   exit (FATAL_EXIT_CODE);
                     87: }
                     88: 
                     89: /* More 'friendly' abort that prints the line and file.
                     90:    config.h can #define abort fancy_abort if you like that sort of thing.  */
                     91: 
                     92: void
                     93: fancy_abort ()
                     94: {
                     95:   fatal ("Internal gcc abort.");
                     96: }
                     97: 
                     98: int
                     99: main (argc, argv)
                    100:      int argc;
                    101:      char **argv;
                    102: {
                    103:   rtx desc;
                    104:   FILE *infile;
                    105:   register int c;
                    106: 
                    107:   obstack_init (rtl_obstack);
                    108: 
                    109:   if (argc <= 1)
                    110:     fatal ("No input file name.");
                    111: 
                    112:   infile = fopen (argv[1], "r");
                    113:   if (infile == 0)
                    114:     {
                    115:       perror (argv[1]);
                    116:       exit (FATAL_EXIT_CODE);
                    117:     }
                    118: 
                    119:   init_rtl ();
                    120: 
                    121:   printf ("/* Generated automatically by the program `gencodes'\n\
                    122: from the machine description file `md'.  */\n\n");
                    123: 
                    124:   printf ("#ifndef MAX_INSN_CODE\n\n");
                    125: 
                    126:   /* Read the machine description.  */
                    127: 
                    128:   insn_code_number = 0;
                    129:   printf ("enum insn_code {\n");
                    130: 
                    131:   while (1)
                    132:     {
                    133:       c = read_skip_spaces (infile);
                    134:       if (c == EOF)
                    135:        break;
                    136:       ungetc (c, infile);
                    137: 
                    138:       desc = read_rtx (infile);
                    139:       if (GET_CODE (desc) == DEFINE_INSN || GET_CODE (desc) == DEFINE_EXPAND)
                    140:        {
                    141:          gen_insn (desc);
                    142:          insn_code_number++;
                    143:        }
                    144:       if (GET_CODE (desc) == DEFINE_PEEPHOLE
                    145:          || GET_CODE (desc) == DEFINE_SPLIT)
                    146:        {
                    147:          insn_code_number++;
                    148:        }
                    149:     }
                    150: 
                    151:   printf ("  CODE_FOR_nothing };\n");
                    152: 
                    153:   printf ("\n#define MAX_INSN_CODE ((int) CODE_FOR_nothing)\n");
                    154: 
                    155:   printf ("#endif /* MAX_INSN_CODE */\n");
                    156: 
                    157:   fflush (stdout);
                    158:   exit (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE);
                    159:   /* NOTREACHED */
                    160:   return 0;
                    161: }

unix.superglobalmegacorp.com

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