]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/genconstants.c
gcov: rename 2 options.
[thirdparty/gcc.git] / gcc / genconstants.c
CommitLineData
1b0c37d7
ZW
1/* Generate from machine description:
2 a series of #define statements, one for each constant named in
3 a (define_constants ...) pattern.
4
8d9254fc 5 Copyright (C) 1987-2020 Free Software Foundation, Inc.
1b0c37d7 6
40803cd5 7This file is part of GCC.
1b0c37d7 8
40803cd5 9GCC is free software; you can redistribute it and/or modify
1b0c37d7 10it under the terms of the GNU General Public License as published by
9dcd6f09 11the Free Software Foundation; either version 3, or (at your option)
1b0c37d7
ZW
12any later version.
13
40803cd5 14GCC is distributed in the hope that it will be useful,
1b0c37d7
ZW
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
9dcd6f09
NC
20along with GCC; see the file COPYING3. If not see
21<http://www.gnu.org/licenses/>. */
1b0c37d7
ZW
22
23/* This program does not use gensupport.c because it does not need to
24 look at insn patterns, only (define_constants), and we want to
25 minimize dependencies. */
26
4977bab6 27#include "bconfig.h"
1b0c37d7 28#include "system.h"
4977bab6 29#include "coretypes.h"
1b0c37d7 30#include "errors.h"
b78027d1
DM
31#include "statistics.h"
32#include "vec.h"
9f418533 33#include "read-md.h"
1b0c37d7 34
1b0c37d7
ZW
35/* Called via traverse_md_constants; emit a #define for
36 the current constant definition. */
37
38static int
24609606 39print_md_constant (void **slot, void *info ATTRIBUTE_UNUSED)
1b0c37d7 40{
28dab132 41 struct md_constant *def = (struct md_constant *) *slot;
1b0c37d7 42
24609606
RS
43 if (!def->parent_enum)
44 printf ("#define %s %s\n", def->name, def->value);
45 return 1;
46}
47
48/* Called via traverse_enums. Emit an enum definition for
49 enum_type *SLOT. */
50
51static int
52print_enum_type (void **slot, void *info ATTRIBUTE_UNUSED)
53{
54 struct enum_type *def;
55 struct enum_value *value;
56 char *value_name;
57
58 def = (struct enum_type *) *slot;
59 printf ("\nenum %s {", def->name);
60 for (value = def->values; value; value = value->next)
61 {
62 printf ("\n %s = %s", value->def->name, value->def->value);
63 if (value->next)
64 putc (',', stdout);
65 }
66 printf ("\n};\n");
67
68 /* Define NUM_<enum>_VALUES to be the largest enum value + 1. */
69 value_name = ACONCAT (("num_", def->name, "_values", NULL));
70 upcase_string (value_name);
71 printf ("#define %s %d\n", value_name, def->num_values);
72
0fe60a1b
RS
73 /* Declare the array that is generated by genenum. */
74 printf ("extern const char *const %s_strings[];\n", def->name);
75
1b0c37d7
ZW
76 return 1;
77}
78
79int
66b0fe8f 80main (int argc, const char **argv)
1b0c37d7 81{
1b0c37d7
ZW
82 progname = "genconstants";
83
812b1403
DM
84 noop_reader reader;
85 if (!reader.read_md_files (argc, argv, NULL))
1b0c37d7
ZW
86 return (FATAL_EXIT_CODE);
87
f9942f4e
ZW
88 /* Initializing the MD reader has the side effect of loading up
89 the constants table that we wish to scan. */
1b0c37d7
ZW
90
91 puts ("/* Generated automatically by the program `genconstants'");
92 puts (" from the machine description file `md'. */\n");
93 puts ("#ifndef GCC_INSN_CONSTANTS_H");
94 puts ("#define GCC_INSN_CONSTANTS_H\n");
95
b78027d1
DM
96 reader.traverse_md_constants (print_md_constant, 0);
97 reader.traverse_enum_types (print_enum_type, 0);
1b0c37d7
ZW
98
99 puts ("\n#endif /* GCC_INSN_CONSTANTS_H */");
100
101 if (ferror (stdout) || fflush (stdout) || fclose (stdout))
102 return FATAL_EXIT_CODE;
103
104 return SUCCESS_EXIT_CODE;
105}