* d10v_sim.h (SEXT56): Define.
[deliverable/binutils-gdb.git] / sim / igen / igen.h
CommitLineData
2f2e6c5d
AC
1/* This file is part of the program psim.
2
3 Copyright (C) 1994-1997, Andrew Cagney <cagney@highland.com.au>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19 */
20
8782bfcf 21/* code-generation options: */
2f2e6c5d
AC
22
23typedef enum {
24
25 /* Transfer control to an instructions semantic code using the the
26 standard call/return mechanism */
27
8782bfcf 28 generate_calls,
2f2e6c5d
AC
29
30 /* Transfer control to an instructions semantic code using
31 (computed) goto's instead of the more conventional call/return
32 mechanism */
33
8782bfcf 34 generate_jumps,
2f2e6c5d
AC
35
36} igen_code;
37
8782bfcf
AC
38typedef enum {
39 nia_is_cia_plus_one,
40 nia_is_void,
41 nia_is_invalid,
42} igen_nia;
2f2e6c5d 43
2f2e6c5d
AC
44
45
8782bfcf
AC
46typedef struct _igen_gen_options igen_gen_options;
47struct _igen_gen_options {
48 int direct_access;
49 int semantic_icache;
50 int insn_in_icache;
51 int conditional_issue;
52 int slot_verification;
53 int delayed_branch;
2f2e6c5d 54
8782bfcf
AC
55 /* If zeroing a register, which one? */
56 int zero_reg;
57 int zero_reg_nr;
2f2e6c5d 58
8782bfcf
AC
59 /* should multiple simulators be generated? */
60 int multi_sim;
2f2e6c5d 61
8782bfcf
AC
62 /* should the simulator support multi word instructions and if so,
63 what is the max nr of words. */
64 int multi_word;
2f2e6c5d 65
8782bfcf
AC
66 /* SMP? Should the generated code include SMP support (>0) and if
67 so, for how many processors? */
68 int smp;
2f2e6c5d 69
8782bfcf
AC
70 /* how should the next instruction address be computed? */
71 igen_nia nia;
2f2e6c5d 72
8782bfcf
AC
73 /* nr of instructions in the decoded instruction cache */
74 int icache;
75 int icache_size;
2f2e6c5d 76
8782bfcf
AC
77 /* see above */
78 igen_code code;
79};
2f2e6c5d
AC
80
81
8782bfcf
AC
82typedef struct _igen_trace_options igen_trace_options;
83struct _igen_trace_options {
84 int rule_selection;
85 int rule_rejection;
86 int entries;
87 int combine;
88};
2f2e6c5d 89
8782bfcf
AC
90typedef struct _igen_prefix_name {
91 char *name;
92 char *uname;
93} igen_prefix_name;
94
95typedef struct _igen_prefix_options {
96 igen_prefix_name global;
97 igen_prefix_name engine;
98 igen_prefix_name icache;
99 igen_prefix_name idecode;
100 igen_prefix_name itable;
101 igen_prefix_name semantics;
102 igen_prefix_name support;
103} igen_prefix_options;
104
105typedef struct _igen_decode_options igen_decode_options ;
106struct _igen_decode_options {
107
108 /* Combine tables? Should the generator make a second pass through
109 each generated table looking for any sub-entries that contain the
110 same instructions. Those entries being merged into a single
111 table */
112 int combine;
113
114 /* Instruction expansion? Should the semantic code for each
115 instruction, when the oportunity arrises, be expanded according
116 to the variable opcode files that the instruction decode process
117 renders constant */
118 int duplicate;
119
120 /* Treat reserved fields as constant (zero) instead of ignoring
121 their value when determining decode tables */
122 int zero_reserved;
123
124 /* Convert any padded switch rules into goto_switch */
125 int switch_as_goto;
126
127 /* Force all tables to be generated with this lookup mechanism */
128 char *overriding_gen;
129};
2f2e6c5d
AC
130
131
8782bfcf
AC
132typedef struct _igen_warn_options igen_warn_options;
133struct _igen_warn_options {
134 int discard;
135};
2f2e6c5d 136
2f2e6c5d 137
8782bfcf
AC
138typedef struct _igen_options igen_options;
139struct _igen_options {
2f2e6c5d 140
8782bfcf
AC
141 /* What does the instruction look like - bit ordering, size, widths or
142 offesets */
143 int hi_bit_nr;
144 int insn_bit_size;
145 int insn_specifying_widths;
2f2e6c5d 146
8782bfcf
AC
147 /* what should global names be prefixed with? */
148 igen_prefix_options prefix;
2f2e6c5d 149
8782bfcf
AC
150 /* See above for options and flags */
151 igen_gen_options gen;
2f2e6c5d 152
8782bfcf
AC
153 /* See above for trace options */
154 igen_trace_options trace;
2f2e6c5d 155
8782bfcf
AC
156 /* See above for decode options */
157 igen_decode_options decode;
2f2e6c5d 158
8782bfcf
AC
159 /* Filter set to be used on the flag field of the instruction table */
160 filter *flags_filter;
2f2e6c5d 161
8782bfcf
AC
162 /* See above for warn options */
163 igen_warn_options warn;
2f2e6c5d 164
8782bfcf
AC
165 /* Be more picky about the input */
166 error_func (*warning);
2f2e6c5d 167
8782bfcf
AC
168 /* Model (processor) set - like flags_filter. Used to select the
169 specific ISA within a processor family. */
170 filter *model_filter;
2f2e6c5d 171
8782bfcf
AC
172 /* Format name set */
173 filter *format_name_filter;
174};
2f2e6c5d 175
8782bfcf
AC
176extern igen_options options;
177
178/* default options - hopefully backward compatible */ \
179#define INIT_OPTIONS(OPTIONS) \
180do { \
181 memset (&(OPTIONS), 0, sizeof (OPTIONS)); \
182 memset (&(OPTIONS).warn, -1, sizeof ((OPTIONS).warn)); \
183 (OPTIONS).hi_bit_nr = 0; \
184 (OPTIONS).insn_bit_size = default_insn_bit_size; \
185 (OPTIONS).insn_specifying_widths = 0; \
186 (OPTIONS).prefix.global.name = ""; \
187 (OPTIONS).prefix.global.uname = ""; \
188 (OPTIONS).prefix.engine = (OPTIONS).prefix.global; \
189 (OPTIONS).prefix.icache = (OPTIONS).prefix.global; \
190 (OPTIONS).prefix.idecode = (OPTIONS).prefix.global; \
191 (OPTIONS).prefix.itable = (OPTIONS).prefix.global; \
192 (OPTIONS).prefix.semantics = (OPTIONS).prefix.global; \
193 (OPTIONS).prefix.support = (OPTIONS).prefix.global; \
194 (OPTIONS).gen.code = generate_calls; \
195 (OPTIONS).gen.icache_size = 1024; \
196 (OPTIONS).warning = warning; \
197} while (0)
This page took 0.043784 seconds and 4 git commands to generate.