Home | History | Annotate | Download | only in opcodes
      1 /* This file is automatically generated by aarch64-gen.  Do not edit!  */
      2 /* Copyright (C) 2012-2016 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 150:	/* mov */
     75     case 149:	/* umov */
     76       value = 149;	/* --> umov.  */
     77       break;
     78     case 152:	/* mov */
     79     case 151:	/* ins */
     80       value = 151;	/* --> ins.  */
     81       break;
     82     case 154:	/* mov */
     83     case 153:	/* ins */
     84       value = 153;	/* --> ins.  */
     85       break;
     86     case 236:	/* mvn */
     87     case 235:	/* not */
     88       value = 235;	/* --> not.  */
     89       break;
     90     case 311:	/* mov */
     91     case 310:	/* orr */
     92       value = 310;	/* --> orr.  */
     93       break;
     94     case 380:	/* sxtl */
     95     case 379:	/* sshll */
     96       value = 379;	/* --> sshll.  */
     97       break;
     98     case 382:	/* sxtl2 */
     99     case 381:	/* sshll2 */
    100       value = 381;	/* --> sshll2.  */
    101       break;
    102     case 404:	/* uxtl */
    103     case 403:	/* ushll */
    104       value = 403;	/* --> ushll.  */
    105       break;
    106     case 406:	/* uxtl2 */
    107     case 405:	/* ushll2 */
    108       value = 405;	/* --> ushll2.  */
    109       break;
    110     case 527:	/* mov */
    111     case 526:	/* dup */
    112       value = 526;	/* --> dup.  */
    113       break;
    114     case 614:	/* sxtw */
    115     case 613:	/* sxth */
    116     case 612:	/* sxtb */
    117     case 615:	/* asr */
    118     case 611:	/* sbfx */
    119     case 610:	/* sbfiz */
    120     case 609:	/* sbfm */
    121       value = 609;	/* --> sbfm.  */
    122       break;
    123     case 618:	/* bfc */
    124     case 619:	/* bfxil */
    125     case 617:	/* bfi */
    126     case 616:	/* bfm */
    127       value = 616;	/* --> bfm.  */
    128       break;
    129     case 624:	/* uxth */
    130     case 623:	/* uxtb */
    131     case 626:	/* lsr */
    132     case 625:	/* lsl */
    133     case 622:	/* ubfx */
    134     case 621:	/* ubfiz */
    135     case 620:	/* ubfm */
    136       value = 620;	/* --> ubfm.  */
    137       break;
    138     case 644:	/* cset */
    139     case 643:	/* cinc */
    140     case 642:	/* csinc */
    141       value = 642;	/* --> csinc.  */
    142       break;
    143     case 647:	/* csetm */
    144     case 646:	/* cinv */
    145     case 645:	/* csinv */
    146       value = 645;	/* --> csinv.  */
    147       break;
    148     case 649:	/* cneg */
    149     case 648:	/* csneg */
    150       value = 648;	/* --> csneg.  */
    151       break;
    152     case 667:	/* rev */
    153     case 668:	/* rev64 */
    154       value = 667;	/* --> rev.  */
    155       break;
    156     case 675:	/* lsl */
    157     case 674:	/* lslv */
    158       value = 674;	/* --> lslv.  */
    159       break;
    160     case 677:	/* lsr */
    161     case 676:	/* lsrv */
    162       value = 676;	/* --> lsrv.  */
    163       break;
    164     case 679:	/* asr */
    165     case 678:	/* asrv */
    166       value = 678;	/* --> asrv.  */
    167       break;
    168     case 681:	/* ror */
    169     case 680:	/* rorv */
    170       value = 680;	/* --> rorv.  */
    171       break;
    172     case 691:	/* mul */
    173     case 690:	/* madd */
    174       value = 690;	/* --> madd.  */
    175       break;
    176     case 693:	/* mneg */
    177     case 692:	/* msub */
    178       value = 692;	/* --> msub.  */
    179       break;
    180     case 695:	/* smull */
    181     case 694:	/* smaddl */
    182       value = 694;	/* --> smaddl.  */
    183       break;
    184     case 697:	/* smnegl */
    185     case 696:	/* smsubl */
    186       value = 696;	/* --> smsubl.  */
    187       break;
    188     case 700:	/* umull */
    189     case 699:	/* umaddl */
    190       value = 699;	/* --> umaddl.  */
    191       break;
    192     case 702:	/* umnegl */
    193     case 701:	/* umsubl */
    194       value = 701;	/* --> umsubl.  */
    195       break;
    196     case 713:	/* ror */
    197     case 712:	/* extr */
    198       value = 712;	/* --> extr.  */
    199       break;
    200     case 920:	/* bic */
    201     case 919:	/* and */
    202       value = 919;	/* --> and.  */
    203       break;
    204     case 922:	/* mov */
    205     case 921:	/* orr */
    206       value = 921;	/* --> orr.  */
    207       break;
    208     case 925:	/* tst */
    209     case 924:	/* ands */
    210       value = 924;	/* --> ands.  */
    211       break;
    212     case 930:	/* uxtw */
    213     case 929:	/* mov */
    214     case 928:	/* orr */
    215       value = 928;	/* --> orr.  */
    216       break;
    217     case 932:	/* mvn */
    218     case 931:	/* orn */
    219       value = 931;	/* --> orn.  */
    220       break;
    221     case 936:	/* tst */
    222     case 935:	/* ands */
    223       value = 935;	/* --> ands.  */
    224       break;
    225     case 1062:	/* staddb */
    226     case 966:	/* ldaddb */
    227       value = 966;	/* --> ldaddb.  */
    228       break;
    229     case 1063:	/* staddh */
    230     case 967:	/* ldaddh */
    231       value = 967;	/* --> ldaddh.  */
    232       break;
    233     case 1064:	/* stadd */
    234     case 968:	/* ldadd */
    235       value = 968;	/* --> ldadd.  */
    236       break;
    237     case 1065:	/* staddlb */
    238     case 970:	/* ldaddlb */
    239       value = 970;	/* --> ldaddlb.  */
    240       break;
    241     case 1066:	/* staddlh */
    242     case 973:	/* ldaddlh */
    243       value = 973;	/* --> ldaddlh.  */
    244       break;
    245     case 1067:	/* staddl */
    246     case 976:	/* ldaddl */
    247       value = 976;	/* --> ldaddl.  */
    248       break;
    249     case 1068:	/* stclrb */
    250     case 978:	/* ldclrb */
    251       value = 978;	/* --> ldclrb.  */
    252       break;
    253     case 1069:	/* stclrh */
    254     case 979:	/* ldclrh */
    255       value = 979;	/* --> ldclrh.  */
    256       break;
    257     case 1070:	/* stclr */
    258     case 980:	/* ldclr */
    259       value = 980;	/* --> ldclr.  */
    260       break;
    261     case 1071:	/* stclrlb */
    262     case 982:	/* ldclrlb */
    263       value = 982;	/* --> ldclrlb.  */
    264       break;
    265     case 1072:	/* stclrlh */
    266     case 985:	/* ldclrlh */
    267       value = 985;	/* --> ldclrlh.  */
    268       break;
    269     case 1073:	/* stclrl */
    270     case 988:	/* ldclrl */
    271       value = 988;	/* --> ldclrl.  */
    272       break;
    273     case 1074:	/* steorb */
    274     case 990:	/* ldeorb */
    275       value = 990;	/* --> ldeorb.  */
    276       break;
    277     case 1075:	/* steorh */
    278     case 991:	/* ldeorh */
    279       value = 991;	/* --> ldeorh.  */
    280       break;
    281     case 1076:	/* steor */
    282     case 992:	/* ldeor */
    283       value = 992;	/* --> ldeor.  */
    284       break;
    285     case 1077:	/* steorlb */
    286     case 994:	/* ldeorlb */
    287       value = 994;	/* --> ldeorlb.  */
    288       break;
    289     case 1078:	/* steorlh */
    290     case 997:	/* ldeorlh */
    291       value = 997;	/* --> ldeorlh.  */
    292       break;
    293     case 1079:	/* steorl */
    294     case 1000:	/* ldeorl */
    295       value = 1000;	/* --> ldeorl.  */
    296       break;
    297     case 1080:	/* stsetb */
    298     case 1002:	/* ldsetb */
    299       value = 1002;	/* --> ldsetb.  */
    300       break;
    301     case 1081:	/* stseth */
    302     case 1003:	/* ldseth */
    303       value = 1003;	/* --> ldseth.  */
    304       break;
    305     case 1082:	/* stset */
    306     case 1004:	/* ldset */
    307       value = 1004;	/* --> ldset.  */
    308       break;
    309     case 1083:	/* stsetlb */
    310     case 1006:	/* ldsetlb */
    311       value = 1006;	/* --> ldsetlb.  */
    312       break;
    313     case 1084:	/* stsetlh */
    314     case 1009:	/* ldsetlh */
    315       value = 1009;	/* --> ldsetlh.  */
    316       break;
    317     case 1085:	/* stsetl */
    318     case 1012:	/* ldsetl */
    319       value = 1012;	/* --> ldsetl.  */
    320       break;
    321     case 1086:	/* stsmaxb */
    322     case 1014:	/* ldsmaxb */
    323       value = 1014;	/* --> ldsmaxb.  */
    324       break;
    325     case 1087:	/* stsmaxh */
    326     case 1015:	/* ldsmaxh */
    327       value = 1015;	/* --> ldsmaxh.  */
    328       break;
    329     case 1088:	/* stsmax */
    330     case 1016:	/* ldsmax */
    331       value = 1016;	/* --> ldsmax.  */
    332       break;
    333     case 1089:	/* stsmaxlb */
    334     case 1018:	/* ldsmaxlb */
    335       value = 1018;	/* --> ldsmaxlb.  */
    336       break;
    337     case 1090:	/* stsmaxlh */
    338     case 1021:	/* ldsmaxlh */
    339       value = 1021;	/* --> ldsmaxlh.  */
    340       break;
    341     case 1091:	/* stsmaxl */
    342     case 1024:	/* ldsmaxl */
    343       value = 1024;	/* --> ldsmaxl.  */
    344       break;
    345     case 1092:	/* stsminb */
    346     case 1026:	/* ldsminb */
    347       value = 1026;	/* --> ldsminb.  */
    348       break;
    349     case 1093:	/* stsminh */
    350     case 1027:	/* ldsminh */
    351       value = 1027;	/* --> ldsminh.  */
    352       break;
    353     case 1094:	/* stsmin */
    354     case 1028:	/* ldsmin */
    355       value = 1028;	/* --> ldsmin.  */
    356       break;
    357     case 1095:	/* stsminlb */
    358     case 1030:	/* ldsminlb */
    359       value = 1030;	/* --> ldsminlb.  */
    360       break;
    361     case 1096:	/* stsminlh */
    362     case 1033:	/* ldsminlh */
    363       value = 1033;	/* --> ldsminlh.  */
    364       break;
    365     case 1097:	/* stsminl */
    366     case 1036:	/* ldsminl */
    367       value = 1036;	/* --> ldsminl.  */
    368       break;
    369     case 1098:	/* stumaxb */
    370     case 1038:	/* ldumaxb */
    371       value = 1038;	/* --> ldumaxb.  */
    372       break;
    373     case 1099:	/* stumaxh */
    374     case 1039:	/* ldumaxh */
    375       value = 1039;	/* --> ldumaxh.  */
    376       break;
    377     case 1100:	/* stumax */
    378     case 1040:	/* ldumax */
    379       value = 1040;	/* --> ldumax.  */
    380       break;
    381     case 1101:	/* stumaxlb */
    382     case 1042:	/* ldumaxlb */
    383       value = 1042;	/* --> ldumaxlb.  */
    384       break;
    385     case 1102:	/* stumaxlh */
    386     case 1045:	/* ldumaxlh */
    387       value = 1045;	/* --> ldumaxlh.  */
    388       break;
    389     case 1103:	/* stumaxl */
    390     case 1048:	/* ldumaxl */
    391       value = 1048;	/* --> ldumaxl.  */
    392       break;
    393     case 1104:	/* stuminb */
    394     case 1050:	/* lduminb */
    395       value = 1050;	/* --> lduminb.  */
    396       break;
    397     case 1105:	/* stuminh */
    398     case 1051:	/* lduminh */
    399       value = 1051;	/* --> lduminh.  */
    400       break;
    401     case 1106:	/* stumin */
    402     case 1052:	/* ldumin */
    403       value = 1052;	/* --> ldumin.  */
    404       break;
    405     case 1107:	/* stuminlb */
    406     case 1054:	/* lduminlb */
    407       value = 1054;	/* --> lduminlb.  */
    408       break;
    409     case 1108:	/* stuminlh */
    410     case 1057:	/* lduminlh */
    411       value = 1057;	/* --> lduminlh.  */
    412       break;
    413     case 1109:	/* stuminl */
    414     case 1060:	/* lduminl */
    415       value = 1060;	/* --> lduminl.  */
    416       break;
    417     case 1111:	/* mov */
    418     case 1110:	/* movn */
    419       value = 1110;	/* --> movn.  */
    420       break;
    421     case 1113:	/* mov */
    422     case 1112:	/* movz */
    423       value = 1112;	/* --> movz.  */
    424       break;
    425     case 1126:	/* psb */
    426     case 1125:	/* esb */
    427     case 1124:	/* sevl */
    428     case 1123:	/* sev */
    429     case 1122:	/* wfi */
    430     case 1121:	/* wfe */
    431     case 1120:	/* yield */
    432     case 1119:	/* nop */
    433     case 1118:	/* hint */
    434       value = 1118;	/* --> hint.  */
    435       break;
    436     case 1135:	/* tlbi */
    437     case 1134:	/* ic */
    438     case 1133:	/* dc */
    439     case 1132:	/* at */
    440     case 1131:	/* sys */
    441       value = 1131;	/* --> sys.  */
    442       break;
    443     default: return NULL;
    444     }
    445 
    446   return aarch64_opcode_table + value;
    447 }
    448 
    449 const char*
    450 aarch64_insert_operand (const aarch64_operand *self,
    451 			   const aarch64_opnd_info *info,
    452 			   aarch64_insn *code, const aarch64_inst *inst)
    453 {
    454   /* Use the index as the key.  */
    455   int key = self - aarch64_operands;
    456   switch (key)
    457     {
    458     case 1:
    459     case 2:
    460     case 3:
    461     case 4:
    462     case 5:
    463     case 6:
    464     case 7:
    465     case 8:
    466     case 9:
    467     case 10:
    468     case 14:
    469     case 15:
    470     case 16:
    471     case 17:
    472     case 19:
    473     case 20:
    474     case 21:
    475     case 22:
    476     case 23:
    477     case 24:
    478     case 25:
    479     case 26:
    480     case 27:
    481     case 35:
    482     case 36:
    483       return aarch64_ins_regno (self, info, code, inst);
    484     case 12:
    485       return aarch64_ins_reg_extended (self, info, code, inst);
    486     case 13:
    487       return aarch64_ins_reg_shifted (self, info, code, inst);
    488     case 18:
    489       return aarch64_ins_ft (self, info, code, inst);
    490     case 28:
    491     case 29:
    492     case 30:
    493       return aarch64_ins_reglane (self, info, code, inst);
    494     case 31:
    495       return aarch64_ins_reglist (self, info, code, inst);
    496     case 32:
    497       return aarch64_ins_ldst_reglist (self, info, code, inst);
    498     case 33:
    499       return aarch64_ins_ldst_reglist_r (self, info, code, inst);
    500     case 34:
    501       return aarch64_ins_ldst_elemlist (self, info, code, inst);
    502     case 37:
    503     case 46:
    504     case 47:
    505     case 48:
    506     case 49:
    507     case 50:
    508     case 51:
    509     case 52:
    510     case 53:
    511     case 54:
    512     case 55:
    513     case 56:
    514     case 57:
    515     case 58:
    516     case 67:
    517     case 68:
    518     case 69:
    519     case 70:
    520       return aarch64_ins_imm (self, info, code, inst);
    521     case 38:
    522     case 39:
    523       return aarch64_ins_advsimd_imm_shift (self, info, code, inst);
    524     case 40:
    525     case 41:
    526     case 42:
    527       return aarch64_ins_advsimd_imm_modified (self, info, code, inst);
    528     case 59:
    529       return aarch64_ins_limm (self, info, code, inst);
    530     case 60:
    531       return aarch64_ins_aimm (self, info, code, inst);
    532     case 61:
    533       return aarch64_ins_imm_half (self, info, code, inst);
    534     case 62:
    535       return aarch64_ins_fbits (self, info, code, inst);
    536     case 64:
    537     case 65:
    538       return aarch64_ins_cond (self, info, code, inst);
    539     case 71:
    540     case 77:
    541       return aarch64_ins_addr_simple (self, info, code, inst);
    542     case 72:
    543       return aarch64_ins_addr_regoff (self, info, code, inst);
    544     case 73:
    545     case 74:
    546     case 75:
    547       return aarch64_ins_addr_simm (self, info, code, inst);
    548     case 76:
    549       return aarch64_ins_addr_uimm12 (self, info, code, inst);
    550     case 78:
    551       return aarch64_ins_simd_addr_post (self, info, code, inst);
    552     case 79:
    553       return aarch64_ins_sysreg (self, info, code, inst);
    554     case 80:
    555       return aarch64_ins_pstatefield (self, info, code, inst);
    556     case 81:
    557     case 82:
    558     case 83:
    559     case 84:
    560       return aarch64_ins_sysins_op (self, info, code, inst);
    561     case 85:
    562     case 86:
    563       return aarch64_ins_barrier (self, info, code, inst);
    564     case 87:
    565       return aarch64_ins_prfop (self, info, code, inst);
    566     case 88:
    567       return aarch64_ins_hint (self, info, code, inst);
    568     default: assert (0); abort ();
    569     }
    570 }
    571