Automatic date update in version.in
[platform/upstream/binutils.git] / opcodes / aarch64-asm-2.c
1 /* This file is automatically generated by aarch64-gen.  Do not edit!  */
2 /* Copyright (C) 2012-2014 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       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
383 const char*
384 aarch64_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 }