[AArch64] Let aliased instructions be their preferred form.
[external/binutils.git] / opcodes / aarch64-asm-2.c
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
25 const aarch64_opcode *
26 aarch64_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     case 2:     /* sbc */
35       value = 2;        /* --> sbc.  */
36       break;
37     case 5:     /* ngcs */
38     case 4:     /* sbcs */
39       value = 4;        /* --> sbcs.  */
40       break;
41     case 8:     /* cmn */
42     case 7:     /* adds */
43       value = 7;        /* --> adds.  */
44       break;
45     case 11:    /* cmp */
46     case 10:    /* subs */
47       value = 10;       /* --> subs.  */
48       break;
49     case 13:    /* mov */
50     case 12:    /* add */
51       value = 12;       /* --> add.  */
52       break;
53     case 15:    /* cmn */
54     case 14:    /* adds */
55       value = 14;       /* --> adds.  */
56       break;
57     case 18:    /* cmp */
58     case 17:    /* subs */
59       value = 17;       /* --> subs.  */
60       break;
61     case 21:    /* cmn */
62     case 20:    /* adds */
63       value = 20;       /* --> adds.  */
64       break;
65     case 23:    /* neg */
66     case 22:    /* sub */
67       value = 22;       /* --> sub.  */
68       break;
69     case 26:    /* negs */
70     case 25:    /* cmp */
71     case 24:    /* subs */
72       value = 24;       /* --> subs.  */
73       break;
74     case 141:   /* mov */
75     case 140:   /* umov */
76       value = 140;      /* --> umov.  */
77       break;
78     case 143:   /* mov */
79     case 142:   /* ins */
80       value = 142;      /* --> ins.  */
81       break;
82     case 145:   /* mov */
83     case 144:   /* ins */
84       value = 144;      /* --> ins.  */
85       break;
86     case 206:   /* mvn */
87     case 205:   /* not */
88       value = 205;      /* --> not.  */
89       break;
90     case 261:   /* mov */
91     case 260:   /* orr */
92       value = 260;      /* --> orr.  */
93       break;
94     case 318:   /* sxtl */
95     case 317:   /* sshll */
96       value = 317;      /* --> sshll.  */
97       break;
98     case 320:   /* sxtl2 */
99     case 319:   /* sshll2 */
100       value = 319;      /* --> sshll2.  */
101       break;
102     case 340:   /* uxtl */
103     case 339:   /* ushll */
104       value = 339;      /* --> ushll.  */
105       break;
106     case 342:   /* uxtl2 */
107     case 341:   /* ushll2 */
108       value = 341;      /* --> ushll2.  */
109       break;
110     case 437:   /* mov */
111     case 436:   /* dup */
112       value = 436;      /* --> dup.  */
113       break;
114     case 506:   /* sxtw */
115     case 505:   /* sxth */
116     case 504:   /* sxtb */
117     case 507:   /* asr */
118     case 503:   /* sbfx */
119     case 502:   /* sbfiz */
120     case 501:   /* sbfm */
121       value = 501;      /* --> sbfm.  */
122       break;
123     case 510:   /* bfxil */
124     case 509:   /* bfi */
125     case 508:   /* bfm */
126       value = 508;      /* --> bfm.  */
127       break;
128     case 515:   /* uxth */
129     case 514:   /* uxtb */
130     case 517:   /* lsr */
131     case 516:   /* lsl */
132     case 513:   /* ubfx */
133     case 512:   /* ubfiz */
134     case 511:   /* ubfm */
135       value = 511;      /* --> ubfm.  */
136       break;
137     case 535:   /* cset */
138     case 534:   /* cinc */
139     case 533:   /* csinc */
140       value = 533;      /* --> csinc.  */
141       break;
142     case 538:   /* csetm */
143     case 537:   /* cinv */
144     case 536:   /* csinv */
145       value = 536;      /* --> csinv.  */
146       break;
147     case 540:   /* cneg */
148     case 539:   /* csneg */
149       value = 539;      /* --> csneg.  */
150       break;
151     case 565:   /* lsl */
152     case 564:   /* lslv */
153       value = 564;      /* --> lslv.  */
154       break;
155     case 567:   /* lsr */
156     case 566:   /* lsrv */
157       value = 566;      /* --> lsrv.  */
158       break;
159     case 569:   /* asr */
160     case 568:   /* asrv */
161       value = 568;      /* --> asrv.  */
162       break;
163     case 571:   /* ror */
164     case 570:   /* rorv */
165       value = 570;      /* --> rorv.  */
166       break;
167     case 581:   /* mul */
168     case 580:   /* madd */
169       value = 580;      /* --> madd.  */
170       break;
171     case 583:   /* mneg */
172     case 582:   /* msub */
173       value = 582;      /* --> msub.  */
174       break;
175     case 585:   /* smull */
176     case 584:   /* smaddl */
177       value = 584;      /* --> smaddl.  */
178       break;
179     case 587:   /* smnegl */
180     case 586:   /* smsubl */
181       value = 586;      /* --> smsubl.  */
182       break;
183     case 590:   /* umull */
184     case 589:   /* umaddl */
185       value = 589;      /* --> umaddl.  */
186       break;
187     case 592:   /* umnegl */
188     case 591:   /* umsubl */
189       value = 591;      /* --> umsubl.  */
190       break;
191     case 603:   /* ror */
192     case 602:   /* extr */
193       value = 602;      /* --> extr.  */
194       break;
195     case 760:   /* bic */
196     case 759:   /* and */
197       value = 759;      /* --> and.  */
198       break;
199     case 762:   /* mov */
200     case 761:   /* orr */
201       value = 761;      /* --> orr.  */
202       break;
203     case 765:   /* tst */
204     case 764:   /* ands */
205       value = 764;      /* --> ands.  */
206       break;
207     case 770:   /* uxtw */
208     case 769:   /* mov */
209     case 768:   /* orr */
210       value = 768;      /* --> orr.  */
211       break;
212     case 772:   /* mvn */
213     case 771:   /* orn */
214       value = 771;      /* --> orn.  */
215       break;
216     case 776:   /* tst */
217     case 775:   /* ands */
218       value = 775;      /* --> ands.  */
219       break;
220     case 902:   /* staddb */
221     case 806:   /* ldaddb */
222       value = 806;      /* --> ldaddb.  */
223       break;
224     case 903:   /* staddh */
225     case 807:   /* ldaddh */
226       value = 807;      /* --> ldaddh.  */
227       break;
228     case 904:   /* stadd */
229     case 808:   /* ldadd */
230       value = 808;      /* --> ldadd.  */
231       break;
232     case 905:   /* staddlb */
233     case 810:   /* ldaddlb */
234       value = 810;      /* --> ldaddlb.  */
235       break;
236     case 906:   /* staddlh */
237     case 813:   /* ldaddlh */
238       value = 813;      /* --> ldaddlh.  */
239       break;
240     case 907:   /* staddl */
241     case 816:   /* ldaddl */
242       value = 816;      /* --> ldaddl.  */
243       break;
244     case 908:   /* stclrb */
245     case 818:   /* ldclrb */
246       value = 818;      /* --> ldclrb.  */
247       break;
248     case 909:   /* stclrh */
249     case 819:   /* ldclrh */
250       value = 819;      /* --> ldclrh.  */
251       break;
252     case 910:   /* stclr */
253     case 820:   /* ldclr */
254       value = 820;      /* --> ldclr.  */
255       break;
256     case 911:   /* stclrlb */
257     case 822:   /* ldclrlb */
258       value = 822;      /* --> ldclrlb.  */
259       break;
260     case 912:   /* stclrlh */
261     case 825:   /* ldclrlh */
262       value = 825;      /* --> ldclrlh.  */
263       break;
264     case 913:   /* stclrl */
265     case 828:   /* ldclrl */
266       value = 828;      /* --> ldclrl.  */
267       break;
268     case 914:   /* steorb */
269     case 830:   /* ldeorb */
270       value = 830;      /* --> ldeorb.  */
271       break;
272     case 915:   /* steorh */
273     case 831:   /* ldeorh */
274       value = 831;      /* --> ldeorh.  */
275       break;
276     case 916:   /* steor */
277     case 832:   /* ldeor */
278       value = 832;      /* --> ldeor.  */
279       break;
280     case 917:   /* steorlb */
281     case 834:   /* ldeorlb */
282       value = 834;      /* --> ldeorlb.  */
283       break;
284     case 918:   /* steorlh */
285     case 837:   /* ldeorlh */
286       value = 837;      /* --> ldeorlh.  */
287       break;
288     case 919:   /* steorl */
289     case 840:   /* ldeorl */
290       value = 840;      /* --> ldeorl.  */
291       break;
292     case 920:   /* stsetb */
293     case 842:   /* ldsetb */
294       value = 842;      /* --> ldsetb.  */
295       break;
296     case 921:   /* stseth */
297     case 843:   /* ldseth */
298       value = 843;      /* --> ldseth.  */
299       break;
300     case 922:   /* stset */
301     case 844:   /* ldset */
302       value = 844;      /* --> ldset.  */
303       break;
304     case 923:   /* stsetlb */
305     case 846:   /* ldsetlb */
306       value = 846;      /* --> ldsetlb.  */
307       break;
308     case 924:   /* stsetlh */
309     case 849:   /* ldsetlh */
310       value = 849;      /* --> ldsetlh.  */
311       break;
312     case 925:   /* stsetl */
313     case 852:   /* ldsetl */
314       value = 852;      /* --> ldsetl.  */
315       break;
316     case 926:   /* stsmaxb */
317     case 854:   /* ldsmaxb */
318       value = 854;      /* --> ldsmaxb.  */
319       break;
320     case 927:   /* stsmaxh */
321     case 855:   /* ldsmaxh */
322       value = 855;      /* --> ldsmaxh.  */
323       break;
324     case 928:   /* stsmax */
325     case 856:   /* ldsmax */
326       value = 856;      /* --> ldsmax.  */
327       break;
328     case 929:   /* stsmaxlb */
329     case 858:   /* ldsmaxlb */
330       value = 858;      /* --> ldsmaxlb.  */
331       break;
332     case 930:   /* stsmaxlh */
333     case 861:   /* ldsmaxlh */
334       value = 861;      /* --> ldsmaxlh.  */
335       break;
336     case 931:   /* stsmaxl */
337     case 864:   /* ldsmaxl */
338       value = 864;      /* --> ldsmaxl.  */
339       break;
340     case 932:   /* stsminb */
341     case 866:   /* ldsminb */
342       value = 866;      /* --> ldsminb.  */
343       break;
344     case 933:   /* stsminh */
345     case 867:   /* ldsminh */
346       value = 867;      /* --> ldsminh.  */
347       break;
348     case 934:   /* stsmin */
349     case 868:   /* ldsmin */
350       value = 868;      /* --> ldsmin.  */
351       break;
352     case 935:   /* stsminlb */
353     case 870:   /* ldsminlb */
354       value = 870;      /* --> ldsminlb.  */
355       break;
356     case 936:   /* stsminlh */
357     case 873:   /* ldsminlh */
358       value = 873;      /* --> ldsminlh.  */
359       break;
360     case 937:   /* stsminl */
361     case 876:   /* ldsminl */
362       value = 876;      /* --> ldsminl.  */
363       break;
364     case 938:   /* stumaxb */
365     case 878:   /* ldumaxb */
366       value = 878;      /* --> ldumaxb.  */
367       break;
368     case 939:   /* stumaxh */
369     case 879:   /* ldumaxh */
370       value = 879;      /* --> ldumaxh.  */
371       break;
372     case 940:   /* stumax */
373     case 880:   /* ldumax */
374       value = 880;      /* --> ldumax.  */
375       break;
376     case 941:   /* stumaxlb */
377     case 882:   /* ldumaxlb */
378       value = 882;      /* --> ldumaxlb.  */
379       break;
380     case 942:   /* stumaxlh */
381     case 885:   /* ldumaxlh */
382       value = 885;      /* --> ldumaxlh.  */
383       break;
384     case 943:   /* stumaxl */
385     case 888:   /* ldumaxl */
386       value = 888;      /* --> ldumaxl.  */
387       break;
388     case 944:   /* stuminb */
389     case 890:   /* lduminb */
390       value = 890;      /* --> lduminb.  */
391       break;
392     case 945:   /* stuminh */
393     case 891:   /* lduminh */
394       value = 891;      /* --> lduminh.  */
395       break;
396     case 946:   /* stumin */
397     case 892:   /* ldumin */
398       value = 892;      /* --> ldumin.  */
399       break;
400     case 947:   /* stuminlb */
401     case 894:   /* lduminlb */
402       value = 894;      /* --> lduminlb.  */
403       break;
404     case 948:   /* stuminlh */
405     case 897:   /* lduminlh */
406       value = 897;      /* --> lduminlh.  */
407       break;
408     case 949:   /* stuminl */
409     case 900:   /* lduminl */
410       value = 900;      /* --> lduminl.  */
411       break;
412     case 951:   /* mov */
413     case 950:   /* movn */
414       value = 950;      /* --> movn.  */
415       break;
416     case 953:   /* mov */
417     case 952:   /* movz */
418       value = 952;      /* --> movz.  */
419       break;
420     case 964:   /* sevl */
421     case 963:   /* sev */
422     case 962:   /* wfi */
423     case 961:   /* wfe */
424     case 960:   /* yield */
425     case 959:   /* nop */
426     case 958:   /* hint */
427       value = 958;      /* --> hint.  */
428       break;
429     case 973:   /* tlbi */
430     case 972:   /* ic */
431     case 971:   /* dc */
432     case 970:   /* at */
433     case 969:   /* sys */
434       value = 969;      /* --> sys.  */
435       break;
436     default: return NULL;
437     }
438
439   return aarch64_opcode_table + value;
440 }
441
442 const char*
443 aarch64_insert_operand (const aarch64_operand *self,
444                            const aarch64_opnd_info *info,
445                            aarch64_insn *code, const aarch64_inst *inst)
446 {
447   /* Use the index as the key.  */
448   int key = self - aarch64_operands;
449   switch (key)
450     {
451     case 1:
452     case 2:
453     case 3:
454     case 4:
455     case 5:
456     case 6:
457     case 7:
458     case 8:
459     case 9:
460     case 10:
461     case 14:
462     case 15:
463     case 16:
464     case 17:
465     case 19:
466     case 20:
467     case 21:
468     case 22:
469     case 23:
470     case 24:
471     case 25:
472     case 26:
473     case 27:
474     case 35:
475     case 36:
476       return aarch64_ins_regno (self, info, code, inst);
477     case 12:
478       return aarch64_ins_reg_extended (self, info, code, inst);
479     case 13:
480       return aarch64_ins_reg_shifted (self, info, code, inst);
481     case 18:
482       return aarch64_ins_ft (self, info, code, inst);
483     case 28:
484     case 29:
485     case 30:
486       return aarch64_ins_reglane (self, info, code, inst);
487     case 31:
488       return aarch64_ins_reglist (self, info, code, inst);
489     case 32:
490       return aarch64_ins_ldst_reglist (self, info, code, inst);
491     case 33:
492       return aarch64_ins_ldst_reglist_r (self, info, code, inst);
493     case 34:
494       return aarch64_ins_ldst_elemlist (self, info, code, inst);
495     case 37:
496     case 46:
497     case 47:
498     case 48:
499     case 49:
500     case 50:
501     case 51:
502     case 52:
503     case 53:
504     case 54:
505     case 55:
506     case 56:
507     case 57:
508     case 58:
509     case 67:
510     case 68:
511     case 69:
512     case 70:
513       return aarch64_ins_imm (self, info, code, inst);
514     case 38:
515     case 39:
516       return aarch64_ins_advsimd_imm_shift (self, info, code, inst);
517     case 40:
518     case 41:
519     case 42:
520       return aarch64_ins_advsimd_imm_modified (self, info, code, inst);
521     case 59:
522       return aarch64_ins_limm (self, info, code, inst);
523     case 60:
524       return aarch64_ins_aimm (self, info, code, inst);
525     case 61:
526       return aarch64_ins_imm_half (self, info, code, inst);
527     case 62:
528       return aarch64_ins_fbits (self, info, code, inst);
529     case 64:
530     case 65:
531       return aarch64_ins_cond (self, info, code, inst);
532     case 71:
533     case 77:
534       return aarch64_ins_addr_simple (self, info, code, inst);
535     case 72:
536       return aarch64_ins_addr_regoff (self, info, code, inst);
537     case 73:
538     case 74:
539     case 75:
540       return aarch64_ins_addr_simm (self, info, code, inst);
541     case 76:
542       return aarch64_ins_addr_uimm12 (self, info, code, inst);
543     case 78:
544       return aarch64_ins_simd_addr_post (self, info, code, inst);
545     case 79:
546       return aarch64_ins_sysreg (self, info, code, inst);
547     case 80:
548       return aarch64_ins_pstatefield (self, info, code, inst);
549     case 81:
550     case 82:
551     case 83:
552     case 84:
553       return aarch64_ins_sysins_op (self, info, code, inst);
554     case 85:
555     case 86:
556       return aarch64_ins_barrier (self, info, code, inst);
557     case 87:
558       return aarch64_ins_prfop (self, info, code, inst);
559     default: assert (0); abort ();
560     }
561 }