Commit | Line | Data |
---|---|---|
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 |
31 | const struct cris_spec_reg |
32 | cris_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. */ | |
98 | const 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 | ||
194 | const struct cris_opcode | |
195 | cris_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. */ | |
1170 | const char * const | |
1171 | cris_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). */ | |
1194 | const 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 | */ |