OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [insight/] [opcodes/] [cris-opc.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 578 markom
/* cris-opc.c -- Table of opcodes for the CRIS processor.
2
   Copyright 2000 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
22
 
23
#include "opcode/cris.h"
24
 
25
#ifndef NULL
26
#define NULL (0)
27
#endif
28
 
29
const struct cris_spec_reg
30
cris_spec_regs[] =
31
{
32
  {"p0",  0,  1, 0,                  NULL},
33
  {"vr",  1,  1, 0,                 NULL},
34
  {"p1",  1,  1, 0,                 NULL},
35
  {"p2",  2,  1, cris_ver_warning, NULL},
36
  {"p3",  3,  1, cris_ver_warning, NULL},
37
  {"p4",  4,  2, 0,                 NULL},
38
  {"ccr", 5,  2, 0,                 NULL},
39
  {"p5",  5,  2, 0,                 NULL},
40
  {"dcr0",6,  2, cris_ver_v0_3,    NULL},
41
  {"p6",  6,  2, cris_ver_v0_3,    NULL},
42
  {"dcr1/mof", 7, 4, cris_ver_v10p,
43
   "Register `dcr1/mof' with ambiguous size specified.  Guessing 4 bytes"},
44
  {"dcr1/mof", 7, 2, cris_ver_v0_3,
45
   "Register `dcr1/mof' with ambiguous size specified.  Guessing 2 bytes"},
46
  {"mof", 7,  4, cris_ver_v10p,    NULL},
47
  {"dcr1",7,  2, cris_ver_v0_3,    NULL},
48
  {"p7",  7,  4, cris_ver_v10p,    NULL},
49
  {"p7",  7,  2, cris_ver_v0_3,    NULL},
50
  {"p8",  8,  4, 0,                 NULL},
51
  {"ibr", 9,  4, 0,                 NULL},
52
  {"p9",  9,  4, 0,                 NULL},
53
  {"irp", 10, 4, 0,                 NULL},
54
  {"p10", 10, 4, 0,                 NULL},
55
  {"srp", 11, 4, 0,                 NULL},
56
  {"p11", 11, 4, 0,                 NULL},
57
  /* For disassembly use only.  Accept at assembly with a warning.  */
58
  {"bar/dtp0", 12, 4, cris_ver_warning,
59
   "Ambiguous register `bar/dtp0' specified"},
60
  {"bar", 12, 4, cris_ver_v8p,     NULL},
61
  {"dtp0",12, 4, cris_ver_v0_3,    NULL},
62
  {"p12", 12, 4, 0,                 NULL},
63
  /* For disassembly use only.  Accept at assembly with a warning.  */
64
  {"dccr/dtp1",13, 4, cris_ver_warning,
65
   "Ambiguous register `dccr/dtp1' specified"},
66
  {"dccr",13, 4, cris_ver_v8p,     NULL},
67
  {"dtp1",13, 4, cris_ver_v0_3,    NULL},
68
  {"p13", 13, 4, 0,                 NULL},
69
  {"brp", 14, 4, cris_ver_v3p,     NULL},
70
  {"p14", 14, 4, cris_ver_v3p,     NULL},
71
  {"usp", 15, 4, cris_ver_v10p,    NULL},
72
  {"p15", 15, 4, cris_ver_v10p,    NULL},
73
  {NULL, 0, 0, cris_ver_version_all, NULL}
74
};
75
 
76
/* All CRIS opcodes are 16 bits.
77
 
78
   - The match component is a mask saying which bits must match a
79
     particular opcode in order for an instruction to be an instance
80
     of that opcode.
81
 
82
   - The args component is a string containing characters symbolically
83
     matching the operands of an instruction.  Used for both assembly
84
     and disassembly.
85
 
86
     Operand-matching characters:
87
     B  Not really an operand.  It causes a "BDAP -size,SP" prefix to be
88
        output for the PUSH alias-instructions and recognizes a
89
        push-prefix at disassembly.  Must be followed by a R or P letter.
90
     !  Non-match pattern, will not match if there's a prefix insn.
91
     b  Non-matching operand, used for branches with 16-bit
92
        displacement. Only recognized by the disassembler.
93
     c  5-bit unsigned immediate in bits <4:0>.
94
     C  4-bit unsigned immediate in bits <3:0>.
95
     D  General register in bits <15:12> and <3:0>.
96
     f  List of flags in bits <15:12> and <3:0>.
97
     i  6-bit signed immediate in bits <5:0>.
98
     I  6-bit unsigned immediate in bits <5:0>.
99
     M  Size modifier (B, W or D) for CLEAR instructions.
100
     m  Size modifier (B, W or D) in bits <5:4>
101
     o  [-128..127] word offset in bits <7:1> and <0>.  Used by 8-bit
102
        branch instructions.
103
     O  [-128..127] offset in bits <7:0>.  Also matches a comma and a
104
        general register after the expression.  Used only for the BDAP
105
        prefix insn.
106
     P  Special register in bits <15:12>.
107
     p  Indicates that the insn is a prefix insn.  Must be first
108
        character.
109
     R  General register in bits <15:12>.
110
     r  General register in bits <3:0>.
111
     S  Source operand in bit <10> and a prefix; a 3-operand prefix
112
        without side-effect.
113
     s  Source operand in bits <10> and <3:0>, optionally with a
114
        side-effect prefix.
115
     x  Register-dot-modifier, for example "r5.w" in bits <15:12> and <5:4>.
116
     y  Like 's' but do not allow an integer at assembly.
117
     z  Size modifier (B or W) in bit <4>.  */
118
 
119
 
120
/* Please note the order of the opcodes in this table is significant.
121
   The assembler requires that all instances of the same mnemonic must
122
   be consecutive.  If they aren't, the assembler might not recognize
123
   them, or may indicate and internal error.
124
 
125
   The disassembler should not normally care about the order of the
126
   opcodes, but will prefer an earlier alternative if the "match-score"
127
   (see cris-dis.c) is computed as equal.
128
 
129
   It should not be significant for proper execution that this table is
130
   in alphabetical order, but please follow that convention for an easy
131
   overview.  */
132
 
133
const struct cris_opcode
134
cris_opcodes[] =
135
{
136
  {"abs",     0x06B0, 0x0940,             "r,R",     0, SIZE_NONE,     0,
137
   cris_abs_op},
138
 
139
  {"add",     0x0600, 0x09c0,             "m r,R",   0, SIZE_NONE,     0,
140
   cris_reg_mode_add_sub_cmp_and_or_move_op},
141
 
142
  {"add",     0x0A00, 0x01c0,             "m s,R",   0, SIZE_FIELD,    0,
143
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
144
 
145
  {"add",     0x0A00, 0x01c0,             "m S,D",   0, SIZE_NONE,     0,
146
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
147
 
148
  {"add",     0x0a00, 0x05c0,             "m S,R,r", 0, SIZE_NONE,     0,
149
   cris_three_operand_add_sub_cmp_and_or_op},
150
 
151
  {"addi",    0x0500, 0x0Ac0,             "x,r",     0, SIZE_NONE,     0,
152
   cris_addi_op},
153
 
154
  {"addq",    0x0200, 0x0Dc0,             "I,R",     0, SIZE_NONE,     0,
155
   cris_quick_mode_add_sub_op},
156
 
157
  {"adds",    0x0420, 0x0Bc0,             "z r,R",   0, SIZE_NONE,     0,
158
   cris_reg_mode_add_sub_cmp_and_or_move_op},
159
 
160
  {"adds",    0x0820, 0x03c0,             "z s,R",   0, SIZE_FIELD,    0,
161
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
162
 
163
  {"adds",    0x0820, 0x03c0,             "z S,D",   0, SIZE_NONE,     0,
164
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
165
 
166
  {"adds",    0x0820, 0x07c0,             "z S,R,r", 0, SIZE_NONE,     0,
167
   cris_three_operand_add_sub_cmp_and_or_op},
168
 
169
  {"addu",    0x0400, 0x0be0,             "z r,R",   0, SIZE_NONE,     0,
170
   cris_reg_mode_add_sub_cmp_and_or_move_op},
171
 
172
  {"addu",    0x0800, 0x03e0,             "z s,R",   0, SIZE_FIELD,    0,
173
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
174
 
175
  {"addu",    0x0800, 0x03e0,             "z S,D",   0, SIZE_NONE,     0,
176
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
177
 
178
  {"addu",    0x0800, 0x07e0,             "z S,R,r", 0, SIZE_NONE,     0,
179
   cris_three_operand_add_sub_cmp_and_or_op},
180
 
181
  {"and",     0x0700, 0x08C0,             "m r,R",   0, SIZE_NONE,     0,
182
   cris_reg_mode_add_sub_cmp_and_or_move_op},
183
 
184
  {"and",     0x0B00, 0x00C0,             "m s,R",   0, SIZE_FIELD,    0,
185
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
186
 
187
  {"and",     0x0B00, 0x00C0,             "m S,D",   0, SIZE_NONE,     0,
188
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
189
 
190
  {"and",     0x0B00, 0x04C0,             "m S,R,r", 0, SIZE_NONE,     0,
191
   cris_three_operand_add_sub_cmp_and_or_op},
192
 
193
  {"andq",    0x0300, 0x0CC0,             "i,R",     0, SIZE_NONE,     0,
194
   cris_quick_mode_and_cmp_move_or_op},
195
 
196
  {"asr",     0x0780, 0x0840,             "m r,R",   0, SIZE_NONE,     0,
197
   cris_asr_op},
198
 
199
  {"asrq",    0x03a0, 0x0c40,             "c,R",     0, SIZE_NONE,     0,
200
   cris_asrq_op},
201
 
202
  {"ax",      0x15B0, 0xEA4F,             "",        0, SIZE_NONE,     0,
203
   cris_ax_ei_setf_op},
204
 
205
  /* FIXME: Should use branch #defines.  */
206
  {"b",       0x0dff, 0x0200,             "b",       1, SIZE_NONE,     0,
207
   cris_sixteen_bit_offset_branch_op},
208
 
209
  {"ba",
210
   BA_QUICK_OPCODE,
211
   0x0F00+(0xF-CC_A)*0x1000,              "o",       1, SIZE_NONE,     0,
212
   cris_eight_bit_offset_branch_op},
213
 
214
  {"bcc",
215
   BRANCH_QUICK_OPCODE+CC_CC*0x1000,
216
   0x0f00+(0xF-CC_CC)*0x1000,             "o",       1, SIZE_NONE,     0,
217
   cris_eight_bit_offset_branch_op},
218
 
219
  {"bcs",
220
   BRANCH_QUICK_OPCODE+CC_CS*0x1000,
221
   0x0f00+(0xF-CC_CS)*0x1000,             "o",       1, SIZE_NONE,     0,
222
   cris_eight_bit_offset_branch_op},
223
 
224
  {"bdap",
225
   BDAP_INDIR_OPCODE, BDAP_INDIR_Z_BITS,  "pm s,R",  0, SIZE_FIELD,    0,
226
   cris_bdap_prefix},
227
 
228
  {"bdap",
229
   BDAP_QUICK_OPCODE, BDAP_QUICK_Z_BITS,  "pO",      0, SIZE_NONE,     0,
230
   cris_quick_mode_bdap_prefix},
231
 
232
  {"beq",
233
   BRANCH_QUICK_OPCODE+CC_EQ*0x1000,
234
   0x0f00+(0xF-CC_EQ)*0x1000,             "o",       1, SIZE_NONE,     0,
235
   cris_eight_bit_offset_branch_op},
236
 
237
  /* This is deliberately put before "bext" to trump it, even though not
238
     in alphabetical order.  */
239
  {"bwf",
240
   BRANCH_QUICK_OPCODE+CC_EXT*0x1000,
241
   0x0f00+(0xF-CC_EXT)*0x1000,            "o",       1, SIZE_NONE,
242
   cris_ver_v10p,
243
   cris_eight_bit_offset_branch_op},
244
 
245
  {"bext",
246
   BRANCH_QUICK_OPCODE+CC_EXT*0x1000,
247
   0x0f00+(0xF-CC_EXT)*0x1000,            "o",       1, SIZE_NONE,
248
   cris_ver_v0_3,
249
   cris_eight_bit_offset_branch_op},
250
 
251
  {"bge",
252
   BRANCH_QUICK_OPCODE+CC_GE*0x1000,
253
   0x0f00+(0xF-CC_GE)*0x1000,             "o",       1, SIZE_NONE,     0,
254
   cris_eight_bit_offset_branch_op},
255
 
256
  {"bgt",
257
   BRANCH_QUICK_OPCODE+CC_GT*0x1000,
258
   0x0f00+(0xF-CC_GT)*0x1000,             "o",       1, SIZE_NONE,     0,
259
   cris_eight_bit_offset_branch_op},
260
 
261
  {"bhi",
262
   BRANCH_QUICK_OPCODE+CC_HI*0x1000,
263
   0x0f00+(0xF-CC_HI)*0x1000,             "o",       1, SIZE_NONE,     0,
264
   cris_eight_bit_offset_branch_op},
265
 
266
  {"bhs",
267
   BRANCH_QUICK_OPCODE+CC_HS*0x1000,
268
   0x0f00+(0xF-CC_HS)*0x1000,             "o",       1, SIZE_NONE,     0,
269
   cris_eight_bit_offset_branch_op},
270
 
271
  {"biap", BIAP_OPCODE, BIAP_Z_BITS,      "pm r,R",  0, SIZE_NONE,     0,
272
   cris_biap_prefix},
273
 
274
  {"ble",
275
   BRANCH_QUICK_OPCODE+CC_LE*0x1000,
276
   0x0f00+(0xF-CC_LE)*0x1000,             "o",       1, SIZE_NONE,     0,
277
   cris_eight_bit_offset_branch_op},
278
 
279
  {"blo",
280
   BRANCH_QUICK_OPCODE+CC_LO*0x1000,
281
   0x0f00+(0xF-CC_LO)*0x1000,             "o",       1, SIZE_NONE,     0,
282
   cris_eight_bit_offset_branch_op},
283
 
284
  {"bls",
285
   BRANCH_QUICK_OPCODE+CC_LS*0x1000,
286
   0x0f00+(0xF-CC_LS)*0x1000,             "o",       1, SIZE_NONE,     0,
287
   cris_eight_bit_offset_branch_op},
288
 
289
  {"blt",
290
   BRANCH_QUICK_OPCODE+CC_LT*0x1000,
291
   0x0f00+(0xF-CC_LT)*0x1000,             "o",       1, SIZE_NONE,     0,
292
   cris_eight_bit_offset_branch_op},
293
 
294
  {"bmi",
295
   BRANCH_QUICK_OPCODE+CC_MI*0x1000,
296
   0x0f00+(0xF-CC_MI)*0x1000,             "o",       1, SIZE_NONE,     0,
297
   cris_eight_bit_offset_branch_op},
298
 
299
  {"bmod",    0x0ab0, 0x0140,             "s,R",     0, SIZE_FIX_32,
300
   cris_ver_sim,
301
   cris_not_implemented_op},
302
 
303
  {"bmod",    0x0ab0, 0x0140,             "S,D",     0, SIZE_NONE,
304
   cris_ver_sim,
305
   cris_not_implemented_op},
306
 
307
  {"bmod",    0x0ab0, 0x0540,             "S,R,r",   0, SIZE_NONE,
308
   cris_ver_sim,
309
   cris_not_implemented_op},
310
 
311
  {"bne",
312
   BRANCH_QUICK_OPCODE+CC_NE*0x1000,
313
   0x0f00+(0xF-CC_NE)*0x1000,             "o",       1, SIZE_NONE,     0,
314
   cris_eight_bit_offset_branch_op},
315
 
316
  {"bound",   0x05c0, 0x0A00,             "m r,R",   0, SIZE_NONE,     0,
317
   cris_two_operand_bound_op},
318
  {"bound",   0x09c0, 0x0200,             "m s,R",   0, SIZE_FIELD,    0,
319
   cris_two_operand_bound_op},
320
  {"bound",   0x09c0, 0x0200,             "m S,D",   0, SIZE_NONE,     0,
321
   cris_two_operand_bound_op},
322
  {"bound",   0x09c0, 0x0600,             "m S,R,r", 0, SIZE_NONE,     0,
323
   cris_three_operand_bound_op},
324
  {"bpl",
325
   BRANCH_QUICK_OPCODE+CC_PL*0x1000,
326
   0x0f00+(0xF-CC_PL)*0x1000,             "o",       1, SIZE_NONE,     0,
327
   cris_eight_bit_offset_branch_op},
328
 
329
  {"break",   0xe930, 0x16c0,             "C",       0, SIZE_NONE,
330
   cris_ver_v3p,
331
   cris_break_op},
332
 
333
  {"bstore",  0x0af0, 0x0100,             "s,R",     0, SIZE_FIX_32,
334
   cris_ver_warning,
335
   cris_not_implemented_op},
336
 
337
  {"bstore",  0x0af0, 0x0100,             "S,D",     0, SIZE_NONE,
338
   cris_ver_warning,
339
   cris_not_implemented_op},
340
 
341
  {"bstore",  0x0af0, 0x0500,             "S,R,r",   0, SIZE_NONE,
342
   cris_ver_warning,
343
   cris_not_implemented_op},
344
 
345
  {"btst",    0x04F0, 0x0B00,             "r,R",     0, SIZE_NONE,     0,
346
   cris_btst_nop_op},
347
  {"btstq",   0x0380, 0x0C60,             "c,R",     0, SIZE_NONE,     0,
348
   cris_btst_nop_op},
349
  {"bvc",
350
   BRANCH_QUICK_OPCODE+CC_VC*0x1000,
351
   0x0f00+(0xF-CC_VC)*0x1000,             "o",       1, SIZE_NONE,     0,
352
   cris_eight_bit_offset_branch_op},
353
 
354
  {"bvs",
355
   BRANCH_QUICK_OPCODE+CC_VS*0x1000,
356
   0x0f00+(0xF-CC_VS)*0x1000,             "o",       1, SIZE_NONE,     0,
357
   cris_eight_bit_offset_branch_op},
358
 
359
  {"clear",   0x0670, 0x3980,             "M r",     0, SIZE_NONE,     0,
360
   cris_reg_mode_clear_op},
361
 
362
  {"clear",   0x0A70, 0x3180,             "M y",     0, SIZE_NONE,     0,
363
   cris_none_reg_mode_clear_test_op},
364
 
365
  {"clear",   0x0A70, 0x3180,             "M S",     0, SIZE_NONE,     0,
366
   cris_none_reg_mode_clear_test_op},
367
 
368
  {"clearf",  0x05F0, 0x0A00,             "f",       0, SIZE_NONE,     0,
369
   cris_clearf_di_op},
370
 
371
  {"cmp",     0x06C0, 0x0900,             "m r,R",   0, SIZE_NONE,     0,
372
   cris_reg_mode_add_sub_cmp_and_or_move_op},
373
 
374
  {"cmp",     0x0Ac0, 0x0100,             "m s,R",   0, SIZE_FIELD,    0,
375
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
376
 
377
  {"cmp",     0x0Ac0, 0x0100,             "m S,D",   0, SIZE_NONE,     0,
378
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
379
 
380
  {"cmpq",    0x02C0, 0x0D00,             "i,R",     0, SIZE_NONE,     0,
381
   cris_quick_mode_and_cmp_move_or_op},
382
 
383
  {"cmps",    0x08e0, 0x0300,             "z s,R",   0, SIZE_FIELD,    0,
384
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
385
 
386
  {"cmps",    0x08e0, 0x0300,             "z S,D",   0, SIZE_NONE,     0,
387
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
388
 
389
  {"cmpu",    0x08c0, 0x0320,             "z s,R" ,  0, SIZE_FIELD,    0,
390
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
391
 
392
  {"cmpu",    0x08c0, 0x0320,             "z S,D",   0, SIZE_NONE,     0,
393
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
394
 
395
  {"di",      0x25F0, 0xDA0F,             "",        0, SIZE_NONE,     0,
396
   cris_clearf_di_op},
397
 
398
  {"dip",     DIP_OPCODE, DIP_Z_BITS,     "ps",      0, SIZE_FIX_32,   0,
399
   cris_dip_prefix},
400
 
401
  {"div",     0x0980, 0x0640,             "m R,r",   0, SIZE_FIELD,    0,
402
   cris_not_implemented_op},
403
 
404
  {"dstep",   0x06f0, 0x0900,             "r,R",     0, SIZE_NONE,     0,
405
   cris_dstep_logshift_mstep_neg_not_op},
406
 
407
  {"ei",      0x25B0, 0xDA4F,             "",        0, SIZE_NONE,     0,
408
   cris_ax_ei_setf_op},
409
 
410
  {"jbrc",    0x69b0, 0x9640,             "r",       0, SIZE_NONE,
411
   cris_ver_v8p,
412
   cris_reg_mode_jump_op},
413
 
414
  {"jbrc",    0x6930, 0x92c0,             "s",       0, SIZE_FIX_32,
415
   cris_ver_v8p,
416
   cris_none_reg_mode_jump_op},
417
 
418
  {"jbrc",    0x6930, 0x92c0,             "S",       0, SIZE_NONE,
419
   cris_ver_v8p,
420
   cris_none_reg_mode_jump_op},
421
 
422
  {"jir",     0xA9b0, 0x5640,             "r",       0, SIZE_NONE,     0,
423
   cris_reg_mode_jump_op},
424
 
425
  {"jir",     0xA930, 0x52c0,             "s",       0, SIZE_FIX_32,   0,
426
   cris_none_reg_mode_jump_op},
427
 
428
  {"jir",     0xA930, 0x52c0,             "S",       0, SIZE_NONE,     0,
429
   cris_none_reg_mode_jump_op},
430
 
431
  {"jirc",    0x29b0, 0xd640,             "r",       0, SIZE_NONE,
432
   cris_ver_v8p,
433
   cris_reg_mode_jump_op},
434
 
435
  {"jirc",    0x2930, 0xd2c0,             "s",       0, SIZE_FIX_32,
436
   cris_ver_v8p,
437
   cris_none_reg_mode_jump_op},
438
 
439
  {"jirc",    0x2930, 0xd2c0,             "S",       0, SIZE_NONE,
440
   cris_ver_v8p,
441
   cris_none_reg_mode_jump_op},
442
 
443
  {"jsr",     0xB9b0, 0x4640,             "r",       0, SIZE_NONE,     0,
444
   cris_reg_mode_jump_op},
445
 
446
  {"jsr",     0xB930, 0x42c0,             "s",       0, SIZE_FIX_32,   0,
447
   cris_none_reg_mode_jump_op},
448
 
449
  {"jsr",     0xB930, 0x42c0,             "S",       0, SIZE_NONE,     0,
450
   cris_none_reg_mode_jump_op},
451
 
452
  {"jsrc",    0x39b0, 0xc640,             "r",       0, SIZE_NONE,
453
   cris_ver_v8p,
454
   cris_reg_mode_jump_op},
455
 
456
  {"jsrc",    0x3930, 0xc2c0,             "s",       0, SIZE_FIX_32,
457
   cris_ver_v8p,
458
   cris_none_reg_mode_jump_op},
459
 
460
  {"jsrc",    0x3930, 0xc2c0,             "S",       0, SIZE_NONE,
461
   cris_ver_v8p,
462
   cris_none_reg_mode_jump_op},
463
 
464
  {"jump",    0x09b0, 0xF640,             "r",       0, SIZE_NONE,     0,
465
   cris_reg_mode_jump_op},
466
 
467
  {"jump",
468
   JUMP_INDIR_OPCODE, JUMP_INDIR_Z_BITS,  "s",       0, SIZE_FIX_32,   0,
469
   cris_none_reg_mode_jump_op},
470
 
471
  {"jump",
472
   JUMP_INDIR_OPCODE, JUMP_INDIR_Z_BITS,  "S",       0, SIZE_NONE,     0,
473
   cris_none_reg_mode_jump_op},
474
 
475
  {"jmpu",    0x8930, 0x72c0,             "s",       0, SIZE_FIX_32,
476
   cris_ver_v10p,
477
   cris_none_reg_mode_jump_op},
478
 
479
  {"jmpu",    0x8930, 0x72c0,              "S",      0, SIZE_NONE,
480
   cris_ver_v10p,
481
   cris_none_reg_mode_jump_op},
482
 
483
  {"lsl",     0x04C0, 0x0B00,             "m r,R",   0, SIZE_NONE,     0,
484
   cris_dstep_logshift_mstep_neg_not_op},
485
 
486
  {"lslq",    0x03c0, 0x0C20,             "c,R",     0, SIZE_NONE,     0,
487
   cris_dstep_logshift_mstep_neg_not_op},
488
 
489
  {"lsr",     0x07C0, 0x0800,             "m r,R",   0, SIZE_NONE,     0,
490
   cris_dstep_logshift_mstep_neg_not_op},
491
 
492
  {"lsrq",    0x03e0, 0x0C00,             "c,R",     0, SIZE_NONE,     0,
493
   cris_dstep_logshift_mstep_neg_not_op},
494
 
495
  {"lz",      0x0730, 0x08C0,             "r,R",     0, SIZE_NONE,
496
   cris_ver_v3p,
497
   cris_not_implemented_op},
498
 
499
  {"move",    0x0640, 0x0980,             "m r,R",   0, SIZE_NONE,     0,
500
   cris_reg_mode_add_sub_cmp_and_or_move_op},
501
 
502
  {"move",    0x0630, 0x09c0,             "r,P",     0, SIZE_NONE,     0,
503
   cris_move_to_preg_op},
504
 
505
  {"move",    0x0670, 0x0980,             "P,r",     0, SIZE_NONE,     0,
506
   cris_reg_mode_move_from_preg_op},
507
 
508
  {"move",    0x0BC0, 0x0000,             "m R,y",   0, SIZE_FIELD,    0,
509
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
510
 
511
  {"move",    0x0BC0, 0x0000,             "m D,S",   0, SIZE_NONE,     0,
512
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
513
 
514
  {"move",    0x0A40, 0x0180,             "m s,R",   0, SIZE_FIELD,    0,
515
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
516
 
517
  {"move",    0x0A40, 0x0180,             "m S,D",   0, SIZE_NONE,     0,
518
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
519
 
520
  {"move",    0x0A30, 0x01c0,             "s,P",     0, SIZE_SPEC_REG, 0,
521
   cris_move_to_preg_op},
522
 
523
  {"move",    0x0A30, 0x01c0,             "S,P",     0, SIZE_NONE,     0,
524
   cris_move_to_preg_op},
525
 
526
  {"move",    0x0A70, 0x0180,             "P,y",     0, SIZE_SPEC_REG, 0,
527
   cris_none_reg_mode_move_from_preg_op},
528
 
529
  {"move",    0x0A70, 0x0180,             "P,S",     0, SIZE_NONE,     0,
530
   cris_none_reg_mode_move_from_preg_op},
531
 
532
  {"movem",   0x0BF0, 0x0000,             "R,y",     0, SIZE_FIX_32,   0,
533
   cris_move_reg_to_mem_movem_op},
534
 
535
  {"movem",   0x0BF0, 0x0000,             "D,S",     0, SIZE_NONE,     0,
536
   cris_move_reg_to_mem_movem_op},
537
 
538
  {"movem",   0x0BB0, 0x0040,             "s,R",     0, SIZE_FIX_32,   0,
539
   cris_move_mem_to_reg_movem_op},
540
 
541
  {"movem",   0x0BB0, 0x0040,             "S,D",     0, SIZE_NONE,     0,
542
   cris_move_mem_to_reg_movem_op},
543
 
544
  {"moveq",   0x0240, 0x0D80,             "i,R",     0, SIZE_NONE,     0,
545
   cris_quick_mode_and_cmp_move_or_op},
546
 
547
  {"movs",    0x0460, 0x0B80,             "z r,R",   0, SIZE_NONE,     0,
548
   cris_reg_mode_add_sub_cmp_and_or_move_op},
549
 
550
  {"movs",    0x0860, 0x0380,             "z s,R",   0, SIZE_FIELD,    0,
551
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
552
 
553
  {"movs",    0x0860, 0x0380,             "z S,D",   0, SIZE_NONE,     0,
554
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
555
 
556
  {"movu",    0x0440, 0x0Ba0,             "z r,R",   0, SIZE_NONE,     0,
557
   cris_reg_mode_add_sub_cmp_and_or_move_op},
558
 
559
  {"movu",    0x0840, 0x03a0,             "z s,R",   0, SIZE_FIELD,    0,
560
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
561
 
562
  {"movu",    0x0840, 0x03a0,             "z S,D",   0, SIZE_NONE,     0,
563
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
564
 
565
  {"mstep",   0x07f0, 0x0800,             "r,R",     0, SIZE_NONE,     0,
566
   cris_dstep_logshift_mstep_neg_not_op},
567
 
568
  {"muls",    0x0d00, 0x02c0,             "m r,R",   0, SIZE_NONE,
569
   cris_ver_v10p,
570
   cris_muls_op},
571
 
572
  {"mulu",    0x0900, 0x06c0,             "m r,R",   0, SIZE_NONE,
573
   cris_ver_v10p,
574
   cris_mulu_op},
575
 
576
  {"neg",     0x0580, 0x0A40,             "m r,R",   0, SIZE_NONE,     0,
577
   cris_dstep_logshift_mstep_neg_not_op},
578
 
579
  {"nop",     NOP_OPCODE, NOP_Z_BITS,     "",        0, SIZE_NONE,     0,
580
   cris_btst_nop_op},
581
 
582
  {"not",     0x8770, 0x7880,             "r",       0, SIZE_NONE,     0,
583
   cris_dstep_logshift_mstep_neg_not_op},
584
 
585
  {"or",      0x0740, 0x0880,             "m r,R",   0, SIZE_NONE,     0,
586
   cris_reg_mode_add_sub_cmp_and_or_move_op},
587
 
588
  {"or",      0x0B40, 0x0080,             "m s,R",   0, SIZE_FIELD,    0,
589
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
590
 
591
  {"or",      0x0B40, 0x0080,             "m S,D",   0, SIZE_NONE,     0,
592
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
593
 
594
  {"or",      0x0B40, 0x0480,             "m S,R,r", 0, SIZE_NONE,     0,
595
   cris_three_operand_add_sub_cmp_and_or_op},
596
 
597
  {"orq",     0x0340, 0x0C80,             "i,R",     0, SIZE_NONE,     0,
598
   cris_quick_mode_and_cmp_move_or_op},
599
 
600
  {"pop",     0x0E6E, 0x0191,             "!R",      0, SIZE_NONE,     0,
601
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
602
 
603
  {"pop",     0x0e3e, 0x01c1,             "!P",      0, SIZE_NONE,     0,
604
   cris_none_reg_mode_move_from_preg_op},
605
 
606
  {"push",    0x0FEE, 0x0011,             "BR",      0, SIZE_NONE,     0,
607
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
608
 
609
  {"push",    0x0E7E, 0x0181,             "BP",      0, SIZE_NONE,     0,
610
   cris_move_to_preg_op},
611
 
612
  {"rbf",     0x3b30, 0xc0c0,             "y",       0, SIZE_NONE,
613
   cris_ver_v10p,
614
   cris_not_implemented_op},
615
 
616
  {"rbf",     0x3b30, 0xc0c0,             "S",       0, SIZE_NONE,
617
   cris_ver_v10p,
618
   cris_not_implemented_op},
619
 
620
  {"ret",     0xB67F, 0x4980,             "",        1, SIZE_NONE,     0,
621
   cris_reg_mode_move_from_preg_op},
622
 
623
  {"retb",    0xe67f, 0x1980,             "",        1, SIZE_NONE,     0,
624
   cris_reg_mode_move_from_preg_op},
625
 
626
  {"reti",    0xA67F, 0x5980,             "",        1, SIZE_NONE,     0,
627
   cris_reg_mode_move_from_preg_op},
628
 
629
  {"sbfs",    0x3b70, 0xc080,             "y",       0, SIZE_NONE,
630
   cris_ver_v10p,
631
   cris_not_implemented_op},
632
 
633
  {"sbfs",    0x3b70, 0xc080,             "S",       0, SIZE_NONE,
634
   cris_ver_v10p,
635
   cris_not_implemented_op},
636
 
637
  {"sa",
638
   0x0530+CC_A*0x1000,
639
   0x0AC0+(0xf-CC_A)*0x1000,              "r",       0, SIZE_NONE,     0,
640
   cris_scc_op},
641
 
642
  {"scc",
643
   0x0530+CC_CC*0x1000,
644
   0x0AC0+(0xf-CC_CC)*0x1000,             "r",       0, SIZE_NONE,     0,
645
   cris_scc_op},
646
 
647
  {"scs",
648
   0x0530+CC_CS*0x1000,
649
   0x0AC0+(0xf-CC_CS)*0x1000,             "r",       0, SIZE_NONE,     0,
650
   cris_scc_op},
651
 
652
  {"seq",
653
   0x0530+CC_EQ*0x1000,
654
   0x0AC0+(0xf-CC_EQ)*0x1000,             "r",       0, SIZE_NONE,     0,
655
   cris_scc_op},
656
 
657
  {"setf",    0x05b0, 0x0A40,             "f",       0, SIZE_NONE,     0,
658
   cris_ax_ei_setf_op},
659
 
660
  /* Need to have "swf" in front of "sext" so it is the one displayed in
661
     disassembly.  */
662
  {"swf",
663
   0x0530+CC_EXT*0x1000,
664
   0x0AC0+(0xf-CC_EXT)*0x1000,            "r",       0, SIZE_NONE,
665
   cris_ver_v10p,
666
   cris_scc_op},
667
 
668
  {"sext",
669
   0x0530+CC_EXT*0x1000,
670
   0x0AC0+(0xf-CC_EXT)*0x1000,            "r",       0, SIZE_NONE,
671
   cris_ver_v0_3,
672
   cris_scc_op},
673
 
674
  {"sge",
675
   0x0530+CC_GE*0x1000,
676
   0x0AC0+(0xf-CC_GE)*0x1000,             "r",       0, SIZE_NONE,     0,
677
   cris_scc_op},
678
 
679
  {"sgt",
680
   0x0530+CC_GT*0x1000,
681
   0x0AC0+(0xf-CC_GT)*0x1000,             "r",       0, SIZE_NONE,     0,
682
   cris_scc_op},
683
 
684
  {"shi",
685
   0x0530+CC_HI*0x1000,
686
   0x0AC0+(0xf-CC_HI)*0x1000,             "r",       0, SIZE_NONE,     0,
687
   cris_scc_op},
688
 
689
  {"shs",
690
   0x0530+CC_HS*0x1000,
691
   0x0AC0+(0xf-CC_HS)*0x1000,             "r",       0, SIZE_NONE,     0,
692
   cris_scc_op},
693
 
694
  {"sle",
695
   0x0530+CC_LE*0x1000,
696
   0x0AC0+(0xf-CC_LE)*0x1000,             "r",       0, SIZE_NONE,     0,
697
   cris_scc_op},
698
 
699
  {"slo",
700
   0x0530+CC_LO*0x1000,
701
   0x0AC0+(0xf-CC_LO)*0x1000,             "r",       0, SIZE_NONE,     0,
702
   cris_scc_op},
703
 
704
  {"sls",
705
   0x0530+CC_LS*0x1000,
706
   0x0AC0+(0xf-CC_LS)*0x1000,             "r",       0, SIZE_NONE,     0,
707
   cris_scc_op},
708
 
709
  {"slt",
710
   0x0530+CC_LT*0x1000,
711
   0x0AC0+(0xf-CC_LT)*0x1000,             "r",       0, SIZE_NONE,     0,
712
   cris_scc_op},
713
 
714
  {"smi",
715
   0x0530+CC_MI*0x1000,
716
   0x0AC0+(0xf-CC_MI)*0x1000,             "r",       0, SIZE_NONE,     0,
717
   cris_scc_op},
718
 
719
  {"sne",
720
   0x0530+CC_NE*0x1000,
721
   0x0AC0+(0xf-CC_NE)*0x1000,             "r",       0, SIZE_NONE,     0,
722
   cris_scc_op},
723
 
724
  {"spl",
725
   0x0530+CC_PL*0x1000,
726
   0x0AC0+(0xf-CC_PL)*0x1000,             "r",       0, SIZE_NONE,     0,
727
   cris_scc_op},
728
 
729
  {"sub",     0x0680, 0x0940,             "m r,R",   0, SIZE_NONE,     0,
730
   cris_reg_mode_add_sub_cmp_and_or_move_op},
731
 
732
  {"sub",     0x0a80, 0x0140,             "m s,R",   0, SIZE_FIELD,    0,
733
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
734
 
735
  {"sub",     0x0a80, 0x0140,             "m S,D",   0, SIZE_NONE,     0,
736
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
737
 
738
  {"sub",     0x0a80, 0x0540,             "m S,R,r", 0, SIZE_NONE,     0,
739
   cris_three_operand_add_sub_cmp_and_or_op},
740
 
741
  {"subq",    0x0280, 0x0d40,             "I,R",     0, SIZE_NONE,     0,
742
   cris_quick_mode_add_sub_op},
743
 
744
  {"subs",    0x04a0, 0x0b40,             "z r,R",   0, SIZE_NONE,     0,
745
   cris_reg_mode_add_sub_cmp_and_or_move_op},
746
 
747
  {"subs",    0x08a0, 0x0340,             "z s,R",   0, SIZE_FIELD,    0,
748
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
749
 
750
  {"subs",    0x08a0, 0x0340,             "z S,D",   0, SIZE_NONE,     0,
751
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
752
 
753
  {"subs",    0x08a0, 0x0740,             "z S,R,r", 0, SIZE_NONE,     0,
754
   cris_three_operand_add_sub_cmp_and_or_op},
755
 
756
  {"subu",    0x0480, 0x0b60,             "z r,R",   0, SIZE_NONE,     0,
757
   cris_reg_mode_add_sub_cmp_and_or_move_op},
758
 
759
  {"subu",    0x0880, 0x0360,             "z s,R",   0, SIZE_FIELD,    0,
760
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
761
 
762
  {"subu",    0x0880, 0x0360,             "z S,D",   0, SIZE_NONE,     0,
763
   cris_none_reg_mode_add_sub_cmp_and_or_move_op},
764
 
765
  {"subu",    0x0880, 0x0760,             "z S,R,r", 0, SIZE_NONE,     0,
766
   cris_three_operand_add_sub_cmp_and_or_op},
767
 
768
  {"svc",
769
   0x0530+CC_VC*0x1000,
770
   0x0AC0+(0xf-CC_VC)*0x1000,             "r",       0, SIZE_NONE,     0,
771
   cris_scc_op},
772
 
773
  {"svs",
774
   0x0530+CC_VS*0x1000,
775
   0x0AC0+(0xf-CC_VS)*0x1000,             "r",       0, SIZE_NONE,     0,
776
   cris_scc_op},
777
 
778
  /* The insn "swapn" is the same as "not" and will be disassembled as
779
     such, but the swap* family of mnmonics are generally v8-and-higher
780
     only, so count it in.  */
781
  {"swapn",   0x8770, 0x7880,             "r",       0, SIZE_NONE,
782
   cris_ver_v8p,
783
   cris_not_implemented_op},
784
 
785
  {"swapw",   0x4770, 0xb880,             "r",       0, SIZE_NONE,
786
   cris_ver_v8p,
787
   cris_not_implemented_op},
788
 
789
  {"swapnw",  0xc770, 0x3880,             "r",       0, SIZE_NONE,
790
   cris_ver_v8p,
791
   cris_not_implemented_op},
792
 
793
  {"swapb",   0x2770, 0xd880,             "r",       0, SIZE_NONE,
794
   cris_ver_v8p,
795
   cris_not_implemented_op},
796
 
797
  {"swapnb",  0xA770, 0x5880,             "r",       0, SIZE_NONE,
798
   cris_ver_v8p,
799
   cris_not_implemented_op},
800
 
801
  {"swapwb",  0x6770, 0x9880,             "r",       0, SIZE_NONE,
802
   cris_ver_v8p,
803
   cris_not_implemented_op},
804
 
805
  {"swapnwb", 0xE770, 0x1880,             "r",       0, SIZE_NONE,
806
   cris_ver_v8p,
807
   cris_not_implemented_op},
808
 
809
  {"swapr",   0x1770, 0xe880,             "r",       0, SIZE_NONE,
810
   cris_ver_v8p,
811
   cris_not_implemented_op},
812
 
813
  {"swapnr",  0x9770, 0x6880,             "r",       0, SIZE_NONE,
814
   cris_ver_v8p,
815
   cris_not_implemented_op},
816
 
817
  {"swapwr",  0x5770, 0xa880,             "r",       0, SIZE_NONE,
818
   cris_ver_v8p,
819
   cris_not_implemented_op},
820
 
821
  {"swapnwr", 0xd770, 0x2880,             "r",       0, SIZE_NONE,
822
   cris_ver_v8p,
823
   cris_not_implemented_op},
824
 
825
  {"swapbr",  0x3770, 0xc880,             "r",       0, SIZE_NONE,
826
   cris_ver_v8p,
827
   cris_not_implemented_op},
828
 
829
  {"swapnbr", 0xb770, 0x4880,             "r",       0, SIZE_NONE,
830
   cris_ver_v8p,
831
   cris_not_implemented_op},
832
 
833
  {"swapwbr", 0x7770, 0x8880,             "r",       0, SIZE_NONE,
834
   cris_ver_v8p,
835
   cris_not_implemented_op},
836
 
837
  {"swapnwbr", 0xf770, 0x0880,            "r",       0, SIZE_NONE,
838
   cris_ver_v8p,
839
   cris_not_implemented_op},
840
 
841
  {"test",    0x0640, 0x0980,             "m D",     0, SIZE_NONE,     0,
842
   cris_reg_mode_test_op},
843
 
844
  {"test",    0x0b80, 0xf040,             "m s",     0, SIZE_FIELD,    0,
845
   cris_none_reg_mode_clear_test_op},
846
 
847
  {"test",    0x0b80, 0xf040,             "m S",     0, SIZE_NONE,     0,
848
   cris_none_reg_mode_clear_test_op},
849
 
850
  {"xor",     0x07B0, 0x0840,             "r,R",     0, SIZE_NONE,     0,
851
   cris_xor_op},
852
 
853
  {NULL, 0, 0, NULL, 0, 0, 0, cris_not_implemented_op}
854
};
855
 
856
/* Condition-names, indexed by the CC_* numbers as found in cris.h. */
857
const char * const
858
cris_cc_strings[] =
859
{
860
  "hs",
861
  "lo",
862
  "ne",
863
  "eq",
864
  "vc",
865
  "vs",
866
  "pl",
867
  "mi",
868
  "ls",
869
  "hi",
870
  "ge",
871
  "lt",
872
  "gt",
873
  "le",
874
  "a",
875
  /* In v0, this would be "ext".  */
876
  "wf",
877
};
878
 
879
 
880
/*
881
 * Local variables:
882
 * eval: (c-set-style "gnu")
883
 * indent-tabs-mode: t
884
 * End:
885
 */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.