118334Speter/* Generate from machine description: 218334Speter - some macros CODE_FOR_... giving the insn_code_number value 318334Speter for each of the defined standard insn names. 490075Sobrien Copyright (C) 1987, 1991, 1995, 1998, 5169689Skan 1999, 2000, 2001, 2003, 2004 Free Software Foundation, Inc. 618334Speter 790075SobrienThis file is part of GCC. 818334Speter 990075SobrienGCC is free software; you can redistribute it and/or modify it under 1090075Sobrienthe terms of the GNU General Public License as published by the Free 1190075SobrienSoftware Foundation; either version 2, or (at your option) any later 1290075Sobrienversion. 1318334Speter 1490075SobrienGCC is distributed in the hope that it will be useful, but WITHOUT ANY 1590075SobrienWARRANTY; without even the implied warranty of MERCHANTABILITY or 1690075SobrienFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1790075Sobrienfor more details. 1818334Speter 1918334SpeterYou should have received a copy of the GNU General Public License 2090075Sobrienalong with GCC; see the file COPYING. If not, write to the Free 21169689SkanSoftware Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 22169689Skan02110-1301, USA. */ 2318334Speter 2418334Speter 25132718Skan#include "bconfig.h" 2650397Sobrien#include "system.h" 27132718Skan#include "coretypes.h" 28132718Skan#include "tm.h" 2918334Speter#include "rtl.h" 3090075Sobrien#include "errors.h" 3190075Sobrien#include "gensupport.h" 3218334Speter 3318334Speterstatic void 34132718Skangen_insn (rtx insn, int code) 3518334Speter{ 36117395Skan const char *name = XSTR (insn, 0); 37117395Skan int truth = maybe_eval_c_test (XSTR (insn, 2)); 38117395Skan 3918334Speter /* Don't mention instructions whose names are the null string 4018334Speter or begin with '*'. They are in the machine description just 4118334Speter to be recognized. */ 4290075Sobrien if (name[0] != 0 && name[0] != '*') 43117395Skan { 44117395Skan if (truth == 0) 45117395Skan printf ("#define CODE_FOR_%s CODE_FOR_nothing\n", name); 46117395Skan else 47117395Skan printf (" CODE_FOR_%s = %d,\n", name, code); 48117395Skan } 4918334Speter} 5018334Speter 5118334Speterint 52132718Skanmain (int argc, char **argv) 5318334Speter{ 5418334Speter rtx desc; 5518334Speter 5690075Sobrien progname = "gencodes"; 5718334Speter 58117395Skan /* We need to see all the possibilities. Elided insns may have 59117395Skan direct references to CODE_FOR_xxx in C code. */ 60117395Skan insn_elision = 0; 61117395Skan 6290075Sobrien if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE) 6390075Sobrien return (FATAL_EXIT_CODE); 6418334Speter 6590075Sobrien puts ("\ 6690075Sobrien/* Generated automatically by the program `gencodes'\n\ 6790075Sobrien from the machine description file `md'. */\n\ 6890075Sobrien\n\ 6990075Sobrien#ifndef GCC_INSN_CODES_H\n\ 7090075Sobrien#define GCC_INSN_CODES_H\n\ 7190075Sobrien\n\ 7290075Sobrienenum insn_code {"); 7318334Speter 7418334Speter /* Read the machine description. */ 7518334Speter 7618334Speter while (1) 7718334Speter { 7890075Sobrien int line_no; 7990075Sobrien int insn_code_number; 8090075Sobrien 8190075Sobrien desc = read_md_rtx (&line_no, &insn_code_number); 8290075Sobrien if (desc == NULL) 8318334Speter break; 8418334Speter 8518334Speter if (GET_CODE (desc) == DEFINE_INSN || GET_CODE (desc) == DEFINE_EXPAND) 86117395Skan gen_insn (desc, insn_code_number); 8718334Speter } 8818334Speter 89117395Skan puts (" CODE_FOR_nothing\n\ 9090075Sobrien};\n\ 9190075Sobrien\n\ 9290075Sobrien#endif /* GCC_INSN_CODES_H */"); 9318334Speter 9490075Sobrien if (ferror (stdout) || fflush (stdout) || fclose (stdout)) 9590075Sobrien return FATAL_EXIT_CODE; 9618334Speter 9790075Sobrien return SUCCESS_EXIT_CODE; 9890075Sobrien} 99