]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - sim/i960/i960-desc.h
import gdb-1999-10-04 snapshot
[thirdparty/binutils-gdb.git] / sim / i960 / i960-desc.h
CommitLineData
c906108c
SS
1/* CPU data header for i960.
2
3THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
6
7This file is part of the GNU Binutils and/or GDB, the GNU debugger.
8
9This program is free software; you can redistribute it and/or modify
10it under the terms of the GNU General Public License as published by
11the Free Software Foundation; either version 2, or (at your option)
12any later version.
13
14This program is distributed in the hope that it will be useful,
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 along
20with this program; if not, write to the Free Software Foundation, Inc.,
2159 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22
23*/
24
25#ifndef I960_CPU_H
26#define I960_CPU_H
27
28#define CGEN_ARCH i960
29
30/* Given symbol S, return i960_cgen_<S>. */
31#define CGEN_SYM(s) CONCAT3 (i960,_cgen_,s)
32
33/* Selected cpu families. */
34#define HAVE_CPU_I960BASE
35
36#define CGEN_INSN_LSB0_P 0
7a292a7a 37
96baa820
JM
38/* Minimum size of any insn (in bytes). */
39#define CGEN_MIN_INSN_SIZE 4
40
7a292a7a
SS
41/* Maximum size of any insn (in bytes). */
42#define CGEN_MAX_INSN_SIZE 8
43
c906108c
SS
44#define CGEN_INT_INSN_P 0
45
46/* FIXME: Need to compute CGEN_MAX_SYNTAX_BYTES. */
47
48/* CGEN_MNEMONIC_OPERANDS is defined if mnemonics have operands.
49 e.g. In "b,a foo" the ",a" is an operand. If mnemonics have operands
50 we can't hash on everything up to the space. */
51#define CGEN_MNEMONIC_OPERANDS
2acceee2 52
c906108c
SS
53/* Maximum number of operands any insn or macro-insn has. */
54#define CGEN_MAX_INSN_OPERANDS 16
55
56/* Maximum number of fields in an instruction. */
57#define CGEN_MAX_IFMT_OPERANDS 9
58
59/* Enums. */
60
61/* Enum declaration for insn opcode enums. */
62typedef enum insn_opcode {
63 OPCODE_00, OPCODE_01, OPCODE_02, OPCODE_03
64 , OPCODE_04, OPCODE_05, OPCODE_06, OPCODE_07
65 , OPCODE_08, OPCODE_09, OPCODE_0A, OPCODE_0B
66 , OPCODE_0C, OPCODE_0D, OPCODE_0E, OPCODE_0F
67 , OPCODE_10, OPCODE_11, OPCODE_12, OPCODE_13
68 , OPCODE_14, OPCODE_15, OPCODE_16, OPCODE_17
69 , OPCODE_18, OPCODE_19, OPCODE_1A, OPCODE_1B
70 , OPCODE_1C, OPCODE_1D, OPCODE_1E, OPCODE_1F
71 , OPCODE_20, OPCODE_21, OPCODE_22, OPCODE_23
72 , OPCODE_24, OPCODE_25, OPCODE_26, OPCODE_27
73 , OPCODE_28, OPCODE_29, OPCODE_2A, OPCODE_2B
74 , OPCODE_2C, OPCODE_2D, OPCODE_2E, OPCODE_2F
75 , OPCODE_30, OPCODE_31, OPCODE_32, OPCODE_33
76 , OPCODE_34, OPCODE_35, OPCODE_36, OPCODE_37
77 , OPCODE_38, OPCODE_39, OPCODE_3A, OPCODE_3B
78 , OPCODE_3C, OPCODE_3D, OPCODE_3E, OPCODE_3F
79 , OPCODE_40, OPCODE_41, OPCODE_42, OPCODE_43
80 , OPCODE_44, OPCODE_45, OPCODE_46, OPCODE_47
81 , OPCODE_48, OPCODE_49, OPCODE_4A, OPCODE_4B
82 , OPCODE_4C, OPCODE_4D, OPCODE_4E, OPCODE_4F
83 , OPCODE_50, OPCODE_51, OPCODE_52, OPCODE_53
84 , OPCODE_54, OPCODE_55, OPCODE_56, OPCODE_57
85 , OPCODE_58, OPCODE_59, OPCODE_5A, OPCODE_5B
86 , OPCODE_5C, OPCODE_5D, OPCODE_5E, OPCODE_5F
87 , OPCODE_60, OPCODE_61, OPCODE_62, OPCODE_63
88 , OPCODE_64, OPCODE_65, OPCODE_66, OPCODE_67
89 , OPCODE_68, OPCODE_69, OPCODE_6A, OPCODE_6B
90 , OPCODE_6C, OPCODE_6D, OPCODE_6E, OPCODE_6F
91 , OPCODE_70, OPCODE_71, OPCODE_72, OPCODE_73
92 , OPCODE_74, OPCODE_75, OPCODE_76, OPCODE_77
93 , OPCODE_78, OPCODE_79, OPCODE_7A, OPCODE_7B
94 , OPCODE_7C, OPCODE_7D, OPCODE_7E, OPCODE_7F
95 , OPCODE_80, OPCODE_81, OPCODE_82, OPCODE_83
96 , OPCODE_84, OPCODE_85, OPCODE_86, OPCODE_87
97 , OPCODE_88, OPCODE_89, OPCODE_8A, OPCODE_8B
98 , OPCODE_8C, OPCODE_8D, OPCODE_8E, OPCODE_8F
99 , OPCODE_90, OPCODE_91, OPCODE_92, OPCODE_93
100 , OPCODE_94, OPCODE_95, OPCODE_96, OPCODE_97
101 , OPCODE_98, OPCODE_99, OPCODE_9A, OPCODE_9B
102 , OPCODE_9C, OPCODE_9D, OPCODE_9E, OPCODE_9F
103 , OPCODE_A0, OPCODE_A1, OPCODE_A2, OPCODE_A3
104 , OPCODE_A4, OPCODE_A5, OPCODE_A6, OPCODE_A7
105 , OPCODE_A8, OPCODE_A9, OPCODE_AA, OPCODE_AB
106 , OPCODE_AC, OPCODE_AD, OPCODE_AE, OPCODE_AF
107 , OPCODE_B0, OPCODE_B1, OPCODE_B2, OPCODE_B3
108 , OPCODE_B4, OPCODE_B5, OPCODE_B6, OPCODE_B7
109 , OPCODE_B8, OPCODE_B9, OPCODE_BA, OPCODE_BB
110 , OPCODE_BC, OPCODE_BD, OPCODE_BE, OPCODE_BF
111 , OPCODE_C0, OPCODE_C1, OPCODE_C2, OPCODE_C3
112 , OPCODE_C4, OPCODE_C5, OPCODE_C6, OPCODE_C7
113 , OPCODE_C8, OPCODE_C9, OPCODE_CA, OPCODE_CB
114 , OPCODE_CC, OPCODE_CD, OPCODE_CE, OPCODE_CF
115 , OPCODE_D0, OPCODE_D1, OPCODE_D2, OPCODE_D3
116 , OPCODE_D4, OPCODE_D5, OPCODE_D6, OPCODE_D7
117 , OPCODE_D8, OPCODE_D9, OPCODE_DA, OPCODE_DB
118 , OPCODE_DC, OPCODE_DD, OPCODE_DE, OPCODE_DF
119 , OPCODE_E0, OPCODE_E1, OPCODE_E2, OPCODE_E3
120 , OPCODE_E4, OPCODE_E5, OPCODE_E6, OPCODE_E7
121 , OPCODE_E8, OPCODE_E9, OPCODE_EA, OPCODE_EB
122 , OPCODE_EC, OPCODE_ED, OPCODE_EE, OPCODE_EF
123 , OPCODE_F0, OPCODE_F1, OPCODE_F2, OPCODE_F3
124 , OPCODE_F4, OPCODE_F5, OPCODE_F6, OPCODE_F7
125 , OPCODE_F8, OPCODE_F9, OPCODE_FA, OPCODE_FB
126 , OPCODE_FC, OPCODE_FD, OPCODE_FE, OPCODE_FF
127} INSN_OPCODE;
128
129/* Enum declaration for insn opcode2 enums. */
130typedef enum insn_opcode2 {
131 OPCODE2_0, OPCODE2_1, OPCODE2_2, OPCODE2_3
132 , OPCODE2_4, OPCODE2_5, OPCODE2_6, OPCODE2_7
133 , OPCODE2_8, OPCODE2_9, OPCODE2_A, OPCODE2_B
134 , OPCODE2_C, OPCODE2_D, OPCODE2_E, OPCODE2_F
135} INSN_OPCODE2;
136
137/* Enum declaration for insn m3 enums. */
138typedef enum insn_m3 {
139 M3_0, M3_1
140} INSN_M3;
141
142/* Enum declaration for insn m3 enums. */
143typedef enum insn_m2 {
144 M2_0, M2_1
145} INSN_M2;
146
147/* Enum declaration for insn m1 enums. */
148typedef enum insn_m1 {
149 M1_0, M1_1
150} INSN_M1;
151
152/* Enum declaration for insn zero enums. */
153typedef enum insn_zero {
154 ZERO_0
155} INSN_ZERO;
156
157/* Enum declaration for insn mode a enums. */
158typedef enum insn_modea {
159 MODEA_OFFSET, MODEA_INDIRECT_OFFSET
160} INSN_MODEA;
161
162/* Enum declaration for insn zero a enums. */
163typedef enum insn_zeroa {
164 ZEROA_0
165} INSN_ZEROA;
166
167/* Enum declaration for insn mode b enums. */
168typedef enum insn_modeb {
169 MODEB_ILL0, MODEB_ILL1, MODEB_ILL2, MODEB_ILL3
170 , MODEB_INDIRECT, MODEB_IP_DISP, MODEB_RES6, MODEB_INDIRECT_INDEX
171 , MODEB_ILL8, MODEB_ILL9, MODEB_ILL10, MODEB_ILL11
172 , MODEB_DISP, MODEB_INDIRECT_DISP, MODEB_INDEX_DISP, MODEB_INDIRECT_INDEX_DISP
173} INSN_MODEB;
174
175/* Enum declaration for insn zero b enums. */
176typedef enum insn_zerob {
177 ZEROB_0
178} INSN_ZEROB;
179
180/* Enum declaration for insn branch m1 enums. */
181typedef enum insn_br_m1 {
182 BR_M1_0, BR_M1_1
183} INSN_BR_M1;
184
185/* Enum declaration for insn branch zero enums. */
186typedef enum insn_br_zero {
187 BR_ZERO_0
188} INSN_BR_ZERO;
189
190/* Enum declaration for insn ctrl zero enums. */
191typedef enum insn_ctrl_zero {
192 CTRL_ZERO_0
193} INSN_CTRL_ZERO;
194
c906108c
SS
195/* Attributes. */
196
197/* Enum declaration for machine type selection. */
198typedef enum mach_attr {
199 MACH_BASE, MACH_I960_KA_SA, MACH_I960_CA, MACH_MAX
200} MACH_ATTR;
201
7a292a7a
SS
202/* Enum declaration for instruction set selection. */
203typedef enum isa_attr {
204 ISA_I960, ISA_MAX
205} ISA_ATTR;
206
c906108c 207/* Number of architecture variants. */
7a292a7a 208#define MAX_ISAS 1
c906108c
SS
209#define MAX_MACHS ((int) MACH_MAX)
210
211/* Ifield support. */
212
213extern const struct cgen_ifld i960_cgen_ifld_table[];
214
215/* Ifield attribute indices. */
216
217/* Enum declaration for cgen_ifld attrs. */
218typedef enum cgen_ifld_attr {
7a292a7a
SS
219 CGEN_IFLD_VIRTUAL, CGEN_IFLD_PCREL_ADDR, CGEN_IFLD_ABS_ADDR, CGEN_IFLD_RESERVED
220 , CGEN_IFLD_SIGN_OPT, CGEN_IFLD_SIGNED, CGEN_IFLD_END_BOOLS, CGEN_IFLD_START_NBOOLS = 31
221 , CGEN_IFLD_MACH, CGEN_IFLD_END_NBOOLS
c906108c
SS
222} CGEN_IFLD_ATTR;
223
7a292a7a
SS
224/* Number of non-boolean elements in cgen_ifld_attr. */
225#define CGEN_IFLD_NBOOL_ATTRS (CGEN_IFLD_END_NBOOLS - CGEN_IFLD_START_NBOOLS - 1)
c906108c
SS
226
227/* Enum declaration for i960 ifield types. */
228typedef enum ifield_type {
229 I960_F_NIL, I960_F_OPCODE, I960_F_SRCDST, I960_F_SRC2
230 , I960_F_M3, I960_F_M2, I960_F_M1, I960_F_OPCODE2
231 , I960_F_ZERO, I960_F_SRC1, I960_F_ABASE, I960_F_MODEA
232 , I960_F_ZEROA, I960_F_OFFSET, I960_F_MODEB, I960_F_SCALE
233 , I960_F_ZEROB, I960_F_INDEX, I960_F_OPTDISP, I960_F_BR_SRC1
234 , I960_F_BR_SRC2, I960_F_BR_M1, I960_F_BR_DISP, I960_F_BR_ZERO
235 , I960_F_CTRL_DISP, I960_F_CTRL_ZERO, I960_F_MAX
236} IFIELD_TYPE;
237
238#define MAX_IFLD ((int) I960_F_MAX)
239
240/* Hardware attribute indices. */
241
242/* Enum declaration for cgen_hw attrs. */
243typedef enum cgen_hw_attr {
7a292a7a
SS
244 CGEN_HW_VIRTUAL, CGEN_HW_CACHE_ADDR, CGEN_HW_PC, CGEN_HW_PROFILE
245 , CGEN_HW_END_BOOLS, CGEN_HW_START_NBOOLS = 31, CGEN_HW_MACH, CGEN_HW_END_NBOOLS
c906108c
SS
246} CGEN_HW_ATTR;
247
7a292a7a
SS
248/* Number of non-boolean elements in cgen_hw_attr. */
249#define CGEN_HW_NBOOL_ATTRS (CGEN_HW_END_NBOOLS - CGEN_HW_START_NBOOLS - 1)
c906108c
SS
250
251/* Enum declaration for i960 hardware types. */
7a292a7a
SS
252typedef enum cgen_hw_type {
253 HW_H_MEMORY, HW_H_SINT, HW_H_UINT, HW_H_ADDR
254 , HW_H_IADDR, HW_H_PC, HW_H_GR, HW_H_CC
c906108c 255 , HW_MAX
7a292a7a 256} CGEN_HW_TYPE;
c906108c
SS
257
258#define MAX_HW ((int) HW_MAX)
259
260/* Operand attribute indices. */
261
262/* Enum declaration for cgen_operand attrs. */
263typedef enum cgen_operand_attr {
7a292a7a
SS
264 CGEN_OPERAND_VIRTUAL, CGEN_OPERAND_PCREL_ADDR, CGEN_OPERAND_ABS_ADDR, CGEN_OPERAND_SIGN_OPT
265 , CGEN_OPERAND_SIGNED, CGEN_OPERAND_NEGATIVE, CGEN_OPERAND_RELAX, CGEN_OPERAND_SEM_ONLY
266 , CGEN_OPERAND_END_BOOLS, CGEN_OPERAND_START_NBOOLS = 31, CGEN_OPERAND_MACH, CGEN_OPERAND_END_NBOOLS
c906108c
SS
267} CGEN_OPERAND_ATTR;
268
7a292a7a
SS
269/* Number of non-boolean elements in cgen_operand_attr. */
270#define CGEN_OPERAND_NBOOL_ATTRS (CGEN_OPERAND_END_NBOOLS - CGEN_OPERAND_START_NBOOLS - 1)
c906108c
SS
271
272/* Enum declaration for i960 operand types. */
273typedef enum cgen_operand_type {
274 I960_OPERAND_PC, I960_OPERAND_SRC1, I960_OPERAND_SRC2, I960_OPERAND_DST
275 , I960_OPERAND_LIT1, I960_OPERAND_LIT2, I960_OPERAND_ST_SRC, I960_OPERAND_ABASE
276 , I960_OPERAND_OFFSET, I960_OPERAND_SCALE, I960_OPERAND_INDEX, I960_OPERAND_OPTDISP
277 , I960_OPERAND_BR_SRC1, I960_OPERAND_BR_SRC2, I960_OPERAND_BR_DISP, I960_OPERAND_BR_LIT1
278 , I960_OPERAND_CTRL_DISP, I960_OPERAND_MAX
279} CGEN_OPERAND_TYPE;
280
281/* Number of operands types. */
282#define MAX_OPERANDS ((int) I960_OPERAND_MAX)
283
284/* Maximum number of operands referenced by any insn. */
285#define MAX_OPERAND_INSTANCES 8
286
287/* Insn attribute indices. */
288
289/* Enum declaration for cgen_insn attrs. */
290typedef enum cgen_insn_attr {
7a292a7a
SS
291 CGEN_INSN_ALIAS, CGEN_INSN_VIRTUAL, CGEN_INSN_UNCOND_CTI, CGEN_INSN_COND_CTI
292 , CGEN_INSN_SKIP_CTI, CGEN_INSN_DELAY_SLOT, CGEN_INSN_RELAXABLE, CGEN_INSN_RELAX
293 , CGEN_INSN_NO_DIS, CGEN_INSN_PBB, CGEN_INSN_END_BOOLS, CGEN_INSN_START_NBOOLS = 31
294 , CGEN_INSN_MACH, CGEN_INSN_END_NBOOLS
c906108c
SS
295} CGEN_INSN_ATTR;
296
7a292a7a
SS
297/* Number of non-boolean elements in cgen_insn_attr. */
298#define CGEN_INSN_NBOOL_ATTRS (CGEN_INSN_END_NBOOLS - CGEN_INSN_START_NBOOLS - 1)
c906108c
SS
299
300/* cgen.h uses things we just defined. */
301#include "opcode/cgen.h"
302
303/* Attributes. */
7a292a7a
SS
304extern const CGEN_ATTR_TABLE i960_cgen_hardware_attr_table[];
305extern const CGEN_ATTR_TABLE i960_cgen_ifield_attr_table[];
c906108c
SS
306extern const CGEN_ATTR_TABLE i960_cgen_operand_attr_table[];
307extern const CGEN_ATTR_TABLE i960_cgen_insn_attr_table[];
308
309/* Hardware decls. */
310
311extern CGEN_KEYWORD i960_cgen_opval_h_gr;
312extern CGEN_KEYWORD i960_cgen_opval_h_cc;
313
c906108c
SS
314
315
316
317#endif /* I960_CPU_H */