Annotation of GNUtools/cc/gencodes.c, revision 1.1

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.
        !             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 "hconfig.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: extern rtx read_rtx ();
        !            37: 
        !            38: char *xmalloc ();
        !            39: static void fatal ();
        !            40: void fancy_abort ();
        !            41: 
        !            42: static int insn_code_number;
        !            43: 
        !            44: static void
        !            45: gen_insn (insn)
        !            46:      rtx insn;
        !            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:     printf ("  CODE_FOR_%s = %d,\n", XSTR (insn, 0),
        !            52:            insn_code_number);
        !            53: }
        !            54: 
        !            55: char *
        !            56: xmalloc (size)
        !            57:      unsigned size;
        !            58: {
        !            59:   register char *val = (char *) malloc (size);
        !            60: 
        !            61:   if (val == 0)
        !            62:     fatal ("virtual memory exhausted");
        !            63:   return val;
        !            64: }
        !            65: 
        !            66: char *
        !            67: xrealloc (ptr, size)
        !            68:      char *ptr;
        !            69:      unsigned size;
        !            70: {
        !            71:   char *result = (char *) realloc (ptr, size);
        !            72:   if (!result)
        !            73:     fatal ("virtual memory exhausted");
        !            74:   return result;
        !            75: }
        !            76: 
        !            77: static void
        !            78: fatal (s, a1, a2)
        !            79:      char *s;
        !            80: {
        !            81:   fprintf (stderr, "gencodes: ");
        !            82:   fprintf (stderr, s, a1, a2);
        !            83:   fprintf (stderr, "\n");
        !            84:   exit (FATAL_EXIT_CODE);
        !            85: }
        !            86: 
        !            87: /* More 'friendly' abort that prints the line and file.
        !            88:    config.h can #define abort fancy_abort if you like that sort of thing.  */
        !            89: 
        !            90: void
        !            91: fancy_abort ()
        !            92: {
        !            93:   fatal ("Internal gcc abort.");
        !            94: }
        !            95: 
        !            96: int
        !            97: main (argc, argv)
        !            98:      int argc;
        !            99:      char **argv;
        !           100: {
        !           101:   rtx desc;
        !           102:   FILE *infile;
        !           103:   register int c;
        !           104: 
        !           105:   obstack_init (rtl_obstack);
        !           106: 
        !           107:   if (argc <= 1)
        !           108:     fatal ("No input file name.");
        !           109: 
        !           110:   infile = fopen (argv[1], "r");
        !           111:   if (infile == 0)
        !           112:     {
        !           113:       perror (argv[1]);
        !           114:       exit (FATAL_EXIT_CODE);
        !           115:     }
        !           116: 
        !           117:   init_rtl ();
        !           118: 
        !           119:   printf ("/* Generated automatically by the program `gencodes'\n\
        !           120: from the machine description file `md'.  */\n\n");
        !           121: 
        !           122:   printf ("#ifndef MAX_INSN_CODE\n\n");
        !           123: 
        !           124:   /* Read the machine description.  */
        !           125: 
        !           126:   insn_code_number = 0;
        !           127:   printf ("enum insn_code {\n");
        !           128: 
        !           129:   while (1)
        !           130:     {
        !           131:       c = read_skip_spaces (infile);
        !           132:       if (c == EOF)
        !           133:        break;
        !           134:       ungetc (c, infile);
        !           135: 
        !           136:       desc = read_rtx (infile);
        !           137:       if (GET_CODE (desc) == DEFINE_INSN || GET_CODE (desc) == DEFINE_EXPAND)
        !           138:        {
        !           139:          gen_insn (desc);
        !           140:          insn_code_number++;
        !           141:        }
        !           142:       if (GET_CODE (desc) == DEFINE_PEEPHOLE
        !           143:          || GET_CODE (desc) == DEFINE_SPLIT)
        !           144:        {
        !           145:          insn_code_number++;
        !           146:        }
        !           147:     }
        !           148: 
        !           149:   printf ("  CODE_FOR_nothing };\n");
        !           150: 
        !           151:   printf ("\n#define MAX_INSN_CODE ((int) CODE_FOR_nothing)\n");
        !           152: 
        !           153:   printf ("#endif /* MAX_INSN_CODE */\n");
        !           154: 
        !           155:   fflush (stdout);
        !           156:   exit (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE);
        !           157:   /* NOTREACHED */
        !           158:   return 0;
        !           159: }

unix.superglobalmegacorp.com

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