cris-opc.c revision 1.1.1.1
1/* cris-opc.c -- Table of opcodes for the CRIS processor.
2   Copyright 2000, 2001, 2004 Free Software Foundation, Inc.
3   Contributed by Axis Communications AB, Lund, Sweden.
4   Originally written for GAS 1.38.1 by Mikael Asker.
5   Reorganized by Hans-Peter Nilsson.
6
7This file is part of GAS, GDB and the GNU binutils.
8
9GAS, GDB, and GNU binutils is free software; you can redistribute it
10and/or modify it under the terms of the GNU General Public License as
11published by the Free Software Foundation; either version 2, or (at your
12option) any later version.
13
14GAS, GDB, and GNU binutils are distributed in the hope that they will be
15useful, but 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
20along with this program; if not, write to the Free Software
21Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
22
23#include "opcode/cris.h"
24
25#ifndef NULL
26#define NULL (0)
27#endif
28
29/* This table isn't used for CRISv32 and the size of immediate operands.  */
30const struct cris_spec_reg
31cris_spec_regs[] =
32{
33  {"bz",  0,  1, cris_ver_v32p,	   NULL},
34  {"p0",  0,  1, 0,		   NULL},
35  {"vr",  1,  1, 0,		   NULL},
36  {"p1",  1,  1, 0,		   NULL},
37  {"pid", 2,  1, cris_ver_v32p,    NULL},
38  {"p2",  2,  1, cris_ver_v32p,	   NULL},
39  {"p2",  2,  1, cris_ver_warning, NULL},
40  {"srs", 3,  1, cris_ver_v32p,    NULL},
41  {"p3",  3,  1, cris_ver_v32p,	   NULL},
42  {"p3",  3,  1, cris_ver_warning, NULL},
43  {"wz",  4,  2, cris_ver_v32p,	   NULL},
44  {"p4",  4,  2, 0,		   NULL},
45  {"ccr", 5,  2, cris_ver_v0_10,   NULL},
46  {"exs", 5,  4, cris_ver_v32p,	   NULL},
47  {"p5",  5,  2, cris_ver_v0_10,   NULL},
48  {"p5",  5,  4, cris_ver_v32p,	   NULL},
49  {"dcr0",6,  2, cris_ver_v0_3,	   NULL},
50  {"eda", 6,  4, cris_ver_v32p,	   NULL},
51  {"p6",  6,  2, cris_ver_v0_3,	   NULL},
52  {"p6",  6,  4, cris_ver_v32p,	   NULL},
53  {"dcr1/mof", 7, 4, cris_ver_v10p,
54   "Register `dcr1/mof' with ambiguous size specified.  Guessing 4 bytes"},
55  {"dcr1/mof", 7, 2, cris_ver_v0_3,
56   "Register `dcr1/mof' with ambiguous size specified.  Guessing 2 bytes"},
57  {"mof", 7,  4, cris_ver_v10p,	   NULL},
58  {"dcr1",7,  2, cris_ver_v0_3,	   NULL},
59  {"p7",  7,  4, cris_ver_v10p,	   NULL},
60  {"p7",  7,  2, cris_ver_v0_3,	   NULL},
61  {"dz",  8,  4, cris_ver_v32p,	   NULL},
62  {"p8",  8,  4, 0,		   NULL},
63  {"ibr", 9,  4, cris_ver_v0_10,   NULL},
64  {"ebp", 9,  4, cris_ver_v32p,	   NULL},
65  {"p9",  9,  4, 0,		   NULL},
66  {"irp", 10, 4, cris_ver_v0_10,   NULL},
67  {"erp", 10, 4, cris_ver_v32p,	   NULL},
68  {"p10", 10, 4, 0,		   NULL},
69  {"srp", 11, 4, 0,		   NULL},
70  {"p11", 11, 4, 0,		   NULL},
71  /* For disassembly use only.  Accept at assembly with a warning.  */
72  {"bar/dtp0", 12, 4, cris_ver_warning,
73   "Ambiguous register `bar/dtp0' specified"},
74  {"nrp", 12, 4, cris_ver_v32p,	   NULL},
75  {"bar", 12, 4, cris_ver_v8_10,   NULL},
76  {"dtp0",12, 4, cris_ver_v0_3,	   NULL},
77  {"p12", 12, 4, 0,		   NULL},
78  /* For disassembly use only.  Accept at assembly with a warning.  */
79  {"dccr/dtp1",13, 4, cris_ver_warning,
80   "Ambiguous register `dccr/dtp1' specified"},
81  {"ccs", 13, 4, cris_ver_v32p,	   NULL},
82  {"dccr",13, 4, cris_ver_v8_10,   NULL},
83  {"dtp1",13, 4, cris_ver_v0_3,	   NULL},
84  {"p13", 13, 4, 0,		   NULL},
85  {"brp", 14, 4, cris_ver_v3_10,   NULL},
86  {"usp", 14, 4, cris_ver_v32p,	   NULL},
87  {"p14", 14, 4, cris_ver_v3p,	   NULL},
88  {"usp", 15, 4, cris_ver_v10,	   NULL},
89  {"spc", 15, 4, cris_ver_v32p,	   NULL},
90  {"p15", 15, 4, cris_ver_v10p,	   NULL},
91  {NULL, 0, 0, cris_ver_version_all, NULL}
92};
93
94/* Add version specifiers to this table when necessary.
95   The (now) regular coding of register names suggests a simpler
96   implementation.  */
97const struct cris_support_reg cris_support_regs[] =
98{
99  {"s0", 0},
100  {"s1", 1},
101  {"s2", 2},
102  {"s3", 3},
103  {"s4", 4},
104  {"s5", 5},
105  {"s6", 6},
106  {"s7", 7},
107  {"s8", 8},
108  {"s9", 9},
109  {"s10", 10},
110  {"s11", 11},
111  {"s12", 12},
112  {"s13", 13},
113  {"s14", 14},
114  {"s15", 15},
115  {NULL, 0}
116};
117
118/* All CRIS opcodes are 16 bits.
119
120   - The match component is a mask saying which bits must match a
121     particular opcode in order for an instruction to be an instance
122     of that opcode.
123
124   - The args component is a string containing characters symbolically
125     matching the operands of an instruction.  Used for both assembly
126     and disassembly.
127
128     Operand-matching characters:
129     [ ] , space
130        Verbatim.
131     A	The string "ACR" (case-insensitive).
132     B	Not really an operand.  It causes a "BDAP -size,SP" prefix to be
133	output for the PUSH alias-instructions and recognizes a push-
134	prefix at disassembly.  This letter isn't recognized for v32.
135	Must be followed by a R or P letter.
136     !	Non-match pattern, will not match if there's a prefix insn.
137     b	Non-matching operand, used for branches with 16-bit
138	displacement. Only recognized by the disassembler.
139     c	5-bit unsigned immediate in bits <4:0>.
140     C	4-bit unsigned immediate in bits <3:0>.
141     d  At assembly, optionally (as in put other cases before this one)
142	".d" or ".D" at the start of the operands, followed by one space
143	character.  At disassembly, nothing.
144     D	General register in bits <15:12> and <3:0>.
145     f	List of flags in bits <15:12> and <3:0>.
146     i	6-bit signed immediate in bits <5:0>.
147     I	6-bit unsigned immediate in bits <5:0>.
148     M	Size modifier (B, W or D) for CLEAR instructions.
149     m	Size modifier (B, W or D) in bits <5:4>
150     N  A 32-bit dword, like in the difference between s and y.
151        This has no effect on bits in the opcode.  Can also be expressed
152	as "[pc+]" in input.
153     n  As N, but PC-relative (to the start of the instruction).
154     o	[-128..127] word offset in bits <7:1> and <0>.  Used by 8-bit
155	branch instructions.
156     O	[-128..127] offset in bits <7:0>.  Also matches a comma and a
157	general register after the expression, in bits <15:12>.  Used
158	only for the BDAP prefix insn (in v32 the ADDOQ insn; same opcode).
159     P	Special register in bits <15:12>.
160     p	Indicates that the insn is a prefix insn.  Must be first
161	character.
162     Q  As O, but don't relax; force an 8-bit offset.
163     R	General register in bits <15:12>.
164     r	General register in bits <3:0>.
165     S	Source operand in bit <10> and a prefix; a 3-operand prefix
166	without side-effect.
167     s	Source operand in bits <10> and <3:0>, optionally with a
168	side-effect prefix, except [pc] (the name, not R15 as in ACR)
169	isn't allowed for v32 and higher.
170     T  Support register in bits <15:12>.
171     u  4-bit (PC-relative) unsigned immediate word offset in bits <3:0>.
172     U  Relaxes to either u or n, instruction is assumed LAPCQ or LAPC.
173	Not recognized at disassembly.
174     x	Register-dot-modifier, for example "r5.w" in bits <15:12> and <5:4>.
175     y	Like 's' but do not allow an integer at assembly.
176     Y	The difference s-y; only an integer is allowed.
177     z	Size modifier (B or W) in bit <4>.  */
178
179
180/* Please note the order of the opcodes in this table is significant.
181   The assembler requires that all instances of the same mnemonic must
182   be consecutive.  If they aren't, the assembler might not recognize
183   them, or may indicate an internal error.
184
185   The disassembler should not normally care about the order of the
186   opcodes, but will prefer an earlier alternative if the "match-score"
187   (see cris-dis.c) is computed as equal.
188
189   It should not be significant for proper execution that this table is
190   in alphabetical order, but please follow that convention for an easy
191   overview.  */
192
193const struct cris_opcode
194cris_opcodes[] =
195{
196  {"abs",     0x06B0, 0x0940,		  "r,R",     0, SIZE_NONE,     0,
197   cris_abs_op},
198
199  {"add",     0x0600, 0x09c0,		  "m r,R",   0, SIZE_NONE,     0,
200   cris_reg_mode_add_sub_cmp_and_or_move_op},
201
202  {"add",     0x0A00, 0x01c0,		  "m s,R",   0, SIZE_FIELD,    0,
203   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
204
205  {"add",     0x0A00, 0x01c0,		  "m S,D",   0, SIZE_NONE,
206   cris_ver_v0_10,
207   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
208
209  {"add",     0x0a00, 0x05c0,		  "m S,R,r", 0, SIZE_NONE,
210   cris_ver_v0_10,
211   cris_three_operand_add_sub_cmp_and_or_op},
212
213  {"add",     0x0A00, 0x01c0,		  "m s,R",   0, SIZE_FIELD,
214   cris_ver_v32p,
215   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
216
217  {"addc",    0x0570, 0x0A80,		  "r,R",     0, SIZE_FIX_32,
218   cris_ver_v32p,
219   cris_not_implemented_op},
220
221  {"addc",    0x09A0, 0x0250,		  "s,R",     0, SIZE_FIX_32,
222   cris_ver_v32p,
223   cris_not_implemented_op},
224
225  {"addi",    0x0540, 0x0A80,		  "x,r,A",   0, SIZE_NONE,
226   cris_ver_v32p,
227   cris_addi_op},
228
229  {"addi",    0x0500, 0x0Ac0,		  "x,r",     0, SIZE_NONE,     0,
230   cris_addi_op},
231
232  /* This collates after "addo", but we want to disassemble as "addoq",
233     not "addo".  */
234  {"addoq",   0x0100, 0x0E00,		  "Q,A",     0, SIZE_NONE,
235   cris_ver_v32p,
236   cris_not_implemented_op},
237
238  {"addo",    0x0940, 0x0280,		  "m s,R,A", 0, SIZE_FIELD_SIGNED,
239   cris_ver_v32p,
240   cris_not_implemented_op},
241
242  /* This must be located after the insn above, lest we misinterpret
243     "addo.b -1,r0,acr" as "addo .b-1,r0,acr".  FIXME: Sounds like a
244     parser bug.  */
245  {"addo",   0x0100, 0x0E00,		  "O,A",     0, SIZE_NONE,
246   cris_ver_v32p,
247   cris_not_implemented_op},
248
249  {"addq",    0x0200, 0x0Dc0,		  "I,R",     0, SIZE_NONE,     0,
250   cris_quick_mode_add_sub_op},
251
252  {"adds",    0x0420, 0x0Bc0,		  "z r,R",   0, SIZE_NONE,     0,
253   cris_reg_mode_add_sub_cmp_and_or_move_op},
254
255  /* FIXME: SIZE_FIELD_SIGNED and all necessary changes.  */
256  {"adds",    0x0820, 0x03c0,		  "z s,R",   0, SIZE_FIELD,    0,
257   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
258
259  {"adds",    0x0820, 0x03c0,		  "z S,D",   0, SIZE_NONE,
260   cris_ver_v0_10,
261   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
262
263  {"adds",    0x0820, 0x07c0,		  "z S,R,r", 0, SIZE_NONE,
264   cris_ver_v0_10,
265   cris_three_operand_add_sub_cmp_and_or_op},
266
267  {"addu",    0x0400, 0x0be0,		  "z r,R",   0, SIZE_NONE,     0,
268   cris_reg_mode_add_sub_cmp_and_or_move_op},
269
270  /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes.  */
271  {"addu",    0x0800, 0x03e0,		  "z s,R",   0, SIZE_FIELD,    0,
272   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
273
274  {"addu",    0x0800, 0x03e0,		  "z S,D",   0, SIZE_NONE,
275   cris_ver_v0_10,
276   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
277
278  {"addu",    0x0800, 0x07e0,		  "z S,R,r", 0, SIZE_NONE,
279   cris_ver_v0_10,
280   cris_three_operand_add_sub_cmp_and_or_op},
281
282  {"and",     0x0700, 0x08C0,		  "m r,R",   0, SIZE_NONE,     0,
283   cris_reg_mode_add_sub_cmp_and_or_move_op},
284
285  {"and",     0x0B00, 0x00C0,		  "m s,R",   0, SIZE_FIELD,    0,
286   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
287
288  {"and",     0x0B00, 0x00C0,		  "m S,D",   0, SIZE_NONE,
289   cris_ver_v0_10,
290   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
291
292  {"and",     0x0B00, 0x04C0,		  "m S,R,r", 0, SIZE_NONE,
293   cris_ver_v0_10,
294   cris_three_operand_add_sub_cmp_and_or_op},
295
296  {"andq",    0x0300, 0x0CC0,		  "i,R",     0, SIZE_NONE,     0,
297   cris_quick_mode_and_cmp_move_or_op},
298
299  {"asr",     0x0780, 0x0840,		  "m r,R",   0, SIZE_NONE,     0,
300   cris_asr_op},
301
302  {"asrq",    0x03a0, 0x0c40,		  "c,R",     0, SIZE_NONE,     0,
303   cris_asrq_op},
304
305  {"ax",      0x15B0, 0xEA4F,		  "",	     0, SIZE_NONE,     0,
306   cris_ax_ei_setf_op},
307
308  /* FIXME: Should use branch #defines.  */
309  {"b",	      0x0dff, 0x0200,		  "b",	     1, SIZE_NONE,     0,
310   cris_sixteen_bit_offset_branch_op},
311
312  {"ba",
313   BA_QUICK_OPCODE,
314   0x0F00+(0xF-CC_A)*0x1000,		  "o",	     1, SIZE_NONE,     0,
315   cris_eight_bit_offset_branch_op},
316
317  /* Needs to come after the usual "ba o", which might be relaxed to
318     this one.  */
319  {"ba",     BA_DWORD_OPCODE,
320   0xffff & (~BA_DWORD_OPCODE),		  "n",	     0, SIZE_FIX_32,
321   cris_ver_v32p,
322   cris_none_reg_mode_jump_op},
323
324  {"bas",     0x0EBF, 0x0140,		  "n,P",     0, SIZE_FIX_32,
325   cris_ver_v32p,
326   cris_none_reg_mode_jump_op},
327
328  {"basc",     0x0EFF, 0x0100,		  "n,P",     0, SIZE_FIX_32,
329   cris_ver_v32p,
330   cris_none_reg_mode_jump_op},
331
332  {"bcc",
333   BRANCH_QUICK_OPCODE+CC_CC*0x1000,
334   0x0f00+(0xF-CC_CC)*0x1000,		  "o",	     1, SIZE_NONE,     0,
335   cris_eight_bit_offset_branch_op},
336
337  {"bcs",
338   BRANCH_QUICK_OPCODE+CC_CS*0x1000,
339   0x0f00+(0xF-CC_CS)*0x1000,		  "o",	     1, SIZE_NONE,     0,
340   cris_eight_bit_offset_branch_op},
341
342  {"bdap",
343   BDAP_INDIR_OPCODE, BDAP_INDIR_Z_BITS,  "pm s,R",  0, SIZE_FIELD_SIGNED,
344   cris_ver_v0_10,
345   cris_bdap_prefix},
346
347  {"bdap",
348   BDAP_QUICK_OPCODE, BDAP_QUICK_Z_BITS,  "pO",	     0, SIZE_NONE,
349   cris_ver_v0_10,
350   cris_quick_mode_bdap_prefix},
351
352  {"beq",
353   BRANCH_QUICK_OPCODE+CC_EQ*0x1000,
354   0x0f00+(0xF-CC_EQ)*0x1000,		  "o",	     1, SIZE_NONE,     0,
355   cris_eight_bit_offset_branch_op},
356
357  /* This is deliberately put before "bext" to trump it, even though not
358     in alphabetical order, since we don't do excluding version checks
359     for v0..v10.  */
360  {"bwf",
361   BRANCH_QUICK_OPCODE+CC_EXT*0x1000,
362   0x0f00+(0xF-CC_EXT)*0x1000,		  "o",	     1, SIZE_NONE,
363   cris_ver_v10,
364   cris_eight_bit_offset_branch_op},
365
366  {"bext",
367   BRANCH_QUICK_OPCODE+CC_EXT*0x1000,
368   0x0f00+(0xF-CC_EXT)*0x1000,		  "o",	     1, SIZE_NONE,
369   cris_ver_v0_3,
370   cris_eight_bit_offset_branch_op},
371
372  {"bge",
373   BRANCH_QUICK_OPCODE+CC_GE*0x1000,
374   0x0f00+(0xF-CC_GE)*0x1000,		  "o",	     1, SIZE_NONE,     0,
375   cris_eight_bit_offset_branch_op},
376
377  {"bgt",
378   BRANCH_QUICK_OPCODE+CC_GT*0x1000,
379   0x0f00+(0xF-CC_GT)*0x1000,		  "o",	     1, SIZE_NONE,     0,
380   cris_eight_bit_offset_branch_op},
381
382  {"bhi",
383   BRANCH_QUICK_OPCODE+CC_HI*0x1000,
384   0x0f00+(0xF-CC_HI)*0x1000,		  "o",	     1, SIZE_NONE,     0,
385   cris_eight_bit_offset_branch_op},
386
387  {"bhs",
388   BRANCH_QUICK_OPCODE+CC_HS*0x1000,
389   0x0f00+(0xF-CC_HS)*0x1000,		  "o",	     1, SIZE_NONE,     0,
390   cris_eight_bit_offset_branch_op},
391
392  {"biap", BIAP_OPCODE, BIAP_Z_BITS,	  "pm r,R",  0, SIZE_NONE,
393   cris_ver_v0_10,
394   cris_biap_prefix},
395
396  {"ble",
397   BRANCH_QUICK_OPCODE+CC_LE*0x1000,
398   0x0f00+(0xF-CC_LE)*0x1000,		  "o",	     1, SIZE_NONE,     0,
399   cris_eight_bit_offset_branch_op},
400
401  {"blo",
402   BRANCH_QUICK_OPCODE+CC_LO*0x1000,
403   0x0f00+(0xF-CC_LO)*0x1000,		  "o",	     1, SIZE_NONE,     0,
404   cris_eight_bit_offset_branch_op},
405
406  {"bls",
407   BRANCH_QUICK_OPCODE+CC_LS*0x1000,
408   0x0f00+(0xF-CC_LS)*0x1000,		  "o",	     1, SIZE_NONE,     0,
409   cris_eight_bit_offset_branch_op},
410
411  {"blt",
412   BRANCH_QUICK_OPCODE+CC_LT*0x1000,
413   0x0f00+(0xF-CC_LT)*0x1000,		  "o",	     1, SIZE_NONE,     0,
414   cris_eight_bit_offset_branch_op},
415
416  {"bmi",
417   BRANCH_QUICK_OPCODE+CC_MI*0x1000,
418   0x0f00+(0xF-CC_MI)*0x1000,		  "o",	     1, SIZE_NONE,     0,
419   cris_eight_bit_offset_branch_op},
420
421  {"bmod",    0x0ab0, 0x0140,		  "s,R",     0, SIZE_FIX_32,
422   cris_ver_sim_v0_10,
423   cris_not_implemented_op},
424
425  {"bmod",    0x0ab0, 0x0140,		  "S,D",     0, SIZE_NONE,
426   cris_ver_sim_v0_10,
427   cris_not_implemented_op},
428
429  {"bmod",    0x0ab0, 0x0540,		  "S,R,r",   0, SIZE_NONE,
430   cris_ver_sim_v0_10,
431   cris_not_implemented_op},
432
433  {"bne",
434   BRANCH_QUICK_OPCODE+CC_NE*0x1000,
435   0x0f00+(0xF-CC_NE)*0x1000,		  "o",	     1, SIZE_NONE,     0,
436   cris_eight_bit_offset_branch_op},
437
438  {"bound",   0x05c0, 0x0A00,		  "m r,R",   0, SIZE_NONE,     0,
439   cris_two_operand_bound_op},
440  /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes.  */
441  {"bound",   0x09c0, 0x0200,		  "m s,R",   0, SIZE_FIELD,
442   cris_ver_v0_10,
443   cris_two_operand_bound_op},
444  /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes.  */
445  {"bound",   0x0dcf, 0x0200,		  "m Y,R",   0, SIZE_FIELD,    0,
446   cris_two_operand_bound_op},
447  {"bound",   0x09c0, 0x0200,		  "m S,D",   0, SIZE_NONE,
448   cris_ver_v0_10,
449   cris_two_operand_bound_op},
450  {"bound",   0x09c0, 0x0600,		  "m S,R,r", 0, SIZE_NONE,
451   cris_ver_v0_10,
452   cris_three_operand_bound_op},
453
454  {"bpl",
455   BRANCH_QUICK_OPCODE+CC_PL*0x1000,
456   0x0f00+(0xF-CC_PL)*0x1000,		  "o",	     1, SIZE_NONE,     0,
457   cris_eight_bit_offset_branch_op},
458
459  {"break",   0xe930, 0x16c0,		  "C",	     0, SIZE_NONE,
460   cris_ver_v3p,
461   cris_break_op},
462
463  {"bsb",
464   BRANCH_QUICK_OPCODE+CC_EXT*0x1000,
465   0x0f00+(0xF-CC_EXT)*0x1000,		  "o",	     1, SIZE_NONE,
466   cris_ver_v32p,
467   cris_eight_bit_offset_branch_op},
468
469  {"bsr",     0xBEBF, 0x4140,		  "n",	     0, SIZE_FIX_32,
470   cris_ver_v32p,
471   cris_none_reg_mode_jump_op},
472
473  {"bsrc",     0xBEFF, 0x4100,		  "n",	     0, SIZE_FIX_32,
474   cris_ver_v32p,
475   cris_none_reg_mode_jump_op},
476
477  {"bstore",  0x0af0, 0x0100,		  "s,R",     0, SIZE_FIX_32,
478   cris_ver_warning,
479   cris_not_implemented_op},
480
481  {"bstore",  0x0af0, 0x0100,		  "S,D",     0, SIZE_NONE,
482   cris_ver_warning,
483   cris_not_implemented_op},
484
485  {"bstore",  0x0af0, 0x0500,		  "S,R,r",   0, SIZE_NONE,
486   cris_ver_warning,
487   cris_not_implemented_op},
488
489  {"btst",    0x04F0, 0x0B00,		  "r,R",     0, SIZE_NONE,     0,
490   cris_btst_nop_op},
491  {"btstq",   0x0380, 0x0C60,		  "c,R",     0, SIZE_NONE,     0,
492   cris_btst_nop_op},
493
494  {"bvc",
495   BRANCH_QUICK_OPCODE+CC_VC*0x1000,
496   0x0f00+(0xF-CC_VC)*0x1000,		  "o",	     1, SIZE_NONE,     0,
497   cris_eight_bit_offset_branch_op},
498
499  {"bvs",
500   BRANCH_QUICK_OPCODE+CC_VS*0x1000,
501   0x0f00+(0xF-CC_VS)*0x1000,		  "o",	     1, SIZE_NONE,     0,
502   cris_eight_bit_offset_branch_op},
503
504  {"clear",   0x0670, 0x3980,		  "M r",     0, SIZE_NONE,     0,
505   cris_reg_mode_clear_op},
506
507  {"clear",   0x0A70, 0x3180,		  "M y",     0, SIZE_NONE,     0,
508   cris_none_reg_mode_clear_test_op},
509
510  {"clear",   0x0A70, 0x3180,		  "M S",     0, SIZE_NONE,
511   cris_ver_v0_10,
512   cris_none_reg_mode_clear_test_op},
513
514  {"clearf",  0x05F0, 0x0A00,		  "f",	     0, SIZE_NONE,     0,
515   cris_clearf_di_op},
516
517  {"cmp",     0x06C0, 0x0900,		  "m r,R",   0, SIZE_NONE,     0,
518   cris_reg_mode_add_sub_cmp_and_or_move_op},
519
520  {"cmp",     0x0Ac0, 0x0100,		  "m s,R",   0, SIZE_FIELD,    0,
521   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
522
523  {"cmp",     0x0Ac0, 0x0100,		  "m S,D",   0, SIZE_NONE,
524   cris_ver_v0_10,
525   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
526
527  {"cmpq",    0x02C0, 0x0D00,		  "i,R",     0, SIZE_NONE,     0,
528   cris_quick_mode_and_cmp_move_or_op},
529
530  /* FIXME: SIZE_FIELD_SIGNED and all necessary changes.  */
531  {"cmps",    0x08e0, 0x0300,		  "z s,R",   0, SIZE_FIELD,    0,
532   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
533
534  {"cmps",    0x08e0, 0x0300,		  "z S,D",   0, SIZE_NONE,
535   cris_ver_v0_10,
536   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
537
538  /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes.  */
539  {"cmpu",    0x08c0, 0x0320,		  "z s,R" ,  0, SIZE_FIELD,    0,
540   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
541
542  {"cmpu",    0x08c0, 0x0320,		  "z S,D",   0, SIZE_NONE,
543   cris_ver_v0_10,
544   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
545
546  {"di",      0x25F0, 0xDA0F,		  "",	     0, SIZE_NONE,     0,
547   cris_clearf_di_op},
548
549  {"dip",     DIP_OPCODE, DIP_Z_BITS,	  "ps",	     0, SIZE_FIX_32,
550   cris_ver_v0_10,
551   cris_dip_prefix},
552
553  {"div",     0x0980, 0x0640,		  "m R,r",   0, SIZE_FIELD,    0,
554   cris_not_implemented_op},
555
556  {"dstep",   0x06f0, 0x0900,		  "r,R",     0, SIZE_NONE,     0,
557   cris_dstep_logshift_mstep_neg_not_op},
558
559  {"ei",      0x25B0, 0xDA4F,		  "",	     0, SIZE_NONE,     0,
560   cris_ax_ei_setf_op},
561
562  {"fidxd",    0x0ab0, 0xf540,		  "[r]",     0, SIZE_NONE,
563   cris_ver_v32p,
564   cris_not_implemented_op},
565
566  {"fidxi",    0x0d30, 0xF2C0,		  "[r]",     0, SIZE_NONE,
567   cris_ver_v32p,
568   cris_not_implemented_op},
569
570  {"ftagd",    0x1AB0, 0xE540,		  "[r]",     0, SIZE_NONE,
571   cris_ver_v32p,
572   cris_not_implemented_op},
573
574  {"ftagi",    0x1D30, 0xE2C0,		  "[r]",     0, SIZE_NONE,
575   cris_ver_v32p,
576   cris_not_implemented_op},
577
578  {"halt",    0xF930, 0x06CF,		  "",	     0, SIZE_NONE,
579   cris_ver_v32p,
580   cris_not_implemented_op},
581
582  {"jas",    0x09B0, 0x0640,		  "r,P",     0, SIZE_NONE,
583   cris_ver_v32p,
584   cris_reg_mode_jump_op},
585
586  {"jas",    0x0DBF, 0x0240,		  "N,P",     0, SIZE_FIX_32,
587   cris_ver_v32p,
588   cris_reg_mode_jump_op},
589
590  {"jasc",    0x0B30, 0x04C0,		  "r,P",     0, SIZE_NONE,
591   cris_ver_v32p,
592   cris_reg_mode_jump_op},
593
594  {"jasc",    0x0F3F, 0x00C0,		  "N,P",     0, SIZE_FIX_32,
595   cris_ver_v32p,
596   cris_reg_mode_jump_op},
597
598  {"jbrc",    0x69b0, 0x9640,		  "r",	     0, SIZE_NONE,
599   cris_ver_v8_10,
600   cris_reg_mode_jump_op},
601
602  {"jbrc",    0x6930, 0x92c0,		  "s",	     0, SIZE_FIX_32,
603   cris_ver_v8_10,
604   cris_none_reg_mode_jump_op},
605
606  {"jbrc",    0x6930, 0x92c0,		  "S",	     0, SIZE_NONE,
607   cris_ver_v8_10,
608   cris_none_reg_mode_jump_op},
609
610  {"jir",     0xA9b0, 0x5640,		  "r",	     0, SIZE_NONE,
611   cris_ver_v8_10,
612   cris_reg_mode_jump_op},
613
614  {"jir",     0xA930, 0x52c0,		  "s",	     0, SIZE_FIX_32,
615   cris_ver_v8_10,
616   cris_none_reg_mode_jump_op},
617
618  {"jir",     0xA930, 0x52c0,		  "S",	     0, SIZE_NONE,
619   cris_ver_v8_10,
620   cris_none_reg_mode_jump_op},
621
622  {"jirc",    0x29b0, 0xd640,		  "r",	     0, SIZE_NONE,
623   cris_ver_v8_10,
624   cris_reg_mode_jump_op},
625
626  {"jirc",    0x2930, 0xd2c0,		  "s",	     0, SIZE_FIX_32,
627   cris_ver_v8_10,
628   cris_none_reg_mode_jump_op},
629
630  {"jirc",    0x2930, 0xd2c0,		  "S",	     0, SIZE_NONE,
631   cris_ver_v8_10,
632   cris_none_reg_mode_jump_op},
633
634  {"jsr",     0xB9b0, 0x4640,		  "r",	     0, SIZE_NONE,     0,
635   cris_reg_mode_jump_op},
636
637  {"jsr",     0xB930, 0x42c0,		  "s",	     0, SIZE_FIX_32,
638   cris_ver_v0_10,
639   cris_none_reg_mode_jump_op},
640
641  {"jsr",     0xBDBF, 0x4240,		  "N",	     0, SIZE_FIX_32,
642   cris_ver_v32p,
643   cris_none_reg_mode_jump_op},
644
645  {"jsr",     0xB930, 0x42c0,		  "S",	     0, SIZE_NONE,
646   cris_ver_v0_10,
647   cris_none_reg_mode_jump_op},
648
649  {"jsrc",    0x39b0, 0xc640,		  "r",	     0, SIZE_NONE,
650   cris_ver_v8_10,
651   cris_reg_mode_jump_op},
652
653  {"jsrc",    0x3930, 0xc2c0,		  "s",	     0, SIZE_FIX_32,
654   cris_ver_v8_10,
655   cris_none_reg_mode_jump_op},
656
657  {"jsrc",    0x3930, 0xc2c0,		  "S",	     0, SIZE_NONE,
658   cris_ver_v8_10,
659   cris_none_reg_mode_jump_op},
660
661  {"jsrc",    0xBB30, 0x44C0,		  "r",       0, SIZE_NONE,
662   cris_ver_v32p,
663   cris_reg_mode_jump_op},
664
665  {"jsrc",    0xBF3F, 0x40C0,		  "N",	     0, SIZE_FIX_32,
666   cris_ver_v32p,
667   cris_reg_mode_jump_op},
668
669  {"jump",    0x09b0, 0xF640,		  "r",	     0, SIZE_NONE,     0,
670   cris_reg_mode_jump_op},
671
672  {"jump",
673   JUMP_INDIR_OPCODE, JUMP_INDIR_Z_BITS,  "s",	     0, SIZE_FIX_32,
674   cris_ver_v0_10,
675   cris_none_reg_mode_jump_op},
676
677  {"jump",
678   JUMP_INDIR_OPCODE, JUMP_INDIR_Z_BITS,  "S",	     0, SIZE_NONE,
679   cris_ver_v0_10,
680   cris_none_reg_mode_jump_op},
681
682  {"jump",    0x09F0, 0x060F,		  "P",	     0, SIZE_NONE,
683   cris_ver_v32p,
684   cris_none_reg_mode_jump_op},
685
686  {"jump",
687   JUMP_PC_INCR_OPCODE_V32,
688   (0xffff & ~JUMP_PC_INCR_OPCODE_V32),	  "N",	     0, SIZE_FIX_32,
689   cris_ver_v32p,
690   cris_none_reg_mode_jump_op},
691
692  {"jmpu",    0x8930, 0x72c0,		  "s",	     0, SIZE_FIX_32,
693   cris_ver_v10,
694   cris_none_reg_mode_jump_op},
695
696  {"jmpu",    0x8930, 0x72c0,		   "S",	     0, SIZE_NONE,
697   cris_ver_v10,
698   cris_none_reg_mode_jump_op},
699
700  {"lapc",    0x0970, 0x0680,		  "U,R",    0, SIZE_NONE,
701   cris_ver_v32p,
702   cris_not_implemented_op},
703
704  {"lapc",    0x0D7F, 0x0280,		  "dn,R",    0, SIZE_FIX_32,
705   cris_ver_v32p,
706   cris_not_implemented_op},
707
708  {"lapcq",   0x0970, 0x0680,		  "u,R",     0, SIZE_NONE,
709   cris_ver_v32p,
710   cris_addi_op},
711
712  {"lsl",     0x04C0, 0x0B00,		  "m r,R",   0, SIZE_NONE,     0,
713   cris_dstep_logshift_mstep_neg_not_op},
714
715  {"lslq",    0x03c0, 0x0C20,		  "c,R",     0, SIZE_NONE,     0,
716   cris_dstep_logshift_mstep_neg_not_op},
717
718  {"lsr",     0x07C0, 0x0800,		  "m r,R",   0, SIZE_NONE,     0,
719   cris_dstep_logshift_mstep_neg_not_op},
720
721  {"lsrq",    0x03e0, 0x0C00,		  "c,R",     0, SIZE_NONE,     0,
722   cris_dstep_logshift_mstep_neg_not_op},
723
724  {"lz",      0x0730, 0x08C0,		  "r,R",     0, SIZE_NONE,
725   cris_ver_v3p,
726   cris_not_implemented_op},
727
728  {"mcp",      0x07f0, 0x0800,		  "P,r",     0, SIZE_NONE,
729   cris_ver_v32p,
730   cris_not_implemented_op},
731
732  {"move",    0x0640, 0x0980,		  "m r,R",   0, SIZE_NONE,     0,
733   cris_reg_mode_add_sub_cmp_and_or_move_op},
734
735  {"move",    0x0A40, 0x0180,		  "m s,R",   0, SIZE_FIELD,    0,
736   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
737
738  {"move",    0x0A40, 0x0180,		  "m S,D",   0, SIZE_NONE,
739   cris_ver_v0_10,
740   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
741
742  {"move",    0x0630, 0x09c0,		  "r,P",     0, SIZE_NONE,     0,
743   cris_move_to_preg_op},
744
745  {"move",    0x0670, 0x0980,		  "P,r",     0, SIZE_NONE,     0,
746   cris_reg_mode_move_from_preg_op},
747
748  {"move",    0x0BC0, 0x0000,		  "m R,y",   0, SIZE_FIELD,    0,
749   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
750
751  {"move",    0x0BC0, 0x0000,		  "m D,S",   0, SIZE_NONE,
752   cris_ver_v0_10,
753   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
754
755  {"move",
756   MOVE_M_TO_PREG_OPCODE, MOVE_M_TO_PREG_ZBITS,
757   "s,P",   0, SIZE_SPEC_REG, 0,
758   cris_move_to_preg_op},
759
760  {"move",    0x0A30, 0x01c0,		  "S,P",     0, SIZE_NONE,
761   cris_ver_v0_10,
762   cris_move_to_preg_op},
763
764  {"move",    0x0A70, 0x0180,		  "P,y",     0, SIZE_SPEC_REG, 0,
765   cris_none_reg_mode_move_from_preg_op},
766
767  {"move",    0x0A70, 0x0180,		  "P,S",     0, SIZE_NONE,
768   cris_ver_v0_10,
769   cris_none_reg_mode_move_from_preg_op},
770
771  {"move",    0x0B70, 0x0480,		  "r,T",     0, SIZE_NONE,
772   cris_ver_v32p,
773   cris_not_implemented_op},
774
775  {"move",    0x0F70, 0x0080,		  "T,r",     0, SIZE_NONE,
776   cris_ver_v32p,
777   cris_not_implemented_op},
778
779  {"movem",   0x0BF0, 0x0000,		  "R,y",     0, SIZE_FIX_32,   0,
780   cris_move_reg_to_mem_movem_op},
781
782  {"movem",   0x0BF0, 0x0000,		  "D,S",     0, SIZE_NONE,
783   cris_ver_v0_10,
784   cris_move_reg_to_mem_movem_op},
785
786  {"movem",   0x0BB0, 0x0040,		  "s,R",     0, SIZE_FIX_32,   0,
787   cris_move_mem_to_reg_movem_op},
788
789  {"movem",   0x0BB0, 0x0040,		  "S,D",     0, SIZE_NONE,
790   cris_ver_v0_10,
791   cris_move_mem_to_reg_movem_op},
792
793  {"moveq",   0x0240, 0x0D80,		  "i,R",     0, SIZE_NONE,     0,
794   cris_quick_mode_and_cmp_move_or_op},
795
796  {"movs",    0x0460, 0x0B80,		  "z r,R",   0, SIZE_NONE,     0,
797   cris_reg_mode_add_sub_cmp_and_or_move_op},
798
799  /* FIXME: SIZE_FIELD_SIGNED and all necessary changes.  */
800  {"movs",    0x0860, 0x0380,		  "z s,R",   0, SIZE_FIELD,    0,
801   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
802
803  {"movs",    0x0860, 0x0380,		  "z S,D",   0, SIZE_NONE,
804   cris_ver_v0_10,
805   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
806
807  {"movu",    0x0440, 0x0Ba0,		  "z r,R",   0, SIZE_NONE,     0,
808   cris_reg_mode_add_sub_cmp_and_or_move_op},
809
810  /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes.  */
811  {"movu",    0x0840, 0x03a0,		  "z s,R",   0, SIZE_FIELD,    0,
812   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
813
814  {"movu",    0x0840, 0x03a0,		  "z S,D",   0, SIZE_NONE,
815   cris_ver_v0_10,
816   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
817
818  {"mstep",   0x07f0, 0x0800,		  "r,R",     0, SIZE_NONE,
819   cris_ver_v0_10,
820   cris_dstep_logshift_mstep_neg_not_op},
821
822  {"muls",    0x0d00, 0x02c0,		  "m r,R",   0, SIZE_NONE,
823   cris_ver_v10p,
824   cris_muls_op},
825
826  {"mulu",    0x0900, 0x06c0,		  "m r,R",   0, SIZE_NONE,
827   cris_ver_v10p,
828   cris_mulu_op},
829
830  {"neg",     0x0580, 0x0A40,		  "m r,R",   0, SIZE_NONE,     0,
831   cris_dstep_logshift_mstep_neg_not_op},
832
833  {"nop",     NOP_OPCODE, NOP_Z_BITS,	  "",	     0, SIZE_NONE,
834   cris_ver_v0_10,
835   cris_btst_nop_op},
836
837  {"nop",     NOP_OPCODE_V32, NOP_Z_BITS_V32, "",    0, SIZE_NONE,
838   cris_ver_v32p,
839   cris_btst_nop_op},
840
841  {"not",     0x8770, 0x7880,		  "r",	     0, SIZE_NONE,     0,
842   cris_dstep_logshift_mstep_neg_not_op},
843
844  {"or",      0x0740, 0x0880,		  "m r,R",   0, SIZE_NONE,     0,
845   cris_reg_mode_add_sub_cmp_and_or_move_op},
846
847  {"or",      0x0B40, 0x0080,		  "m s,R",   0, SIZE_FIELD,    0,
848   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
849
850  {"or",      0x0B40, 0x0080,		  "m S,D",   0, SIZE_NONE,
851   cris_ver_v0_10,
852   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
853
854  {"or",      0x0B40, 0x0480,		  "m S,R,r", 0, SIZE_NONE,
855   cris_ver_v0_10,
856   cris_three_operand_add_sub_cmp_and_or_op},
857
858  {"orq",     0x0340, 0x0C80,		  "i,R",     0, SIZE_NONE,     0,
859   cris_quick_mode_and_cmp_move_or_op},
860
861  {"pop",     0x0E6E, 0x0191,		  "!R",	     0, SIZE_NONE,
862   cris_ver_v0_10,
863   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
864
865  {"pop",     0x0e3e, 0x01c1,		  "!P",	     0, SIZE_NONE,
866   cris_ver_v0_10,
867   cris_none_reg_mode_move_from_preg_op},
868
869  {"push",    0x0FEE, 0x0011,		  "BR",	     0, SIZE_NONE,
870   cris_ver_v0_10,
871   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
872
873  {"push",    0x0E7E, 0x0181,		  "BP",	     0, SIZE_NONE,
874   cris_ver_v0_10,
875   cris_move_to_preg_op},
876
877  {"rbf",     0x3b30, 0xc0c0,		  "y",	     0, SIZE_NONE,
878   cris_ver_v10,
879   cris_not_implemented_op},
880
881  {"rbf",     0x3b30, 0xc0c0,		  "S",	     0, SIZE_NONE,
882   cris_ver_v10,
883   cris_not_implemented_op},
884
885  {"rfe",     0x2930, 0xD6CF,		  "",	     0, SIZE_NONE,
886   cris_ver_v32p,
887   cris_not_implemented_op},
888
889  {"rfg",     0x4930, 0xB6CF,		  "",	     0, SIZE_NONE,
890   cris_ver_v32p,
891   cris_not_implemented_op},
892
893  {"rfn",     0x5930, 0xA6CF,		  "",	     0, SIZE_NONE,
894   cris_ver_v32p,
895   cris_not_implemented_op},
896
897  {"ret",     0xB67F, 0x4980,		  "",	     1, SIZE_NONE,
898   cris_ver_v0_10,
899   cris_reg_mode_move_from_preg_op},
900
901  {"ret",     0xB9F0, 0x460F,		  "",	     1, SIZE_NONE,
902   cris_ver_v32p,
903   cris_reg_mode_move_from_preg_op},
904
905  {"retb",    0xe67f, 0x1980,		  "",	     1, SIZE_NONE,
906   cris_ver_v0_10,
907   cris_reg_mode_move_from_preg_op},
908
909  {"rete",     0xA9F0, 0x560F,		  "",	     1, SIZE_NONE,
910   cris_ver_v32p,
911   cris_reg_mode_move_from_preg_op},
912
913  {"reti",    0xA67F, 0x5980,		  "",	     1, SIZE_NONE,
914   cris_ver_v0_10,
915   cris_reg_mode_move_from_preg_op},
916
917  {"retn",     0xC9F0, 0x360F,		  "",	     1, SIZE_NONE,
918   cris_ver_v32p,
919   cris_reg_mode_move_from_preg_op},
920
921  {"sbfs",    0x3b70, 0xc080,		  "y",	     0, SIZE_NONE,
922   cris_ver_v10,
923   cris_not_implemented_op},
924
925  {"sbfs",    0x3b70, 0xc080,		  "S",	     0, SIZE_NONE,
926   cris_ver_v10,
927   cris_not_implemented_op},
928
929  {"sa",
930   0x0530+CC_A*0x1000,
931   0x0AC0+(0xf-CC_A)*0x1000,		  "r",	     0, SIZE_NONE,     0,
932   cris_scc_op},
933
934  {"ssb",
935   0x0530+CC_EXT*0x1000,
936   0x0AC0+(0xf-CC_EXT)*0x1000,		  "r",	     0, SIZE_NONE,
937   cris_ver_v32p,
938   cris_scc_op},
939
940  {"scc",
941   0x0530+CC_CC*0x1000,
942   0x0AC0+(0xf-CC_CC)*0x1000,		  "r",	     0, SIZE_NONE,     0,
943   cris_scc_op},
944
945  {"scs",
946   0x0530+CC_CS*0x1000,
947   0x0AC0+(0xf-CC_CS)*0x1000,		  "r",	     0, SIZE_NONE,     0,
948   cris_scc_op},
949
950  {"seq",
951   0x0530+CC_EQ*0x1000,
952   0x0AC0+(0xf-CC_EQ)*0x1000,		  "r",	     0, SIZE_NONE,     0,
953   cris_scc_op},
954
955  {"setf",    0x05b0, 0x0A40,		  "f",	     0, SIZE_NONE,     0,
956   cris_ax_ei_setf_op},
957
958  {"sfe",    0x3930, 0xC6CF,		  "",	     0, SIZE_NONE,
959   cris_ver_v32p,
960   cris_not_implemented_op},
961
962  /* Need to have "swf" in front of "sext" so it is the one displayed in
963     disassembly.  */
964  {"swf",
965   0x0530+CC_EXT*0x1000,
966   0x0AC0+(0xf-CC_EXT)*0x1000,		  "r",	     0, SIZE_NONE,
967   cris_ver_v10,
968   cris_scc_op},
969
970  {"sext",
971   0x0530+CC_EXT*0x1000,
972   0x0AC0+(0xf-CC_EXT)*0x1000,		  "r",	     0, SIZE_NONE,
973   cris_ver_v0_3,
974   cris_scc_op},
975
976  {"sge",
977   0x0530+CC_GE*0x1000,
978   0x0AC0+(0xf-CC_GE)*0x1000,		  "r",	     0, SIZE_NONE,     0,
979   cris_scc_op},
980
981  {"sgt",
982   0x0530+CC_GT*0x1000,
983   0x0AC0+(0xf-CC_GT)*0x1000,		  "r",	     0, SIZE_NONE,     0,
984   cris_scc_op},
985
986  {"shi",
987   0x0530+CC_HI*0x1000,
988   0x0AC0+(0xf-CC_HI)*0x1000,		  "r",	     0, SIZE_NONE,     0,
989   cris_scc_op},
990
991  {"shs",
992   0x0530+CC_HS*0x1000,
993   0x0AC0+(0xf-CC_HS)*0x1000,		  "r",	     0, SIZE_NONE,     0,
994   cris_scc_op},
995
996  {"sle",
997   0x0530+CC_LE*0x1000,
998   0x0AC0+(0xf-CC_LE)*0x1000,		  "r",	     0, SIZE_NONE,     0,
999   cris_scc_op},
1000
1001  {"slo",
1002   0x0530+CC_LO*0x1000,
1003   0x0AC0+(0xf-CC_LO)*0x1000,		  "r",	     0, SIZE_NONE,     0,
1004   cris_scc_op},
1005
1006  {"sls",
1007   0x0530+CC_LS*0x1000,
1008   0x0AC0+(0xf-CC_LS)*0x1000,		  "r",	     0, SIZE_NONE,     0,
1009   cris_scc_op},
1010
1011  {"slt",
1012   0x0530+CC_LT*0x1000,
1013   0x0AC0+(0xf-CC_LT)*0x1000,		  "r",	     0, SIZE_NONE,     0,
1014   cris_scc_op},
1015
1016  {"smi",
1017   0x0530+CC_MI*0x1000,
1018   0x0AC0+(0xf-CC_MI)*0x1000,		  "r",	     0, SIZE_NONE,     0,
1019   cris_scc_op},
1020
1021  {"sne",
1022   0x0530+CC_NE*0x1000,
1023   0x0AC0+(0xf-CC_NE)*0x1000,		  "r",	     0, SIZE_NONE,     0,
1024   cris_scc_op},
1025
1026  {"spl",
1027   0x0530+CC_PL*0x1000,
1028   0x0AC0+(0xf-CC_PL)*0x1000,		  "r",	     0, SIZE_NONE,     0,
1029   cris_scc_op},
1030
1031  {"sub",     0x0680, 0x0940,		  "m r,R",   0, SIZE_NONE,     0,
1032   cris_reg_mode_add_sub_cmp_and_or_move_op},
1033
1034  {"sub",     0x0a80, 0x0140,		  "m s,R",   0, SIZE_FIELD,    0,
1035   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
1036
1037  {"sub",     0x0a80, 0x0140,		  "m S,D",   0, SIZE_NONE,
1038   cris_ver_v0_10,
1039   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
1040
1041  {"sub",     0x0a80, 0x0540,		  "m S,R,r", 0, SIZE_NONE,
1042   cris_ver_v0_10,
1043   cris_three_operand_add_sub_cmp_and_or_op},
1044
1045  {"subq",    0x0280, 0x0d40,		  "I,R",     0, SIZE_NONE,     0,
1046   cris_quick_mode_add_sub_op},
1047
1048  {"subs",    0x04a0, 0x0b40,		  "z r,R",   0, SIZE_NONE,     0,
1049   cris_reg_mode_add_sub_cmp_and_or_move_op},
1050
1051  /* FIXME: SIZE_FIELD_SIGNED and all necessary changes.  */
1052  {"subs",    0x08a0, 0x0340,		  "z s,R",   0, SIZE_FIELD,    0,
1053   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
1054
1055  {"subs",    0x08a0, 0x0340,		  "z S,D",   0, SIZE_NONE,
1056   cris_ver_v0_10,
1057   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
1058
1059  {"subs",    0x08a0, 0x0740,		  "z S,R,r", 0, SIZE_NONE,
1060   cris_ver_v0_10,
1061   cris_three_operand_add_sub_cmp_and_or_op},
1062
1063  {"subu",    0x0480, 0x0b60,		  "z r,R",   0, SIZE_NONE,     0,
1064   cris_reg_mode_add_sub_cmp_and_or_move_op},
1065
1066  /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes.  */
1067  {"subu",    0x0880, 0x0360,		  "z s,R",   0, SIZE_FIELD,    0,
1068   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
1069
1070  {"subu",    0x0880, 0x0360,		  "z S,D",   0, SIZE_NONE,
1071   cris_ver_v0_10,
1072   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
1073
1074  {"subu",    0x0880, 0x0760,		  "z S,R,r", 0, SIZE_NONE,
1075   cris_ver_v0_10,
1076   cris_three_operand_add_sub_cmp_and_or_op},
1077
1078  {"svc",
1079   0x0530+CC_VC*0x1000,
1080   0x0AC0+(0xf-CC_VC)*0x1000,		  "r",	     0, SIZE_NONE,     0,
1081   cris_scc_op},
1082
1083  {"svs",
1084   0x0530+CC_VS*0x1000,
1085   0x0AC0+(0xf-CC_VS)*0x1000,		  "r",	     0, SIZE_NONE,     0,
1086   cris_scc_op},
1087
1088  /* The insn "swapn" is the same as "not" and will be disassembled as
1089     such, but the swap* family of mnmonics are generally v8-and-higher
1090     only, so count it in.  */
1091  {"swapn",   0x8770, 0x7880,		  "r",	     0, SIZE_NONE,
1092   cris_ver_v8p,
1093   cris_not_implemented_op},
1094
1095  {"swapw",   0x4770, 0xb880,		  "r",	     0, SIZE_NONE,
1096   cris_ver_v8p,
1097   cris_not_implemented_op},
1098
1099  {"swapnw",  0xc770, 0x3880,		  "r",	     0, SIZE_NONE,
1100   cris_ver_v8p,
1101   cris_not_implemented_op},
1102
1103  {"swapb",   0x2770, 0xd880,		  "r",	     0, SIZE_NONE,
1104   cris_ver_v8p,
1105   cris_not_implemented_op},
1106
1107  {"swapnb",  0xA770, 0x5880,		  "r",	     0, SIZE_NONE,
1108   cris_ver_v8p,
1109   cris_not_implemented_op},
1110
1111  {"swapwb",  0x6770, 0x9880,		  "r",	     0, SIZE_NONE,
1112   cris_ver_v8p,
1113   cris_not_implemented_op},
1114
1115  {"swapnwb", 0xE770, 0x1880,		  "r",	     0, SIZE_NONE,
1116   cris_ver_v8p,
1117   cris_not_implemented_op},
1118
1119  {"swapr",   0x1770, 0xe880,		  "r",	     0, SIZE_NONE,
1120   cris_ver_v8p,
1121   cris_not_implemented_op},
1122
1123  {"swapnr",  0x9770, 0x6880,		  "r",	     0, SIZE_NONE,
1124   cris_ver_v8p,
1125   cris_not_implemented_op},
1126
1127  {"swapwr",  0x5770, 0xa880,		  "r",	     0, SIZE_NONE,
1128   cris_ver_v8p,
1129   cris_not_implemented_op},
1130
1131  {"swapnwr", 0xd770, 0x2880,		  "r",	     0, SIZE_NONE,
1132   cris_ver_v8p,
1133   cris_not_implemented_op},
1134
1135  {"swapbr",  0x3770, 0xc880,		  "r",	     0, SIZE_NONE,
1136   cris_ver_v8p,
1137   cris_not_implemented_op},
1138
1139  {"swapnbr", 0xb770, 0x4880,		  "r",	     0, SIZE_NONE,
1140   cris_ver_v8p,
1141   cris_not_implemented_op},
1142
1143  {"swapwbr", 0x7770, 0x8880,		  "r",	     0, SIZE_NONE,
1144   cris_ver_v8p,
1145   cris_not_implemented_op},
1146
1147  {"swapnwbr", 0xf770, 0x0880,		  "r",	     0, SIZE_NONE,
1148   cris_ver_v8p,
1149   cris_not_implemented_op},
1150
1151  {"test",    0x0640, 0x0980,		  "m D",     0, SIZE_NONE,
1152   cris_ver_v0_10,
1153   cris_reg_mode_test_op},
1154
1155  {"test",    0x0b80, 0xf040,		  "m y",     0, SIZE_FIELD,    0,
1156   cris_none_reg_mode_clear_test_op},
1157
1158  {"test",    0x0b80, 0xf040,		  "m S",     0, SIZE_NONE,
1159   cris_ver_v0_10,
1160   cris_none_reg_mode_clear_test_op},
1161
1162  {"xor",     0x07B0, 0x0840,		  "r,R",     0, SIZE_NONE,     0,
1163   cris_xor_op},
1164
1165  {NULL, 0, 0, NULL, 0, 0, 0, cris_not_implemented_op}
1166};
1167
1168/* Condition-names, indexed by the CC_* numbers as found in cris.h. */
1169const char * const
1170cris_cc_strings[] =
1171{
1172  "hs",
1173  "lo",
1174  "ne",
1175  "eq",
1176  "vc",
1177  "vs",
1178  "pl",
1179  "mi",
1180  "ls",
1181  "hi",
1182  "ge",
1183  "lt",
1184  "gt",
1185  "le",
1186  "a",
1187  /* This is a placeholder.  In v0, this would be "ext".  In v32, this
1188     is "sb".  See cris_conds15.  */
1189  "wf"
1190};
1191
1192/* Different names and semantics for condition 1111 (0xf).  */
1193const struct cris_cond15 cris_cond15s[] =
1194{
1195  /* FIXME: In what version did condition "ext" disappear?  */
1196  {"ext", cris_ver_v0_3},
1197  {"wf", cris_ver_v10},
1198  {"sb", cris_ver_v32p},
1199  {NULL, 0}
1200};
1201
1202
1203/*
1204 * Local variables:
1205 * eval: (c-set-style "gnu")
1206 * indent-tabs-mode: t
1207 * End:
1208 */
1209