/* This file is automatically generated by aarch64-gen.  Do not edit!  */
/* Copyright (C) 2012-2021 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 23:	/* cmn */
    case 22:	/* adds */
      value = 22;	/* --> adds.  */
      break;
    case 25:	/* neg */
    case 24:	/* sub */
      value = 24;	/* --> sub.  */
      break;
    case 27:	/* cmp */
    case 28:	/* negs */
    case 26:	/* subs */
      value = 26;	/* --> subs.  */
      break;
    case 153:	/* mov */
    case 152:	/* umov */
      value = 152;	/* --> umov.  */
      break;
    case 155:	/* mov */
    case 154:	/* ins */
      value = 154;	/* --> ins.  */
      break;
    case 157:	/* mov */
    case 156:	/* ins */
      value = 156;	/* --> ins.  */
      break;
    case 243:	/* mvn */
    case 242:	/* not */
      value = 242;	/* --> not.  */
      break;
    case 318:	/* mov */
    case 317:	/* orr */
      value = 317;	/* --> orr.  */
      break;
    case 389:	/* sxtl */
    case 388:	/* sshll */
      value = 388;	/* --> sshll.  */
      break;
    case 391:	/* sxtl2 */
    case 390:	/* sshll2 */
      value = 390;	/* --> sshll2.  */
      break;
    case 413:	/* uxtl */
    case 412:	/* ushll */
      value = 412;	/* --> ushll.  */
      break;
    case 415:	/* uxtl2 */
    case 414:	/* ushll2 */
      value = 414;	/* --> ushll2.  */
      break;
    case 536:	/* mov */
    case 535:	/* dup */
      value = 535;	/* --> dup.  */
      break;
    case 623:	/* sxtw */
    case 622:	/* sxth */
    case 621:	/* sxtb */
    case 624:	/* asr */
    case 620:	/* sbfx */
    case 619:	/* sbfiz */
    case 618:	/* sbfm */
      value = 618;	/* --> sbfm.  */
      break;
    case 627:	/* bfc */
    case 628:	/* bfxil */
    case 626:	/* bfi */
    case 625:	/* bfm */
      value = 625;	/* --> bfm.  */
      break;
    case 633:	/* uxth */
    case 632:	/* uxtb */
    case 635:	/* lsr */
    case 634:	/* lsl */
    case 631:	/* ubfx */
    case 630:	/* ubfiz */
    case 629:	/* ubfm */
      value = 629;	/* --> ubfm.  */
      break;
    case 665:	/* cset */
    case 664:	/* cinc */
    case 663:	/* csinc */
      value = 663;	/* --> csinc.  */
      break;
    case 668:	/* csetm */
    case 667:	/* cinv */
    case 666:	/* csinv */
      value = 666;	/* --> csinv.  */
      break;
    case 670:	/* cneg */
    case 669:	/* csneg */
      value = 669;	/* --> csneg.  */
      break;
    case 688:	/* rev */
    case 689:	/* rev64 */
      value = 688;	/* --> rev.  */
      break;
    case 714:	/* lsl */
    case 713:	/* lslv */
      value = 713;	/* --> lslv.  */
      break;
    case 716:	/* lsr */
    case 715:	/* lsrv */
      value = 715;	/* --> lsrv.  */
      break;
    case 718:	/* asr */
    case 717:	/* asrv */
      value = 717;	/* --> asrv.  */
      break;
    case 720:	/* ror */
    case 719:	/* rorv */
      value = 719;	/* --> rorv.  */
      break;
    case 723:	/* cmpp */
    case 722:	/* subps */
      value = 722;	/* --> subps.  */
      break;
    case 736:	/* mul */
    case 735:	/* madd */
      value = 735;	/* --> madd.  */
      break;
    case 738:	/* mneg */
    case 737:	/* msub */
      value = 737;	/* --> msub.  */
      break;
    case 740:	/* smull */
    case 739:	/* smaddl */
      value = 739;	/* --> smaddl.  */
      break;
    case 742:	/* smnegl */
    case 741:	/* smsubl */
      value = 741;	/* --> smsubl.  */
      break;
    case 745:	/* umull */
    case 744:	/* umaddl */
      value = 744;	/* --> umaddl.  */
      break;
    case 747:	/* umnegl */
    case 746:	/* umsubl */
      value = 746;	/* --> umsubl.  */
      break;
    case 759:	/* ror */
    case 758:	/* extr */
      value = 758;	/* --> extr.  */
      break;
    case 996:	/* bic */
    case 995:	/* and */
      value = 995;	/* --> and.  */
      break;
    case 998:	/* mov */
    case 997:	/* orr */
      value = 997;	/* --> orr.  */
      break;
    case 1001:	/* tst */
    case 1000:	/* ands */
      value = 1000;	/* --> ands.  */
      break;
    case 1006:	/* uxtw */
    case 1005:	/* mov */
    case 1004:	/* orr */
      value = 1004;	/* --> orr.  */
      break;
    case 1008:	/* mvn */
    case 1007:	/* orn */
      value = 1007;	/* --> orn.  */
      break;
    case 1012:	/* tst */
    case 1011:	/* ands */
      value = 1011;	/* --> ands.  */
      break;
    case 1138:	/* staddb */
    case 1042:	/* ldaddb */
      value = 1042;	/* --> ldaddb.  */
      break;
    case 1139:	/* staddh */
    case 1043:	/* ldaddh */
      value = 1043;	/* --> ldaddh.  */
      break;
    case 1140:	/* stadd */
    case 1044:	/* ldadd */
      value = 1044;	/* --> ldadd.  */
      break;
    case 1141:	/* staddlb */
    case 1046:	/* ldaddlb */
      value = 1046;	/* --> ldaddlb.  */
      break;
    case 1142:	/* staddlh */
    case 1049:	/* ldaddlh */
      value = 1049;	/* --> ldaddlh.  */
      break;
    case 1143:	/* staddl */
    case 1052:	/* ldaddl */
      value = 1052;	/* --> ldaddl.  */
      break;
    case 1144:	/* stclrb */
    case 1054:	/* ldclrb */
      value = 1054;	/* --> ldclrb.  */
      break;
    case 1145:	/* stclrh */
    case 1055:	/* ldclrh */
      value = 1055;	/* --> ldclrh.  */
      break;
    case 1146:	/* stclr */
    case 1056:	/* ldclr */
      value = 1056;	/* --> ldclr.  */
      break;
    case 1147:	/* stclrlb */
    case 1058:	/* ldclrlb */
      value = 1058;	/* --> ldclrlb.  */
      break;
    case 1148:	/* stclrlh */
    case 1061:	/* ldclrlh */
      value = 1061;	/* --> ldclrlh.  */
      break;
    case 1149:	/* stclrl */
    case 1064:	/* ldclrl */
      value = 1064;	/* --> ldclrl.  */
      break;
    case 1150:	/* steorb */
    case 1066:	/* ldeorb */
      value = 1066;	/* --> ldeorb.  */
      break;
    case 1151:	/* steorh */
    case 1067:	/* ldeorh */
      value = 1067;	/* --> ldeorh.  */
      break;
    case 1152:	/* steor */
    case 1068:	/* ldeor */
      value = 1068;	/* --> ldeor.  */
      break;
    case 1153:	/* steorlb */
    case 1070:	/* ldeorlb */
      value = 1070;	/* --> ldeorlb.  */
      break;
    case 1154:	/* steorlh */
    case 1073:	/* ldeorlh */
      value = 1073;	/* --> ldeorlh.  */
      break;
    case 1155:	/* steorl */
    case 1076:	/* ldeorl */
      value = 1076;	/* --> ldeorl.  */
      break;
    case 1156:	/* stsetb */
    case 1078:	/* ldsetb */
      value = 1078;	/* --> ldsetb.  */
      break;
    case 1157:	/* stseth */
    case 1079:	/* ldseth */
      value = 1079;	/* --> ldseth.  */
      break;
    case 1158:	/* stset */
    case 1080:	/* ldset */
      value = 1080;	/* --> ldset.  */
      break;
    case 1159:	/* stsetlb */
    case 1082:	/* ldsetlb */
      value = 1082;	/* --> ldsetlb.  */
      break;
    case 1160:	/* stsetlh */
    case 1085:	/* ldsetlh */
      value = 1085;	/* --> ldsetlh.  */
      break;
    case 1161:	/* stsetl */
    case 1088:	/* ldsetl */
      value = 1088;	/* --> ldsetl.  */
      break;
    case 1162:	/* stsmaxb */
    case 1090:	/* ldsmaxb */
      value = 1090;	/* --> ldsmaxb.  */
      break;
    case 1163:	/* stsmaxh */
    case 1091:	/* ldsmaxh */
      value = 1091;	/* --> ldsmaxh.  */
      break;
    case 1164:	/* stsmax */
    case 1092:	/* ldsmax */
      value = 1092;	/* --> ldsmax.  */
      break;
    case 1165:	/* stsmaxlb */
    case 1094:	/* ldsmaxlb */
      value = 1094;	/* --> ldsmaxlb.  */
      break;
    case 1166:	/* stsmaxlh */
    case 1097:	/* ldsmaxlh */
      value = 1097;	/* --> ldsmaxlh.  */
      break;
    case 1167:	/* stsmaxl */
    case 1100:	/* ldsmaxl */
      value = 1100;	/* --> ldsmaxl.  */
      break;
    case 1168:	/* stsminb */
    case 1102:	/* ldsminb */
      value = 1102;	/* --> ldsminb.  */
      break;
    case 1169:	/* stsminh */
    case 1103:	/* ldsminh */
      value = 1103;	/* --> ldsminh.  */
      break;
    case 1170:	/* stsmin */
    case 1104:	/* ldsmin */
      value = 1104;	/* --> ldsmin.  */
      break;
    case 1171:	/* stsminlb */
    case 1106:	/* ldsminlb */
      value = 1106;	/* --> ldsminlb.  */
      break;
    case 1172:	/* stsminlh */
    case 1109:	/* ldsminlh */
      value = 1109;	/* --> ldsminlh.  */
      break;
    case 1173:	/* stsminl */
    case 1112:	/* ldsminl */
      value = 1112;	/* --> ldsminl.  */
      break;
    case 1174:	/* stumaxb */
    case 1114:	/* ldumaxb */
      value = 1114;	/* --> ldumaxb.  */
      break;
    case 1175:	/* stumaxh */
    case 1115:	/* ldumaxh */
      value = 1115;	/* --> ldumaxh.  */
      break;
    case 1176:	/* stumax */
    case 1116:	/* ldumax */
      value = 1116;	/* --> ldumax.  */
      break;
    case 1177:	/* stumaxlb */
    case 1118:	/* ldumaxlb */
      value = 1118;	/* --> ldumaxlb.  */
      break;
    case 1178:	/* stumaxlh */
    case 1121:	/* ldumaxlh */
      value = 1121;	/* --> ldumaxlh.  */
      break;
    case 1179:	/* stumaxl */
    case 1124:	/* ldumaxl */
      value = 1124;	/* --> ldumaxl.  */
      break;
    case 1180:	/* stuminb */
    case 1126:	/* lduminb */
      value = 1126;	/* --> lduminb.  */
      break;
    case 1181:	/* stuminh */
    case 1127:	/* lduminh */
      value = 1127;	/* --> lduminh.  */
      break;
    case 1182:	/* stumin */
    case 1128:	/* ldumin */
      value = 1128;	/* --> ldumin.  */
      break;
    case 1183:	/* stuminlb */
    case 1130:	/* lduminlb */
      value = 1130;	/* --> lduminlb.  */
      break;
    case 1184:	/* stuminlh */
    case 1133:	/* lduminlh */
      value = 1133;	/* --> lduminlh.  */
      break;
    case 1185:	/* stuminl */
    case 1136:	/* lduminl */
      value = 1136;	/* --> lduminl.  */
      break;
    case 1187:	/* mov */
    case 1186:	/* movn */
      value = 1186;	/* --> movn.  */
      break;
    case 1189:	/* mov */
    case 1188:	/* movz */
      value = 1188;	/* --> movz.  */
      break;
    case 1246:	/* autibsp */
    case 1245:	/* autibz */
    case 1244:	/* autiasp */
    case 1243:	/* autiaz */
    case 1242:	/* pacibsp */
    case 1241:	/* pacibz */
    case 1240:	/* paciasp */
    case 1239:	/* paciaz */
    case 1215:	/* tsb */
    case 1214:	/* psb */
    case 1213:	/* esb */
    case 1212:	/* autib1716 */
    case 1211:	/* autia1716 */
    case 1210:	/* pacib1716 */
    case 1209:	/* pacia1716 */
    case 1208:	/* xpaclri */
    case 1206:	/* sevl */
    case 1205:	/* sev */
    case 1204:	/* wfi */
    case 1203:	/* wfe */
    case 1202:	/* yield */
    case 1201:	/* bti */
    case 1200:	/* csdb */
    case 1199:	/* nop */
    case 1198:	/* hint */
      value = 1198;	/* --> hint.  */
      break;
    case 1221:	/* pssbb */
    case 1220:	/* ssbb */
    case 1219:	/* dfb */
    case 1217:	/* dsb */
      value = 1217;	/* --> dsb.  */
      break;
    case 1218:	/* dsb */
      value = 1218;	/* --> dsb.  */
      break;
    case 1234:	/* cpp */
    case 1233:	/* dvp */
    case 1232:	/* cfp */
    case 1229:	/* tlbi */
    case 1228:	/* ic */
    case 1227:	/* dc */
    case 1226:	/* at */
    case 1225:	/* sys */
      value = 1225;	/* --> sys.  */
      break;
    case 1230:	/* wfet */
      value = 1230;	/* --> wfet.  */
      break;
    case 1231:	/* wfit */
      value = 1231;	/* --> wfit.  */
      break;
    case 2044:	/* bic */
    case 1294:	/* and */
      value = 1294;	/* --> and.  */
      break;
    case 1277:	/* mov */
    case 1296:	/* and */
      value = 1296;	/* --> and.  */
      break;
    case 1281:	/* movs */
    case 1297:	/* ands */
      value = 1297;	/* --> ands.  */
      break;
    case 2045:	/* cmple */
    case 1332:	/* cmpge */
      value = 1332;	/* --> cmpge.  */
      break;
    case 2048:	/* cmplt */
    case 1335:	/* cmpgt */
      value = 1335;	/* --> cmpgt.  */
      break;
    case 2046:	/* cmplo */
    case 1337:	/* cmphi */
      value = 1337;	/* --> cmphi.  */
      break;
    case 2047:	/* cmpls */
    case 1340:	/* cmphs */
      value = 1340;	/* --> cmphs.  */
      break;
    case 1274:	/* mov */
    case 1362:	/* cpy */
      value = 1362;	/* --> cpy.  */
      break;
    case 1276:	/* mov */
    case 1363:	/* cpy */
      value = 1363;	/* --> cpy.  */
      break;
    case 2055:	/* fmov */
    case 1279:	/* mov */
    case 1364:	/* cpy */
      value = 1364;	/* --> cpy.  */
      break;
    case 1269:	/* mov */
    case 1376:	/* dup */
      value = 1376;	/* --> dup.  */
      break;
    case 1271:	/* mov */
    case 1268:	/* mov */
    case 1377:	/* dup */
      value = 1377;	/* --> dup.  */
      break;
    case 2054:	/* fmov */
    case 1273:	/* mov */
    case 1378:	/* dup */
      value = 1378;	/* --> dup.  */
      break;
    case 1272:	/* mov */
    case 1379:	/* dupm */
      value = 1379;	/* --> dupm.  */
      break;
    case 2049:	/* eon */
    case 1381:	/* eor */
      value = 1381;	/* --> eor.  */
      break;
    case 1282:	/* not */
    case 1383:	/* eor */
      value = 1383;	/* --> eor.  */
      break;
    case 1283:	/* nots */
    case 1384:	/* eors */
      value = 1384;	/* --> eors.  */
      break;
    case 2050:	/* facle */
    case 1389:	/* facge */
      value = 1389;	/* --> facge.  */
      break;
    case 2051:	/* faclt */
    case 1390:	/* facgt */
      value = 1390;	/* --> facgt.  */
      break;
    case 2052:	/* fcmle */
    case 1403:	/* fcmge */
      value = 1403;	/* --> fcmge.  */
      break;
    case 2053:	/* fcmlt */
    case 1405:	/* fcmgt */
      value = 1405;	/* --> fcmgt.  */
      break;
    case 1266:	/* fmov */
    case 1411:	/* fcpy */
      value = 1411;	/* --> fcpy.  */
      break;
    case 1265:	/* fmov */
    case 1434:	/* fdup */
      value = 1434;	/* --> fdup.  */
      break;
    case 1267:	/* mov */
    case 1765:	/* orr */
      value = 1765;	/* --> orr.  */
      break;
    case 2056:	/* orn */
    case 1766:	/* orr */
      value = 1766;	/* --> orr.  */
      break;
    case 1270:	/* mov */
    case 1768:	/* orr */
      value = 1768;	/* --> orr.  */
      break;
    case 1280:	/* movs */
    case 1769:	/* orrs */
      value = 1769;	/* --> orrs.  */
      break;
    case 1275:	/* mov */
    case 1831:	/* sel */
      value = 1831;	/* --> sel.  */
      break;
    case 1278:	/* mov */
    case 1832:	/* sel */
      value = 1832;	/* --> sel.  */
      break;
    default: return NULL;
    }

  return aarch64_opcode_table + value;
}

bfd_boolean
aarch64_insert_operand (const aarch64_operand *self,
			   const aarch64_opnd_info *info,
			   aarch64_insn *code, const aarch64_inst *inst,
			   aarch64_operand_error *errors)
{
  /* 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 11:
    case 12:
    case 13:
    case 17:
    case 18:
    case 19:
    case 20:
    case 22:
    case 23:
    case 24:
    case 25:
    case 26:
    case 27:
    case 28:
    case 29:
    case 30:
    case 31:
    case 166:
    case 167:
    case 168:
    case 169:
    case 170:
    case 171:
    case 172:
    case 173:
    case 174:
    case 175:
    case 190:
    case 191:
    case 192:
    case 193:
    case 194:
    case 195:
    case 196:
    case 197:
    case 198:
    case 204:
    case 207:
      return aarch64_ins_regno (self, info, code, inst, errors);
    case 15:
      return aarch64_ins_reg_extended (self, info, code, inst, errors);
    case 16:
      return aarch64_ins_reg_shifted (self, info, code, inst, errors);
    case 21:
      return aarch64_ins_ft (self, info, code, inst, errors);
    case 32:
    case 33:
    case 34:
    case 35:
    case 210:
      return aarch64_ins_reglane (self, info, code, inst, errors);
    case 36:
      return aarch64_ins_reglist (self, info, code, inst, errors);
    case 37:
      return aarch64_ins_ldst_reglist (self, info, code, inst, errors);
    case 38:
      return aarch64_ins_ldst_reglist_r (self, info, code, inst, errors);
    case 39:
      return aarch64_ins_ldst_elemlist (self, info, code, inst, errors);
    case 40:
    case 41:
    case 42:
    case 43:
    case 53:
    case 54:
    case 55:
    case 56:
    case 57:
    case 58:
    case 59:
    case 60:
    case 61:
    case 62:
    case 63:
    case 64:
    case 65:
    case 66:
    case 67:
    case 68:
    case 69:
    case 81:
    case 82:
    case 83:
    case 84:
    case 163:
    case 165:
    case 182:
    case 183:
    case 184:
    case 185:
    case 186:
    case 187:
    case 188:
    case 189:
    case 209:
      return aarch64_ins_imm (self, info, code, inst, errors);
    case 44:
    case 45:
      return aarch64_ins_advsimd_imm_shift (self, info, code, inst, errors);
    case 46:
    case 47:
    case 48:
      return aarch64_ins_advsimd_imm_modified (self, info, code, inst, errors);
    case 52:
    case 153:
      return aarch64_ins_fpimm (self, info, code, inst, errors);
    case 70:
    case 161:
      return aarch64_ins_limm (self, info, code, inst, errors);
    case 71:
      return aarch64_ins_aimm (self, info, code, inst, errors);
    case 72:
      return aarch64_ins_imm_half (self, info, code, inst, errors);
    case 73:
      return aarch64_ins_fbits (self, info, code, inst, errors);
    case 75:
    case 76:
    case 158:
      return aarch64_ins_imm_rotate2 (self, info, code, inst, errors);
    case 77:
    case 157:
    case 159:
      return aarch64_ins_imm_rotate1 (self, info, code, inst, errors);
    case 78:
    case 79:
      return aarch64_ins_cond (self, info, code, inst, errors);
    case 85:
    case 94:
      return aarch64_ins_addr_simple (self, info, code, inst, errors);
    case 86:
      return aarch64_ins_addr_regoff (self, info, code, inst, errors);
    case 87:
    case 88:
    case 89:
    case 91:
    case 93:
      return aarch64_ins_addr_simm (self, info, code, inst, errors);
    case 90:
      return aarch64_ins_addr_simm10 (self, info, code, inst, errors);
    case 92:
      return aarch64_ins_addr_uimm12 (self, info, code, inst, errors);
    case 95:
      return aarch64_ins_addr_offset (self, info, code, inst, errors);
    case 96:
      return aarch64_ins_simd_addr_post (self, info, code, inst, errors);
    case 97:
      return aarch64_ins_sysreg (self, info, code, inst, errors);
    case 98:
      return aarch64_ins_pstatefield (self, info, code, inst, errors);
    case 99:
    case 100:
    case 101:
    case 102:
    case 103:
      return aarch64_ins_sysins_op (self, info, code, inst, errors);
    case 104:
    case 106:
      return aarch64_ins_barrier (self, info, code, inst, errors);
    case 105:
      return aarch64_ins_barrier_dsb_nxs (self, info, code, inst, errors);
    case 107:
      return aarch64_ins_prfop (self, info, code, inst, errors);
    case 108:
      return aarch64_ins_none (self, info, code, inst, errors);
    case 109:
      return aarch64_ins_hint (self, info, code, inst, errors);
    case 110:
    case 111:
      return aarch64_ins_sve_addr_ri_s4 (self, info, code, inst, errors);
    case 112:
    case 113:
    case 114:
    case 115:
      return aarch64_ins_sve_addr_ri_s4xvl (self, info, code, inst, errors);
    case 116:
      return aarch64_ins_sve_addr_ri_s6xvl (self, info, code, inst, errors);
    case 117:
      return aarch64_ins_sve_addr_ri_s9xvl (self, info, code, inst, errors);
    case 118:
    case 119:
    case 120:
    case 121:
      return aarch64_ins_sve_addr_ri_u6 (self, info, code, inst, errors);
    case 122:
    case 123:
    case 124:
    case 125:
    case 126:
    case 127:
    case 128:
    case 129:
    case 130:
    case 131:
    case 132:
    case 133:
    case 134:
    case 135:
      return aarch64_ins_sve_addr_rr_lsl (self, info, code, inst, errors);
    case 136:
    case 137:
    case 138:
    case 139:
    case 140:
    case 141:
    case 142:
    case 143:
      return aarch64_ins_sve_addr_rz_xtw (self, info, code, inst, errors);
    case 144:
    case 145:
    case 146:
    case 147:
      return aarch64_ins_sve_addr_zi_u5 (self, info, code, inst, errors);
    case 148:
      return aarch64_ins_sve_addr_zz_lsl (self, info, code, inst, errors);
    case 149:
      return aarch64_ins_sve_addr_zz_sxtw (self, info, code, inst, errors);
    case 150:
      return aarch64_ins_sve_addr_zz_uxtw (self, info, code, inst, errors);
    case 151:
      return aarch64_ins_sve_aimm (self, info, code, inst, errors);
    case 152:
      return aarch64_ins_sve_asimm (self, info, code, inst, errors);
    case 154:
      return aarch64_ins_sve_float_half_one (self, info, code, inst, errors);
    case 155:
      return aarch64_ins_sve_float_half_two (self, info, code, inst, errors);
    case 156:
      return aarch64_ins_sve_float_zero_one (self, info, code, inst, errors);
    case 160:
      return aarch64_ins_inv_limm (self, info, code, inst, errors);
    case 162:
      return aarch64_ins_sve_limm_mov (self, info, code, inst, errors);
    case 164:
      return aarch64_ins_sve_scale (self, info, code, inst, errors);
    case 176:
    case 177:
    case 178:
      return aarch64_ins_sve_shlimm (self, info, code, inst, errors);
    case 179:
    case 180:
    case 181:
      return aarch64_ins_sve_shrimm (self, info, code, inst, errors);
    case 199:
    case 200:
    case 201:
    case 202:
    case 203:
      return aarch64_ins_sve_quad_index (self, info, code, inst, errors);
    case 205:
      return aarch64_ins_sve_index (self, info, code, inst, errors);
    case 206:
    case 208:
      return aarch64_ins_sve_reglist (self, info, code, inst, errors);
    default: assert (0); abort ();
    }
}
