1 /* Instruction description for m32r.
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
5 Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
7 This file is part of the GNU Binutils and/or GDB, the GNU debugger.
9 This program 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)
14 This program 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.
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
28 #define CGEN_ARCH m32r
30 /* Given symbol S, return m32r_cgen_<s>. */
31 #define CGEN_SYM(s) CONCAT3 (m32r,_cgen_,s)
33 /* Selected cpu families. */
35 /* start-sanitize-m32rx */
36 #define HAVE_CPU_M32RX
37 /* end-sanitize-m32rx */
39 #define CGEN_WORD_BITSIZE 32
40 #define CGEN_DEFAULT_INSN_BITSIZE 32
41 #define CGEN_BASE_INSN_BITSIZE 32
42 #define CGEN_MAX_INSN_BITSIZE 32
43 #define CGEN_DEFAULT_INSN_SIZE (CGEN_DEFAULT_INSN_BITSIZE / 8)
44 #define CGEN_BASE_INSN_SIZE (CGEN_BASE_INSN_BITSIZE / 8)
45 #define CGEN_MAX_INSN_SIZE (CGEN_MAX_INSN_BITSIZE / 8)
48 /* FIXME: Need to compute CGEN_MAX_SYNTAX_BYTES. */
50 /* CGEN_MNEMONIC_OPERANDS is defined if mnemonics have operands.
51 e.g. In "b,a foo" the ",a" is an operand. If mnemonics have operands
52 we can't hash on everything up to the space. */
53 #define CGEN_MNEMONIC_OPERANDS
54 /* Maximum number of operands any insn or macro-insn has. */
55 #define CGEN_MAX_INSN_OPERANDS 16
59 /* Enum declaration for insn format enums. */
60 typedef enum insn_op1
{
61 OP1_0
, OP1_1
, OP1_2
, OP1_3
62 , OP1_4
, OP1_5
, OP1_6
, OP1_7
63 , OP1_8
, OP1_9
, OP1_10
, OP1_11
64 , OP1_12
, OP1_13
, OP1_14
, OP1_15
67 /* Enum declaration for op2 enums. */
68 typedef enum insn_op2
{
69 OP2_0
, OP2_1
, OP2_2
, OP2_3
70 , OP2_4
, OP2_5
, OP2_6
, OP2_7
71 , OP2_8
, OP2_9
, OP2_10
, OP2_11
72 , OP2_12
, OP2_13
, OP2_14
, OP2_15
75 /* Enum declaration for general registers. */
77 H_GR_FP
= 13, H_GR_LR
= 14, H_GR_SP
= 15, H_GR_R0
= 0
78 , H_GR_R1
= 1, H_GR_R2
= 2, H_GR_R3
= 3, H_GR_R4
= 4
79 , H_GR_R5
= 5, H_GR_R6
= 6, H_GR_R7
= 7, H_GR_R8
= 8
80 , H_GR_R9
= 9, H_GR_R10
= 10, H_GR_R11
= 11, H_GR_R12
= 12
81 , H_GR_R13
= 13, H_GR_R14
= 14, H_GR_R15
= 15
84 /* Enum declaration for control registers. */
86 H_CR_PSW
= 0, H_CR_CBR
= 1, H_CR_SPI
= 2, H_CR_SPU
= 3
87 , H_CR_BPC
= 6, H_CR_CR0
= 0, H_CR_CR1
= 1, H_CR_CR2
= 2
88 , H_CR_CR3
= 3, H_CR_CR4
= 4, H_CR_CR5
= 5, H_CR_CR6
= 6
89 , H_CR_CR7
= 7, H_CR_CR8
= 8, H_CR_CR9
= 9, H_CR_CR10
= 10
90 , H_CR_CR11
= 11, H_CR_CR12
= 12, H_CR_CR13
= 13, H_CR_CR14
= 14
94 /* start-sanitize-m32rx */
95 /* Enum declaration for accumulators. */
96 typedef enum h_accums
{
97 H_ACCUMS_A0
, H_ACCUMS_A1
100 /* end-sanitize-m32rx */
101 /* Enum declaration for m32r operand types. */
102 typedef enum cgen_operand_type
{
103 M32R_OPERAND_PC
, M32R_OPERAND_SR
, M32R_OPERAND_DR
, M32R_OPERAND_SRC1
104 , M32R_OPERAND_SRC2
, M32R_OPERAND_SCR
, M32R_OPERAND_DCR
, M32R_OPERAND_SIMM8
105 , M32R_OPERAND_SIMM16
, M32R_OPERAND_UIMM4
, M32R_OPERAND_UIMM5
, M32R_OPERAND_UIMM16
106 /* start-sanitize-m32rx */
108 /* end-sanitize-m32rx */
109 /* start-sanitize-m32rx */
111 /* end-sanitize-m32rx */
112 /* start-sanitize-m32rx */
114 /* end-sanitize-m32rx */
115 /* start-sanitize-m32rx */
117 /* end-sanitize-m32rx */
118 , M32R_OPERAND_HASH
, M32R_OPERAND_HI16
, M32R_OPERAND_SLO16
, M32R_OPERAND_ULO16
119 , M32R_OPERAND_UIMM24
, M32R_OPERAND_DISP8
, M32R_OPERAND_DISP16
, M32R_OPERAND_DISP24
120 , M32R_OPERAND_CONDBIT
, M32R_OPERAND_ACCUM
, M32R_OPERAND_MAX
123 /* Non-boolean attributes. */
125 /* Enum declaration for machine type selection. */
126 typedef enum mach_attr
{
128 /* start-sanitize-m32rx */
130 /* end-sanitize-m32rx */
134 /* start-sanitize-m32rx */
135 /* Enum declaration for parallel execution pipeline selection. */
136 typedef enum pipe_attr
{
137 PIPE_NONE
, PIPE_O
, PIPE_S
, PIPE_OS
140 /* end-sanitize-m32rx */
141 /* Number of architecture variants. */
142 #define MAX_MACHS ((int) MACH_MAX)
144 /* Number of operands types. */
145 #define MAX_OPERANDS ((int) M32R_OPERAND_MAX)
147 /* Maximum number of operands referenced by any insn. */
148 #define MAX_OPERAND_INSTANCES 8
150 /* Operand and instruction attribute indices. */
152 /* Enum declaration for cgen_operand attrs. */
153 typedef enum cgen_operand_attr
{
154 CGEN_OPERAND_ABS_ADDR
, CGEN_OPERAND_FAKE
, CGEN_OPERAND_HASH_PREFIX
, CGEN_OPERAND_NEGATIVE
155 , CGEN_OPERAND_PC
, CGEN_OPERAND_PCREL_ADDR
, CGEN_OPERAND_RELAX
, CGEN_OPERAND_RELOC
156 , CGEN_OPERAND_SIGN_OPT
, CGEN_OPERAND_UNSIGNED
159 /* Number of non-boolean elements in cgen_operand. */
160 #define CGEN_OPERAND_NBOOL_ATTRS ((int) CGEN_OPERAND_ABS_ADDR)
162 /* Enum declaration for cgen_insn attrs. */
163 typedef enum cgen_insn_attr
{
165 /* start-sanitize-m32rx */
167 /* end-sanitize-m32rx */
168 , CGEN_INSN_ALIAS
, CGEN_INSN_COND_CTI
, CGEN_INSN_FILL_SLOT
, CGEN_INSN_NO_DIS
169 , CGEN_INSN_PARALLEL
, CGEN_INSN_RELAX
, CGEN_INSN_RELAXABLE
, CGEN_INSN_SPECIAL
170 , CGEN_INSN_UNCOND_CTI
173 /* Number of non-boolean elements in cgen_insn. */
174 #define CGEN_INSN_NBOOL_ATTRS ((int) CGEN_INSN_ALIAS)
176 /* Enum declaration for m32r instruction types. */
177 typedef enum cgen_insn_type
{
178 M32R_INSN_ILLEGAL
, M32R_INSN_ADD
, M32R_INSN_ADD3
, M32R_INSN_AND
179 , M32R_INSN_AND3
, M32R_INSN_OR
, M32R_INSN_OR3
, M32R_INSN_XOR
180 , M32R_INSN_XOR3
, M32R_INSN_ADDI
, M32R_INSN_ADDV
, M32R_INSN_ADDV3
181 , M32R_INSN_ADDX
, M32R_INSN_BC8
, M32R_INSN_BC24
, M32R_INSN_BEQ
182 , M32R_INSN_BEQZ
, M32R_INSN_BGEZ
, M32R_INSN_BGTZ
, M32R_INSN_BLEZ
183 , M32R_INSN_BLTZ
, M32R_INSN_BNEZ
, M32R_INSN_BL8
, M32R_INSN_BL24
184 /* start-sanitize-m32rx */
186 /* end-sanitize-m32rx */
187 /* start-sanitize-m32rx */
189 /* end-sanitize-m32rx */
190 , M32R_INSN_BNC8
, M32R_INSN_BNC24
, M32R_INSN_BNE
, M32R_INSN_BRA8
192 /* start-sanitize-m32rx */
194 /* end-sanitize-m32rx */
195 /* start-sanitize-m32rx */
197 /* end-sanitize-m32rx */
198 , M32R_INSN_CMP
, M32R_INSN_CMPI
, M32R_INSN_CMPU
, M32R_INSN_CMPUI
199 /* start-sanitize-m32rx */
201 /* end-sanitize-m32rx */
202 /* start-sanitize-m32rx */
204 /* end-sanitize-m32rx */
205 , M32R_INSN_DIV
, M32R_INSN_DIVU
, M32R_INSN_REM
, M32R_INSN_REMU
206 /* start-sanitize-m32rx */
208 /* end-sanitize-m32rx */
209 /* start-sanitize-m32rx */
211 /* end-sanitize-m32rx */
212 /* start-sanitize-m32rx */
214 /* end-sanitize-m32rx */
215 , M32R_INSN_JL
, M32R_INSN_JMP
, M32R_INSN_LD
, M32R_INSN_LD_D
216 , M32R_INSN_LDB
, M32R_INSN_LDB_D
, M32R_INSN_LDH
, M32R_INSN_LDH_D
217 , M32R_INSN_LDUB
, M32R_INSN_LDUB_D
, M32R_INSN_LDUH
, M32R_INSN_LDUH_D
218 , M32R_INSN_LD_PLUS
, M32R_INSN_LD24
, M32R_INSN_LDI8
, M32R_INSN_LDI16
219 , M32R_INSN_LOCK
, M32R_INSN_MACHI
220 /* start-sanitize-m32rx */
222 /* end-sanitize-m32rx */
224 /* start-sanitize-m32rx */
226 /* end-sanitize-m32rx */
227 , M32R_INSN_MACWHI
, M32R_INSN_MACWLO
, M32R_INSN_MUL
, M32R_INSN_MULHI
228 /* start-sanitize-m32rx */
230 /* end-sanitize-m32rx */
232 /* start-sanitize-m32rx */
234 /* end-sanitize-m32rx */
235 , M32R_INSN_MULWHI
, M32R_INSN_MULWLO
, M32R_INSN_MV
, M32R_INSN_MVFACHI
236 /* start-sanitize-m32rx */
237 , M32R_INSN_MVFACHI_A
238 /* end-sanitize-m32rx */
240 /* start-sanitize-m32rx */
241 , M32R_INSN_MVFACLO_A
242 /* end-sanitize-m32rx */
244 /* start-sanitize-m32rx */
245 , M32R_INSN_MVFACMI_A
246 /* end-sanitize-m32rx */
247 , M32R_INSN_MVFC
, M32R_INSN_MVTACHI
248 /* start-sanitize-m32rx */
249 , M32R_INSN_MVTACHI_A
250 /* end-sanitize-m32rx */
252 /* start-sanitize-m32rx */
253 , M32R_INSN_MVTACLO_A
254 /* end-sanitize-m32rx */
255 , M32R_INSN_MVTC
, M32R_INSN_NEG
, M32R_INSN_NOP
, M32R_INSN_NOT
257 /* start-sanitize-m32rx */
259 /* end-sanitize-m32rx */
261 /* start-sanitize-m32rx */
263 /* end-sanitize-m32rx */
264 , M32R_INSN_RTE
, M32R_INSN_SETH
, M32R_INSN_SLL
, M32R_INSN_SLL3
265 , M32R_INSN_SLLI
, M32R_INSN_SRA
, M32R_INSN_SRA3
, M32R_INSN_SRAI
266 , M32R_INSN_SRL
, M32R_INSN_SRL3
, M32R_INSN_SRLI
, M32R_INSN_ST
267 , M32R_INSN_ST_D
, M32R_INSN_STB
, M32R_INSN_STB_D
, M32R_INSN_STH
268 , M32R_INSN_STH_D
, M32R_INSN_ST_PLUS
, M32R_INSN_ST_MINUS
, M32R_INSN_SUB
269 , M32R_INSN_SUBV
, M32R_INSN_SUBX
, M32R_INSN_TRAP
, M32R_INSN_UNLOCK
270 /* start-sanitize-m32rx */
272 /* end-sanitize-m32rx */
273 /* start-sanitize-m32rx */
275 /* end-sanitize-m32rx */
276 /* start-sanitize-m32rx */
278 /* end-sanitize-m32rx */
279 /* start-sanitize-m32rx */
281 /* end-sanitize-m32rx */
282 /* start-sanitize-m32rx */
284 /* end-sanitize-m32rx */
285 /* start-sanitize-m32rx */
287 /* end-sanitize-m32rx */
288 /* start-sanitize-m32rx */
290 /* end-sanitize-m32rx */
291 /* start-sanitize-m32rx */
293 /* end-sanitize-m32rx */
294 /* start-sanitize-m32rx */
296 /* end-sanitize-m32rx */
297 /* start-sanitize-m32rx */
299 /* end-sanitize-m32rx */
300 /* start-sanitize-m32rx */
302 /* end-sanitize-m32rx */
306 /* Index of `illegal' insn place holder. */
307 #define CGEN_INSN_ILLEGAL M32R_INSN_ILLEGAL
308 /* Total number of insns in table. */
309 #define MAX_INSNS ((int) M32R_INSN_MAX)
311 /* cgen.h uses things we just defined. */
312 #include "opcode/cgen.h"
314 /* This struct records data prior to insertion or after extraction. */
334 /* start-sanitize-m32rx */
336 /* end-sanitize-m32rx */
337 /* start-sanitize-m32rx */
339 /* end-sanitize-m32rx */
340 /* start-sanitize-m32rx */
342 /* end-sanitize-m32rx */
343 /* start-sanitize-m32rx */
345 /* end-sanitize-m32rx */
346 /* start-sanitize-m32rx */
348 /* end-sanitize-m32rx */
349 /* start-sanitize-m32rx */
351 /* end-sanitize-m32rx */
352 /* start-sanitize-m32rx */
354 /* end-sanitize-m32rx */
355 /* start-sanitize-m32rx */
357 /* end-sanitize-m32rx */
362 extern const CGEN_ATTR_TABLE m32r_cgen_operand_attr_table
[];
363 extern const CGEN_ATTR_TABLE m32r_cgen_insn_attr_table
[];
365 /* Enum declaration for m32r hardware types. */
366 typedef enum hw_type
{
367 HW_H_PC
, HW_H_MEMORY
, HW_H_SINT
, HW_H_UINT
368 , HW_H_ADDR
, HW_H_IADDR
, HW_H_HI16
, HW_H_SLO16
369 , HW_H_ULO16
, HW_H_GR
, HW_H_CR
, HW_H_ACCUM
370 /* start-sanitize-m32rx */
372 /* end-sanitize-m32rx */
373 , HW_H_COND
, HW_H_SM
, HW_H_BSM
, HW_H_IE
374 , HW_H_BIE
, HW_H_BCOND
, HW_H_BPC
, HW_H_LOCK
378 #define MAX_HW ((int) HW_MAX)
380 /* Hardware decls. */
382 extern CGEN_KEYWORD m32r_cgen_opval_h_gr
;
383 extern CGEN_KEYWORD m32r_cgen_opval_h_cr
;
384 /* start-sanitize-m32rx */
385 extern CGEN_KEYWORD m32r_cgen_opval_h_accums
;
386 /* end-sanitize-m32rx */
388 #define CGEN_INIT_PARSE() \
391 #define CGEN_INIT_INSERT() \
394 #define CGEN_INIT_EXTRACT() \
397 #define CGEN_INIT_PRINT() \
403 #undef CGEN_DIS_HASH_SIZE
404 #define CGEN_DIS_HASH_SIZE 256
406 #define X(b) (((unsigned char *) (b))[0] & 0xf0)
407 #define CGEN_DIS_HASH(buffer, value) \
409 (X (buffer) == 0x40 || X (buffer) == 0xe0 || X (buffer) == 0x60 || X (buffer) == 0x50 ? 0 \
410 : X (buffer) == 0x70 || X (buffer) == 0xf0 ? (((unsigned char *) (buffer))[0] & 0xf) \
411 : X (buffer) == 0x30 ? ((((unsigned char *) (buffer))[1] & 0x70) >> 4) \
412 : ((((unsigned char *) (buffer))[1] & 0xf0) >> 4)))
417 #endif /* M32R_OPC_H */