/src/binutils-gdb/opcodes/fr30-opc.c
Line | Count | Source (jump to first uncovered line) |
1 | | /* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */ |
2 | | /* Instruction opcode table for fr30. |
3 | | |
4 | | THIS FILE IS MACHINE GENERATED WITH CGEN. |
5 | | |
6 | | Copyright (C) 1996-2025 Free Software Foundation, Inc. |
7 | | |
8 | | This file is part of the GNU Binutils and/or GDB, the GNU debugger. |
9 | | |
10 | | This file is free software; you can redistribute it and/or modify |
11 | | it under the terms of the GNU General Public License as published by |
12 | | the Free Software Foundation; either version 3, or (at your option) |
13 | | any later version. |
14 | | |
15 | | It is distributed in the hope that it will be useful, but WITHOUT |
16 | | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
17 | | or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public |
18 | | License for more details. |
19 | | |
20 | | You should have received a copy of the GNU General Public License along |
21 | | with this program; if not, write to the Free Software Foundation, Inc., |
22 | | 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. |
23 | | |
24 | | */ |
25 | | |
26 | | #include "sysdep.h" |
27 | | #include "ansidecl.h" |
28 | | #include "bfd.h" |
29 | | #include "symcat.h" |
30 | | #include "fr30-desc.h" |
31 | | #include "fr30-opc.h" |
32 | | #include "libiberty.h" |
33 | | |
34 | | /* The hash functions are recorded here to help keep assembler code out of |
35 | | the disassembler and vice versa. */ |
36 | | |
37 | | static int asm_hash_insn_p (const CGEN_INSN *); |
38 | | static unsigned int asm_hash_insn (const char *); |
39 | | static int dis_hash_insn_p (const CGEN_INSN *); |
40 | | static unsigned int dis_hash_insn (const char *, CGEN_INSN_INT); |
41 | | |
42 | | /* Instruction formats. */ |
43 | | |
44 | | #define F(f) & fr30_cgen_ifld_table[FR30_##f] |
45 | | static const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = { |
46 | | 0, 0, 0x0, { { 0 } } |
47 | | }; |
48 | | |
49 | | static const CGEN_IFMT ifmt_add ATTRIBUTE_UNUSED = { |
50 | | 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_RJ) }, { F (F_RI) }, { 0 } } |
51 | | }; |
52 | | |
53 | | static const CGEN_IFMT ifmt_addi ATTRIBUTE_UNUSED = { |
54 | | 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_U4) }, { F (F_RI) }, { 0 } } |
55 | | }; |
56 | | |
57 | | static const CGEN_IFMT ifmt_add2 ATTRIBUTE_UNUSED = { |
58 | | 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_M4) }, { F (F_RI) }, { 0 } } |
59 | | }; |
60 | | |
61 | | static const CGEN_IFMT ifmt_div0s ATTRIBUTE_UNUSED = { |
62 | | 16, 16, 0xfff0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RI) }, { 0 } } |
63 | | }; |
64 | | |
65 | | static const CGEN_IFMT ifmt_div3 ATTRIBUTE_UNUSED = { |
66 | | 16, 16, 0xffff, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_OP4) }, { 0 } } |
67 | | }; |
68 | | |
69 | | static const CGEN_IFMT ifmt_ldi8 ATTRIBUTE_UNUSED = { |
70 | | 16, 16, 0xf000, { { F (F_OP1) }, { F (F_I8) }, { F (F_RI) }, { 0 } } |
71 | | }; |
72 | | |
73 | | static const CGEN_IFMT ifmt_ldi20 ATTRIBUTE_UNUSED = { |
74 | | 16, 32, 0xff00, { { F (F_OP1) }, { F (F_I20) }, { F (F_OP2) }, { F (F_RI) }, { 0 } } |
75 | | }; |
76 | | |
77 | | static const CGEN_IFMT ifmt_ldi32 ATTRIBUTE_UNUSED = { |
78 | | 16, 48, 0xfff0, { { F (F_OP1) }, { F (F_I32) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RI) }, { 0 } } |
79 | | }; |
80 | | |
81 | | static const CGEN_IFMT ifmt_ldr14 ATTRIBUTE_UNUSED = { |
82 | | 16, 16, 0xf000, { { F (F_OP1) }, { F (F_DISP10) }, { F (F_RI) }, { 0 } } |
83 | | }; |
84 | | |
85 | | static const CGEN_IFMT ifmt_ldr14uh ATTRIBUTE_UNUSED = { |
86 | | 16, 16, 0xf000, { { F (F_OP1) }, { F (F_DISP9) }, { F (F_RI) }, { 0 } } |
87 | | }; |
88 | | |
89 | | static const CGEN_IFMT ifmt_ldr14ub ATTRIBUTE_UNUSED = { |
90 | | 16, 16, 0xf000, { { F (F_OP1) }, { F (F_DISP8) }, { F (F_RI) }, { 0 } } |
91 | | }; |
92 | | |
93 | | static const CGEN_IFMT ifmt_ldr15 ATTRIBUTE_UNUSED = { |
94 | | 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_UDISP6) }, { F (F_RI) }, { 0 } } |
95 | | }; |
96 | | |
97 | | static const CGEN_IFMT ifmt_ldr15dr ATTRIBUTE_UNUSED = { |
98 | | 16, 16, 0xfff0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RS2) }, { 0 } } |
99 | | }; |
100 | | |
101 | | static const CGEN_IFMT ifmt_movdr ATTRIBUTE_UNUSED = { |
102 | | 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_RS1) }, { F (F_RI) }, { 0 } } |
103 | | }; |
104 | | |
105 | | static const CGEN_IFMT ifmt_call ATTRIBUTE_UNUSED = { |
106 | | 16, 16, 0xf800, { { F (F_OP1) }, { F (F_OP5) }, { F (F_REL12) }, { 0 } } |
107 | | }; |
108 | | |
109 | | static const CGEN_IFMT ifmt_int ATTRIBUTE_UNUSED = { |
110 | | 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_U8) }, { 0 } } |
111 | | }; |
112 | | |
113 | | static const CGEN_IFMT ifmt_brad ATTRIBUTE_UNUSED = { |
114 | | 16, 16, 0xff00, { { F (F_OP1) }, { F (F_CC) }, { F (F_REL9) }, { 0 } } |
115 | | }; |
116 | | |
117 | | static const CGEN_IFMT ifmt_dmovr13 ATTRIBUTE_UNUSED = { |
118 | | 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_DIR10) }, { 0 } } |
119 | | }; |
120 | | |
121 | | static const CGEN_IFMT ifmt_dmovr13h ATTRIBUTE_UNUSED = { |
122 | | 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_DIR9) }, { 0 } } |
123 | | }; |
124 | | |
125 | | static const CGEN_IFMT ifmt_dmovr13b ATTRIBUTE_UNUSED = { |
126 | | 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_DIR8) }, { 0 } } |
127 | | }; |
128 | | |
129 | | static const CGEN_IFMT ifmt_copop ATTRIBUTE_UNUSED = { |
130 | | 16, 32, 0xfff0, { { F (F_OP1) }, { F (F_CCC) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_CRJ) }, { F (F_U4C) }, { F (F_CRI) }, { 0 } } |
131 | | }; |
132 | | |
133 | | static const CGEN_IFMT ifmt_copld ATTRIBUTE_UNUSED = { |
134 | | 16, 32, 0xfff0, { { F (F_OP1) }, { F (F_CCC) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RJC) }, { F (F_U4C) }, { F (F_CRI) }, { 0 } } |
135 | | }; |
136 | | |
137 | | static const CGEN_IFMT ifmt_copst ATTRIBUTE_UNUSED = { |
138 | | 16, 32, 0xfff0, { { F (F_OP1) }, { F (F_CCC) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_CRJ) }, { F (F_U4C) }, { F (F_RIC) }, { 0 } } |
139 | | }; |
140 | | |
141 | | static const CGEN_IFMT ifmt_addsp ATTRIBUTE_UNUSED = { |
142 | | 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_S10) }, { 0 } } |
143 | | }; |
144 | | |
145 | | static const CGEN_IFMT ifmt_ldm0 ATTRIBUTE_UNUSED = { |
146 | | 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_LOW_LD) }, { 0 } } |
147 | | }; |
148 | | |
149 | | static const CGEN_IFMT ifmt_ldm1 ATTRIBUTE_UNUSED = { |
150 | | 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_HI_LD) }, { 0 } } |
151 | | }; |
152 | | |
153 | | static const CGEN_IFMT ifmt_stm0 ATTRIBUTE_UNUSED = { |
154 | | 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_LOW_ST) }, { 0 } } |
155 | | }; |
156 | | |
157 | | static const CGEN_IFMT ifmt_stm1 ATTRIBUTE_UNUSED = { |
158 | | 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_REGLIST_HI_ST) }, { 0 } } |
159 | | }; |
160 | | |
161 | | static const CGEN_IFMT ifmt_enter ATTRIBUTE_UNUSED = { |
162 | | 16, 16, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_U10) }, { 0 } } |
163 | | }; |
164 | | |
165 | | #undef F |
166 | | |
167 | | #define A(a) (1 << CGEN_INSN_##a) |
168 | | #define OPERAND(op) FR30_OPERAND_##op |
169 | | #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */ |
170 | | #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field)) |
171 | | |
172 | | /* The instruction table. */ |
173 | | |
174 | | static const CGEN_OPCODE fr30_cgen_insn_opcode_table[MAX_INSNS] = |
175 | | { |
176 | | /* Special null first entry. |
177 | | A `num' value of zero is thus invalid. |
178 | | Also, the special `invalid' insn resides here. */ |
179 | | { { 0, 0, 0, 0 }, {{0}}, 0, {0}}, |
180 | | /* add $Rj,$Ri */ |
181 | | { |
182 | | { 0, 0, 0, 0 }, |
183 | | { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, |
184 | | & ifmt_add, { 0xa600 } |
185 | | }, |
186 | | /* add $u4,$Ri */ |
187 | | { |
188 | | { 0, 0, 0, 0 }, |
189 | | { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } }, |
190 | | & ifmt_addi, { 0xa400 } |
191 | | }, |
192 | | /* add2 $m4,$Ri */ |
193 | | { |
194 | | { 0, 0, 0, 0 }, |
195 | | { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } }, |
196 | | & ifmt_add2, { 0xa500 } |
197 | | }, |
198 | | /* addc $Rj,$Ri */ |
199 | | { |
200 | | { 0, 0, 0, 0 }, |
201 | | { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, |
202 | | & ifmt_add, { 0xa700 } |
203 | | }, |
204 | | /* addn $Rj,$Ri */ |
205 | | { |
206 | | { 0, 0, 0, 0 }, |
207 | | { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, |
208 | | & ifmt_add, { 0xa200 } |
209 | | }, |
210 | | /* addn $u4,$Ri */ |
211 | | { |
212 | | { 0, 0, 0, 0 }, |
213 | | { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } }, |
214 | | & ifmt_addi, { 0xa000 } |
215 | | }, |
216 | | /* addn2 $m4,$Ri */ |
217 | | { |
218 | | { 0, 0, 0, 0 }, |
219 | | { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } }, |
220 | | & ifmt_add2, { 0xa100 } |
221 | | }, |
222 | | /* sub $Rj,$Ri */ |
223 | | { |
224 | | { 0, 0, 0, 0 }, |
225 | | { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, |
226 | | & ifmt_add, { 0xac00 } |
227 | | }, |
228 | | /* subc $Rj,$Ri */ |
229 | | { |
230 | | { 0, 0, 0, 0 }, |
231 | | { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, |
232 | | & ifmt_add, { 0xad00 } |
233 | | }, |
234 | | /* subn $Rj,$Ri */ |
235 | | { |
236 | | { 0, 0, 0, 0 }, |
237 | | { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, |
238 | | & ifmt_add, { 0xae00 } |
239 | | }, |
240 | | /* cmp $Rj,$Ri */ |
241 | | { |
242 | | { 0, 0, 0, 0 }, |
243 | | { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, |
244 | | & ifmt_add, { 0xaa00 } |
245 | | }, |
246 | | /* cmp $u4,$Ri */ |
247 | | { |
248 | | { 0, 0, 0, 0 }, |
249 | | { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } }, |
250 | | & ifmt_addi, { 0xa800 } |
251 | | }, |
252 | | /* cmp2 $m4,$Ri */ |
253 | | { |
254 | | { 0, 0, 0, 0 }, |
255 | | { { MNEM, ' ', OP (M4), ',', OP (RI), 0 } }, |
256 | | & ifmt_add2, { 0xa900 } |
257 | | }, |
258 | | /* and $Rj,$Ri */ |
259 | | { |
260 | | { 0, 0, 0, 0 }, |
261 | | { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, |
262 | | & ifmt_add, { 0x8200 } |
263 | | }, |
264 | | /* or $Rj,$Ri */ |
265 | | { |
266 | | { 0, 0, 0, 0 }, |
267 | | { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, |
268 | | & ifmt_add, { 0x9200 } |
269 | | }, |
270 | | /* eor $Rj,$Ri */ |
271 | | { |
272 | | { 0, 0, 0, 0 }, |
273 | | { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, |
274 | | & ifmt_add, { 0x9a00 } |
275 | | }, |
276 | | /* and $Rj,@$Ri */ |
277 | | { |
278 | | { 0, 0, 0, 0 }, |
279 | | { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } }, |
280 | | & ifmt_add, { 0x8400 } |
281 | | }, |
282 | | /* andh $Rj,@$Ri */ |
283 | | { |
284 | | { 0, 0, 0, 0 }, |
285 | | { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } }, |
286 | | & ifmt_add, { 0x8500 } |
287 | | }, |
288 | | /* andb $Rj,@$Ri */ |
289 | | { |
290 | | { 0, 0, 0, 0 }, |
291 | | { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } }, |
292 | | & ifmt_add, { 0x8600 } |
293 | | }, |
294 | | /* or $Rj,@$Ri */ |
295 | | { |
296 | | { 0, 0, 0, 0 }, |
297 | | { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } }, |
298 | | & ifmt_add, { 0x9400 } |
299 | | }, |
300 | | /* orh $Rj,@$Ri */ |
301 | | { |
302 | | { 0, 0, 0, 0 }, |
303 | | { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } }, |
304 | | & ifmt_add, { 0x9500 } |
305 | | }, |
306 | | /* orb $Rj,@$Ri */ |
307 | | { |
308 | | { 0, 0, 0, 0 }, |
309 | | { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } }, |
310 | | & ifmt_add, { 0x9600 } |
311 | | }, |
312 | | /* eor $Rj,@$Ri */ |
313 | | { |
314 | | { 0, 0, 0, 0 }, |
315 | | { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } }, |
316 | | & ifmt_add, { 0x9c00 } |
317 | | }, |
318 | | /* eorh $Rj,@$Ri */ |
319 | | { |
320 | | { 0, 0, 0, 0 }, |
321 | | { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } }, |
322 | | & ifmt_add, { 0x9d00 } |
323 | | }, |
324 | | /* eorb $Rj,@$Ri */ |
325 | | { |
326 | | { 0, 0, 0, 0 }, |
327 | | { { MNEM, ' ', OP (RJ), ',', '@', OP (RI), 0 } }, |
328 | | & ifmt_add, { 0x9e00 } |
329 | | }, |
330 | | /* bandl $u4,@$Ri */ |
331 | | { |
332 | | { 0, 0, 0, 0 }, |
333 | | { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } }, |
334 | | & ifmt_addi, { 0x8000 } |
335 | | }, |
336 | | /* borl $u4,@$Ri */ |
337 | | { |
338 | | { 0, 0, 0, 0 }, |
339 | | { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } }, |
340 | | & ifmt_addi, { 0x9000 } |
341 | | }, |
342 | | /* beorl $u4,@$Ri */ |
343 | | { |
344 | | { 0, 0, 0, 0 }, |
345 | | { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } }, |
346 | | & ifmt_addi, { 0x9800 } |
347 | | }, |
348 | | /* bandh $u4,@$Ri */ |
349 | | { |
350 | | { 0, 0, 0, 0 }, |
351 | | { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } }, |
352 | | & ifmt_addi, { 0x8100 } |
353 | | }, |
354 | | /* borh $u4,@$Ri */ |
355 | | { |
356 | | { 0, 0, 0, 0 }, |
357 | | { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } }, |
358 | | & ifmt_addi, { 0x9100 } |
359 | | }, |
360 | | /* beorh $u4,@$Ri */ |
361 | | { |
362 | | { 0, 0, 0, 0 }, |
363 | | { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } }, |
364 | | & ifmt_addi, { 0x9900 } |
365 | | }, |
366 | | /* btstl $u4,@$Ri */ |
367 | | { |
368 | | { 0, 0, 0, 0 }, |
369 | | { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } }, |
370 | | & ifmt_addi, { 0x8800 } |
371 | | }, |
372 | | /* btsth $u4,@$Ri */ |
373 | | { |
374 | | { 0, 0, 0, 0 }, |
375 | | { { MNEM, ' ', OP (U4), ',', '@', OP (RI), 0 } }, |
376 | | & ifmt_addi, { 0x8900 } |
377 | | }, |
378 | | /* mul $Rj,$Ri */ |
379 | | { |
380 | | { 0, 0, 0, 0 }, |
381 | | { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, |
382 | | & ifmt_add, { 0xaf00 } |
383 | | }, |
384 | | /* mulu $Rj,$Ri */ |
385 | | { |
386 | | { 0, 0, 0, 0 }, |
387 | | { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, |
388 | | & ifmt_add, { 0xab00 } |
389 | | }, |
390 | | /* mulh $Rj,$Ri */ |
391 | | { |
392 | | { 0, 0, 0, 0 }, |
393 | | { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, |
394 | | & ifmt_add, { 0xbf00 } |
395 | | }, |
396 | | /* muluh $Rj,$Ri */ |
397 | | { |
398 | | { 0, 0, 0, 0 }, |
399 | | { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, |
400 | | & ifmt_add, { 0xbb00 } |
401 | | }, |
402 | | /* div0s $Ri */ |
403 | | { |
404 | | { 0, 0, 0, 0 }, |
405 | | { { MNEM, ' ', OP (RI), 0 } }, |
406 | | & ifmt_div0s, { 0x9740 } |
407 | | }, |
408 | | /* div0u $Ri */ |
409 | | { |
410 | | { 0, 0, 0, 0 }, |
411 | | { { MNEM, ' ', OP (RI), 0 } }, |
412 | | & ifmt_div0s, { 0x9750 } |
413 | | }, |
414 | | /* div1 $Ri */ |
415 | | { |
416 | | { 0, 0, 0, 0 }, |
417 | | { { MNEM, ' ', OP (RI), 0 } }, |
418 | | & ifmt_div0s, { 0x9760 } |
419 | | }, |
420 | | /* div2 $Ri */ |
421 | | { |
422 | | { 0, 0, 0, 0 }, |
423 | | { { MNEM, ' ', OP (RI), 0 } }, |
424 | | & ifmt_div0s, { 0x9770 } |
425 | | }, |
426 | | /* div3 */ |
427 | | { |
428 | | { 0, 0, 0, 0 }, |
429 | | { { MNEM, 0 } }, |
430 | | & ifmt_div3, { 0x9f60 } |
431 | | }, |
432 | | /* div4s */ |
433 | | { |
434 | | { 0, 0, 0, 0 }, |
435 | | { { MNEM, 0 } }, |
436 | | & ifmt_div3, { 0x9f70 } |
437 | | }, |
438 | | /* lsl $Rj,$Ri */ |
439 | | { |
440 | | { 0, 0, 0, 0 }, |
441 | | { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, |
442 | | & ifmt_add, { 0xb600 } |
443 | | }, |
444 | | /* lsl $u4,$Ri */ |
445 | | { |
446 | | { 0, 0, 0, 0 }, |
447 | | { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } }, |
448 | | & ifmt_addi, { 0xb400 } |
449 | | }, |
450 | | /* lsl2 $u4,$Ri */ |
451 | | { |
452 | | { 0, 0, 0, 0 }, |
453 | | { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } }, |
454 | | & ifmt_addi, { 0xb500 } |
455 | | }, |
456 | | /* lsr $Rj,$Ri */ |
457 | | { |
458 | | { 0, 0, 0, 0 }, |
459 | | { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, |
460 | | & ifmt_add, { 0xb200 } |
461 | | }, |
462 | | /* lsr $u4,$Ri */ |
463 | | { |
464 | | { 0, 0, 0, 0 }, |
465 | | { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } }, |
466 | | & ifmt_addi, { 0xb000 } |
467 | | }, |
468 | | /* lsr2 $u4,$Ri */ |
469 | | { |
470 | | { 0, 0, 0, 0 }, |
471 | | { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } }, |
472 | | & ifmt_addi, { 0xb100 } |
473 | | }, |
474 | | /* asr $Rj,$Ri */ |
475 | | { |
476 | | { 0, 0, 0, 0 }, |
477 | | { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, |
478 | | & ifmt_add, { 0xba00 } |
479 | | }, |
480 | | /* asr $u4,$Ri */ |
481 | | { |
482 | | { 0, 0, 0, 0 }, |
483 | | { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } }, |
484 | | & ifmt_addi, { 0xb800 } |
485 | | }, |
486 | | /* asr2 $u4,$Ri */ |
487 | | { |
488 | | { 0, 0, 0, 0 }, |
489 | | { { MNEM, ' ', OP (U4), ',', OP (RI), 0 } }, |
490 | | & ifmt_addi, { 0xb900 } |
491 | | }, |
492 | | /* ldi:8 $i8,$Ri */ |
493 | | { |
494 | | { 0, 0, 0, 0 }, |
495 | | { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } }, |
496 | | & ifmt_ldi8, { 0xc000 } |
497 | | }, |
498 | | /* ldi:20 $i20,$Ri */ |
499 | | { |
500 | | { 0, 0, 0, 0 }, |
501 | | { { MNEM, ' ', OP (I20), ',', OP (RI), 0 } }, |
502 | | & ifmt_ldi20, { 0x9b00 } |
503 | | }, |
504 | | /* ldi:32 $i32,$Ri */ |
505 | | { |
506 | | { 0, 0, 0, 0 }, |
507 | | { { MNEM, ' ', OP (I32), ',', OP (RI), 0 } }, |
508 | | & ifmt_ldi32, { 0x9f80 } |
509 | | }, |
510 | | /* ld @$Rj,$Ri */ |
511 | | { |
512 | | { 0, 0, 0, 0 }, |
513 | | { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } }, |
514 | | & ifmt_add, { 0x400 } |
515 | | }, |
516 | | /* lduh @$Rj,$Ri */ |
517 | | { |
518 | | { 0, 0, 0, 0 }, |
519 | | { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } }, |
520 | | & ifmt_add, { 0x500 } |
521 | | }, |
522 | | /* ldub @$Rj,$Ri */ |
523 | | { |
524 | | { 0, 0, 0, 0 }, |
525 | | { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } }, |
526 | | & ifmt_add, { 0x600 } |
527 | | }, |
528 | | /* ld @($R13,$Rj),$Ri */ |
529 | | { |
530 | | { 0, 0, 0, 0 }, |
531 | | { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } }, |
532 | | & ifmt_add, { 0x0 } |
533 | | }, |
534 | | /* lduh @($R13,$Rj),$Ri */ |
535 | | { |
536 | | { 0, 0, 0, 0 }, |
537 | | { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } }, |
538 | | & ifmt_add, { 0x100 } |
539 | | }, |
540 | | /* ldub @($R13,$Rj),$Ri */ |
541 | | { |
542 | | { 0, 0, 0, 0 }, |
543 | | { { MNEM, ' ', '@', '(', OP (R13), ',', OP (RJ), ')', ',', OP (RI), 0 } }, |
544 | | & ifmt_add, { 0x200 } |
545 | | }, |
546 | | /* ld @($R14,$disp10),$Ri */ |
547 | | { |
548 | | { 0, 0, 0, 0 }, |
549 | | { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP10), ')', ',', OP (RI), 0 } }, |
550 | | & ifmt_ldr14, { 0x2000 } |
551 | | }, |
552 | | /* lduh @($R14,$disp9),$Ri */ |
553 | | { |
554 | | { 0, 0, 0, 0 }, |
555 | | { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP9), ')', ',', OP (RI), 0 } }, |
556 | | & ifmt_ldr14uh, { 0x4000 } |
557 | | }, |
558 | | /* ldub @($R14,$disp8),$Ri */ |
559 | | { |
560 | | { 0, 0, 0, 0 }, |
561 | | { { MNEM, ' ', '@', '(', OP (R14), ',', OP (DISP8), ')', ',', OP (RI), 0 } }, |
562 | | & ifmt_ldr14ub, { 0x6000 } |
563 | | }, |
564 | | /* ld @($R15,$udisp6),$Ri */ |
565 | | { |
566 | | { 0, 0, 0, 0 }, |
567 | | { { MNEM, ' ', '@', '(', OP (R15), ',', OP (UDISP6), ')', ',', OP (RI), 0 } }, |
568 | | & ifmt_ldr15, { 0x300 } |
569 | | }, |
570 | | /* ld @$R15+,$Ri */ |
571 | | { |
572 | | { 0, 0, 0, 0 }, |
573 | | { { MNEM, ' ', '@', OP (R15), '+', ',', OP (RI), 0 } }, |
574 | | & ifmt_div0s, { 0x700 } |
575 | | }, |
576 | | /* ld @$R15+,$Rs2 */ |
577 | | { |
578 | | { 0, 0, 0, 0 }, |
579 | | { { MNEM, ' ', '@', OP (R15), '+', ',', OP (RS2), 0 } }, |
580 | | & ifmt_ldr15dr, { 0x780 } |
581 | | }, |
582 | | /* ld @$R15+,$ps */ |
583 | | { |
584 | | { 0, 0, 0, 0 }, |
585 | | { { MNEM, ' ', '@', OP (R15), '+', ',', OP (PS), 0 } }, |
586 | | & ifmt_div3, { 0x790 } |
587 | | }, |
588 | | /* st $Ri,@$Rj */ |
589 | | { |
590 | | { 0, 0, 0, 0 }, |
591 | | { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } }, |
592 | | & ifmt_add, { 0x1400 } |
593 | | }, |
594 | | /* sth $Ri,@$Rj */ |
595 | | { |
596 | | { 0, 0, 0, 0 }, |
597 | | { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } }, |
598 | | & ifmt_add, { 0x1500 } |
599 | | }, |
600 | | /* stb $Ri,@$Rj */ |
601 | | { |
602 | | { 0, 0, 0, 0 }, |
603 | | { { MNEM, ' ', OP (RI), ',', '@', OP (RJ), 0 } }, |
604 | | & ifmt_add, { 0x1600 } |
605 | | }, |
606 | | /* st $Ri,@($R13,$Rj) */ |
607 | | { |
608 | | { 0, 0, 0, 0 }, |
609 | | { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } }, |
610 | | & ifmt_add, { 0x1000 } |
611 | | }, |
612 | | /* sth $Ri,@($R13,$Rj) */ |
613 | | { |
614 | | { 0, 0, 0, 0 }, |
615 | | { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } }, |
616 | | & ifmt_add, { 0x1100 } |
617 | | }, |
618 | | /* stb $Ri,@($R13,$Rj) */ |
619 | | { |
620 | | { 0, 0, 0, 0 }, |
621 | | { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R13), ',', OP (RJ), ')', 0 } }, |
622 | | & ifmt_add, { 0x1200 } |
623 | | }, |
624 | | /* st $Ri,@($R14,$disp10) */ |
625 | | { |
626 | | { 0, 0, 0, 0 }, |
627 | | { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP10), ')', 0 } }, |
628 | | & ifmt_ldr14, { 0x3000 } |
629 | | }, |
630 | | /* sth $Ri,@($R14,$disp9) */ |
631 | | { |
632 | | { 0, 0, 0, 0 }, |
633 | | { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP9), ')', 0 } }, |
634 | | & ifmt_ldr14uh, { 0x5000 } |
635 | | }, |
636 | | /* stb $Ri,@($R14,$disp8) */ |
637 | | { |
638 | | { 0, 0, 0, 0 }, |
639 | | { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R14), ',', OP (DISP8), ')', 0 } }, |
640 | | & ifmt_ldr14ub, { 0x7000 } |
641 | | }, |
642 | | /* st $Ri,@($R15,$udisp6) */ |
643 | | { |
644 | | { 0, 0, 0, 0 }, |
645 | | { { MNEM, ' ', OP (RI), ',', '@', '(', OP (R15), ',', OP (UDISP6), ')', 0 } }, |
646 | | & ifmt_ldr15, { 0x1300 } |
647 | | }, |
648 | | /* st $Ri,@-$R15 */ |
649 | | { |
650 | | { 0, 0, 0, 0 }, |
651 | | { { MNEM, ' ', OP (RI), ',', '@', '-', OP (R15), 0 } }, |
652 | | & ifmt_div0s, { 0x1700 } |
653 | | }, |
654 | | /* st $Rs2,@-$R15 */ |
655 | | { |
656 | | { 0, 0, 0, 0 }, |
657 | | { { MNEM, ' ', OP (RS2), ',', '@', '-', OP (R15), 0 } }, |
658 | | & ifmt_ldr15dr, { 0x1780 } |
659 | | }, |
660 | | /* st $ps,@-$R15 */ |
661 | | { |
662 | | { 0, 0, 0, 0 }, |
663 | | { { MNEM, ' ', OP (PS), ',', '@', '-', OP (R15), 0 } }, |
664 | | & ifmt_div3, { 0x1790 } |
665 | | }, |
666 | | /* mov $Rj,$Ri */ |
667 | | { |
668 | | { 0, 0, 0, 0 }, |
669 | | { { MNEM, ' ', OP (RJ), ',', OP (RI), 0 } }, |
670 | | & ifmt_add, { 0x8b00 } |
671 | | }, |
672 | | /* mov $Rs1,$Ri */ |
673 | | { |
674 | | { 0, 0, 0, 0 }, |
675 | | { { MNEM, ' ', OP (RS1), ',', OP (RI), 0 } }, |
676 | | & ifmt_movdr, { 0xb700 } |
677 | | }, |
678 | | /* mov $ps,$Ri */ |
679 | | { |
680 | | { 0, 0, 0, 0 }, |
681 | | { { MNEM, ' ', OP (PS), ',', OP (RI), 0 } }, |
682 | | & ifmt_div0s, { 0x1710 } |
683 | | }, |
684 | | /* mov $Ri,$Rs1 */ |
685 | | { |
686 | | { 0, 0, 0, 0 }, |
687 | | { { MNEM, ' ', OP (RI), ',', OP (RS1), 0 } }, |
688 | | & ifmt_movdr, { 0xb300 } |
689 | | }, |
690 | | /* mov $Ri,$ps */ |
691 | | { |
692 | | { 0, 0, 0, 0 }, |
693 | | { { MNEM, ' ', OP (RI), ',', OP (PS), 0 } }, |
694 | | & ifmt_div0s, { 0x710 } |
695 | | }, |
696 | | /* jmp @$Ri */ |
697 | | { |
698 | | { 0, 0, 0, 0 }, |
699 | | { { MNEM, ' ', '@', OP (RI), 0 } }, |
700 | | & ifmt_div0s, { 0x9700 } |
701 | | }, |
702 | | /* jmp:d @$Ri */ |
703 | | { |
704 | | { 0, 0, 0, 0 }, |
705 | | { { MNEM, ' ', '@', OP (RI), 0 } }, |
706 | | & ifmt_div0s, { 0x9f00 } |
707 | | }, |
708 | | /* call @$Ri */ |
709 | | { |
710 | | { 0, 0, 0, 0 }, |
711 | | { { MNEM, ' ', '@', OP (RI), 0 } }, |
712 | | & ifmt_div0s, { 0x9710 } |
713 | | }, |
714 | | /* call:d @$Ri */ |
715 | | { |
716 | | { 0, 0, 0, 0 }, |
717 | | { { MNEM, ' ', '@', OP (RI), 0 } }, |
718 | | & ifmt_div0s, { 0x9f10 } |
719 | | }, |
720 | | /* call $label12 */ |
721 | | { |
722 | | { 0, 0, 0, 0 }, |
723 | | { { MNEM, ' ', OP (LABEL12), 0 } }, |
724 | | & ifmt_call, { 0xd000 } |
725 | | }, |
726 | | /* call:d $label12 */ |
727 | | { |
728 | | { 0, 0, 0, 0 }, |
729 | | { { MNEM, ' ', OP (LABEL12), 0 } }, |
730 | | & ifmt_call, { 0xd800 } |
731 | | }, |
732 | | /* ret */ |
733 | | { |
734 | | { 0, 0, 0, 0 }, |
735 | | { { MNEM, 0 } }, |
736 | | & ifmt_div3, { 0x9720 } |
737 | | }, |
738 | | /* ret:d */ |
739 | | { |
740 | | { 0, 0, 0, 0 }, |
741 | | { { MNEM, 0 } }, |
742 | | & ifmt_div3, { 0x9f20 } |
743 | | }, |
744 | | /* int $u8 */ |
745 | | { |
746 | | { 0, 0, 0, 0 }, |
747 | | { { MNEM, ' ', OP (U8), 0 } }, |
748 | | & ifmt_int, { 0x1f00 } |
749 | | }, |
750 | | /* inte */ |
751 | | { |
752 | | { 0, 0, 0, 0 }, |
753 | | { { MNEM, 0 } }, |
754 | | & ifmt_div3, { 0x9f30 } |
755 | | }, |
756 | | /* reti */ |
757 | | { |
758 | | { 0, 0, 0, 0 }, |
759 | | { { MNEM, 0 } }, |
760 | | & ifmt_div3, { 0x9730 } |
761 | | }, |
762 | | /* bra:d $label9 */ |
763 | | { |
764 | | { 0, 0, 0, 0 }, |
765 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
766 | | & ifmt_brad, { 0xf000 } |
767 | | }, |
768 | | /* bra $label9 */ |
769 | | { |
770 | | { 0, 0, 0, 0 }, |
771 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
772 | | & ifmt_brad, { 0xe000 } |
773 | | }, |
774 | | /* bno:d $label9 */ |
775 | | { |
776 | | { 0, 0, 0, 0 }, |
777 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
778 | | & ifmt_brad, { 0xf100 } |
779 | | }, |
780 | | /* bno $label9 */ |
781 | | { |
782 | | { 0, 0, 0, 0 }, |
783 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
784 | | & ifmt_brad, { 0xe100 } |
785 | | }, |
786 | | /* beq:d $label9 */ |
787 | | { |
788 | | { 0, 0, 0, 0 }, |
789 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
790 | | & ifmt_brad, { 0xf200 } |
791 | | }, |
792 | | /* beq $label9 */ |
793 | | { |
794 | | { 0, 0, 0, 0 }, |
795 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
796 | | & ifmt_brad, { 0xe200 } |
797 | | }, |
798 | | /* bne:d $label9 */ |
799 | | { |
800 | | { 0, 0, 0, 0 }, |
801 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
802 | | & ifmt_brad, { 0xf300 } |
803 | | }, |
804 | | /* bne $label9 */ |
805 | | { |
806 | | { 0, 0, 0, 0 }, |
807 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
808 | | & ifmt_brad, { 0xe300 } |
809 | | }, |
810 | | /* bc:d $label9 */ |
811 | | { |
812 | | { 0, 0, 0, 0 }, |
813 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
814 | | & ifmt_brad, { 0xf400 } |
815 | | }, |
816 | | /* bc $label9 */ |
817 | | { |
818 | | { 0, 0, 0, 0 }, |
819 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
820 | | & ifmt_brad, { 0xe400 } |
821 | | }, |
822 | | /* bnc:d $label9 */ |
823 | | { |
824 | | { 0, 0, 0, 0 }, |
825 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
826 | | & ifmt_brad, { 0xf500 } |
827 | | }, |
828 | | /* bnc $label9 */ |
829 | | { |
830 | | { 0, 0, 0, 0 }, |
831 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
832 | | & ifmt_brad, { 0xe500 } |
833 | | }, |
834 | | /* bn:d $label9 */ |
835 | | { |
836 | | { 0, 0, 0, 0 }, |
837 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
838 | | & ifmt_brad, { 0xf600 } |
839 | | }, |
840 | | /* bn $label9 */ |
841 | | { |
842 | | { 0, 0, 0, 0 }, |
843 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
844 | | & ifmt_brad, { 0xe600 } |
845 | | }, |
846 | | /* bp:d $label9 */ |
847 | | { |
848 | | { 0, 0, 0, 0 }, |
849 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
850 | | & ifmt_brad, { 0xf700 } |
851 | | }, |
852 | | /* bp $label9 */ |
853 | | { |
854 | | { 0, 0, 0, 0 }, |
855 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
856 | | & ifmt_brad, { 0xe700 } |
857 | | }, |
858 | | /* bv:d $label9 */ |
859 | | { |
860 | | { 0, 0, 0, 0 }, |
861 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
862 | | & ifmt_brad, { 0xf800 } |
863 | | }, |
864 | | /* bv $label9 */ |
865 | | { |
866 | | { 0, 0, 0, 0 }, |
867 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
868 | | & ifmt_brad, { 0xe800 } |
869 | | }, |
870 | | /* bnv:d $label9 */ |
871 | | { |
872 | | { 0, 0, 0, 0 }, |
873 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
874 | | & ifmt_brad, { 0xf900 } |
875 | | }, |
876 | | /* bnv $label9 */ |
877 | | { |
878 | | { 0, 0, 0, 0 }, |
879 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
880 | | & ifmt_brad, { 0xe900 } |
881 | | }, |
882 | | /* blt:d $label9 */ |
883 | | { |
884 | | { 0, 0, 0, 0 }, |
885 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
886 | | & ifmt_brad, { 0xfa00 } |
887 | | }, |
888 | | /* blt $label9 */ |
889 | | { |
890 | | { 0, 0, 0, 0 }, |
891 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
892 | | & ifmt_brad, { 0xea00 } |
893 | | }, |
894 | | /* bge:d $label9 */ |
895 | | { |
896 | | { 0, 0, 0, 0 }, |
897 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
898 | | & ifmt_brad, { 0xfb00 } |
899 | | }, |
900 | | /* bge $label9 */ |
901 | | { |
902 | | { 0, 0, 0, 0 }, |
903 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
904 | | & ifmt_brad, { 0xeb00 } |
905 | | }, |
906 | | /* ble:d $label9 */ |
907 | | { |
908 | | { 0, 0, 0, 0 }, |
909 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
910 | | & ifmt_brad, { 0xfc00 } |
911 | | }, |
912 | | /* ble $label9 */ |
913 | | { |
914 | | { 0, 0, 0, 0 }, |
915 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
916 | | & ifmt_brad, { 0xec00 } |
917 | | }, |
918 | | /* bgt:d $label9 */ |
919 | | { |
920 | | { 0, 0, 0, 0 }, |
921 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
922 | | & ifmt_brad, { 0xfd00 } |
923 | | }, |
924 | | /* bgt $label9 */ |
925 | | { |
926 | | { 0, 0, 0, 0 }, |
927 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
928 | | & ifmt_brad, { 0xed00 } |
929 | | }, |
930 | | /* bls:d $label9 */ |
931 | | { |
932 | | { 0, 0, 0, 0 }, |
933 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
934 | | & ifmt_brad, { 0xfe00 } |
935 | | }, |
936 | | /* bls $label9 */ |
937 | | { |
938 | | { 0, 0, 0, 0 }, |
939 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
940 | | & ifmt_brad, { 0xee00 } |
941 | | }, |
942 | | /* bhi:d $label9 */ |
943 | | { |
944 | | { 0, 0, 0, 0 }, |
945 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
946 | | & ifmt_brad, { 0xff00 } |
947 | | }, |
948 | | /* bhi $label9 */ |
949 | | { |
950 | | { 0, 0, 0, 0 }, |
951 | | { { MNEM, ' ', OP (LABEL9), 0 } }, |
952 | | & ifmt_brad, { 0xef00 } |
953 | | }, |
954 | | /* dmov $R13,@$dir10 */ |
955 | | { |
956 | | { 0, 0, 0, 0 }, |
957 | | { { MNEM, ' ', OP (R13), ',', '@', OP (DIR10), 0 } }, |
958 | | & ifmt_dmovr13, { 0x1800 } |
959 | | }, |
960 | | /* dmovh $R13,@$dir9 */ |
961 | | { |
962 | | { 0, 0, 0, 0 }, |
963 | | { { MNEM, ' ', OP (R13), ',', '@', OP (DIR9), 0 } }, |
964 | | & ifmt_dmovr13h, { 0x1900 } |
965 | | }, |
966 | | /* dmovb $R13,@$dir8 */ |
967 | | { |
968 | | { 0, 0, 0, 0 }, |
969 | | { { MNEM, ' ', OP (R13), ',', '@', OP (DIR8), 0 } }, |
970 | | & ifmt_dmovr13b, { 0x1a00 } |
971 | | }, |
972 | | /* dmov @$R13+,@$dir10 */ |
973 | | { |
974 | | { 0, 0, 0, 0 }, |
975 | | { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR10), 0 } }, |
976 | | & ifmt_dmovr13, { 0x1c00 } |
977 | | }, |
978 | | /* dmovh @$R13+,@$dir9 */ |
979 | | { |
980 | | { 0, 0, 0, 0 }, |
981 | | { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR9), 0 } }, |
982 | | & ifmt_dmovr13h, { 0x1d00 } |
983 | | }, |
984 | | /* dmovb @$R13+,@$dir8 */ |
985 | | { |
986 | | { 0, 0, 0, 0 }, |
987 | | { { MNEM, ' ', '@', OP (R13), '+', ',', '@', OP (DIR8), 0 } }, |
988 | | & ifmt_dmovr13b, { 0x1e00 } |
989 | | }, |
990 | | /* dmov @$R15+,@$dir10 */ |
991 | | { |
992 | | { 0, 0, 0, 0 }, |
993 | | { { MNEM, ' ', '@', OP (R15), '+', ',', '@', OP (DIR10), 0 } }, |
994 | | & ifmt_dmovr13, { 0x1b00 } |
995 | | }, |
996 | | /* dmov @$dir10,$R13 */ |
997 | | { |
998 | | { 0, 0, 0, 0 }, |
999 | | { { MNEM, ' ', '@', OP (DIR10), ',', OP (R13), 0 } }, |
1000 | | & ifmt_dmovr13, { 0x800 } |
1001 | | }, |
1002 | | /* dmovh @$dir9,$R13 */ |
1003 | | { |
1004 | | { 0, 0, 0, 0 }, |
1005 | | { { MNEM, ' ', '@', OP (DIR9), ',', OP (R13), 0 } }, |
1006 | | & ifmt_dmovr13h, { 0x900 } |
1007 | | }, |
1008 | | /* dmovb @$dir8,$R13 */ |
1009 | | { |
1010 | | { 0, 0, 0, 0 }, |
1011 | | { { MNEM, ' ', '@', OP (DIR8), ',', OP (R13), 0 } }, |
1012 | | & ifmt_dmovr13b, { 0xa00 } |
1013 | | }, |
1014 | | /* dmov @$dir10,@$R13+ */ |
1015 | | { |
1016 | | { 0, 0, 0, 0 }, |
1017 | | { { MNEM, ' ', '@', OP (DIR10), ',', '@', OP (R13), '+', 0 } }, |
1018 | | & ifmt_dmovr13, { 0xc00 } |
1019 | | }, |
1020 | | /* dmovh @$dir9,@$R13+ */ |
1021 | | { |
1022 | | { 0, 0, 0, 0 }, |
1023 | | { { MNEM, ' ', '@', OP (DIR9), ',', '@', OP (R13), '+', 0 } }, |
1024 | | & ifmt_dmovr13h, { 0xd00 } |
1025 | | }, |
1026 | | /* dmovb @$dir8,@$R13+ */ |
1027 | | { |
1028 | | { 0, 0, 0, 0 }, |
1029 | | { { MNEM, ' ', '@', OP (DIR8), ',', '@', OP (R13), '+', 0 } }, |
1030 | | & ifmt_dmovr13b, { 0xe00 } |
1031 | | }, |
1032 | | /* dmov @$dir10,@-$R15 */ |
1033 | | { |
1034 | | { 0, 0, 0, 0 }, |
1035 | | { { MNEM, ' ', '@', OP (DIR10), ',', '@', '-', OP (R15), 0 } }, |
1036 | | & ifmt_dmovr13, { 0xb00 } |
1037 | | }, |
1038 | | /* ldres @$Ri+,$u4 */ |
1039 | | { |
1040 | | { 0, 0, 0, 0 }, |
1041 | | { { MNEM, ' ', '@', OP (RI), '+', ',', OP (U4), 0 } }, |
1042 | | & ifmt_addi, { 0xbc00 } |
1043 | | }, |
1044 | | /* stres $u4,@$Ri+ */ |
1045 | | { |
1046 | | { 0, 0, 0, 0 }, |
1047 | | { { MNEM, ' ', OP (U4), ',', '@', OP (RI), '+', 0 } }, |
1048 | | & ifmt_addi, { 0xbd00 } |
1049 | | }, |
1050 | | /* copop $u4c,$ccc,$CRj,$CRi */ |
1051 | | { |
1052 | | { 0, 0, 0, 0 }, |
1053 | | { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (CRI), 0 } }, |
1054 | | & ifmt_copop, { 0x9fc0 } |
1055 | | }, |
1056 | | /* copld $u4c,$ccc,$Rjc,$CRi */ |
1057 | | { |
1058 | | { 0, 0, 0, 0 }, |
1059 | | { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (RJC), ',', OP (CRI), 0 } }, |
1060 | | & ifmt_copld, { 0x9fd0 } |
1061 | | }, |
1062 | | /* copst $u4c,$ccc,$CRj,$Ric */ |
1063 | | { |
1064 | | { 0, 0, 0, 0 }, |
1065 | | { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (RIC), 0 } }, |
1066 | | & ifmt_copst, { 0x9fe0 } |
1067 | | }, |
1068 | | /* copsv $u4c,$ccc,$CRj,$Ric */ |
1069 | | { |
1070 | | { 0, 0, 0, 0 }, |
1071 | | { { MNEM, ' ', OP (U4C), ',', OP (CCC), ',', OP (CRJ), ',', OP (RIC), 0 } }, |
1072 | | & ifmt_copst, { 0x9ff0 } |
1073 | | }, |
1074 | | /* nop */ |
1075 | | { |
1076 | | { 0, 0, 0, 0 }, |
1077 | | { { MNEM, 0 } }, |
1078 | | & ifmt_div3, { 0x9fa0 } |
1079 | | }, |
1080 | | /* andccr $u8 */ |
1081 | | { |
1082 | | { 0, 0, 0, 0 }, |
1083 | | { { MNEM, ' ', OP (U8), 0 } }, |
1084 | | & ifmt_int, { 0x8300 } |
1085 | | }, |
1086 | | /* orccr $u8 */ |
1087 | | { |
1088 | | { 0, 0, 0, 0 }, |
1089 | | { { MNEM, ' ', OP (U8), 0 } }, |
1090 | | & ifmt_int, { 0x9300 } |
1091 | | }, |
1092 | | /* stilm $u8 */ |
1093 | | { |
1094 | | { 0, 0, 0, 0 }, |
1095 | | { { MNEM, ' ', OP (U8), 0 } }, |
1096 | | & ifmt_int, { 0x8700 } |
1097 | | }, |
1098 | | /* addsp $s10 */ |
1099 | | { |
1100 | | { 0, 0, 0, 0 }, |
1101 | | { { MNEM, ' ', OP (S10), 0 } }, |
1102 | | & ifmt_addsp, { 0xa300 } |
1103 | | }, |
1104 | | /* extsb $Ri */ |
1105 | | { |
1106 | | { 0, 0, 0, 0 }, |
1107 | | { { MNEM, ' ', OP (RI), 0 } }, |
1108 | | & ifmt_div0s, { 0x9780 } |
1109 | | }, |
1110 | | /* extub $Ri */ |
1111 | | { |
1112 | | { 0, 0, 0, 0 }, |
1113 | | { { MNEM, ' ', OP (RI), 0 } }, |
1114 | | & ifmt_div0s, { 0x9790 } |
1115 | | }, |
1116 | | /* extsh $Ri */ |
1117 | | { |
1118 | | { 0, 0, 0, 0 }, |
1119 | | { { MNEM, ' ', OP (RI), 0 } }, |
1120 | | & ifmt_div0s, { 0x97a0 } |
1121 | | }, |
1122 | | /* extuh $Ri */ |
1123 | | { |
1124 | | { 0, 0, 0, 0 }, |
1125 | | { { MNEM, ' ', OP (RI), 0 } }, |
1126 | | & ifmt_div0s, { 0x97b0 } |
1127 | | }, |
1128 | | /* ldm0 ($reglist_low_ld) */ |
1129 | | { |
1130 | | { 0, 0, 0, 0 }, |
1131 | | { { MNEM, ' ', '(', OP (REGLIST_LOW_LD), ')', 0 } }, |
1132 | | & ifmt_ldm0, { 0x8c00 } |
1133 | | }, |
1134 | | /* ldm1 ($reglist_hi_ld) */ |
1135 | | { |
1136 | | { 0, 0, 0, 0 }, |
1137 | | { { MNEM, ' ', '(', OP (REGLIST_HI_LD), ')', 0 } }, |
1138 | | & ifmt_ldm1, { 0x8d00 } |
1139 | | }, |
1140 | | /* stm0 ($reglist_low_st) */ |
1141 | | { |
1142 | | { 0, 0, 0, 0 }, |
1143 | | { { MNEM, ' ', '(', OP (REGLIST_LOW_ST), ')', 0 } }, |
1144 | | & ifmt_stm0, { 0x8e00 } |
1145 | | }, |
1146 | | /* stm1 ($reglist_hi_st) */ |
1147 | | { |
1148 | | { 0, 0, 0, 0 }, |
1149 | | { { MNEM, ' ', '(', OP (REGLIST_HI_ST), ')', 0 } }, |
1150 | | & ifmt_stm1, { 0x8f00 } |
1151 | | }, |
1152 | | /* enter $u10 */ |
1153 | | { |
1154 | | { 0, 0, 0, 0 }, |
1155 | | { { MNEM, ' ', OP (U10), 0 } }, |
1156 | | & ifmt_enter, { 0xf00 } |
1157 | | }, |
1158 | | /* leave */ |
1159 | | { |
1160 | | { 0, 0, 0, 0 }, |
1161 | | { { MNEM, 0 } }, |
1162 | | & ifmt_div3, { 0x9f90 } |
1163 | | }, |
1164 | | /* xchb @$Rj,$Ri */ |
1165 | | { |
1166 | | { 0, 0, 0, 0 }, |
1167 | | { { MNEM, ' ', '@', OP (RJ), ',', OP (RI), 0 } }, |
1168 | | & ifmt_add, { 0x8a00 } |
1169 | | }, |
1170 | | }; |
1171 | | |
1172 | | #undef A |
1173 | | #undef OPERAND |
1174 | | #undef MNEM |
1175 | | #undef OP |
1176 | | |
1177 | | /* Formats for ALIAS macro-insns. */ |
1178 | | |
1179 | | #define F(f) & fr30_cgen_ifld_table[FR30_##f] |
1180 | | static const CGEN_IFMT ifmt_ldi8m ATTRIBUTE_UNUSED = { |
1181 | | 16, 16, 0xf000, { { F (F_OP1) }, { F (F_I8) }, { F (F_RI) }, { 0 } } |
1182 | | }; |
1183 | | |
1184 | | static const CGEN_IFMT ifmt_ldi20m ATTRIBUTE_UNUSED = { |
1185 | | 16, 32, 0xff00, { { F (F_OP1) }, { F (F_OP2) }, { F (F_RI) }, { F (F_I20) }, { 0 } } |
1186 | | }; |
1187 | | |
1188 | | static const CGEN_IFMT ifmt_ldi32m ATTRIBUTE_UNUSED = { |
1189 | | 16, 48, 0xfff0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_OP3) }, { F (F_RI) }, { F (F_I32) }, { 0 } } |
1190 | | }; |
1191 | | |
1192 | | #undef F |
1193 | | |
1194 | | /* Each non-simple macro entry points to an array of expansion possibilities. */ |
1195 | | |
1196 | | #define A(a) (1 << CGEN_INSN_##a) |
1197 | | #define OPERAND(op) FR30_OPERAND_##op |
1198 | | #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */ |
1199 | | #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field)) |
1200 | | |
1201 | | /* The macro instruction table. */ |
1202 | | |
1203 | | static const CGEN_IBASE fr30_cgen_macro_insn_table[] = |
1204 | | { |
1205 | | /* ldi8 $i8,$Ri */ |
1206 | | { |
1207 | | -1, "ldi8m", "ldi8", 16, |
1208 | | { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } |
1209 | | }, |
1210 | | /* ldi20 $i20,$Ri */ |
1211 | | { |
1212 | | -1, "ldi20m", "ldi20", 32, |
1213 | | { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } |
1214 | | }, |
1215 | | /* ldi32 $i32,$Ri */ |
1216 | | { |
1217 | | -1, "ldi32m", "ldi32", 48, |
1218 | | { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } } |
1219 | | }, |
1220 | | }; |
1221 | | |
1222 | | /* The macro instruction opcode table. */ |
1223 | | |
1224 | | static const CGEN_OPCODE fr30_cgen_macro_insn_opcode_table[] = |
1225 | | { |
1226 | | /* ldi8 $i8,$Ri */ |
1227 | | { |
1228 | | { 0, 0, 0, 0 }, |
1229 | | { { MNEM, ' ', OP (I8), ',', OP (RI), 0 } }, |
1230 | | & ifmt_ldi8m, { 0xc000 } |
1231 | | }, |
1232 | | /* ldi20 $i20,$Ri */ |
1233 | | { |
1234 | | { 0, 0, 0, 0 }, |
1235 | | { { MNEM, ' ', OP (I20), ',', OP (RI), 0 } }, |
1236 | | & ifmt_ldi20m, { 0x9b00 } |
1237 | | }, |
1238 | | /* ldi32 $i32,$Ri */ |
1239 | | { |
1240 | | { 0, 0, 0, 0 }, |
1241 | | { { MNEM, ' ', OP (I32), ',', OP (RI), 0 } }, |
1242 | | & ifmt_ldi32m, { 0x9f80 } |
1243 | | }, |
1244 | | }; |
1245 | | |
1246 | | #undef A |
1247 | | #undef OPERAND |
1248 | | #undef MNEM |
1249 | | #undef OP |
1250 | | |
1251 | | #ifndef CGEN_ASM_HASH_P |
1252 | 0 | #define CGEN_ASM_HASH_P(insn) 1 |
1253 | | #endif |
1254 | | |
1255 | | #ifndef CGEN_DIS_HASH_P |
1256 | 495 | #define CGEN_DIS_HASH_P(insn) 1 |
1257 | | #endif |
1258 | | |
1259 | | /* Return non-zero if INSN is to be added to the hash table. |
1260 | | Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file. */ |
1261 | | |
1262 | | static int |
1263 | | asm_hash_insn_p (const CGEN_INSN *insn ATTRIBUTE_UNUSED) |
1264 | 0 | { |
1265 | 0 | return CGEN_ASM_HASH_P (insn); |
1266 | 0 | } |
1267 | | |
1268 | | static int |
1269 | | dis_hash_insn_p (const CGEN_INSN *insn) |
1270 | 504 | { |
1271 | | /* If building the hash table and the NO-DIS attribute is present, |
1272 | | ignore. */ |
1273 | 504 | if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS)) |
1274 | 9 | return 0; |
1275 | 495 | return CGEN_DIS_HASH_P (insn); |
1276 | 504 | } |
1277 | | |
1278 | | #ifndef CGEN_ASM_HASH |
1279 | 3 | #define CGEN_ASM_HASH_SIZE 127 |
1280 | | #ifdef CGEN_MNEMONIC_OPERANDS |
1281 | 0 | #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) |
1282 | | #else |
1283 | | #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) /*FIXME*/ |
1284 | | #endif |
1285 | | #endif |
1286 | | |
1287 | | /* It doesn't make much sense to provide a default here, |
1288 | | but while this is under development we do. |
1289 | | BUFFER is a pointer to the bytes of the insn, target order. |
1290 | | VALUE is the first base_insn_bitsize bits as an int in host order. */ |
1291 | | |
1292 | | #ifndef CGEN_DIS_HASH |
1293 | | #define CGEN_DIS_HASH_SIZE 256 |
1294 | | #define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf)) |
1295 | | #endif |
1296 | | |
1297 | | /* The result is the hash value of the insn. |
1298 | | Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file. */ |
1299 | | |
1300 | | static unsigned int |
1301 | | asm_hash_insn (const char *mnem) |
1302 | 0 | { |
1303 | 0 | return CGEN_ASM_HASH (mnem); |
1304 | 0 | } |
1305 | | |
1306 | | /* BUF is a pointer to the bytes of the insn, target order. |
1307 | | VALUE is the first base_insn_bitsize bits as an int in host order. */ |
1308 | | |
1309 | | static unsigned int |
1310 | | dis_hash_insn (const char *buf ATTRIBUTE_UNUSED, |
1311 | | CGEN_INSN_INT value ATTRIBUTE_UNUSED) |
1312 | 214k | { |
1313 | 214k | return CGEN_DIS_HASH (buf, value); |
1314 | 214k | } |
1315 | | |
1316 | | /* Set the recorded length of the insn in the CGEN_FIELDS struct. */ |
1317 | | |
1318 | | static void |
1319 | | set_fields_bitsize (CGEN_FIELDS *fields, int size) |
1320 | 0 | { |
1321 | 0 | CGEN_FIELDS_BITSIZE (fields) = size; |
1322 | 0 | } |
1323 | | |
1324 | | /* Function to call before using the operand instance table. |
1325 | | This plugs the opcode entries and macro instructions into the cpu table. */ |
1326 | | |
1327 | | void |
1328 | | fr30_cgen_init_opcode_table (CGEN_CPU_DESC cd) |
1329 | 3 | { |
1330 | 3 | int i; |
1331 | 3 | int num_macros = (sizeof (fr30_cgen_macro_insn_table) / |
1332 | 3 | sizeof (fr30_cgen_macro_insn_table[0])); |
1333 | 3 | const CGEN_IBASE *ib = & fr30_cgen_macro_insn_table[0]; |
1334 | 3 | const CGEN_OPCODE *oc = & fr30_cgen_macro_insn_opcode_table[0]; |
1335 | 3 | CGEN_INSN *insns = xmalloc (num_macros * sizeof (CGEN_INSN)); |
1336 | | |
1337 | | /* This test has been added to avoid a warning generated |
1338 | | if memset is called with a third argument of value zero. */ |
1339 | 3 | if (num_macros >= 1) |
1340 | 3 | memset (insns, 0, num_macros * sizeof (CGEN_INSN)); |
1341 | 12 | for (i = 0; i < num_macros; ++i) |
1342 | 9 | { |
1343 | 9 | insns[i].base = &ib[i]; |
1344 | 9 | insns[i].opcode = &oc[i]; |
1345 | 9 | fr30_cgen_build_insn_regex (& insns[i]); |
1346 | 9 | } |
1347 | 3 | cd->macro_insn_table.init_entries = insns; |
1348 | 3 | cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE); |
1349 | 3 | cd->macro_insn_table.num_init_entries = num_macros; |
1350 | | |
1351 | 3 | oc = & fr30_cgen_insn_opcode_table[0]; |
1352 | 3 | insns = (CGEN_INSN *) cd->insn_table.init_entries; |
1353 | 501 | for (i = 0; i < MAX_INSNS; ++i) |
1354 | 498 | { |
1355 | 498 | insns[i].opcode = &oc[i]; |
1356 | 498 | fr30_cgen_build_insn_regex (& insns[i]); |
1357 | 498 | } |
1358 | | |
1359 | 3 | cd->sizeof_fields = sizeof (CGEN_FIELDS); |
1360 | 3 | cd->set_fields_bitsize = set_fields_bitsize; |
1361 | | |
1362 | 3 | cd->asm_hash_p = asm_hash_insn_p; |
1363 | 3 | cd->asm_hash = asm_hash_insn; |
1364 | 3 | cd->asm_hash_size = CGEN_ASM_HASH_SIZE; |
1365 | | |
1366 | 3 | cd->dis_hash_p = dis_hash_insn_p; |
1367 | 3 | cd->dis_hash = dis_hash_insn; |
1368 | 3 | cd->dis_hash_size = CGEN_DIS_HASH_SIZE; |
1369 | 3 | } |