ChangeLog rotation
[deliverable/binutils-gdb.git] / opcodes / cris-opc.c
CommitLineData
6c95a37f 1/* cris-opc.c -- Table of opcodes for the CRIS processor.
82704155 2 Copyright (C) 2000-2019 Free Software Foundation, Inc.
6c95a37f
HPN
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
9b201bb5 7 This file is part of the GNU opcodes library.
6c95a37f 8
9b201bb5
NC
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.
6c95a37f 13
9b201bb5
NC
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.
6c95a37f 18
9b201bb5
NC
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. */
6c95a37f
HPN
23
24#include "opcode/cris.h"
25
26#ifndef NULL
27#define NULL (0)
28#endif
29
bd21e58e 30/* This table isn't used for CRISv32 and the size of immediate operands. */
6c95a37f
HPN
31const struct cris_spec_reg
32cris_spec_regs[] =
33{
bd21e58e 34 {"bz", 0, 1, cris_ver_v32p, NULL},
6c95a37f
HPN
35 {"p0", 0, 1, 0, NULL},
36 {"vr", 1, 1, 0, NULL},
37 {"p1", 1, 1, 0, NULL},
bd21e58e
HPN
38 {"pid", 2, 1, cris_ver_v32p, NULL},
39 {"p2", 2, 1, cris_ver_v32p, NULL},
6c95a37f 40 {"p2", 2, 1, cris_ver_warning, NULL},
bd21e58e
HPN
41 {"srs", 3, 1, cris_ver_v32p, NULL},
42 {"p3", 3, 1, cris_ver_v32p, NULL},
6c95a37f 43 {"p3", 3, 1, cris_ver_warning, NULL},
bd21e58e 44 {"wz", 4, 2, cris_ver_v32p, NULL},
6c95a37f 45 {"p4", 4, 2, 0, NULL},
bd21e58e
HPN
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},
6c95a37f 50 {"dcr0",6, 2, cris_ver_v0_3, NULL},
bd21e58e 51 {"eda", 6, 4, cris_ver_v32p, NULL},
6c95a37f 52 {"p6", 6, 2, cris_ver_v0_3, NULL},
bd21e58e 53 {"p6", 6, 4, cris_ver_v32p, NULL},
6c95a37f
HPN
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},
bd21e58e 62 {"dz", 8, 4, cris_ver_v32p, NULL},
6c95a37f 63 {"p8", 8, 4, 0, NULL},
bd21e58e
HPN
64 {"ibr", 9, 4, cris_ver_v0_10, NULL},
65 {"ebp", 9, 4, cris_ver_v32p, NULL},
6c95a37f 66 {"p9", 9, 4, 0, NULL},
bd21e58e
HPN
67 {"irp", 10, 4, cris_ver_v0_10, NULL},
68 {"erp", 10, 4, cris_ver_v32p, NULL},
6c95a37f
HPN
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"},
bd21e58e
HPN
75 {"nrp", 12, 4, cris_ver_v32p, NULL},
76 {"bar", 12, 4, cris_ver_v8_10, NULL},
6c95a37f
HPN
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"},
bd21e58e
HPN
82 {"ccs", 13, 4, cris_ver_v32p, NULL},
83 {"dccr",13, 4, cris_ver_v8_10, NULL},
6c95a37f
HPN
84 {"dtp1",13, 4, cris_ver_v0_3, NULL},
85 {"p13", 13, 4, 0, NULL},
bd21e58e
HPN
86 {"brp", 14, 4, cris_ver_v3_10, NULL},
87 {"usp", 14, 4, cris_ver_v32p, NULL},
6c95a37f 88 {"p14", 14, 4, cris_ver_v3p, NULL},
bd21e58e
HPN
89 {"usp", 15, 4, cris_ver_v10, NULL},
90 {"spc", 15, 4, cris_ver_v32p, NULL},
6c95a37f 91 {"p15", 15, 4, cris_ver_v10p, NULL},
22f3fc43 92 {NULL, 0, 0, cris_ver_version_all, NULL}
6c95a37f
HPN
93};
94
bd21e58e
HPN
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
6c95a37f
HPN
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:
bd21e58e
HPN
130 [ ] , space
131 Verbatim.
132 A The string "ACR" (case-insensitive).
6c95a37f 133 B Not really an operand. It causes a "BDAP -size,SP" prefix to be
bd21e58e
HPN
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.
6c95a37f
HPN
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>.
bd21e58e
HPN
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.
6c95a37f
HPN
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>
bd21e58e
HPN
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).
6c95a37f
HPN
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
bd21e58e
HPN
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).
6c95a37f
HPN
160 P Special register in bits <15:12>.
161 p Indicates that the insn is a prefix insn. Must be first
162 character.
bd21e58e 163 Q As O, but don't relax; force an 8-bit offset.
6c95a37f
HPN
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
bd21e58e
HPN
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.
6c95a37f
HPN
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.
bd21e58e 177 Y The difference s-y; only an integer is allowed.
6c95a37f
HPN
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
bd21e58e 184 them, or may indicate an internal error.
6c95a37f
HPN
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
bd21e58e
HPN
206 {"add", 0x0A00, 0x01c0, "m S,D", 0, SIZE_NONE,
207 cris_ver_v0_10,
6c95a37f
HPN
208 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
209
bd21e58e
HPN
210 {"add", 0x0a00, 0x05c0, "m S,R,r", 0, SIZE_NONE,
211 cris_ver_v0_10,
6c95a37f
HPN
212 cris_three_operand_add_sub_cmp_and_or_op},
213
bd21e58e
HPN
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
6c95a37f
HPN
230 {"addi", 0x0500, 0x0Ac0, "x,r", 0, SIZE_NONE, 0,
231 cris_addi_op},
232
bd21e58e
HPN
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
6c95a37f
HPN
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
bd21e58e 256 /* FIXME: SIZE_FIELD_SIGNED and all necessary changes. */
6c95a37f
HPN
257 {"adds", 0x0820, 0x03c0, "z s,R", 0, SIZE_FIELD, 0,
258 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
259
bd21e58e
HPN
260 {"adds", 0x0820, 0x03c0, "z S,D", 0, SIZE_NONE,
261 cris_ver_v0_10,
6c95a37f
HPN
262 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
263
bd21e58e
HPN
264 {"adds", 0x0820, 0x07c0, "z S,R,r", 0, SIZE_NONE,
265 cris_ver_v0_10,
6c95a37f
HPN
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
bd21e58e 271 /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes. */
6c95a37f
HPN
272 {"addu", 0x0800, 0x03e0, "z s,R", 0, SIZE_FIELD, 0,
273 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
274
bd21e58e
HPN
275 {"addu", 0x0800, 0x03e0, "z S,D", 0, SIZE_NONE,
276 cris_ver_v0_10,
6c95a37f
HPN
277 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
278
bd21e58e
HPN
279 {"addu", 0x0800, 0x07e0, "z S,R,r", 0, SIZE_NONE,
280 cris_ver_v0_10,
6c95a37f
HPN
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
bd21e58e
HPN
289 {"and", 0x0B00, 0x00C0, "m S,D", 0, SIZE_NONE,
290 cris_ver_v0_10,
6c95a37f
HPN
291 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
292
bd21e58e
HPN
293 {"and", 0x0B00, 0x04C0, "m S,R,r", 0, SIZE_NONE,
294 cris_ver_v0_10,
6c95a37f
HPN
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
bd21e58e
HPN
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
6c95a37f
HPN
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",
bd21e58e
HPN
344 BDAP_INDIR_OPCODE, BDAP_INDIR_Z_BITS, "pm s,R", 0, SIZE_FIELD_SIGNED,
345 cris_ver_v0_10,
6c95a37f
HPN
346 cris_bdap_prefix},
347
348 {"bdap",
bd21e58e
HPN
349 BDAP_QUICK_OPCODE, BDAP_QUICK_Z_BITS, "pO", 0, SIZE_NONE,
350 cris_ver_v0_10,
6c95a37f
HPN
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
bd21e58e
HPN
359 in alphabetical order, since we don't do excluding version checks
360 for v0..v10. */
6c95a37f
HPN
361 {"bwf",
362 BRANCH_QUICK_OPCODE+CC_EXT*0x1000,
363 0x0f00+(0xF-CC_EXT)*0x1000, "o", 1, SIZE_NONE,
bd21e58e 364 cris_ver_v10,
6c95a37f
HPN
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
bd21e58e
HPN
393 {"biap", BIAP_OPCODE, BIAP_Z_BITS, "pm r,R", 0, SIZE_NONE,
394 cris_ver_v0_10,
6c95a37f
HPN
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,
bd21e58e 423 cris_ver_sim_v0_10,
6c95a37f
HPN
424 cris_not_implemented_op},
425
426 {"bmod", 0x0ab0, 0x0140, "S,D", 0, SIZE_NONE,
bd21e58e 427 cris_ver_sim_v0_10,
6c95a37f
HPN
428 cris_not_implemented_op},
429
430 {"bmod", 0x0ab0, 0x0540, "S,R,r", 0, SIZE_NONE,
bd21e58e 431 cris_ver_sim_v0_10,
6c95a37f
HPN
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},
bd21e58e
HPN
441 /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes. */
442 {"bound", 0x09c0, 0x0200, "m s,R", 0, SIZE_FIELD,
443 cris_ver_v0_10,
6c95a37f 444 cris_two_operand_bound_op},
bd21e58e
HPN
445 /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes. */
446 {"bound", 0x0dcf, 0x0200, "m Y,R", 0, SIZE_FIELD, 0,
6c95a37f 447 cris_two_operand_bound_op},
bd21e58e
HPN
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,
6c95a37f 453 cris_three_operand_bound_op},
bd21e58e 454
6c95a37f
HPN
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
bd21e58e
HPN
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
6c95a37f
HPN
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},
bd21e58e 494
6c95a37f
HPN
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
bd21e58e
HPN
511 {"clear", 0x0A70, 0x3180, "M S", 0, SIZE_NONE,
512 cris_ver_v0_10,
6c95a37f
HPN
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
bd21e58e
HPN
524 {"cmp", 0x0Ac0, 0x0100, "m S,D", 0, SIZE_NONE,
525 cris_ver_v0_10,
6c95a37f
HPN
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
bd21e58e 531 /* FIXME: SIZE_FIELD_SIGNED and all necessary changes. */
6c95a37f
HPN
532 {"cmps", 0x08e0, 0x0300, "z s,R", 0, SIZE_FIELD, 0,
533 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
534
bd21e58e
HPN
535 {"cmps", 0x08e0, 0x0300, "z S,D", 0, SIZE_NONE,
536 cris_ver_v0_10,
6c95a37f
HPN
537 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
538
bd21e58e 539 /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes. */
6c95a37f
HPN
540 {"cmpu", 0x08c0, 0x0320, "z s,R" , 0, SIZE_FIELD, 0,
541 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
542
bd21e58e
HPN
543 {"cmpu", 0x08c0, 0x0320, "z S,D", 0, SIZE_NONE,
544 cris_ver_v0_10,
6c95a37f
HPN
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
bd21e58e
HPN
550 {"dip", DIP_OPCODE, DIP_Z_BITS, "ps", 0, SIZE_FIX_32,
551 cris_ver_v0_10,
6c95a37f
HPN
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
bd21e58e
HPN
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
6c95a37f 599 {"jbrc", 0x69b0, 0x9640, "r", 0, SIZE_NONE,
bd21e58e 600 cris_ver_v8_10,
6c95a37f
HPN
601 cris_reg_mode_jump_op},
602
603 {"jbrc", 0x6930, 0x92c0, "s", 0, SIZE_FIX_32,
bd21e58e 604 cris_ver_v8_10,
6c95a37f
HPN
605 cris_none_reg_mode_jump_op},
606
607 {"jbrc", 0x6930, 0x92c0, "S", 0, SIZE_NONE,
bd21e58e 608 cris_ver_v8_10,
6c95a37f
HPN
609 cris_none_reg_mode_jump_op},
610
bd21e58e
HPN
611 {"jir", 0xA9b0, 0x5640, "r", 0, SIZE_NONE,
612 cris_ver_v8_10,
6c95a37f
HPN
613 cris_reg_mode_jump_op},
614
bd21e58e
HPN
615 {"jir", 0xA930, 0x52c0, "s", 0, SIZE_FIX_32,
616 cris_ver_v8_10,
6c95a37f
HPN
617 cris_none_reg_mode_jump_op},
618
bd21e58e
HPN
619 {"jir", 0xA930, 0x52c0, "S", 0, SIZE_NONE,
620 cris_ver_v8_10,
6c95a37f
HPN
621 cris_none_reg_mode_jump_op},
622
623 {"jirc", 0x29b0, 0xd640, "r", 0, SIZE_NONE,
bd21e58e 624 cris_ver_v8_10,
6c95a37f
HPN
625 cris_reg_mode_jump_op},
626
627 {"jirc", 0x2930, 0xd2c0, "s", 0, SIZE_FIX_32,
bd21e58e 628 cris_ver_v8_10,
6c95a37f
HPN
629 cris_none_reg_mode_jump_op},
630
631 {"jirc", 0x2930, 0xd2c0, "S", 0, SIZE_NONE,
bd21e58e 632 cris_ver_v8_10,
6c95a37f
HPN
633 cris_none_reg_mode_jump_op},
634
635 {"jsr", 0xB9b0, 0x4640, "r", 0, SIZE_NONE, 0,
636 cris_reg_mode_jump_op},
637
bd21e58e
HPN
638 {"jsr", 0xB930, 0x42c0, "s", 0, SIZE_FIX_32,
639 cris_ver_v0_10,
6c95a37f
HPN
640 cris_none_reg_mode_jump_op},
641
bd21e58e
HPN
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,
6c95a37f
HPN
648 cris_none_reg_mode_jump_op},
649
650 {"jsrc", 0x39b0, 0xc640, "r", 0, SIZE_NONE,
bd21e58e 651 cris_ver_v8_10,
6c95a37f
HPN
652 cris_reg_mode_jump_op},
653
654 {"jsrc", 0x3930, 0xc2c0, "s", 0, SIZE_FIX_32,
bd21e58e 655 cris_ver_v8_10,
6c95a37f
HPN
656 cris_none_reg_mode_jump_op},
657
658 {"jsrc", 0x3930, 0xc2c0, "S", 0, SIZE_NONE,
bd21e58e 659 cris_ver_v8_10,
6c95a37f
HPN
660 cris_none_reg_mode_jump_op},
661
bd21e58e
HPN
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
6c95a37f
HPN
670 {"jump", 0x09b0, 0xF640, "r", 0, SIZE_NONE, 0,
671 cris_reg_mode_jump_op},
672
673 {"jump",
bd21e58e
HPN
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,
6c95a37f
HPN
685 cris_none_reg_mode_jump_op},
686
687 {"jump",
bd21e58e
HPN
688 JUMP_PC_INCR_OPCODE_V32,
689 (0xffff & ~JUMP_PC_INCR_OPCODE_V32), "N", 0, SIZE_FIX_32,
690 cris_ver_v32p,
6c95a37f
HPN
691 cris_none_reg_mode_jump_op},
692
693 {"jmpu", 0x8930, 0x72c0, "s", 0, SIZE_FIX_32,
bd21e58e 694 cris_ver_v10,
6c95a37f
HPN
695 cris_none_reg_mode_jump_op},
696
697 {"jmpu", 0x8930, 0x72c0, "S", 0, SIZE_NONE,
bd21e58e 698 cris_ver_v10,
6c95a37f
HPN
699 cris_none_reg_mode_jump_op},
700
bd21e58e
HPN
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
6c95a37f
HPN
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
bd21e58e
HPN
729 {"mcp", 0x07f0, 0x0800, "P,r", 0, SIZE_NONE,
730 cris_ver_v32p,
731 cris_not_implemented_op},
732
6c95a37f
HPN
733 {"move", 0x0640, 0x0980, "m r,R", 0, SIZE_NONE, 0,
734 cris_reg_mode_add_sub_cmp_and_or_move_op},
735
bd21e58e
HPN
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
6c95a37f
HPN
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
bd21e58e
HPN
752 {"move", 0x0BC0, 0x0000, "m D,S", 0, SIZE_NONE,
753 cris_ver_v0_10,
6c95a37f
HPN
754 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
755
cf54500c
HPN
756 {"move",
757 MOVE_M_TO_PREG_OPCODE, MOVE_M_TO_PREG_ZBITS,
758 "s,P", 0, SIZE_SPEC_REG, 0,
6c95a37f
HPN
759 cris_move_to_preg_op},
760
bd21e58e
HPN
761 {"move", 0x0A30, 0x01c0, "S,P", 0, SIZE_NONE,
762 cris_ver_v0_10,
6c95a37f
HPN
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
bd21e58e
HPN
768 {"move", 0x0A70, 0x0180, "P,S", 0, SIZE_NONE,
769 cris_ver_v0_10,
6c95a37f
HPN
770 cris_none_reg_mode_move_from_preg_op},
771
bd21e58e
HPN
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
6c95a37f
HPN
780 {"movem", 0x0BF0, 0x0000, "R,y", 0, SIZE_FIX_32, 0,
781 cris_move_reg_to_mem_movem_op},
782
bd21e58e
HPN
783 {"movem", 0x0BF0, 0x0000, "D,S", 0, SIZE_NONE,
784 cris_ver_v0_10,
6c95a37f
HPN
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
bd21e58e
HPN
790 {"movem", 0x0BB0, 0x0040, "S,D", 0, SIZE_NONE,
791 cris_ver_v0_10,
6c95a37f
HPN
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
bd21e58e 800 /* FIXME: SIZE_FIELD_SIGNED and all necessary changes. */
6c95a37f
HPN
801 {"movs", 0x0860, 0x0380, "z s,R", 0, SIZE_FIELD, 0,
802 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
803
bd21e58e
HPN
804 {"movs", 0x0860, 0x0380, "z S,D", 0, SIZE_NONE,
805 cris_ver_v0_10,
6c95a37f
HPN
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
bd21e58e 811 /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes. */
6c95a37f
HPN
812 {"movu", 0x0840, 0x03a0, "z s,R", 0, SIZE_FIELD, 0,
813 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
814
bd21e58e
HPN
815 {"movu", 0x0840, 0x03a0, "z S,D", 0, SIZE_NONE,
816 cris_ver_v0_10,
6c95a37f
HPN
817 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
818
bd21e58e
HPN
819 {"mstep", 0x07f0, 0x0800, "r,R", 0, SIZE_NONE,
820 cris_ver_v0_10,
6c95a37f
HPN
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
bd21e58e
HPN
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,
6c95a37f
HPN
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
bd21e58e
HPN
851 {"or", 0x0B40, 0x0080, "m S,D", 0, SIZE_NONE,
852 cris_ver_v0_10,
6c95a37f
HPN
853 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
854
bd21e58e
HPN
855 {"or", 0x0B40, 0x0480, "m S,R,r", 0, SIZE_NONE,
856 cris_ver_v0_10,
6c95a37f
HPN
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
bd21e58e
HPN
862 {"pop", 0x0E6E, 0x0191, "!R", 0, SIZE_NONE,
863 cris_ver_v0_10,
6c95a37f
HPN
864 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
865
bd21e58e
HPN
866 {"pop", 0x0e3e, 0x01c1, "!P", 0, SIZE_NONE,
867 cris_ver_v0_10,
6c95a37f
HPN
868 cris_none_reg_mode_move_from_preg_op},
869
bd21e58e
HPN
870 {"push", 0x0FEE, 0x0011, "BR", 0, SIZE_NONE,
871 cris_ver_v0_10,
6c95a37f
HPN
872 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
873
bd21e58e
HPN
874 {"push", 0x0E7E, 0x0181, "BP", 0, SIZE_NONE,
875 cris_ver_v0_10,
6c95a37f
HPN
876 cris_move_to_preg_op},
877
878 {"rbf", 0x3b30, 0xc0c0, "y", 0, SIZE_NONE,
bd21e58e 879 cris_ver_v10,
6c95a37f
HPN
880 cris_not_implemented_op},
881
882 {"rbf", 0x3b30, 0xc0c0, "S", 0, SIZE_NONE,
bd21e58e
HPN
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,
6c95a37f
HPN
896 cris_not_implemented_op},
897
bd21e58e
HPN
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,
6c95a37f
HPN
904 cris_reg_mode_move_from_preg_op},
905
bd21e58e
HPN
906 {"retb", 0xe67f, 0x1980, "", 1, SIZE_NONE,
907 cris_ver_v0_10,
6c95a37f
HPN
908 cris_reg_mode_move_from_preg_op},
909
bd21e58e
HPN
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,
6c95a37f
HPN
920 cris_reg_mode_move_from_preg_op},
921
922 {"sbfs", 0x3b70, 0xc080, "y", 0, SIZE_NONE,
bd21e58e 923 cris_ver_v10,
6c95a37f
HPN
924 cris_not_implemented_op},
925
926 {"sbfs", 0x3b70, 0xc080, "S", 0, SIZE_NONE,
bd21e58e 927 cris_ver_v10,
6c95a37f
HPN
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
bd21e58e
HPN
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
6c95a37f
HPN
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
bd21e58e
HPN
959 {"sfe", 0x3930, 0xC6CF, "", 0, SIZE_NONE,
960 cris_ver_v32p,
961 cris_not_implemented_op},
962
6c95a37f
HPN
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,
bd21e58e 968 cris_ver_v10,
6c95a37f
HPN
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
bd21e58e
HPN
1038 {"sub", 0x0a80, 0x0140, "m S,D", 0, SIZE_NONE,
1039 cris_ver_v0_10,
6c95a37f
HPN
1040 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
1041
bd21e58e
HPN
1042 {"sub", 0x0a80, 0x0540, "m S,R,r", 0, SIZE_NONE,
1043 cris_ver_v0_10,
6c95a37f
HPN
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
bd21e58e 1052 /* FIXME: SIZE_FIELD_SIGNED and all necessary changes. */
6c95a37f
HPN
1053 {"subs", 0x08a0, 0x0340, "z s,R", 0, SIZE_FIELD, 0,
1054 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
1055
bd21e58e
HPN
1056 {"subs", 0x08a0, 0x0340, "z S,D", 0, SIZE_NONE,
1057 cris_ver_v0_10,
6c95a37f
HPN
1058 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
1059
bd21e58e
HPN
1060 {"subs", 0x08a0, 0x0740, "z S,R,r", 0, SIZE_NONE,
1061 cris_ver_v0_10,
6c95a37f
HPN
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
bd21e58e 1067 /* FIXME: SIZE_FIELD_UNSIGNED and all necessary changes. */
6c95a37f
HPN
1068 {"subu", 0x0880, 0x0360, "z s,R", 0, SIZE_FIELD, 0,
1069 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
1070
bd21e58e
HPN
1071 {"subu", 0x0880, 0x0360, "z S,D", 0, SIZE_NONE,
1072 cris_ver_v0_10,
6c95a37f
HPN
1073 cris_none_reg_mode_add_sub_cmp_and_or_move_op},
1074
bd21e58e
HPN
1075 {"subu", 0x0880, 0x0760, "z S,R,r", 0, SIZE_NONE,
1076 cris_ver_v0_10,
6c95a37f
HPN
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
bd21e58e
HPN
1152 {"test", 0x0640, 0x0980, "m D", 0, SIZE_NONE,
1153 cris_ver_v0_10,
6c95a37f
HPN
1154 cris_reg_mode_test_op},
1155
bd21e58e 1156 {"test", 0x0b80, 0xf040, "m y", 0, SIZE_FIELD, 0,
6c95a37f
HPN
1157 cris_none_reg_mode_clear_test_op},
1158
bd21e58e
HPN
1159 {"test", 0x0b80, 0xf040, "m S", 0, SIZE_NONE,
1160 cris_ver_v0_10,
6c95a37f
HPN
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",
bd21e58e
HPN
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}
6c95a37f
HPN
1201};
1202
1203
1204/*
1205 * Local variables:
1206 * eval: (c-set-style "gnu")
1207 * indent-tabs-mode: t
1208 * End:
1209 */
This page took 0.987429 seconds and 4 git commands to generate.