aarch64-asm-2.c revision 1.1.1.3
1/* This file is automatically generated by aarch64-gen.  Do not edit!  */
2/* Copyright (C) 2012-2015 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 314:	/* sxtl */
80      value = 313;	/* --> sshll.  */
81      break;
82    case 316:	/* sxtl2 */
83      value = 315;	/* --> sshll2.  */
84      break;
85    case 336:	/* uxtl */
86      value = 335;	/* --> ushll.  */
87      break;
88    case 338:	/* uxtl2 */
89      value = 337;	/* --> ushll2.  */
90      break;
91    case 431:	/* mov */
92      value = 430;	/* --> dup.  */
93      break;
94    case 498:	/* sxtw */
95    case 497:	/* sxth */
96    case 496:	/* sxtb */
97    case 499:	/* asr */
98    case 495:	/* sbfx */
99    case 494:	/* sbfiz */
100      value = 493;	/* --> sbfm.  */
101      break;
102    case 502:	/* bfxil */
103    case 501:	/* bfi */
104      value = 500;	/* --> bfm.  */
105      break;
106    case 507:	/* uxth */
107    case 506:	/* uxtb */
108    case 509:	/* lsr */
109    case 508:	/* lsl */
110    case 505:	/* ubfx */
111    case 504:	/* ubfiz */
112      value = 503;	/* --> ubfm.  */
113      break;
114    case 527:	/* cset */
115    case 526:	/* cinc */
116      value = 525;	/* --> csinc.  */
117      break;
118    case 530:	/* csetm */
119    case 529:	/* cinv */
120      value = 528;	/* --> csinv.  */
121      break;
122    case 532:	/* cneg */
123      value = 531;	/* --> csneg.  */
124      break;
125    case 557:	/* lsl */
126      value = 556;	/* --> lslv.  */
127      break;
128    case 559:	/* lsr */
129      value = 558;	/* --> lsrv.  */
130      break;
131    case 561:	/* asr */
132      value = 560;	/* --> asrv.  */
133      break;
134    case 563:	/* ror */
135      value = 562;	/* --> rorv.  */
136      break;
137    case 573:	/* mul */
138      value = 572;	/* --> madd.  */
139      break;
140    case 575:	/* mneg */
141      value = 574;	/* --> msub.  */
142      break;
143    case 577:	/* smull */
144      value = 576;	/* --> smaddl.  */
145      break;
146    case 579:	/* smnegl */
147      value = 578;	/* --> smsubl.  */
148      break;
149    case 582:	/* umull */
150      value = 581;	/* --> umaddl.  */
151      break;
152    case 584:	/* umnegl */
153      value = 583;	/* --> umsubl.  */
154      break;
155    case 595:	/* ror */
156      value = 594;	/* --> extr.  */
157      break;
158    case 695:	/* strb */
159      value = 693;	/* --> sturb.  */
160      break;
161    case 696:	/* ldrb */
162      value = 694;	/* --> ldurb.  */
163      break;
164    case 698:	/* ldrsb */
165      value = 697;	/* --> ldursb.  */
166      break;
167    case 701:	/* str */
168      value = 699;	/* --> stur.  */
169      break;
170    case 702:	/* ldr */
171      value = 700;	/* --> ldur.  */
172      break;
173    case 705:	/* strh */
174      value = 703;	/* --> sturh.  */
175      break;
176    case 706:	/* ldrh */
177      value = 704;	/* --> ldurh.  */
178      break;
179    case 708:	/* ldrsh */
180      value = 707;	/* --> ldursh.  */
181      break;
182    case 711:	/* str */
183      value = 709;	/* --> stur.  */
184      break;
185    case 712:	/* ldr */
186      value = 710;	/* --> ldur.  */
187      break;
188    case 714:	/* ldrsw */
189      value = 713;	/* --> ldursw.  */
190      break;
191    case 716:	/* prfm */
192      value = 715;	/* --> prfum.  */
193      break;
194    case 758:	/* bic */
195      value = 757;	/* --> and.  */
196      break;
197    case 760:	/* mov */
198      value = 759;	/* --> orr.  */
199      break;
200    case 763:	/* tst */
201      value = 762;	/* --> ands.  */
202      break;
203    case 768:	/* uxtw */
204    case 767:	/* mov */
205      value = 766;	/* --> orr.  */
206      break;
207    case 770:	/* mvn */
208      value = 769;	/* --> orn.  */
209      break;
210    case 774:	/* tst */
211      value = 773;	/* --> ands.  */
212      break;
213    case 900:	/* staddb */
214      value = 804;	/* --> ldaddb.  */
215      break;
216    case 901:	/* staddh */
217      value = 805;	/* --> ldaddh.  */
218      break;
219    case 902:	/* stadd */
220      value = 806;	/* --> ldadd.  */
221      break;
222    case 903:	/* staddlb */
223      value = 808;	/* --> ldaddlb.  */
224      break;
225    case 904:	/* staddlh */
226      value = 811;	/* --> ldaddlh.  */
227      break;
228    case 905:	/* staddl */
229      value = 814;	/* --> ldaddl.  */
230      break;
231    case 906:	/* stclrb */
232      value = 816;	/* --> ldclrb.  */
233      break;
234    case 907:	/* stclrh */
235      value = 817;	/* --> ldclrh.  */
236      break;
237    case 908:	/* stclr */
238      value = 818;	/* --> ldclr.  */
239      break;
240    case 909:	/* stclrlb */
241      value = 820;	/* --> ldclrlb.  */
242      break;
243    case 910:	/* stclrlh */
244      value = 823;	/* --> ldclrlh.  */
245      break;
246    case 911:	/* stclrl */
247      value = 826;	/* --> ldclrl.  */
248      break;
249    case 912:	/* steorb */
250      value = 828;	/* --> ldeorb.  */
251      break;
252    case 913:	/* steorh */
253      value = 829;	/* --> ldeorh.  */
254      break;
255    case 914:	/* steor */
256      value = 830;	/* --> ldeor.  */
257      break;
258    case 915:	/* steorlb */
259      value = 832;	/* --> ldeorlb.  */
260      break;
261    case 916:	/* steorlh */
262      value = 835;	/* --> ldeorlh.  */
263      break;
264    case 917:	/* steorl */
265      value = 838;	/* --> ldeorl.  */
266      break;
267    case 918:	/* stsetb */
268      value = 840;	/* --> ldsetb.  */
269      break;
270    case 919:	/* stseth */
271      value = 841;	/* --> ldseth.  */
272      break;
273    case 920:	/* stset */
274      value = 842;	/* --> ldset.  */
275      break;
276    case 921:	/* stsetlb */
277      value = 844;	/* --> ldsetlb.  */
278      break;
279    case 922:	/* stsetlh */
280      value = 847;	/* --> ldsetlh.  */
281      break;
282    case 923:	/* stsetl */
283      value = 850;	/* --> ldsetl.  */
284      break;
285    case 924:	/* stsmaxb */
286      value = 852;	/* --> ldsmaxb.  */
287      break;
288    case 925:	/* stsmaxh */
289      value = 853;	/* --> ldsmaxh.  */
290      break;
291    case 926:	/* stsmax */
292      value = 854;	/* --> ldsmax.  */
293      break;
294    case 927:	/* stsmaxlb */
295      value = 856;	/* --> ldsmaxlb.  */
296      break;
297    case 928:	/* stsmaxlh */
298      value = 859;	/* --> ldsmaxlh.  */
299      break;
300    case 929:	/* stsmaxl */
301      value = 862;	/* --> ldsmaxl.  */
302      break;
303    case 930:	/* stsminb */
304      value = 864;	/* --> ldsminb.  */
305      break;
306    case 931:	/* stsminh */
307      value = 865;	/* --> ldsminh.  */
308      break;
309    case 932:	/* stsmin */
310      value = 866;	/* --> ldsmin.  */
311      break;
312    case 933:	/* stsminlb */
313      value = 868;	/* --> ldsminlb.  */
314      break;
315    case 934:	/* stsminlh */
316      value = 871;	/* --> ldsminlh.  */
317      break;
318    case 935:	/* stsminl */
319      value = 874;	/* --> ldsminl.  */
320      break;
321    case 936:	/* stumaxb */
322      value = 876;	/* --> ldumaxb.  */
323      break;
324    case 937:	/* stumaxh */
325      value = 877;	/* --> ldumaxh.  */
326      break;
327    case 938:	/* stumax */
328      value = 878;	/* --> ldumax.  */
329      break;
330    case 939:	/* stumaxlb */
331      value = 880;	/* --> ldumaxlb.  */
332      break;
333    case 940:	/* stumaxlh */
334      value = 883;	/* --> ldumaxlh.  */
335      break;
336    case 941:	/* stumaxl */
337      value = 886;	/* --> ldumaxl.  */
338      break;
339    case 942:	/* stuminb */
340      value = 888;	/* --> lduminb.  */
341      break;
342    case 943:	/* stuminh */
343      value = 889;	/* --> lduminh.  */
344      break;
345    case 944:	/* stumin */
346      value = 890;	/* --> ldumin.  */
347      break;
348    case 945:	/* stuminlb */
349      value = 892;	/* --> lduminlb.  */
350      break;
351    case 946:	/* stuminlh */
352      value = 895;	/* --> lduminlh.  */
353      break;
354    case 947:	/* stuminl */
355      value = 898;	/* --> lduminl.  */
356      break;
357    case 949:	/* mov */
358      value = 948;	/* --> movn.  */
359      break;
360    case 951:	/* mov */
361      value = 950;	/* --> movz.  */
362      break;
363    case 962:	/* sevl */
364    case 961:	/* sev */
365    case 960:	/* wfi */
366    case 959:	/* wfe */
367    case 958:	/* yield */
368    case 957:	/* nop */
369      value = 956;	/* --> hint.  */
370      break;
371    case 971:	/* tlbi */
372    case 970:	/* ic */
373    case 969:	/* dc */
374    case 968:	/* at */
375      value = 967;	/* --> sys.  */
376      break;
377    default: return NULL;
378    }
379
380  return aarch64_opcode_table + value;
381}
382
383const char*
384aarch64_insert_operand (const aarch64_operand *self,
385			   const aarch64_opnd_info *info,
386			   aarch64_insn *code, const aarch64_inst *inst)
387{
388  /* Use the index as the key.  */
389  int key = self - aarch64_operands;
390  switch (key)
391    {
392    case 1:
393    case 2:
394    case 3:
395    case 4:
396    case 5:
397    case 6:
398    case 7:
399    case 8:
400    case 9:
401    case 10:
402    case 14:
403    case 15:
404    case 16:
405    case 17:
406    case 19:
407    case 20:
408    case 21:
409    case 22:
410    case 23:
411    case 24:
412    case 25:
413    case 26:
414    case 27:
415    case 35:
416    case 36:
417      return aarch64_ins_regno (self, info, code, inst);
418    case 12:
419      return aarch64_ins_reg_extended (self, info, code, inst);
420    case 13:
421      return aarch64_ins_reg_shifted (self, info, code, inst);
422    case 18:
423      return aarch64_ins_ft (self, info, code, inst);
424    case 28:
425    case 29:
426    case 30:
427      return aarch64_ins_reglane (self, info, code, inst);
428    case 31:
429      return aarch64_ins_reglist (self, info, code, inst);
430    case 32:
431      return aarch64_ins_ldst_reglist (self, info, code, inst);
432    case 33:
433      return aarch64_ins_ldst_reglist_r (self, info, code, inst);
434    case 34:
435      return aarch64_ins_ldst_elemlist (self, info, code, inst);
436    case 37:
437    case 46:
438    case 47:
439    case 48:
440    case 49:
441    case 50:
442    case 51:
443    case 52:
444    case 53:
445    case 54:
446    case 55:
447    case 56:
448    case 57:
449    case 58:
450    case 67:
451    case 68:
452    case 69:
453    case 70:
454      return aarch64_ins_imm (self, info, code, inst);
455    case 38:
456    case 39:
457      return aarch64_ins_advsimd_imm_shift (self, info, code, inst);
458    case 40:
459    case 41:
460    case 42:
461      return aarch64_ins_advsimd_imm_modified (self, info, code, inst);
462    case 59:
463      return aarch64_ins_limm (self, info, code, inst);
464    case 60:
465      return aarch64_ins_aimm (self, info, code, inst);
466    case 61:
467      return aarch64_ins_imm_half (self, info, code, inst);
468    case 62:
469      return aarch64_ins_fbits (self, info, code, inst);
470    case 64:
471    case 65:
472      return aarch64_ins_cond (self, info, code, inst);
473    case 71:
474    case 77:
475      return aarch64_ins_addr_simple (self, info, code, inst);
476    case 72:
477      return aarch64_ins_addr_regoff (self, info, code, inst);
478    case 73:
479    case 74:
480    case 75:
481      return aarch64_ins_addr_simm (self, info, code, inst);
482    case 76:
483      return aarch64_ins_addr_uimm12 (self, info, code, inst);
484    case 78:
485      return aarch64_ins_simd_addr_post (self, info, code, inst);
486    case 79:
487      return aarch64_ins_sysreg (self, info, code, inst);
488    case 80:
489      return aarch64_ins_pstatefield (self, info, code, inst);
490    case 81:
491    case 82:
492    case 83:
493    case 84:
494      return aarch64_ins_sysins_op (self, info, code, inst);
495    case 85:
496    case 86:
497      return aarch64_ins_barrier (self, info, code, inst);
498    case 87:
499      return aarch64_ins_prfop (self, info, code, inst);
500    default: assert (0); abort ();
501    }
502}
503