xref: /openbsd-src/gnu/usr.bin/binutils-2.17/opcodes/cris-opc.c (revision 3d8817e467ea46cf4772788d6804dd293abfb01a)
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 
7 This file is part of GAS, GDB and the GNU binutils.
8 
9 GAS, GDB, and GNU binutils is free software; you can redistribute it
10 and/or modify it under the terms of the GNU General Public License as
11 published by the Free Software Foundation; either version 2, or (at your
12 option) any later version.
13 
14 GAS, GDB, and GNU binutils are distributed in the hope that they will be
15 useful, 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.
18 
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, 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.  */
30 const struct cris_spec_reg
31 cris_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.  */
97 const 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 
193 const struct cris_opcode
194 cris_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. */
1169 const char * const
1170 cris_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).  */
1193 const 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