/* This file is automatically generated by aarch64-gen.  Do not edit!  */
/* Copyright (C) 2012-2016 Free Software Foundation, Inc.
   Contributed by ARM Ltd.

   This file is part of the GNU opcodes library.

   This library is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3, or (at your option)
   any later version.

   It is distributed in the hope that it will be useful, but WITHOUT
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
   License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; see the file COPYING3. If not,
   see <http://www.gnu.org/licenses/>.  */

#include "sysdep.h"
#include "aarch64-asm.h"


const aarch64_opcode *
aarch64_find_real_opcode (const aarch64_opcode *opcode)
{
  /* Use the index as the key to locate the real opcode.  */
  int key = opcode - aarch64_opcode_table;
  int value;
  switch (key)
    {
    case 3:	/* ngc */
    case 2:	/* sbc */
      value = 2;	/* --> sbc.  */
      break;
    case 5:	/* ngcs */
    case 4:	/* sbcs */
      value = 4;	/* --> sbcs.  */
      break;
    case 8:	/* cmn */
    case 7:	/* adds */
      value = 7;	/* --> adds.  */
      break;
    case 11:	/* cmp */
    case 10:	/* subs */
      value = 10;	/* --> subs.  */
      break;
    case 13:	/* mov */
    case 12:	/* add */
      value = 12;	/* --> add.  */
      break;
    case 15:	/* cmn */
    case 14:	/* adds */
      value = 14;	/* --> adds.  */
      break;
    case 18:	/* cmp */
    case 17:	/* subs */
      value = 17;	/* --> subs.  */
      break;
    case 21:	/* cmn */
    case 20:	/* adds */
      value = 20;	/* --> adds.  */
      break;
    case 23:	/* neg */
    case 22:	/* sub */
      value = 22;	/* --> sub.  */
      break;
    case 26:	/* negs */
    case 25:	/* cmp */
    case 24:	/* subs */
      value = 24;	/* --> subs.  */
      break;
    case 150:	/* mov */
    case 149:	/* umov */
      value = 149;	/* --> umov.  */
      break;
    case 152:	/* mov */
    case 151:	/* ins */
      value = 151;	/* --> ins.  */
      break;
    case 154:	/* mov */
    case 153:	/* ins */
      value = 153;	/* --> ins.  */
      break;
    case 236:	/* mvn */
    case 235:	/* not */
      value = 235;	/* --> not.  */
      break;
    case 311:	/* mov */
    case 310:	/* orr */
      value = 310;	/* --> orr.  */
      break;
    case 380:	/* sxtl */
    case 379:	/* sshll */
      value = 379;	/* --> sshll.  */
      break;
    case 382:	/* sxtl2 */
    case 381:	/* sshll2 */
      value = 381;	/* --> sshll2.  */
      break;
    case 404:	/* uxtl */
    case 403:	/* ushll */
      value = 403;	/* --> ushll.  */
      break;
    case 406:	/* uxtl2 */
    case 405:	/* ushll2 */
      value = 405;	/* --> ushll2.  */
      break;
    case 527:	/* mov */
    case 526:	/* dup */
      value = 526;	/* --> dup.  */
      break;
    case 614:	/* sxtw */
    case 613:	/* sxth */
    case 612:	/* sxtb */
    case 615:	/* asr */
    case 611:	/* sbfx */
    case 610:	/* sbfiz */
    case 609:	/* sbfm */
      value = 609;	/* --> sbfm.  */
      break;
    case 618:	/* bfc */
    case 619:	/* bfxil */
    case 617:	/* bfi */
    case 616:	/* bfm */
      value = 616;	/* --> bfm.  */
      break;
    case 624:	/* uxth */
    case 623:	/* uxtb */
    case 626:	/* lsr */
    case 625:	/* lsl */
    case 622:	/* ubfx */
    case 621:	/* ubfiz */
    case 620:	/* ubfm */
      value = 620;	/* --> ubfm.  */
      break;
    case 644:	/* cset */
    case 643:	/* cinc */
    case 642:	/* csinc */
      value = 642;	/* --> csinc.  */
      break;
    case 647:	/* csetm */
    case 646:	/* cinv */
    case 645:	/* csinv */
      value = 645;	/* --> csinv.  */
      break;
    case 649:	/* cneg */
    case 648:	/* csneg */
      value = 648;	/* --> csneg.  */
      break;
    case 667:	/* rev */
    case 668:	/* rev64 */
      value = 667;	/* --> rev.  */
      break;
    case 675:	/* lsl */
    case 674:	/* lslv */
      value = 674;	/* --> lslv.  */
      break;
    case 677:	/* lsr */
    case 676:	/* lsrv */
      value = 676;	/* --> lsrv.  */
      break;
    case 679:	/* asr */
    case 678:	/* asrv */
      value = 678;	/* --> asrv.  */
      break;
    case 681:	/* ror */
    case 680:	/* rorv */
      value = 680;	/* --> rorv.  */
      break;
    case 691:	/* mul */
    case 690:	/* madd */
      value = 690;	/* --> madd.  */
      break;
    case 693:	/* mneg */
    case 692:	/* msub */
      value = 692;	/* --> msub.  */
      break;
    case 695:	/* smull */
    case 694:	/* smaddl */
      value = 694;	/* --> smaddl.  */
      break;
    case 697:	/* smnegl */
    case 696:	/* smsubl */
      value = 696;	/* --> smsubl.  */
      break;
    case 700:	/* umull */
    case 699:	/* umaddl */
      value = 699;	/* --> umaddl.  */
      break;
    case 702:	/* umnegl */
    case 701:	/* umsubl */
      value = 701;	/* --> umsubl.  */
      break;
    case 713:	/* ror */
    case 712:	/* extr */
      value = 712;	/* --> extr.  */
      break;
    case 920:	/* bic */
    case 919:	/* and */
      value = 919;	/* --> and.  */
      break;
    case 922:	/* mov */
    case 921:	/* orr */
      value = 921;	/* --> orr.  */
      break;
    case 925:	/* tst */
    case 924:	/* ands */
      value = 924;	/* --> ands.  */
      break;
    case 930:	/* uxtw */
    case 929:	/* mov */
    case 928:	/* orr */
      value = 928;	/* --> orr.  */
      break;
    case 932:	/* mvn */
    case 931:	/* orn */
      value = 931;	/* --> orn.  */
      break;
    case 936:	/* tst */
    case 935:	/* ands */
      value = 935;	/* --> ands.  */
      break;
    case 1062:	/* staddb */
    case 966:	/* ldaddb */
      value = 966;	/* --> ldaddb.  */
      break;
    case 1063:	/* staddh */
    case 967:	/* ldaddh */
      value = 967;	/* --> ldaddh.  */
      break;
    case 1064:	/* stadd */
    case 968:	/* ldadd */
      value = 968;	/* --> ldadd.  */
      break;
    case 1065:	/* staddlb */
    case 970:	/* ldaddlb */
      value = 970;	/* --> ldaddlb.  */
      break;
    case 1066:	/* staddlh */
    case 973:	/* ldaddlh */
      value = 973;	/* --> ldaddlh.  */
      break;
    case 1067:	/* staddl */
    case 976:	/* ldaddl */
      value = 976;	/* --> ldaddl.  */
      break;
    case 1068:	/* stclrb */
    case 978:	/* ldclrb */
      value = 978;	/* --> ldclrb.  */
      break;
    case 1069:	/* stclrh */
    case 979:	/* ldclrh */
      value = 979;	/* --> ldclrh.  */
      break;
    case 1070:	/* stclr */
    case 980:	/* ldclr */
      value = 980;	/* --> ldclr.  */
      break;
    case 1071:	/* stclrlb */
    case 982:	/* ldclrlb */
      value = 982;	/* --> ldclrlb.  */
      break;
    case 1072:	/* stclrlh */
    case 985:	/* ldclrlh */
      value = 985;	/* --> ldclrlh.  */
      break;
    case 1073:	/* stclrl */
    case 988:	/* ldclrl */
      value = 988;	/* --> ldclrl.  */
      break;
    case 1074:	/* steorb */
    case 990:	/* ldeorb */
      value = 990;	/* --> ldeorb.  */
      break;
    case 1075:	/* steorh */
    case 991:	/* ldeorh */
      value = 991;	/* --> ldeorh.  */
      break;
    case 1076:	/* steor */
    case 992:	/* ldeor */
      value = 992;	/* --> ldeor.  */
      break;
    case 1077:	/* steorlb */
    case 994:	/* ldeorlb */
      value = 994;	/* --> ldeorlb.  */
      break;
    case 1078:	/* steorlh */
    case 997:	/* ldeorlh */
      value = 997;	/* --> ldeorlh.  */
      break;
    case 1079:	/* steorl */
    case 1000:	/* ldeorl */
      value = 1000;	/* --> ldeorl.  */
      break;
    case 1080:	/* stsetb */
    case 1002:	/* ldsetb */
      value = 1002;	/* --> ldsetb.  */
      break;
    case 1081:	/* stseth */
    case 1003:	/* ldseth */
      value = 1003;	/* --> ldseth.  */
      break;
    case 1082:	/* stset */
    case 1004:	/* ldset */
      value = 1004;	/* --> ldset.  */
      break;
    case 1083:	/* stsetlb */
    case 1006:	/* ldsetlb */
      value = 1006;	/* --> ldsetlb.  */
      break;
    case 1084:	/* stsetlh */
    case 1009:	/* ldsetlh */
      value = 1009;	/* --> ldsetlh.  */
      break;
    case 1085:	/* stsetl */
    case 1012:	/* ldsetl */
      value = 1012;	/* --> ldsetl.  */
      break;
    case 1086:	/* stsmaxb */
    case 1014:	/* ldsmaxb */
      value = 1014;	/* --> ldsmaxb.  */
      break;
    case 1087:	/* stsmaxh */
    case 1015:	/* ldsmaxh */
      value = 1015;	/* --> ldsmaxh.  */
      break;
    case 1088:	/* stsmax */
    case 1016:	/* ldsmax */
      value = 1016;	/* --> ldsmax.  */
      break;
    case 1089:	/* stsmaxlb */
    case 1018:	/* ldsmaxlb */
      value = 1018;	/* --> ldsmaxlb.  */
      break;
    case 1090:	/* stsmaxlh */
    case 1021:	/* ldsmaxlh */
      value = 1021;	/* --> ldsmaxlh.  */
      break;
    case 1091:	/* stsmaxl */
    case 1024:	/* ldsmaxl */
      value = 1024;	/* --> ldsmaxl.  */
      break;
    case 1092:	/* stsminb */
    case 1026:	/* ldsminb */
      value = 1026;	/* --> ldsminb.  */
      break;
    case 1093:	/* stsminh */
    case 1027:	/* ldsminh */
      value = 1027;	/* --> ldsminh.  */
      break;
    case 1094:	/* stsmin */
    case 1028:	/* ldsmin */
      value = 1028;	/* --> ldsmin.  */
      break;
    case 1095:	/* stsminlb */
    case 1030:	/* ldsminlb */
      value = 1030;	/* --> ldsminlb.  */
      break;
    case 1096:	/* stsminlh */
    case 1033:	/* ldsminlh */
      value = 1033;	/* --> ldsminlh.  */
      break;
    case 1097:	/* stsminl */
    case 1036:	/* ldsminl */
      value = 1036;	/* --> ldsminl.  */
      break;
    case 1098:	/* stumaxb */
    case 1038:	/* ldumaxb */
      value = 1038;	/* --> ldumaxb.  */
      break;
    case 1099:	/* stumaxh */
    case 1039:	/* ldumaxh */
      value = 1039;	/* --> ldumaxh.  */
      break;
    case 1100:	/* stumax */
    case 1040:	/* ldumax */
      value = 1040;	/* --> ldumax.  */
      break;
    case 1101:	/* stumaxlb */
    case 1042:	/* ldumaxlb */
      value = 1042;	/* --> ldumaxlb.  */
      break;
    case 1102:	/* stumaxlh */
    case 1045:	/* ldumaxlh */
      value = 1045;	/* --> ldumaxlh.  */
      break;
    case 1103:	/* stumaxl */
    case 1048:	/* ldumaxl */
      value = 1048;	/* --> ldumaxl.  */
      break;
    case 1104:	/* stuminb */
    case 1050:	/* lduminb */
      value = 1050;	/* --> lduminb.  */
      break;
    case 1105:	/* stuminh */
    case 1051:	/* lduminh */
      value = 1051;	/* --> lduminh.  */
      break;
    case 1106:	/* stumin */
    case 1052:	/* ldumin */
      value = 1052;	/* --> ldumin.  */
      break;
    case 1107:	/* stuminlb */
    case 1054:	/* lduminlb */
      value = 1054;	/* --> lduminlb.  */
      break;
    case 1108:	/* stuminlh */
    case 1057:	/* lduminlh */
      value = 1057;	/* --> lduminlh.  */
      break;
    case 1109:	/* stuminl */
    case 1060:	/* lduminl */
      value = 1060;	/* --> lduminl.  */
      break;
    case 1111:	/* mov */
    case 1110:	/* movn */
      value = 1110;	/* --> movn.  */
      break;
    case 1113:	/* mov */
    case 1112:	/* movz */
      value = 1112;	/* --> movz.  */
      break;
    case 1126:	/* psb */
    case 1125:	/* esb */
    case 1124:	/* sevl */
    case 1123:	/* sev */
    case 1122:	/* wfi */
    case 1121:	/* wfe */
    case 1120:	/* yield */
    case 1119:	/* nop */
    case 1118:	/* hint */
      value = 1118;	/* --> hint.  */
      break;
    case 1135:	/* tlbi */
    case 1134:	/* ic */
    case 1133:	/* dc */
    case 1132:	/* at */
    case 1131:	/* sys */
      value = 1131;	/* --> sys.  */
      break;
    default: return NULL;
    }

  return aarch64_opcode_table + value;
}

const char*
aarch64_insert_operand (const aarch64_operand *self,
			   const aarch64_opnd_info *info,
			   aarch64_insn *code, const aarch64_inst *inst)
{
  /* Use the index as the key.  */
  int key = self - aarch64_operands;
  switch (key)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
    case 10:
    case 14:
    case 15:
    case 16:
    case 17:
    case 19:
    case 20:
    case 21:
    case 22:
    case 23:
    case 24:
    case 25:
    case 26:
    case 27:
    case 35:
    case 36:
      return aarch64_ins_regno (self, info, code, inst);
    case 12:
      return aarch64_ins_reg_extended (self, info, code, inst);
    case 13:
      return aarch64_ins_reg_shifted (self, info, code, inst);
    case 18:
      return aarch64_ins_ft (self, info, code, inst);
    case 28:
    case 29:
    case 30:
      return aarch64_ins_reglane (self, info, code, inst);
    case 31:
      return aarch64_ins_reglist (self, info, code, inst);
    case 32:
      return aarch64_ins_ldst_reglist (self, info, code, inst);
    case 33:
      return aarch64_ins_ldst_reglist_r (self, info, code, inst);
    case 34:
      return aarch64_ins_ldst_elemlist (self, info, code, inst);
    case 37:
    case 46:
    case 47:
    case 48:
    case 49:
    case 50:
    case 51:
    case 52:
    case 53:
    case 54:
    case 55:
    case 56:
    case 57:
    case 58:
    case 67:
    case 68:
    case 69:
    case 70:
      return aarch64_ins_imm (self, info, code, inst);
    case 38:
    case 39:
      return aarch64_ins_advsimd_imm_shift (self, info, code, inst);
    case 40:
    case 41:
    case 42:
      return aarch64_ins_advsimd_imm_modified (self, info, code, inst);
    case 59:
      return aarch64_ins_limm (self, info, code, inst);
    case 60:
      return aarch64_ins_aimm (self, info, code, inst);
    case 61:
      return aarch64_ins_imm_half (self, info, code, inst);
    case 62:
      return aarch64_ins_fbits (self, info, code, inst);
    case 64:
    case 65:
      return aarch64_ins_cond (self, info, code, inst);
    case 71:
    case 77:
      return aarch64_ins_addr_simple (self, info, code, inst);
    case 72:
      return aarch64_ins_addr_regoff (self, info, code, inst);
    case 73:
    case 74:
    case 75:
      return aarch64_ins_addr_simm (self, info, code, inst);
    case 76:
      return aarch64_ins_addr_uimm12 (self, info, code, inst);
    case 78:
      return aarch64_ins_simd_addr_post (self, info, code, inst);
    case 79:
      return aarch64_ins_sysreg (self, info, code, inst);
    case 80:
      return aarch64_ins_pstatefield (self, info, code, inst);
    case 81:
    case 82:
    case 83:
    case 84:
      return aarch64_ins_sysins_op (self, info, code, inst);
    case 85:
    case 86:
      return aarch64_ins_barrier (self, info, code, inst);
    case 87:
      return aarch64_ins_prfop (self, info, code, inst);
    case 88:
      return aarch64_ins_hint (self, info, code, inst);
    default: assert (0); abort ();
    }
}