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