Add support for 64-bit ARM architecture: AArch64
[deliverable/binutils-gdb.git] / opcodes / aarch64-asm-2.c
CommitLineData
a06ea964
NC
1/* This file is automatically generated by aarch64-gen. Do not edit! */
2/* Copyright 2012 Free Software Foundation, Inc.
3 Contributed by ARM Ltd.
4
5 This file is part of the GNU opcodes library.
6
7 This library is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
11
12 It is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
15 License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; see the file COPYING3. If not,
19 see <http://www.gnu.org/licenses/>. */
20
21#include "sysdep.h"
22#include "aarch64-asm.h"
23
24
25const aarch64_opcode *
26aarch64_find_real_opcode (const aarch64_opcode *opcode)
27{
28 /* Use the index as the key to locate the real opcode. */
29 int key = opcode - aarch64_opcode_table;
30 int value;
31 switch (key)
32 {
33 case 3: /* ngc */
34 value = 2; /* --> sbc. */
35 break;
36 case 5: /* ngcs */
37 value = 4; /* --> sbcs. */
38 break;
39 case 8: /* cmn */
40 value = 7; /* --> adds. */
41 break;
42 case 11: /* cmp */
43 value = 10; /* --> subs. */
44 break;
45 case 13: /* mov */
46 value = 12; /* --> add. */
47 break;
48 case 15: /* cmn */
49 value = 14; /* --> adds. */
50 break;
51 case 18: /* cmp */
52 value = 17; /* --> subs. */
53 break;
54 case 21: /* cmn */
55 value = 20; /* --> adds. */
56 break;
57 case 23: /* neg */
58 value = 22; /* --> sub. */
59 break;
60 case 26: /* negs */
61 case 25: /* cmp */
62 value = 24; /* --> subs. */
63 break;
64 case 139: /* mov */
65 value = 138; /* --> umov. */
66 break;
67 case 141: /* mov */
68 value = 140; /* --> ins. */
69 break;
70 case 143: /* mov */
71 value = 142; /* --> ins. */
72 break;
73 case 204: /* mvn */
74 value = 203; /* --> not. */
75 break;
76 case 259: /* mov */
77 value = 258; /* --> orr. */
78 break;
79 case 427: /* mov */
80 value = 426; /* --> dup. */
81 break;
82 case 494: /* sxtw */
83 case 493: /* sxth */
84 case 492: /* sxtb */
85 case 495: /* asr */
86 case 491: /* sbfx */
87 case 490: /* sbfiz */
88 value = 489; /* --> sbfm. */
89 break;
90 case 498: /* bfxil */
91 case 497: /* bfi */
92 value = 496; /* --> bfm. */
93 break;
94 case 503: /* uxth */
95 case 502: /* uxtb */
96 case 505: /* lsr */
97 case 504: /* lsl */
98 case 501: /* ubfx */
99 case 500: /* ubfiz */
100 value = 499; /* --> ubfm. */
101 break;
102 case 523: /* cset */
103 case 522: /* cinc */
104 value = 521; /* --> csinc. */
105 break;
106 case 526: /* csetm */
107 case 525: /* cinv */
108 value = 524; /* --> csinv. */
109 break;
110 case 528: /* cneg */
111 value = 527; /* --> csneg. */
112 break;
113 case 553: /* lsl */
114 value = 552; /* --> lslv. */
115 break;
116 case 555: /* lsr */
117 value = 554; /* --> lsrv. */
118 break;
119 case 557: /* asr */
120 value = 556; /* --> asrv. */
121 break;
122 case 559: /* ror */
123 value = 558; /* --> rorv. */
124 break;
125 case 561: /* mul */
126 value = 560; /* --> madd. */
127 break;
128 case 563: /* mneg */
129 value = 562; /* --> msub. */
130 break;
131 case 565: /* smull */
132 value = 564; /* --> smaddl. */
133 break;
134 case 567: /* smnegl */
135 value = 566; /* --> smsubl. */
136 break;
137 case 570: /* umull */
138 value = 569; /* --> umaddl. */
139 break;
140 case 572: /* umnegl */
141 value = 571; /* --> umsubl. */
142 break;
143 case 583: /* ror */
144 value = 582; /* --> extr. */
145 break;
146 case 683: /* strb */
147 value = 681; /* --> sturb. */
148 break;
149 case 684: /* ldrb */
150 value = 682; /* --> ldurb. */
151 break;
152 case 686: /* ldrsb */
153 value = 685; /* --> ldursb. */
154 break;
155 case 689: /* str */
156 value = 687; /* --> stur. */
157 break;
158 case 690: /* ldr */
159 value = 688; /* --> ldur. */
160 break;
161 case 693: /* strh */
162 value = 691; /* --> sturh. */
163 break;
164 case 694: /* ldrh */
165 value = 692; /* --> ldurh. */
166 break;
167 case 696: /* ldrsh */
168 value = 695; /* --> ldursh. */
169 break;
170 case 699: /* str */
171 value = 697; /* --> stur. */
172 break;
173 case 700: /* ldr */
174 value = 698; /* --> ldur. */
175 break;
176 case 702: /* ldrsw */
177 value = 701; /* --> ldursw. */
178 break;
179 case 704: /* prfm */
180 value = 703; /* --> prfum. */
181 break;
182 case 746: /* bic */
183 value = 745; /* --> and. */
184 break;
185 case 748: /* mov */
186 value = 747; /* --> orr. */
187 break;
188 case 751: /* tst */
189 value = 750; /* --> ands. */
190 break;
191 case 756: /* uxtw */
192 case 755: /* mov */
193 value = 754; /* --> orr. */
194 break;
195 case 758: /* mvn */
196 value = 757; /* --> orn. */
197 break;
198 case 762: /* tst */
199 value = 761; /* --> ands. */
200 break;
201 case 765: /* mov */
202 value = 764; /* --> movn. */
203 break;
204 case 767: /* mov */
205 value = 766; /* --> movz. */
206 break;
207 case 778: /* sevl */
208 case 777: /* sev */
209 case 776: /* wfi */
210 case 775: /* wfe */
211 case 774: /* yield */
212 case 773: /* nop */
213 value = 772; /* --> hint. */
214 break;
215 case 787: /* tlbi */
216 case 786: /* ic */
217 case 785: /* dc */
218 case 784: /* at */
219 value = 783; /* --> sys. */
220 break;
221 default: return NULL;
222 }
223
224 return aarch64_opcode_table + value;
225}
226
227const char*
228aarch64_insert_operand (const aarch64_operand *self,
229 const aarch64_opnd_info *info,
230 aarch64_insn *code, const aarch64_inst *inst)
231{
232 /* Use the index as the key. */
233 int key = self - aarch64_operands;
234 switch (key)
235 {
236 case 1:
237 case 2:
238 case 3:
239 case 4:
240 case 5:
241 case 6:
242 case 7:
243 case 8:
244 case 9:
245 case 10:
246 case 13:
247 case 14:
248 case 15:
249 case 16:
250 case 18:
251 case 19:
252 case 20:
253 case 21:
254 case 22:
255 case 23:
256 case 24:
257 case 25:
258 case 26:
259 case 34:
260 case 35:
261 return aarch64_ins_regno (self, info, code, inst);
262 case 11:
263 return aarch64_ins_reg_extended (self, info, code, inst);
264 case 12:
265 return aarch64_ins_reg_shifted (self, info, code, inst);
266 case 17:
267 return aarch64_ins_ft (self, info, code, inst);
268 case 27:
269 case 28:
270 case 29:
271 return aarch64_ins_reglane (self, info, code, inst);
272 case 30:
273 return aarch64_ins_reglist (self, info, code, inst);
274 case 31:
275 return aarch64_ins_ldst_reglist (self, info, code, inst);
276 case 32:
277 return aarch64_ins_ldst_reglist_r (self, info, code, inst);
278 case 33:
279 return aarch64_ins_ldst_elemlist (self, info, code, inst);
280 case 36:
281 case 45:
282 case 46:
283 case 47:
284 case 48:
285 case 49:
286 case 50:
287 case 51:
288 case 52:
289 case 53:
290 case 54:
291 case 55:
292 case 56:
293 case 57:
294 case 65:
295 case 66:
296 case 67:
297 case 68:
298 return aarch64_ins_imm (self, info, code, inst);
299 case 37:
300 case 38:
301 return aarch64_ins_advsimd_imm_shift (self, info, code, inst);
302 case 39:
303 case 40:
304 case 41:
305 return aarch64_ins_advsimd_imm_modified (self, info, code, inst);
306 case 58:
307 return aarch64_ins_limm (self, info, code, inst);
308 case 59:
309 return aarch64_ins_aimm (self, info, code, inst);
310 case 60:
311 return aarch64_ins_imm_half (self, info, code, inst);
312 case 61:
313 return aarch64_ins_fbits (self, info, code, inst);
314 case 63:
315 return aarch64_ins_cond (self, info, code, inst);
316 case 69:
317 case 75:
318 return aarch64_ins_addr_simple (self, info, code, inst);
319 case 70:
320 return aarch64_ins_addr_regoff (self, info, code, inst);
321 case 71:
322 case 72:
323 case 73:
324 return aarch64_ins_addr_simm (self, info, code, inst);
325 case 74:
326 return aarch64_ins_addr_uimm12 (self, info, code, inst);
327 case 76:
328 return aarch64_ins_simd_addr_post (self, info, code, inst);
329 case 77:
330 return aarch64_ins_sysreg (self, info, code, inst);
331 case 78:
332 return aarch64_ins_pstatefield (self, info, code, inst);
333 case 79:
334 case 80:
335 case 81:
336 case 82:
337 return aarch64_ins_sysins_op (self, info, code, inst);
338 case 83:
339 case 84:
340 return aarch64_ins_barrier (self, info, code, inst);
341 case 85:
342 return aarch64_ins_prfop (self, info, code, inst);
343 default: assert (0); abort ();
344 }
345}
This page took 0.063324 seconds and 4 git commands to generate.