• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2019, VIXL authors
2 // All rights reserved.
3 //
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are met:
6 //
7 //   * Redistributions of source code must retain the above copyright notice,
8 //     this list of conditions and the following disclaimer.
9 //   * Redistributions in binary form must reproduce the above copyright notice,
10 //     this list of conditions and the following disclaimer in the documentation
11 //     and/or other materials provided with the distribution.
12 //   * Neither the name of ARM Limited nor the names of its contributors may be
13 //     used to endorse or promote products derived from this software without
14 //     specific prior written permission.
15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND
17 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
20 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 
27 namespace vixl {
28 namespace aarch64 {
29 
30 // This decode table is derived from the AArch64 ISA XML specification,
31 // available from https://developer.arm.com/products/architecture/a-profile/
32 //
33 // The data below are based on the "Index by Encoding" tables, reformatted into
34 // structures of C++ strings, suitable for processing into an instruction
35 // decoding tree.
36 
37 // clang-format off
38 static const DecodeMapping kDecodeMapping[] = {
39   { "Root",
40     {28, 27, 26, 25},
41     { {"0000", "DecodeReserved"},
42       {"0010", "DecodeSVE"},
43       {"100x", "DecodeDataProcessingImmediate"},
44       {"101x", "DecodeBranchesExceptionAndSystem"},
45       {"x1x0", "DecodeLoadsAndStores"},
46       {"x101", "DecodeDataProcessingRegister"},
47       {"x111", "DecodeDataProcessingFPAndNEON"},
48     },
49   },
50 
51   { "DecodeReserved",
52     {31, 30, 29, 24, 23, 22, 21, 20, 19, 18, 17, 16},
53     { {"000000000000", "VisitReserved"},
54       {"otherwise", "VisitUnallocated"},
55     },
56   },
57 
58   { "DecodeDataProcessingImmediate",
59     {25, 24, 23},
60     { {"00x", "VisitPCRelAddressing"},
61       {"01x", "UnallocAddSubImmediate"},
62       {"100", "UnallocLogicalImmediate"},
63       {"101", "UnallocMoveWideImmediate"},
64       {"110", "UnallocBitfield"},
65       {"111", "UnallocExtract"},
66     },
67   },
68 
69   { "DecodeBranchesExceptionAndSystem",
70     {31, 30, 29, 25, 24, 23, 22},
71     { {"0100xxx", "UnallocConditionalBranch"},
72       {"11000xx", "UnallocException"},
73       {"1100100", "UnallocSystem"},
74       {"1101xxx", "UnallocUnconditionalBranchToRegister"},
75       {"x00xxxx", "VisitUnconditionalBranch"},
76       {"x010xxx", "VisitCompareBranch"},
77       {"x011xxx", "VisitTestBranch"},
78     },
79   },
80 
81   { "DecodeLoadsAndStores",
82     {31, 29, 28, 26, 24, 23, 21},
83     { {"x0000xx", "UnallocLoadStoreExclusive"},
84       {"x01x0xx", "UnallocLoadLiteral"},
85       {"x0101x0", "UnallocLoadStoreRCpcUnscaledOffset"},
86       {"x10x00x", "UnallocLoadStorePairNonTemporal"},
87       {"x10x01x", "UnallocLoadStorePairPostIndex"},
88       {"x10x10x", "UnallocLoadStorePairOffset"},
89       {"x10x11x", "UnallocLoadStorePairPreIndex"},
90       {"0001000", "DecodeNEONLoadStoreMulti"},
91       {"0001010", "UnallocNEONLoadStoreMultiStructPostIndex"},
92       {"000110x", "DecodeNEONLoadStoreSingle"},
93       {"000111x", "UnallocNEONLoadStoreSingleStructPostIndex"},
94       {"x11x0x0", "DecodeLoadStore"},
95       {"x11x0x1", "DecodeLoadStoreRegister"},
96       {"x11x1xx", "UnallocLoadStoreUnsignedOffset"},
97     },
98   },
99 
100   { "DecodeDataProcessingRegister",
101     {30, 28, 24, 23, 22, 21},
102     { {"010110", "UnallocDataProcessing2Source"},
103       {"110110", "UnallocDataProcessing1Source"},
104       {"x00xxx", "UnallocLogicalShifted"},
105       {"x01xx0", "UnallocAddSubShifted"},
106       {"x01xx1", "UnallocAddSubExtended"},
107       {"x10000", "UnallocAddSubWithCarry"},
108       {"x10010", "DecodeCondCmp"},
109       {"x10100", "UnallocConditionalSelect"},
110       {"x11xxx", "UnallocDataProcessing3Source"},
111     },
112   },
113 
114   { "DecodeDataProcessingFPAndNEON",
115     {31, 30, 29, 28, 24, 21},
116     { {"0xx000", "DecodeNEONOther"},
117       {"0xx001", "DecodeNEON3Op"},
118       {"0xx01x", "DecodeNEONImmAndIndex"},
119       {"01x100", "DecodeNEONScalarAnd3SHA"},
120       {"01x101", "DecodeNEONScalarAnd2SHA"},
121       {"01x11x", "DecodeNEONScalar"},
122       {"x0x100", "UnallocFPFixedPointConvert"},
123       {"x0x101", "DecodeFP"},
124       {"x0x11x", "UnallocFPDataProcessing3Source"},
125     },
126   },
127 
128   { "DecodeSVE",
129     {31, 30, 29, 24, 21, 15, 14, 13},
130     { {"00000x1x", "VisitSVEIntMulAddPredicated"},
131       {"00000000", "DecodeSVE00000000"},
132       {"00000001", "DecodeSVE00000001"},
133       {"00000100", "DecodeSVE00000100"},
134       {"00000101", "VisitSVEIntUnaryArithmeticPredicated"},
135       {"00001000", "VisitSVEIntArithmeticUnpredicated"},
136       {"00001001", "VisitSVEBitwiseLogicalUnpredicated"},
137       {"00001010", "DecodeSVE00001010"},
138       {"00001100", "VisitSVEBitwiseShiftUnpredicated"},
139       {"00001101", "DecodeSVE00001101"},
140       {"00001110", "DecodeSVE00001110"},
141       {"00001111", "DecodeSVE00001111"},
142       {"000100xx", "DecodeSVE000100xx"},
143       {"0001010x", "DecodeSVE0001010x"},
144       {"00010110", "DecodeSVE00010110"},
145       {"00010111", "DecodeSVE00010111"},
146       {"00011000", "VisitSVEPermuteVectorExtract"},
147       {"00011001", "DecodeSVE00011001"},
148       {"00011010", "DecodeSVE00011010"},
149       {"00011011", "VisitSVEPermuteVectorInterleaving"},
150       {"00011100", "DecodeSVE00011100"},
151       {"00011101", "DecodeSVE00011101"},
152       {"0001111x", "VisitSVEVectorSelect"},
153       {"00100xxx", "VisitSVEIntCompareVectors"},
154       {"00101xxx", "VisitSVEIntCompareUnsignedImm"},
155       {"00110x0x", "VisitSVEIntCompareSignedImm"},
156       {"0011001x", "DecodeSVE0011001x"},
157       {"00110110", "DecodeSVE00110110"},
158       {"00110111", "DecodeSVE00110111"},
159       {"00111000", "VisitSVEIntCompareScalarCountAndLimit"},
160       {"00111001", "UnallocSVEConditionallyTerminateScalars"},
161       {"00111100", "DecodeSVE00111100"},
162       {"00111101", "UnallocSVEPredicateCount"},
163       {"0011111x", "DecodeSVE0011111x"},
164       {"010000xx", "VisitSVEIntMulAddUnpredicated"},
165       {"01001xxx", "VisitSVEMulIndex"},
166       {"011000xx", "VisitSVEFPComplexMulAdd"},
167       {"01100100", "UnallocSVEFPComplexAddition"},
168       {"01101000", "DecodeSVE01101000"},
169       {"01101001", "UnallocSVEFPMulIndex"},
170       {"01110x1x", "VisitSVEFPCompareVectors"},
171       {"01110000", "VisitSVEFPArithmeticUnpredicated"},
172       {"01110001", "DecodeSVE01110001"},
173       {"01110100", "DecodeSVE01110100"},
174       {"01110101", "DecodeSVE01110101"},
175       {"01111xxx", "VisitSVEFPMulAdd"},
176       {"100x010x", "UnallocSVELoadAndBroadcastElement"},
177       {"100x0110", "DecodeSVE100x0110"},
178       {"100x0111", "DecodeSVE100x0111"},
179       {"100x11xx", "DecodeSVE100x11xx"},
180       {"100000xx", "VisitSVE32BitGatherLoad_ScalarPlus32BitUnscaledOffsets"},
181       {"100010xx", "DecodeSVE100010xx"},
182       {"100100x1", "DecodeSVE100100x1"},
183       {"10010000", "DecodeSVE10010000"},
184       {"10010010", "DecodeSVE10010010"},
185       {"100110x1", "DecodeSVE100110x1"},
186       {"10011000", "DecodeSVE10011000"},
187       {"10011010", "DecodeSVE10011010"},
188       {"101xx000", "VisitSVELoadAndBroadcastQuadword_ScalarPlusScalar"},
189       {"101xx001", "UnallocSVELoadAndBroadcastQuadword_ScalarPlusImm"},
190       {"101xx010", "VisitSVEContiguousLoad_ScalarPlusScalar"},
191       {"101xx011", "VisitSVEContiguousFirstFaultLoad_ScalarPlusScalar"},
192       {"101xx101", "DecodeSVE101xx101"},
193       {"101x0110", "DecodeSVE101x0110"},
194       {"101x0111", "DecodeSVE101x0111"},
195       {"101x1110", "VisitSVELoadMultipleStructures_ScalarPlusScalar"},
196       {"101x1111", "DecodeSVE101x1111"},
197       {"110x00xx", "VisitSVE64BitGatherLoad_ScalarPlusUnpacked32BitUnscaledOffsets"},
198       {"110x0111", "DecodeSVE110x0111"},
199       {"1100010x", "UnallocSVE64BitGatherLoad_ScalarPlus64BitUnscaledOffsets"},
200       {"11000110", "UnallocSVE64BitGatherLoad_ScalarPlus64BitUnscaledOffsets"},
201       {"110010xx", "DecodeSVE110010xx"},
202       {"110011xx", "DecodeSVE110011xx"},
203       {"1101010x", "UnallocSVE64BitGatherLoad_ScalarPlus64BitUnscaledOffsets"},
204       {"11010110", "UnallocSVE64BitGatherLoad_ScalarPlus64BitUnscaledOffsets"},
205       {"110110xx", "VisitSVE64BitGatherLoad_ScalarPlus32BitUnpackedScaledOffsets"},
206       {"110111xx", "DecodeSVE110111xx"},
207       {"111x0011", "DecodeSVE111x0011"},
208       {"111x01x0", "DecodeSVE111x01x0"},
209       {"111x0101", "DecodeSVE111x0101"},
210       {"111x0111", "DecodeSVE111x0111"},
211       {"111x1011", "VisitSVEStoreMultipleStructures_ScalarPlusScalar"},
212       {"111x11x0", "DecodeSVE111x11x0"},
213       {"111x1101", "DecodeSVE111x1101"},
214       {"111x1111", "DecodeSVE111x1111"},
215       {"1110x010", "VisitSVEContiguousStore_ScalarPlusScalar"},
216       {"1111x000", "UnallocSVEStorePredicateRegister"},
217       {"1111x010", "DecodeSVE1111x010"},
218     },
219   },
220 
221   { "DecodeSVE00000000",
222     {20, 19, 18},
223     { {"00x", "VisitSVEIntAddSubtractVectors_Predicated"},
224       {"01x", "VisitSVEIntMinMaxDifference_Predicated"},
225       {"100", "VisitSVEIntMulVectors_Predicated"},
226       {"101", "VisitSVEIntDivideVectors_Predicated"},
227       {"11x", "VisitSVEBitwiseLogical_Predicated"},
228     },
229   },
230 
231   { "DecodeSVE00000100",
232     {20, 19},
233     { {"0x", "VisitSVEBitwiseShiftByImm_Predicated"},
234       {"10", "VisitSVEBitwiseShiftByVector_Predicated"},
235       {"11", "VisitSVEBitwiseShiftByWideElements_Predicated"},
236     },
237   },
238 
239   { "DecodeSVE00001010",
240     {23, 12, 11},
241     { {"x0x", "VisitSVEIndexGeneration"},
242       {"010", "VisitSVEStackFrameAdjustment"},
243       {"110", "UnallocSVEStackFrameSize"},
244     },
245   },
246 
247   { "UnallocSVEStackFrameSize",
248     {22, 20, 19, 18, 17, 16},
249     { {"011111", "VisitSVEStackFrameSize"},
250     },
251   },
252 
253   { "DecodeSVE00001101",
254     {12, 11, 10},
255     { {"0xx", "VisitSVEAddressGeneration"},
256       {"10x", "VisitSVEFPTrigSelectCoefficient"},
257       {"110", "VisitSVEFPExponentialAccelerator"},
258       {"111", "VisitSVEConstructivePrefix_Unpredicated"},
259     },
260   },
261 
262   { "DecodeSVE00001110",
263     {20, 12, 11},
264     { {"00x", "VisitSVESaturatingIncDecVectorByElementCount"},
265       {"100", "VisitSVEIncDecVectorByElementCount"},
266     },
267   },
268 
269   { "DecodeSVE00001111",
270     {20, 12, 11},
271     { {"x1x", "VisitSVESaturatingIncDecRegisterByElementCount"},
272       {"000", "VisitSVEElementCount"},
273       {"100", "VisitSVEIncDecRegisterByElementCount"},
274     },
275   },
276 
277   { "DecodeSVE000100xx",
278     {23, 22, 20, 19, 18},
279     { {"xx1xx", "VisitSVECopyIntImm_Predicated"},
280       {"0x000", "VisitSVEBitwiseLogicalWithImm_Unpredicated"},
281       {"10000", "VisitSVEBitwiseLogicalWithImm_Unpredicated"},
282       {"11000", "VisitSVEBroadcastBitmaskImm"},
283     },
284   },
285 
286   { "DecodeSVE0001010x",
287     {23, 22, 20, 19, 18},
288     { {"0x000", "VisitSVEBitwiseLogicalWithImm_Unpredicated"},
289       {"10000", "VisitSVEBitwiseLogicalWithImm_Unpredicated"},
290       {"11000", "VisitSVEBroadcastBitmaskImm"},
291     },
292   },
293 
294   { "DecodeSVE00010110",
295     {23, 22, 20, 19, 18},
296     { {"xx1xx", "VisitSVECopyFPImm_Predicated"},
297       {"0x000", "VisitSVEBitwiseLogicalWithImm_Unpredicated"},
298       {"10000", "VisitSVEBitwiseLogicalWithImm_Unpredicated"},
299       {"11000", "VisitSVEBroadcastBitmaskImm"},
300     },
301   },
302 
303   { "DecodeSVE00010111",
304     {23, 22, 20, 19, 18},
305     { {"0x000", "VisitSVEBitwiseLogicalWithImm_Unpredicated"},
306       {"10000", "VisitSVEBitwiseLogicalWithImm_Unpredicated"},
307       {"11000", "VisitSVEBroadcastBitmaskImm"},
308     },
309   },
310 
311   { "UnallocSVEBroadcastIndexElement",
312     {10},
313     { {"0", "VisitSVEBroadcastIndexElement"},
314     },
315   },
316 
317   { "UnallocSVETableLookup",
318     {10},
319     { {"0", "VisitSVETableLookup"},
320     },
321   },
322 
323   { "UnallocSVEBroadcastGeneralRegister",
324     {17, 16, 10},
325     { {"000", "VisitSVEBroadcastGeneralRegister"},
326     },
327   },
328 
329   { "UnallocSVEInsertGeneralRegister",
330     {17, 16, 10},
331     { {"000", "VisitSVEInsertGeneralRegister"},
332     },
333   },
334 
335   { "UnallocSVEUnpackVectorElements",
336     {10},
337     { {"0", "VisitSVEUnpackVectorElements"},
338     },
339   },
340 
341   { "UnallocSVEInsertSIMDFPScalarRegister",
342     {17, 16, 10},
343     { {"000", "VisitSVEInsertSIMDFPScalarRegister"},
344     },
345   },
346 
347   { "UnallocSVEReverseVectorElements",
348     {17, 16, 10},
349     { {"000", "VisitSVEReverseVectorElements"},
350     },
351   },
352 
353   { "DecodeSVE00011001",
354     {20, 19, 18, 12, 11},
355     { {"xxx00", "UnallocSVEBroadcastIndexElement"},
356       {"xxx10", "UnallocSVETableLookup"},
357       {"00011", "UnallocSVEBroadcastGeneralRegister"},
358       {"00111", "UnallocSVEInsertGeneralRegister"},
359       {"10011", "UnallocSVEUnpackVectorElements"},
360       {"10111", "UnallocSVEInsertSIMDFPScalarRegister"},
361       {"11011", "UnallocSVEReverseVectorElements"},
362     },
363   },
364 
365   { "UnallocSVEPermutePredicateElements",
366     {9, 4},
367     { {"00", "VisitSVEPermutePredicateElements"},
368     },
369   },
370 
371   { "UnallocSVEUnpackPredicateElements",
372     {23, 22, 19, 17, 12, 11, 10, 9, 4},
373     { {"000000000", "VisitSVEUnpackPredicateElements"},
374     },
375   },
376 
377   { "UnallocSVEReversePredicateElements",
378     {19, 17, 16, 12, 11, 10, 9, 4},
379     { {"00000000", "VisitSVEReversePredicateElements"},
380     },
381   },
382 
383   { "DecodeSVE00011010",
384     {20, 18},
385     { {"0x", "UnallocSVEPermutePredicateElements"},
386       {"10", "UnallocSVEUnpackPredicateElements"},
387       {"11", "UnallocSVEReversePredicateElements"},
388     },
389   },
390 
391   { "DecodeSVE00011100",
392     {23, 20, 19, 18, 17, 16},
393     { {"x00000", "VisitSVECopySIMDFPScalarRegisterToVector_Predicated"},
394       {"x0001x", "VisitSVEExtractElementToSIMDFPScalarRegister"},
395       {"x001xx", "VisitSVEReverseWithinElements"},
396       {"x0100x", "VisitSVEConditionallyBroadcastElementToVector"},
397       {"x0101x", "VisitSVEConditionallyExtractElementToSIMDFPScalar"},
398       {"x01100", "VisitSVEVectorSplice_Destructive"},
399       {"100001", "VisitSVECompressActiveElements"},
400     },
401   },
402 
403   { "DecodeSVE00011101",
404     {20, 19, 18, 17, 16},
405     { {"0000x", "VisitSVEExtractElementToGeneralRegister"},
406       {"01000", "VisitSVECopyGeneralRegisterToVector_Predicated"},
407       {"1000x", "VisitSVEConditionallyExtractElementToGeneralRegister"},
408     },
409   },
410 
411   { "UnallocSVEPartitionBreakCondition",
412     {18, 17, 16, 9},
413     { {"0000", "VisitSVEPartitionBreakCondition"},
414     },
415   },
416 
417   { "UnallocSVEPropagateBreakToNextPartition",
418     {23, 18, 17, 16, 9, 4},
419     { {"000000", "VisitSVEPropagateBreakToNextPartition"},
420     },
421   },
422 
423   { "DecodeSVE0011001x",
424     {20, 19},
425     { {"0x", "VisitSVEPredicateLogical"},
426       {"10", "UnallocSVEPartitionBreakCondition"},
427       {"11", "UnallocSVEPropagateBreakToNextPartition"},
428     },
429   },
430 
431   { "UnallocSVEPredicateTest",
432     {18, 17, 9, 4},
433     { {"0000", "VisitSVEPredicateTest"},
434     },
435   },
436 
437   { "UnallocSVEPredicateFirstActive",
438     {18, 17, 12, 11, 10, 9, 4},
439     { {"0000000", "VisitSVEPredicateFirstActive"},
440     },
441   },
442 
443   { "UnallocSVEPredicateNextActive",
444     {18, 17, 12, 11, 10, 9, 4},
445     { {"0000100", "VisitSVEPredicateNextActive"},
446     },
447   },
448 
449   { "DecodeSVE00110110",
450     {20, 19, 16},
451     { {"0xx", "VisitSVEPropagateBreak"},
452       {"100", "UnallocSVEPredicateTest"},
453       {"110", "UnallocSVEPredicateFirstActive"},
454       {"111", "UnallocSVEPredicateNextActive"},
455     },
456   },
457 
458   { "UnallocSVEPredicateTest",
459     {18, 17, 9, 4},
460     { {"0000", "VisitSVEPredicateTest"},
461     },
462   },
463 
464   { "UnallocSVEPredicateInitialize",
465     {18, 17, 11, 4},
466     { {"0000", "VisitSVEPredicateInitialize"},
467     },
468   },
469 
470   { "UnallocSVEPredicateZero",
471     {18, 17, 11, 9, 8, 7, 6, 5, 4},
472     { {"000000000", "VisitSVEPredicateZero"},
473     },
474   },
475 
476   { "UnallocSVEPredicateReadFromFFR_Predicated",
477     {18, 17, 11, 9, 4},
478     { {"00000", "VisitSVEPredicateReadFromFFR_Predicated"},
479     },
480   },
481 
482   { "UnallocSVEPredicateReadFromFFR_Unpredicated",
483     {18, 17, 11, 9, 8, 7, 6, 5, 4},
484     { {"000000000", "VisitSVEPredicateReadFromFFR_Unpredicated"},
485     },
486   },
487 
488   { "DecodeSVE00110111",
489     {20, 19, 16, 12, 10},
490     { {"0xxxx", "VisitSVEPropagateBreak"},
491       {"100xx", "UnallocSVEPredicateTest"},
492       {"11x00", "UnallocSVEPredicateInitialize"},
493       {"11001", "UnallocSVEPredicateZero"},
494       {"11010", "UnallocSVEPredicateReadFromFFR_Predicated"},
495       {"11110", "UnallocSVEPredicateReadFromFFR_Unpredicated"},
496     },
497   },
498 
499   { "UnallocSVEConditionallyTerminateScalars",
500     {12, 11, 10, 3, 2, 1, 0},
501     { {"0000000", "VisitSVEConditionallyTerminateScalars"},
502     },
503   },
504 
505   { "UnallocSVEPredicateCount_2",
506     {20},
507     { {"0", "VisitSVEPredicateCount"},
508     },
509   },
510 
511   { "UnallocSVEIncDecByPredicateCount",
512     {20},
513     { {"0", "VisitSVEIncDecByPredicateCount"},
514     },
515   },
516 
517   { "UnallocSVEFFRWriteFromPredicate",
518     {20, 17, 16, 11, 10, 9, 4, 3, 2, 1, 0},
519     { {"00000000000", "VisitSVEFFRWriteFromPredicate"},
520     },
521   },
522 
523   { "UnallocSVEFFRInitialise",
524     {20, 17, 16, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0},
525     { {"000000000000000", "VisitSVEFFRInitialise"},
526     },
527   },
528 
529   { "DecodeSVE00111100",
530     {19, 18, 12},
531     { {"0xx", "UnallocSVEPredicateCount_2"},
532       {"1x0", "UnallocSVEIncDecByPredicateCount"},
533       {"101", "UnallocSVEFFRWriteFromPredicate"},
534       {"111", "UnallocSVEFFRInitialise"},
535     },
536   },
537 
538   { "UnallocSVEPredicateCount",
539     {20, 19},
540     { {"00", "VisitSVEPredicateCount"},
541     },
542   },
543 
544   { "DecodeSVE0011111x",
545     {20, 19, 16},
546     { {"00x", "VisitSVEIntAddSubtractImm_Unpredicated"},
547       {"01x", "VisitSVEIntMinMaxImm_Unpredicated"},
548       {"10x", "VisitSVEIntMulImm_Unpredicated"},
549       {"110", "VisitSVEBroadcastIntImm_Unpredicated"},
550       {"111", "VisitSVEBroadcastFPImm_Unpredicated"},
551     },
552   },
553 
554   { "UnallocSVEFPComplexAddition",
555     {20, 19, 18, 17},
556     { {"0000", "VisitSVEFPComplexAddition"},
557     },
558   },
559 
560   { "DecodeSVE01101000",
561     {12, 11},
562     { {"00", "VisitSVEFPMulAddIndex"},
563       {"1x", "VisitSVEFPComplexMulAddIndex"},
564     },
565   },
566 
567   { "UnallocSVEFPMulIndex",
568     {12, 11, 10},
569     { {"000", "VisitSVEFPMulIndex"},
570     },
571   },
572 
573   { "DecodeSVE01110001",
574     {20, 19, 12},
575     { {"00x", "VisitSVEFPFastReduction"},
576       {"011", "VisitSVEFPUnaryOpUnpredicated"},
577       {"10x", "VisitSVEFPCompareWithZero"},
578       {"11x", "VisitSVEFPAccumulatingReduction"},
579     },
580   },
581 
582   { "UnallocSVEFPTrigMulAddCoefficient",
583     {12, 11, 10},
584     { {"000", "VisitSVEFPTrigMulAddCoefficient"},
585     },
586   },
587 
588   { "UnallocSVEFPArithmeticWithImm_Predicated",
589     {9, 8, 7, 6},
590     { {"0000", "VisitSVEFPArithmeticWithImm_Predicated"},
591     },
592   },
593 
594   { "DecodeSVE01110100",
595     {20, 19},
596     { {"0x", "VisitSVEFPArithmetic_Predicated"},
597       {"10", "UnallocSVEFPTrigMulAddCoefficient"},
598       {"11", "UnallocSVEFPArithmeticWithImm_Predicated"},
599     },
600   },
601 
602   { "DecodeSVE01110101",
603     {20, 19, 18},
604     { {"00x", "VisitSVEFPRoundToIntegralValue"},
605       {"010", "VisitSVEFPConvertPrecision"},
606       {"011", "VisitSVEFPUnaryOp"},
607       {"10x", "VisitSVEIntConvertToFP"},
608       {"11x", "VisitSVEFPConvertToInt"},
609     },
610   },
611 
612   { "UnallocSVELoadAndBroadcastElement",
613     {22},
614     { {"1", "VisitSVELoadAndBroadcastElement"},
615     },
616   },
617 
618   { "DecodeSVE100x0110",
619     {22, 4},
620     { {"00", "VisitSVEContiguousPrefetch_ScalarPlusScalar"},
621       {"1x", "VisitSVELoadAndBroadcastElement"},
622     },
623   },
624 
625   { "DecodeSVE100x0111",
626     {22, 4},
627     { {"00", "VisitSVE32BitGatherPrefetch_VectorPlusImm"},
628       {"1x", "VisitSVELoadAndBroadcastElement"},
629     },
630   },
631 
632   { "DecodeSVE100x11xx",
633     {22},
634     { {"0", "VisitSVE32BitGatherLoad_VectorPlusImm"},
635       {"1", "VisitSVELoadAndBroadcastElement"},
636     },
637   },
638 
639   { "DecodeSVE100010xx",
640     {23, 4},
641     { {"00", "VisitSVE32BitGatherPrefetch_ScalarPlus32BitScaledOffsets"},
642       {"1x", "VisitSVE32BitGatherLoadHalfwords_ScalarPlus32BitScaledOffsets"},
643     },
644   },
645 
646   { "DecodeSVE100100x1",
647     {23, 22, 4},
648     { {"0xx", "VisitSVE32BitGatherLoad_ScalarPlus32BitUnscaledOffsets"},
649       {"110", "VisitSVEContiguousPrefetch_ScalarPlusImm"},
650     },
651   },
652 
653   { "DecodeSVE10010000",
654     {23, 22, 4},
655     { {"0xx", "VisitSVE32BitGatherLoad_ScalarPlus32BitUnscaledOffsets"},
656       {"100", "VisitSVELoadPredicateRegister"},
657       {"110", "VisitSVEContiguousPrefetch_ScalarPlusImm"},
658     },
659   },
660 
661   { "DecodeSVE10010010",
662     {23, 22, 4},
663     { {"0xx", "VisitSVE32BitGatherLoad_ScalarPlus32BitUnscaledOffsets"},
664       {"10x", "VisitSVELoadVectorRegister"},
665       {"110", "VisitSVEContiguousPrefetch_ScalarPlusImm"},
666     },
667   },
668 
669   { "DecodeSVE100110x1",
670     {23, 22, 4},
671     { {"0xx", "VisitSVE32BitGatherLoadWords_ScalarPlus32BitScaledOffsets"},
672       {"110", "VisitSVEContiguousPrefetch_ScalarPlusImm"},
673     },
674   },
675 
676   { "DecodeSVE10011000",
677     {23, 22, 4},
678     { {"0xx", "VisitSVE32BitGatherLoadWords_ScalarPlus32BitScaledOffsets"},
679       {"100", "VisitSVELoadPredicateRegister"},
680       {"110", "VisitSVEContiguousPrefetch_ScalarPlusImm"},
681     },
682   },
683 
684   { "DecodeSVE10011010",
685     {23, 22, 4},
686     { {"0xx", "VisitSVE32BitGatherLoadWords_ScalarPlus32BitScaledOffsets"},
687       {"10x", "VisitSVELoadVectorRegister"},
688       {"110", "VisitSVEContiguousPrefetch_ScalarPlusImm"},
689     },
690   },
691 
692   { "UnallocSVELoadAndBroadcastQuadword_ScalarPlusImm",
693     {20},
694     { {"0", "VisitSVELoadAndBroadcastQuadword_ScalarPlusImm"},
695     },
696   },
697 
698   { "DecodeSVE101xx101",
699     {20},
700     { {"0", "VisitSVEContiguousLoad_ScalarPlusImm"},
701       {"1", "VisitSVEContiguousNonFaultLoad_ScalarPlusImm"},
702     },
703   },
704 
705   { "DecodeSVE101x0110",
706     {22},
707     { {"0", "VisitSVEContiguousNonTemporalLoad_ScalarPlusScalar"},
708       {"1", "VisitSVELoadMultipleStructures_ScalarPlusScalar"},
709     },
710   },
711 
712   { "DecodeSVE101x0111",
713     {22, 20},
714     { {"00", "VisitSVEContiguousNonTemporalLoad_ScalarPlusImm"},
715       {"10", "VisitSVELoadMultipleStructures_ScalarPlusImm"},
716     },
717   },
718 
719   { "DecodeSVE101x1111",
720     {22, 20},
721     { {"x0", "VisitSVELoadMultipleStructures_ScalarPlusImm"},
722     },
723   },
724 
725   { "DecodeSVE110x0111",
726     {22, 4},
727     { {"00", "VisitSVE64BitGatherPrefetch_VectorPlusImm"},
728       {"1x", "VisitSVE64BitGatherLoad_ScalarPlus64BitUnscaledOffsets"},
729     },
730   },
731 
732   { "UnallocSVE64BitGatherLoad_ScalarPlus64BitUnscaledOffsets",
733     {22},
734     { {"1", "VisitSVE64BitGatherLoad_ScalarPlus64BitUnscaledOffsets"},
735     },
736   },
737 
738   { "UnallocSVE64BitGatherLoad_ScalarPlus64BitUnscaledOffsets",
739     {22},
740     { {"1", "VisitSVE64BitGatherLoad_ScalarPlus64BitUnscaledOffsets"},
741     },
742   },
743 
744   { "DecodeSVE110010xx",
745     {23, 4},
746     { {"00", "VisitSVE64BitGatherPrefetch_ScalarPlusUnpacked32BitScaledOffsets"},
747       {"1x", "VisitSVE64BitGatherLoad_ScalarPlus32BitUnpackedScaledOffsets"},
748     },
749   },
750 
751   { "DecodeSVE110011xx",
752     {23, 22, 4},
753     { {"x0x", "VisitSVE64BitGatherLoad_VectorPlusImm"},
754       {"010", "VisitSVE64BitGatherPrefetch_ScalarPlus64BitScaledOffsets"},
755       {"11x", "VisitSVE64BitGatherLoad_ScalarPlus64BitScaledOffsets"},
756     },
757   },
758 
759   { "UnallocSVE64BitGatherLoad_ScalarPlus64BitUnscaledOffsets",
760     {22},
761     { {"1", "VisitSVE64BitGatherLoad_ScalarPlus64BitUnscaledOffsets"},
762     },
763   },
764 
765   { "UnallocSVE64BitGatherLoad_ScalarPlus64BitUnscaledOffsets",
766     {22},
767     { {"1", "VisitSVE64BitGatherLoad_ScalarPlus64BitUnscaledOffsets"},
768     },
769   },
770 
771   { "DecodeSVE110111xx",
772     {22},
773     { {"0", "VisitSVE64BitGatherLoad_VectorPlusImm"},
774       {"1", "VisitSVE64BitGatherLoad_ScalarPlus64BitScaledOffsets"},
775     },
776   },
777 
778   { "DecodeSVE111x0011",
779     {22},
780     { {"0", "VisitSVEContiguousNonTemporalStore_ScalarPlusScalar"},
781       {"1", "VisitSVEStoreMultipleStructures_ScalarPlusScalar"},
782     },
783   },
784 
785   { "DecodeSVE111x01x0",
786     {22},
787     { {"0", "VisitSVE64BitScatterStore_ScalarPlusUnpacked32BitUnscaledOffsets"},
788       {"1", "VisitSVE32BitScatterStore_ScalarPlus32BitUnscaledOffsets"},
789     },
790   },
791 
792   { "DecodeSVE111x0101",
793     {22},
794     { {"0", "VisitSVE64BitScatterStore_ScalarPlus64BitUnscaledOffsets"},
795       {"1", "VisitSVE64BitScatterStore_VectorPlusImm"},
796     },
797   },
798 
799   { "DecodeSVE111x0111",
800     {22, 20},
801     { {"x0", "VisitSVEContiguousStore_ScalarPlusImm"},
802       {"01", "VisitSVEContiguousNonTemporalStore_ScalarPlusImm"},
803       {"11", "VisitSVEStoreMultipleStructures_ScalarPlusImm"},
804     },
805   },
806 
807   { "DecodeSVE111x11x0",
808     {22},
809     { {"0", "VisitSVE64BitScatterStore_ScalarPlusUnpacked32BitScaledOffsets"},
810       {"1", "VisitSVE32BitScatterStore_ScalarPlus32BitScaledOffsets"},
811     },
812   },
813 
814   { "DecodeSVE111x1101",
815     {22},
816     { {"0", "VisitSVE64BitScatterStore_ScalarPlus64BitScaledOffsets"},
817       {"1", "VisitSVE32BitScatterStore_VectorPlusImm"},
818     },
819   },
820 
821   { "DecodeSVE111x1111",
822     {22, 20},
823     { {"x0", "VisitSVEContiguousStore_ScalarPlusImm"},
824       {"x1", "VisitSVEStoreMultipleStructures_ScalarPlusImm"},
825     },
826   },
827 
828   { "UnallocSVEStorePredicateRegister",
829     {23, 22, 4},
830     { {"100", "VisitSVEStorePredicateRegister"},
831     },
832   },
833 
834   { "DecodeSVE1111x010",
835     {23, 22},
836     { {"0x", "VisitSVEContiguousStore_ScalarPlusScalar"},
837       {"10", "VisitSVEStoreVectorRegister"},
838       {"11", "VisitSVEContiguousStore_ScalarPlusScalar"},
839     },
840   },
841 
842   { "DecodeNEONScalarAnd3SHA",
843     {29, 23, 22, 15, 14, 11, 10},
844     { {"0xx0x00", "VisitCrypto3RegSHA"},
845       {"x000xx1", "UnallocNEONScalarCopy"},
846       {"xxx1xx1", "UnallocNEONScalar3SameExtra"},
847       {"xx100x1", "UnallocNEONScalar3SameFP16"},
848     },
849   },
850 
851   { "DecodeNEONScalarAnd2SHA",
852     {29, 20, 19, 18, 17, 11, 10},
853     { {"0010010", "VisitCrypto2RegSHA"},
854       {"x000010", "UnallocNEONScalar2RegMisc"},
855       {"x100010", "UnallocNEONScalarPairwise"},
856       {"x110010", "UnallocNEONScalar2RegMiscFP16"},
857       {"xxxxxx1", "UnallocNEONScalar3Same"},
858       {"xxxxx00", "UnallocNEONScalar3Diff"},
859     },
860   },
861 
862   { "DecodeNEONScalar",
863     {28, 23, 10},
864     { {"101", "UnallocNEONScalarShiftImmediate"},
865       {"1x0", "UnallocNEONScalarByIndexedElement"},
866     },
867   },
868 
869   { "DecodeNEONLoadStoreMulti",
870     {20, 19, 18, 17, 16},
871     { {"00000", "UnallocNEONLoadStoreMultiStruct"},
872     },
873   },
874 
875   { "DecodeNEONLoadStoreSingle",
876     {20, 19, 18, 17, 16},
877     { {"00000", "UnallocNEONLoadStoreSingleStruct"},
878     },
879   },
880 
881   { "DecodeNEONOther",
882     {29, 23, 22, 15, 14, 11, 10},
883     { {"0xx0x00", "UnallocNEONTable"},
884       {"0xx0x10", "UnallocNEONPerm"},
885       {"1xx0xx0", "UnallocNEONExtract"},
886       {"x000xx1", "UnallocNEONCopy"},
887       {"xx100x1", "UnallocNEON3SameFP16"},
888       {"xxx1xx1", "UnallocNEON3SameExtra"},
889     },
890   },
891 
892   { "DecodeNEON2OpAndAcross",
893     {30, 29, 20, 19, 18, 17},
894     { {"100100", "VisitCryptoAES"},
895       {"xx1100", "UnallocNEON2RegMiscFP16"},
896       {"xx0000", "UnallocNEON2RegMisc"},
897       {"xx1000", "UnallocNEONAcrossLanes"},
898     },
899   },
900 
901   { "DecodeNEON3Op",
902     {11, 10},
903     { {"00", "UnallocNEON3Different"},
904       {"10", "DecodeNEON2OpAndAcross"},
905       {"x1", "UnallocNEON3Same"},
906     },
907   },
908 
909   { "DecodeNEONImmAndIndex",
910     {23, 22, 21, 20, 19, 10},
911     { {"000001", "UnallocNEONModifiedImmediate"},
912       {"0xxx11", "UnallocNEONShiftImmediate"},
913       {"0xx1x1", "UnallocNEONShiftImmediate"},
914       {"0x1xx1", "UnallocNEONShiftImmediate"},
915       {"01xxx1", "UnallocNEONShiftImmediate"},
916       {"xxxxx0", "UnallocNEONByIndexedElement"},
917     },
918   },
919 
920   { "DecodeFP",
921     {15, 14, 13, 12, 11, 10},
922     { {"000000", "UnallocFPIntegerConvert"},
923       {"x10000", "UnallocFPDataProcessing1Source"},
924       {"xx1000", "UnallocFPCompare"},
925       {"xxx100", "UnallocFPImmediate"},
926       {"xxxx01", "UnallocFPConditionalCompare"},
927       {"xxxx10", "UnallocFPDataProcessing2Source"},
928       {"xxxx11", "UnallocFPConditionalSelect"},
929     },
930   },
931 
932   { "DecodeLoadStore",
933     {11, 10},
934     { {"00", "UnallocLoadStoreUnscaledOffset"},
935       {"01", "UnallocLoadStorePostIndex"},
936       {"10", "VisitUnimplemented"},  // LoadStoreUnprivileged.
937       {"11", "UnallocLoadStorePreIndex"},
938     },
939   },
940 
941   { "DecodeLoadStoreRegister",
942     {11, 10},
943     { {"00", "UnallocAtomicMemory"},
944       {"10", "UnallocLoadStoreRegisterOffset"},
945       {"x1", "UnallocLoadStorePAC"},
946     },
947   },
948 
949   { "DecodeCondCmp",
950     {11},
951     { {"0", "UnallocConditionalCompareRegister"},
952       {"1", "UnallocConditionalCompareImmediate"},
953     },
954   },
955 
956   // Unallocation decode nodes. These are used to mark encodings within an
957   // instruction class as unallocated.
958   { "UnallocAddSubExtended",
959     {12, 11, 10},
960     { {"1x1", "VisitUnallocated"},
961       {"11x", "VisitUnallocated"},
962       {"otherwise", "UnallocAddSubExtended_2"},
963     },
964   },
965 
966   { "UnallocAddSubExtended_2",
967     {23, 22},
968     { {"1x", "VisitUnallocated"},
969       {"x1", "VisitUnallocated"},
970       {"otherwise", "VisitAddSubExtended"},
971     },
972   },
973 
974   { "UnallocAddSubImmediate",
975     {23},
976     { {"0", "VisitAddSubImmediate"},
977       {"1", "VisitUnallocated"},
978     },
979   },
980 
981   { "UnallocAddSubShifted",
982     {23, 22},
983     { {"11", "VisitUnallocated"},
984       {"otherwise", "UnallocAddSubShifted_2"},
985     },
986   },
987 
988   { "UnallocAddSubShifted_2",
989     {31, 15},
990     { {"01", "VisitUnallocated"},
991       {"otherwise", "VisitAddSubShifted"},
992     },
993   },
994 
995   { "UnallocAddSubWithCarry",
996     {15, 14, 13, 12, 11, 10},
997     { {"000000", "VisitAddSubWithCarry"},
998       {"x00001", "UnallocRotateRightIntoFlags"},
999       {"xx0010", "UnallocEvaluateIntoFlags"},
1000       {"otherwise", "VisitUnallocated"},
1001     },
1002   },
1003 
1004   { "UnallocAtomicMemory",
1005     {26, 23, 22, 15, 14, 13, 12},
1006     { {"0xx1001", "VisitUnallocated"},
1007       {"0xx101x", "VisitUnallocated"},
1008       {"0xx1101", "VisitUnallocated"},
1009       {"0xx111x", "VisitUnallocated"},
1010       {"00x1100", "VisitUnallocated"},
1011       {"0111100", "VisitUnallocated"},
1012       {"1xxxxxx", "VisitUnallocated"},
1013       {"otherwise", "VisitAtomicMemory"},
1014     },
1015   },
1016 
1017   { "UnallocBitfield",
1018     {31, 30, 29, 22},
1019     { {"x11x", "VisitUnallocated"},
1020       {"0xx1", "VisitUnallocated"},
1021       {"1xx0", "VisitUnallocated"},
1022       {"otherwise", "VisitBitfield"},
1023     },
1024   },
1025 
1026   { "UnallocConditionalBranch",
1027     {24, 4},
1028     { {"00", "VisitConditionalBranch"},
1029       {"otherwise", "VisitUnallocated"},
1030     },
1031   },
1032 
1033   { "UnallocConditionalCompareImmediate",
1034     {10, 4, 29},
1035     { {"1xx", "VisitUnallocated"},
1036       {"x1x", "VisitUnallocated"},
1037       {"xx0", "VisitUnallocated"},
1038       {"otherwise", "VisitConditionalCompareImmediate"},
1039     },
1040   },
1041 
1042   { "UnallocConditionalCompareRegister",
1043     {10, 4, 29},
1044     { {"1xx", "VisitUnallocated"},
1045       {"x1x", "VisitUnallocated"},
1046       {"xx0", "VisitUnallocated"},
1047       {"otherwise", "VisitConditionalCompareRegister"},
1048     },
1049   },
1050 
1051   { "UnallocConditionalSelect",
1052     {11, 29},
1053     { {"00", "VisitConditionalSelect"},
1054       {"otherwise", "VisitUnallocated"},
1055     },
1056   },
1057 
1058   { "UnallocDataProcessing1Source",
1059     {31, 16, 14, 13, 12, 11, 10},
1060     { {"x0xx11x", "VisitUnallocated"},
1061       {"0000011", "VisitUnallocated"},
1062       {"1001xxx", "VisitUnallocated"},
1063       {"x01xxxx", "VisitUnallocated"},
1064       {"x0x1xxx", "VisitUnallocated"},
1065       {"01xxxxx", "VisitUnallocated"},
1066       {"111xx1x", "VisitUnallocated"},
1067       {"111x1xx", "VisitUnallocated"},
1068       {"1111xxx", "VisitUnallocated"},
1069       {"otherwise", "UnallocDataProcessing1Source_2"},
1070     },
1071   },
1072 
1073   { "UnallocDataProcessing1Source_2",
1074     {29, 20, 19, 18, 17, 15},
1075     { {"000000", "VisitDataProcessing1Source"},
1076       {"otherwise", "VisitUnallocated"},
1077     },
1078   },
1079 
1080   { "UnallocDataProcessing2Source",
1081     {31, 14, 13, 12, 11, 10},
1082     { {"x0000x", "VisitUnallocated"},
1083       {"x11xxx", "VisitUnallocated"},
1084       {"010x11", "VisitUnallocated"},
1085       {"110xx0", "VisitUnallocated"},
1086       {"110x0x", "VisitUnallocated"},
1087       {"otherwise", "UnallocDataProcessing2Source_2"},
1088     },
1089   },
1090 
1091   { "UnallocDataProcessing2Source_2",
1092     {29, 15},
1093     { {"00", "VisitDataProcessing2Source"},
1094       {"otherwise", "VisitUnallocated"},
1095     },
1096   },
1097 
1098   { "UnallocDataProcessing3Source",
1099     {23, 22, 21, 15, 31},
1100     { {"00100", "VisitUnallocated"},
1101       {"00110", "VisitUnallocated"},
1102       {"01000", "VisitUnallocated"},
1103       {"0101x", "VisitUnallocated"},
1104       {"011xx", "VisitUnallocated"},
1105       {"100xx", "VisitUnallocated"},
1106       {"10100", "VisitUnallocated"},
1107       {"10110", "VisitUnallocated"},
1108       {"11000", "VisitUnallocated"},
1109       {"1101x", "VisitUnallocated"},
1110       {"111xx", "VisitUnallocated"},
1111       {"otherwise", "UnallocDataProcessing3Source_2"},
1112     },
1113   },
1114 
1115   { "UnallocDataProcessing3Source_2",
1116     {30, 29},
1117     { {"00", "VisitDataProcessing3Source"},
1118       {"otherwise", "VisitUnallocated"},
1119     },
1120   },
1121 
1122   { "UnallocEvaluateIntoFlags",
1123     {31, 30, 29, 20, 19, 18},
1124     { {"001000", "UnallocEvaluateIntoFlags_2"},
1125       {"otherwise", "VisitUnallocated"},
1126     },
1127   },
1128 
1129   { "UnallocEvaluateIntoFlags_2",
1130     {17, 16, 15, 4, 3, 2, 1, 0},
1131     { {"00001101", "VisitEvaluateIntoFlags"},
1132       {"otherwise", "VisitUnallocated"},
1133     },
1134   },
1135 
1136   { "UnallocException",
1137     {23, 22, 21, 1, 0},
1138     { {"00000", "VisitUnallocated"},
1139       {"001x1", "VisitUnallocated"},
1140       {"0011x", "VisitUnallocated"},
1141       {"010x1", "VisitUnallocated"},
1142       {"0101x", "VisitUnallocated"},
1143       {"011xx", "VisitUnallocated"},
1144       {"100xx", "VisitUnallocated"},
1145       {"10100", "VisitUnallocated"},
1146       {"11xxx", "VisitUnallocated"},
1147       {"otherwise", "UnallocException_2"},
1148     },
1149   },
1150 
1151   { "UnallocException_2",
1152     {4, 3, 2},
1153     { {"000", "VisitException"},
1154       {"otherwise", "VisitUnallocated"},
1155     },
1156   },
1157 
1158   { "UnallocExtract",
1159     {30, 29, 21},
1160     { {"000", "UnallocExtract_2"},
1161       {"otherwise", "VisitUnallocated"},
1162     },
1163   },
1164 
1165   { "UnallocExtract_2",
1166     {31, 22, 15},
1167     { {"10x", "VisitUnallocated"},
1168       {"01x", "VisitUnallocated"},
1169       {"0x1", "VisitUnallocated"},
1170       {"otherwise", "VisitExtract"},
1171     },
1172   },
1173 
1174   { "UnallocFPCompare",
1175     {31, 29, 15, 14, 2, 1, 0},
1176     { {"0000000", "UnallocFPCompare_2"},
1177       {"otherwise", "VisitUnallocated"},
1178     },
1179   },
1180 
1181   { "UnallocFPCompare_2",
1182     {23, 22},
1183     { {"10", "VisitUnallocated"},
1184       {"otherwise", "VisitFPCompare"},
1185     },
1186   },
1187 
1188   { "UnallocFPConditionalCompare",
1189     {31, 29, 23, 22},
1190     { {"xx10", "VisitUnallocated"},
1191       {"x1xx", "VisitUnallocated"},
1192       {"1xxx", "VisitUnallocated"},
1193       {"otherwise", "VisitFPConditionalCompare"},
1194     },
1195   },
1196 
1197   { "UnallocFPConditionalSelect",
1198     {31, 29, 23, 22},
1199     { {"xx10", "VisitUnallocated"},
1200       {"x1xx", "VisitUnallocated"},
1201       {"1xxx", "VisitUnallocated"},
1202       {"otherwise", "VisitFPConditionalSelect"},
1203     },
1204   },
1205 
1206   { "UnallocFPDataProcessing1Source",
1207     {31, 29, 20},
1208     { {"000", "UnallocFPDataProcessing1Source_2"},
1209       {"otherwise", "VisitUnallocated"},
1210     },
1211   },
1212 
1213   { "UnallocFPDataProcessing1Source_2",
1214     {23, 22, 19, 18, 17, 16, 15},
1215     { {"0000100", "VisitUnallocated"},
1216       {"0000110", "VisitUnallocated"},
1217       {"0001101", "VisitUnallocated"},
1218       {"00101xx", "VisitUnallocated"},
1219       {"0011xxx", "VisitUnallocated"},
1220       {"0100101", "VisitUnallocated"},
1221       {"0101101", "VisitUnallocated"},
1222       {"01101xx", "VisitUnallocated"},
1223       {"0111xxx", "VisitUnallocated"},
1224       {"10xxxxx", "VisitUnallocated"},
1225       {"110011x", "VisitUnallocated"},
1226       {"1101101", "VisitUnallocated"},
1227       {"111xxxx", "VisitUnallocated"},
1228       {"otherwise", "VisitFPDataProcessing1Source"},
1229     },
1230   },
1231 
1232   { "UnallocFPDataProcessing2Source",
1233     {15, 14, 13, 12},
1234     { {"1xx1", "VisitUnallocated"},
1235       {"1x1x", "VisitUnallocated"},
1236       {"11xx", "VisitUnallocated"},
1237       {"otherwise", "UnallocFPDataProcessing2Source_2"},
1238     },
1239   },
1240 
1241   { "UnallocFPDataProcessing2Source_2",
1242     {31, 29, 23, 22},
1243     { {"xx10", "VisitUnallocated"},
1244       {"x1xx", "VisitUnallocated"},
1245       {"1xxx", "VisitUnallocated"},
1246       {"otherwise", "VisitFPDataProcessing2Source"},
1247     },
1248   },
1249 
1250   { "UnallocFPDataProcessing3Source",
1251     {31, 29, 23, 22},
1252     { {"xx10", "VisitUnallocated"},
1253       {"x1xx", "VisitUnallocated"},
1254       {"1xxx", "VisitUnallocated"},
1255       {"otherwise", "VisitFPDataProcessing3Source"},
1256     },
1257   },
1258 
1259   { "UnallocFPFixedPointConvert",
1260     {23, 22, 20, 19, 17, 16},
1261     { {"10xxxx", "VisitUnallocated"},
1262       {"xxx00x", "VisitUnallocated"},
1263       {"xxx11x", "VisitUnallocated"},
1264       {"xx0x0x", "VisitUnallocated"},
1265       {"xx1x1x", "VisitUnallocated"},
1266       {"otherwise", "UnallocFPFixedPointConvert_2"},
1267     },
1268   },
1269 
1270   { "UnallocFPFixedPointConvert_2",
1271     {29, 18},
1272     { {"00", "UnallocFPFixedPointConvert_3"},
1273       {"otherwise", "VisitUnallocated"},
1274     },
1275   },
1276 
1277   { "UnallocFPFixedPointConvert_3",
1278     {31, 15},
1279     { {"00", "VisitUnallocated"},
1280       {"otherwise", "VisitFPFixedPointConvert"},
1281     },
1282   },
1283 
1284   { "UnallocFPImmediate",
1285     {23, 22},
1286     { {"10", "VisitUnallocated"},
1287       {"otherwise", "UnallocFPImmediate_2"},
1288     },
1289   },
1290 
1291   { "UnallocFPImmediate_2",
1292     {31, 29, 9, 8, 7, 6, 5},
1293     { {"0000000", "VisitFPImmediate"},
1294       {"otherwise", "VisitUnallocated"},
1295     },
1296   },
1297 
1298   { "UnallocFPIntegerConvert",
1299     {29},
1300     { {"0", "UnallocFPIntegerConvert_2"},
1301       {"1", "VisitUnallocated"},
1302     },
1303   },
1304 
1305   { "UnallocFPIntegerConvert_2",
1306     {31, 23, 22, 20, 19, 18, 17, 16},
1307     { {"0001x11x", "VisitUnallocated"},
1308       {"0010x11x", "VisitUnallocated"},
1309       {"0011011x", "VisitUnallocated"},
1310       {"00111111", "VisitUnallocated"},
1311       {"010xx11x", "VisitUnallocated"},
1312       {"100xx11x", "VisitUnallocated"},
1313       {"1011x11x", "VisitUnallocated"},
1314       {"101x111x", "VisitUnallocated"},
1315       {"1101x11x", "VisitUnallocated"},
1316       {"110x011x", "VisitUnallocated"},
1317       {"xxx1x01x", "VisitUnallocated"},
1318       {"xxx1x10x", "VisitUnallocated"},
1319       {"xxxx110x", "VisitUnallocated"},
1320       {"xxxx101x", "VisitUnallocated"},
1321       {"otherwise", "VisitFPIntegerConvert"},
1322     },
1323   },
1324 
1325   { "UnallocLoadLiteral",
1326     {26, 31, 30},
1327     { {"111", "VisitUnallocated"},
1328       {"otherwise", "VisitLoadLiteral"},
1329     },
1330   },
1331 
1332   { "UnallocLoadStoreExclusive",
1333     {31, 23, 21, 14, 13, 12, 11, 10},
1334     { {"001xxxx0", "VisitUnallocated"},
1335       {"001xxx0x", "VisitUnallocated"},
1336       {"001xx0xx", "VisitUnallocated"},
1337       {"001x0xxx", "VisitUnallocated"},
1338       {"0010xxxx", "VisitUnallocated"},
1339       {"x11xxxx0", "VisitUnallocated"},
1340       {"x11xxx0x", "VisitUnallocated"},
1341       {"x11xx0xx", "VisitUnallocated"},
1342       {"x11x0xxx", "VisitUnallocated"},
1343       {"x110xxxx", "VisitUnallocated"},
1344       {"otherwise", "VisitLoadStoreExclusive"},
1345     },
1346   },
1347 
1348   { "UnallocLoadStorePAC",
1349     {31, 30, 26},
1350     { {"110", "VisitLoadStorePAC"},
1351       {"otherwise", "VisitUnallocated"},
1352     },
1353   },
1354 
1355   { "UnallocLoadStoreRCpcUnscaledOffset",
1356     {31, 30, 23, 22, 11, 10},
1357     { {"xxxxx1", "VisitUnallocated"},
1358       {"xxxx1x", "VisitUnallocated"},
1359       {"101100", "VisitUnallocated"},
1360       {"111000", "VisitUnallocated"},
1361       {"111100", "VisitUnallocated"},
1362       {"otherwise", "VisitLoadStoreRCpcUnscaledOffset"},
1363     },
1364   },
1365 
1366   { "UnallocLoadStorePairNonTemporal",
1367     {26, 31, 30, 22},
1368     { {"001x", "VisitUnallocated"},
1369       {"x11x", "VisitUnallocated"},
1370       {"otherwise", "VisitLoadStorePairNonTemporal"},
1371     },
1372   },
1373 
1374   { "UnallocLoadStorePairOffset",
1375     {26, 31, 30, 22},
1376     { {"0010", "VisitUnallocated"},
1377       {"x11x", "VisitUnallocated"},
1378       {"otherwise", "VisitLoadStorePairOffset"},
1379     },
1380   },
1381 
1382   { "UnallocLoadStorePairPostIndex",
1383     {26, 31, 30, 22},
1384     { {"0010", "VisitUnallocated"},
1385       {"x11x", "VisitUnallocated"},
1386       {"otherwise", "VisitLoadStorePairPostIndex"},
1387     },
1388   },
1389 
1390   { "UnallocLoadStorePairPreIndex",
1391     {26, 31, 30, 22},
1392     { {"0010", "VisitUnallocated"},
1393       {"x11x", "VisitUnallocated"},
1394       {"otherwise", "VisitLoadStorePairPreIndex"},
1395     },
1396   },
1397 
1398   { "UnallocLoadStorePostIndex",
1399     {26, 23, 22, 31, 30},
1400     { {"01011", "VisitUnallocated"},
1401       {"0111x", "VisitUnallocated"},
1402       {"11xx1", "VisitUnallocated"},
1403       {"11x1x", "VisitUnallocated"},
1404       {"otherwise", "VisitLoadStorePostIndex"},
1405     },
1406   },
1407 
1408   { "UnallocLoadStorePreIndex",
1409     {26, 23, 22, 31, 30},
1410     { {"01011", "VisitUnallocated"},
1411       {"0111x", "VisitUnallocated"},
1412       {"11xx1", "VisitUnallocated"},
1413       {"11x1x", "VisitUnallocated"},
1414       {"otherwise", "VisitLoadStorePreIndex"},
1415     },
1416   },
1417 
1418   { "UnallocLoadStoreRegisterOffset",
1419     {14},
1420     { {"0", "VisitUnallocated"},
1421       {"1", "UnallocLoadStoreRegisterOffset_2"},
1422     },
1423   },
1424 
1425   { "UnallocLoadStoreRegisterOffset_2",
1426     {26, 23, 22, 31, 30},
1427     { {"0111x", "VisitUnallocated"},
1428       {"11xx1", "VisitUnallocated"},
1429       {"11x1x", "VisitUnallocated"},
1430       {"otherwise", "VisitLoadStoreRegisterOffset"},
1431     },
1432   },
1433 
1434   { "UnallocLoadStoreUnscaledOffset",
1435     {26, 23, 22, 31, 30},
1436     { {"0111x", "VisitUnallocated"},
1437       {"11xx1", "VisitUnallocated"},
1438       {"11x1x", "VisitUnallocated"},
1439       {"otherwise", "VisitLoadStoreUnscaledOffset"},
1440     },
1441   },
1442 
1443   { "UnallocLoadStoreUnsignedOffset",
1444     {26, 23, 22, 31, 30},
1445     { {"0111x", "VisitUnallocated"},
1446       {"11xx1", "VisitUnallocated"},
1447       {"11x1x", "VisitUnallocated"},
1448       {"otherwise", "VisitLoadStoreUnsignedOffset"},
1449     },
1450   },
1451 
1452   { "UnallocLogicalImmediate",
1453     {31, 22},
1454     { {"01", "VisitUnallocated"},
1455       {"otherwise", "VisitLogicalImmediate"},
1456     },
1457   },
1458 
1459   { "UnallocLogicalShifted",
1460     {31, 15},
1461     { {"01", "VisitUnallocated"},
1462       {"otherwise", "VisitLogicalShifted"},
1463     },
1464   },
1465 
1466   { "UnallocMoveWideImmediate",
1467     {30, 29},
1468     { {"01", "VisitUnallocated"},
1469       {"otherwise", "UnallocMoveWideImmediate_2"},
1470     },
1471   },
1472 
1473   { "UnallocMoveWideImmediate_2",
1474     {31, 22},
1475     { {"01", "VisitUnallocated"},
1476       {"otherwise", "VisitMoveWideImmediate"},
1477     },
1478   },
1479 
1480   { "UnallocNEON2RegMisc",
1481     {16, 15, 14, 13, 12, 23, 22, 29},
1482     { {"00001xx1", "VisitUnallocated"},
1483       {"001011x1", "VisitUnallocated"},
1484       {"01010xx1", "VisitUnallocated"},
1485       {"011xx0xx", "VisitUnallocated"},
1486       {"011101x1", "VisitUnallocated"},
1487       {"1000xxxx", "VisitUnallocated"},
1488       {"10011xx0", "VisitUnallocated"},
1489       {"10101xxx", "VisitUnallocated"},
1490       {"101101xx", "VisitUnallocated"},
1491       {"101110x1", "VisitUnallocated"},
1492       {"101111xx", "VisitUnallocated"},
1493       {"110001x1", "VisitUnallocated"},
1494       {"111101xx", "VisitUnallocated"},
1495       {"111111x0", "VisitUnallocated"},
1496       {"otherwise", "VisitNEON2RegMisc"},
1497     },
1498   },
1499 
1500   { "UnallocNEON2RegMiscFP16",
1501     {29, 23, 22, 16, 15, 14, 13, 12},
1502     { {"xx0xxxxx", "VisitUnallocated"},
1503       {"xxx00xxx", "VisitUnallocated"},
1504       {"xxx010xx", "VisitUnallocated"},
1505       {"xxx10xxx", "VisitUnallocated"},
1506       {"xxx11110", "VisitUnallocated"},
1507       {"x0x011xx", "VisitUnallocated"},
1508       {"x0x11111", "VisitUnallocated"},
1509       {"x1x11100", "VisitUnallocated"},
1510       {"01x11111", "VisitUnallocated"},
1511       {"11x01110", "VisitUnallocated"},
1512       {"11x11000", "VisitUnallocated"},
1513       {"otherwise", "VisitNEON2RegMiscFP16"},
1514     },
1515   },
1516 
1517   { "UnallocNEON3Different",
1518     {15, 14, 13, 12, 29},
1519     { {"10011", "VisitUnallocated"},
1520       {"10111", "VisitUnallocated"},
1521       {"11011", "VisitUnallocated"},
1522       {"11101", "VisitUnallocated"},
1523       {"1111x", "VisitUnallocated"},
1524       {"otherwise", "VisitNEON3Different"},
1525     },
1526   },
1527 
1528   { "UnallocNEON3Same",
1529     {29, 23, 22, 15, 14, 13, 12, 11},
1530     { {"00111101", "VisitUnallocated"},
1531       {"01x11011", "VisitUnallocated"},
1532       {"01x11100", "VisitUnallocated"},
1533       {"01111101", "VisitUnallocated"},
1534       {"1xx10111", "VisitUnallocated"},
1535       {"10111001", "VisitUnallocated"},
1536       {"11x11011", "VisitUnallocated"},
1537       {"11x11111", "VisitUnallocated"},
1538       {"11111001", "VisitUnallocated"},
1539       {"otherwise", "VisitNEON3Same"},
1540     },
1541   },
1542 
1543   { "UnallocNEON3SameExtra",
1544     {29, 14, 13, 12, 11},
1545     { {"x0011", "VisitUnallocated"},
1546       {"x01xx", "VisitUnallocated"},
1547       {"00000", "VisitUnallocated"},
1548       {"00001", "VisitUnallocated"},
1549       {"01xxx", "VisitUnallocated"},
1550       {"111x1", "VisitUnallocated"},
1551       {"otherwise", "VisitNEON3SameExtra"},
1552     },
1553   },
1554 
1555   { "UnallocNEON3SameFP16",
1556     {29, 23, 13, 12, 11},
1557     { {"00101", "VisitUnallocated"},
1558       {"01011", "VisitUnallocated"},
1559       {"01100", "VisitUnallocated"},
1560       {"01101", "VisitUnallocated"},
1561       {"10001", "VisitUnallocated"},
1562       {"11001", "VisitUnallocated"},
1563       {"11011", "VisitUnallocated"},
1564       {"11111", "VisitUnallocated"},
1565       {"otherwise", "VisitNEON3SameFP16"},
1566     },
1567   },
1568 
1569   { "UnallocNEONAcrossLanes",
1570     {29, 23, 22, 16, 15, 14, 13, 12},
1571     { {"xxx0000x", "VisitUnallocated"},
1572       {"xxx00010", "VisitUnallocated"},
1573       {"xxx001xx", "VisitUnallocated"},
1574       {"xxx0100x", "VisitUnallocated"},
1575       {"xxx01011", "VisitUnallocated"},
1576       {"xxx01101", "VisitUnallocated"},
1577       {"xxx01110", "VisitUnallocated"},
1578       {"xxx10xxx", "VisitUnallocated"},
1579       {"xxx1100x", "VisitUnallocated"},
1580       {"xxx111xx", "VisitUnallocated"},
1581       {"00101100", "VisitUnallocated"},
1582       {"00101111", "VisitUnallocated"},
1583       {"01101100", "VisitUnallocated"},
1584       {"01101111", "VisitUnallocated"},
1585       {"1xx11011", "VisitUnallocated"},
1586       {"otherwise", "VisitNEONAcrossLanes"},
1587     },
1588   },
1589 
1590   { "UnallocNEONByIndexedElement",
1591     {29, 23, 22, 15, 14, 13, 12},
1592     { {"0010001", "VisitUnallocated"},
1593       {"0010101", "VisitUnallocated"},
1594       {"0011001", "VisitUnallocated"},
1595       {"00x0000", "VisitUnallocated"},
1596       {"00x0100", "VisitUnallocated"},
1597       {"0xx1111", "VisitUnallocated"},
1598       {"1000001", "VisitUnallocated"},
1599       {"1000011", "VisitUnallocated"},
1600       {"1000101", "VisitUnallocated"},
1601       {"1000111", "VisitUnallocated"},
1602       {"10x1000", "VisitUnallocated"},
1603       {"10x1100", "VisitUnallocated"},
1604       {"1110001", "VisitUnallocated"},
1605       {"1110011", "VisitUnallocated"},
1606       {"1110101", "VisitUnallocated"},
1607       {"1110111", "VisitUnallocated"},
1608       {"1xx1011", "VisitUnallocated"},
1609       {"x011001", "VisitUnallocated"},
1610       {"otherwise", "VisitNEONByIndexedElement"},
1611     },
1612   },
1613 
1614   { "UnallocNEONCopy",
1615     {14, 13, 12, 11, 30, 29},
1616     { {"xxxx01", "VisitUnallocated"},
1617       {"0010x0", "VisitUnallocated"},
1618       {"001100", "VisitUnallocated"},
1619       {"0100x0", "VisitUnallocated"},
1620       {"0110x0", "VisitUnallocated"},
1621       {"1xxxx0", "VisitUnallocated"},
1622       {"otherwise", "UnallocNEONCopy_2"},
1623     },
1624   },
1625 
1626   { "UnallocNEONCopy_2",
1627     {19, 18, 17, 16},
1628     { {"0000", "VisitUnallocated"},
1629       {"otherwise", "VisitNEONCopy"},
1630     },
1631   },
1632 
1633   { "UnallocNEONExtract",
1634     {23, 22},
1635     { {"00", "VisitNEONExtract"},
1636       {"otherwise", "VisitUnallocated"},
1637     },
1638   },
1639 
1640   { "UnallocNEONLoadStoreMultiStruct",
1641     {22, 15, 14, 13, 12},
1642     { {"00001", "VisitUnallocated"},
1643       {"00011", "VisitUnallocated"},
1644       {"00101", "VisitUnallocated"},
1645       {"01001", "VisitUnallocated"},
1646       {"01011", "VisitUnallocated"},
1647       {"011xx", "VisitUnallocated"},
1648       {"10001", "VisitUnallocated"},
1649       {"10011", "VisitUnallocated"},
1650       {"10101", "VisitUnallocated"},
1651       {"11001", "VisitUnallocated"},
1652       {"11011", "VisitUnallocated"},
1653       {"111xx", "VisitUnallocated"},
1654       {"otherwise", "VisitNEONLoadStoreMultiStruct"},
1655     },
1656   },
1657 
1658   { "UnallocNEONLoadStoreMultiStructPostIndex",
1659     {22, 15, 14, 13, 12},
1660     { {"00001", "VisitUnallocated"},
1661       {"00011", "VisitUnallocated"},
1662       {"00101", "VisitUnallocated"},
1663       {"01001", "VisitUnallocated"},
1664       {"01011", "VisitUnallocated"},
1665       {"011xx", "VisitUnallocated"},
1666       {"10001", "VisitUnallocated"},
1667       {"10011", "VisitUnallocated"},
1668       {"10101", "VisitUnallocated"},
1669       {"11001", "VisitUnallocated"},
1670       {"11011", "VisitUnallocated"},
1671       {"111xx", "VisitUnallocated"},
1672       {"otherwise", "VisitNEONLoadStoreMultiStructPostIndex"},
1673     },
1674   },
1675 
1676   { "UnallocNEONLoadSingleStruct",
1677     {21, 15, 14, 13, 12, 11, 10},
1678     { {"0010xx1", "VisitUnallocated"},
1679       {"0011xx1", "VisitUnallocated"},
1680       {"0100101", "VisitUnallocated"},
1681       {"0100x1x", "VisitUnallocated"},
1682       {"0101011", "VisitUnallocated"},
1683       {"01011x1", "VisitUnallocated"},
1684       {"0101x10", "VisitUnallocated"},
1685       {"01101xx", "VisitUnallocated"},
1686       {"01111xx", "VisitUnallocated"},
1687       {"1010xx1", "VisitUnallocated"},
1688       {"1011xx1", "VisitUnallocated"},
1689       {"1100011", "VisitUnallocated"},
1690       {"11001x1", "VisitUnallocated"},
1691       {"1100x10", "VisitUnallocated"},
1692       {"1101011", "VisitUnallocated"},
1693       {"11011x1", "VisitUnallocated"},
1694       {"1101x10", "VisitUnallocated"},
1695       {"11101xx", "VisitUnallocated"},
1696       {"11111xx", "VisitUnallocated"},
1697       {"otherwise", "VisitNEONLoadStoreSingleStruct"},
1698     },
1699   },
1700 
1701   { "UnallocNEONLoadStoreSingleStruct",
1702     {22},
1703     { {"0", "UnallocNEONStoreSingleStruct"},
1704       {"1", "UnallocNEONLoadSingleStruct"},
1705     },
1706   },
1707 
1708   { "UnallocNEONLoadSingleStructPostIndex",
1709     {21, 15, 14, 13, 12, 11, 10},
1710     { {"0010xx1", "VisitUnallocated"},
1711       {"0011xx1", "VisitUnallocated"},
1712       {"0100101", "VisitUnallocated"},
1713       {"0100x1x", "VisitUnallocated"},
1714       {"0101011", "VisitUnallocated"},
1715       {"01011x1", "VisitUnallocated"},
1716       {"0101x10", "VisitUnallocated"},
1717       {"01101xx", "VisitUnallocated"},
1718       {"01111xx", "VisitUnallocated"},
1719       {"1010xx1", "VisitUnallocated"},
1720       {"1011xx1", "VisitUnallocated"},
1721       {"1100011", "VisitUnallocated"},
1722       {"11001x1", "VisitUnallocated"},
1723       {"1100x10", "VisitUnallocated"},
1724       {"1101011", "VisitUnallocated"},
1725       {"11011x1", "VisitUnallocated"},
1726       {"1101x10", "VisitUnallocated"},
1727       {"11101xx", "VisitUnallocated"},
1728       {"11111xx", "VisitUnallocated"},
1729       {"otherwise", "VisitNEONLoadStoreSingleStructPostIndex"},
1730     },
1731   },
1732 
1733   { "UnallocNEONLoadStoreSingleStructPostIndex",
1734     {22},
1735     { {"0", "UnallocNEONStoreSingleStructPostIndex"},
1736       {"1", "UnallocNEONLoadSingleStructPostIndex"},
1737     },
1738   },
1739 
1740   { "UnallocNEONModifiedImmediate",
1741     {30, 29, 15, 14, 13, 12, 11},
1742     { { "x00xxx1", "VisitUnallocated"},
1743       { "x010xx1", "VisitUnallocated"},
1744       { "x0110x1", "VisitUnallocated"},
1745       { "x011101", "VisitUnallocated"},
1746       { "0111110", "VisitUnallocated"},
1747       { "x1xxxx1", "VisitUnallocated"},
1748       { "otherwise", "VisitNEONModifiedImmediate"},
1749     },
1750   },
1751 
1752   { "UnallocNEONPerm",
1753     {13, 12},
1754     { {"00", "VisitUnallocated"},
1755       {"otherwise", "VisitNEONPerm"},
1756     },
1757   },
1758 
1759   { "UnallocNEONScalar2RegMisc",
1760     {16, 15, 14, 13, 12, 23, 22, 29},
1761     { {"0000xxxx", "VisitUnallocated"},
1762       {"00010xxx", "VisitUnallocated"},
1763       {"0010xxxx", "VisitUnallocated"},
1764       {"00110xxx", "VisitUnallocated"},
1765       {"01010xx1", "VisitUnallocated"},
1766       {"011xx0xx", "VisitUnallocated"},
1767       {"011101x1", "VisitUnallocated"},
1768       {"01111xxx", "VisitUnallocated"},
1769       {"1000xxxx", "VisitUnallocated"},
1770       {"10010xx0", "VisitUnallocated"},
1771       {"10011xxx", "VisitUnallocated"},
1772       {"10101xxx", "VisitUnallocated"},
1773       {"101100x0", "VisitUnallocated"},
1774       {"101101xx", "VisitUnallocated"},
1775       {"10111xxx", "VisitUnallocated"},
1776       {"1100xxxx", "VisitUnallocated"},
1777       {"111001xx", "VisitUnallocated"},
1778       {"11110xxx", "VisitUnallocated"},
1779       {"111110xx", "VisitUnallocated"},
1780       {"111111x1", "VisitUnallocated"},
1781       {"otherwise", "VisitNEONScalar2RegMisc"},
1782     },
1783   },
1784 
1785   { "UnallocNEONScalar2RegMiscFP16",
1786     {29, 23, 22, 16, 15, 14, 13, 12},
1787     { {"xx0xxxxx", "VisitUnallocated"},
1788       {"xx100xxx", "VisitUnallocated"},
1789       {"xx1010xx", "VisitUnallocated"},
1790       {"xx110xxx", "VisitUnallocated"},
1791       {"xx11100x", "VisitUnallocated"},
1792       {"xx111110", "VisitUnallocated"},
1793       {"x01011xx", "VisitUnallocated"},
1794       {"x0111111", "VisitUnallocated"},
1795       {"x1101111", "VisitUnallocated"},
1796       {"x1111100", "VisitUnallocated"},
1797       {"11101110", "VisitUnallocated"},
1798       {"11111111", "VisitUnallocated"},
1799       {"otherwise", "VisitNEONScalar2RegMiscFP16"},
1800     },
1801   },
1802 
1803   { "UnallocNEONScalar3Diff",
1804     {14, 13, 12, 29},
1805     { {"000x", "VisitUnallocated"},
1806       {"0011", "VisitUnallocated"},
1807       {"010x", "VisitUnallocated"},
1808       {"0111", "VisitUnallocated"},
1809       {"100x", "VisitUnallocated"},
1810       {"1011", "VisitUnallocated"},
1811       {"11xx", "VisitUnallocated"},
1812       {"otherwise", "UnallocNEONScalar3Diff_2"},
1813     },
1814   },
1815 
1816   { "UnallocNEONScalar3Diff_2",
1817     {15},
1818     { {"0", "VisitUnallocated"},
1819       {"1", "VisitNEONScalar3Diff"},
1820     },
1821   },
1822 
1823   { "UnallocNEONScalar3Same",
1824     {15, 14, 13, 12, 11, 23, 22, 29},
1825     { {"00000xxx", "VisitUnallocated"},
1826       {"0001xxxx", "VisitUnallocated"},
1827       {"00100xxx", "VisitUnallocated"},
1828       {"011xxxxx", "VisitUnallocated"},
1829       {"1001xxxx", "VisitUnallocated"},
1830       {"1010xxxx", "VisitUnallocated"},
1831       {"10111xxx", "VisitUnallocated"},
1832       {"1100xxxx", "VisitUnallocated"},
1833       {"110100xx", "VisitUnallocated"},
1834       {"110101x0", "VisitUnallocated"},
1835       {"110110x1", "VisitUnallocated"},
1836       {"110111xx", "VisitUnallocated"},
1837       {"111001x0", "VisitUnallocated"},
1838       {"111010x0", "VisitUnallocated"},
1839       {"111011x0", "VisitUnallocated"},
1840       {"11110xxx", "VisitUnallocated"},
1841       {"111110x1", "VisitUnallocated"},
1842       {"111111x1", "VisitUnallocated"},
1843       {"otherwise", "VisitNEONScalar3Same"},
1844     },
1845   },
1846 
1847   { "UnallocNEONScalar3SameExtra",
1848     {29, 14, 13, 12, 11},
1849     { {"x001x", "VisitUnallocated"},
1850       {"x01xx", "VisitUnallocated"},
1851       {"x1xxx", "VisitUnallocated"},
1852       {"00000", "VisitUnallocated"},
1853       {"00001", "VisitUnallocated"},
1854       {"otherwise", "VisitNEONScalar3SameExtra"},
1855     },
1856   },
1857 
1858   { "UnallocNEONScalar3SameFP16",
1859     {29, 23, 13, 12, 11},
1860     { {"00011", "VisitNEONScalar3SameFP16"},
1861       {"00100", "VisitNEONScalar3SameFP16"},
1862       {"00111", "VisitNEONScalar3SameFP16"},
1863       {"01111", "VisitNEONScalar3SameFP16"},
1864       {"10100", "VisitNEONScalar3SameFP16"},
1865       {"10101", "VisitNEONScalar3SameFP16"},
1866       {"11010", "VisitNEONScalar3SameFP16"},
1867       {"11100", "VisitNEONScalar3SameFP16"},
1868       {"11101", "VisitNEONScalar3SameFP16"},
1869       {"otherwise", "VisitUnallocated"},
1870     },
1871   },
1872 
1873   { "UnallocNEONScalarByIndexedElement",
1874     {29, 23, 22, 15, 14, 13, 12},
1875     { {"0xx1111", "VisitUnallocated"},
1876       {"1000001", "VisitUnallocated"},
1877       {"1000101", "VisitUnallocated"},
1878       {"11x0001", "VisitUnallocated"},
1879       {"11x0101", "VisitUnallocated"},
1880       {"1xx0011", "VisitUnallocated"},
1881       {"1xx0111", "VisitUnallocated"},
1882       {"1xx1011", "VisitUnallocated"},
1883       {"1xx1100", "VisitUnallocated"},
1884       {"x010001", "VisitUnallocated"},
1885       {"x010101", "VisitUnallocated"},
1886       {"x011001", "VisitUnallocated"},
1887       {"xxx0000", "VisitUnallocated"},
1888       {"xxx0010", "VisitUnallocated"},
1889       {"xxx0100", "VisitUnallocated"},
1890       {"xxx0110", "VisitUnallocated"},
1891       {"xxx1000", "VisitUnallocated"},
1892       {"xxx1010", "VisitUnallocated"},
1893       {"xxx1110", "VisitUnallocated"},
1894       {"otherwise", "VisitNEONScalarByIndexedElement"},
1895     },
1896   },
1897 
1898   { "UnallocNEONScalarCopy",
1899     {14, 13, 12, 11},
1900     { {"0000", "UnallocNEONScalarCopy_2"},
1901       {"otherwise", "VisitUnallocated"},
1902     },
1903   },
1904 
1905   { "UnallocNEONScalarCopy_2",
1906     {19, 18, 17, 16},
1907     { {"0000", "VisitUnallocated"},
1908       {"otherwise", "UnallocNEONScalarCopy_3"},
1909     },
1910   },
1911 
1912   { "UnallocNEONScalarCopy_3",
1913     {29},
1914     { {"0", "VisitNEONScalarCopy"},
1915       {"1", "VisitUnallocated"},
1916     },
1917   },
1918 
1919   { "UnallocNEONScalarPairwise",
1920     {29, 23, 22, 16, 15, 14, 13, 12},
1921     { {"xxx00xxx", "VisitUnallocated"},
1922       {"xxx010xx", "VisitUnallocated"},
1923       {"xxx01110", "VisitUnallocated"},
1924       {"xxx10xxx", "VisitUnallocated"},
1925       {"xxx1100x", "VisitUnallocated"},
1926       {"xxx11010", "VisitUnallocated"},
1927       {"xxx111xx", "VisitUnallocated"},
1928       {"x1x01101", "VisitUnallocated"},
1929       {"00101100", "VisitUnallocated"},
1930       {"00101101", "VisitUnallocated"},
1931       {"00101111", "VisitUnallocated"},
1932       {"01101100", "VisitUnallocated"},
1933       {"01101111", "VisitUnallocated"},
1934       {"1xx11011", "VisitUnallocated"},
1935       {"otherwise", "VisitNEONScalarPairwise"},
1936     },
1937   },
1938 
1939   { "UnallocNEONScalarShiftImmediate",
1940     {15, 14, 13, 12, 11, 29},
1941     { {"00001x", "VisitUnallocated"},
1942       {"00011x", "VisitUnallocated"},
1943       {"00101x", "VisitUnallocated"},
1944       {"00111x", "VisitUnallocated"},
1945       {"010000", "VisitUnallocated"},
1946       {"01001x", "VisitUnallocated"},
1947       {"01011x", "VisitUnallocated"},
1948       {"011000", "VisitUnallocated"},
1949       {"01101x", "VisitUnallocated"},
1950       {"01111x", "VisitUnallocated"},
1951       {"100000", "VisitUnallocated"},
1952       {"100010", "VisitUnallocated"},
1953       {"101xxx", "VisitUnallocated"},
1954       {"110xxx", "VisitUnallocated"},
1955       {"11101x", "VisitUnallocated"},
1956       {"11110x", "VisitUnallocated"},
1957       {"otherwise", "UnallocNEONScalarShiftImmediate_2"},
1958     },
1959   },
1960 
1961   { "UnallocNEONScalarShiftImmediate_2",
1962     {22, 21, 20, 19},
1963     { {"0000", "VisitUnallocated"},
1964       {"otherwise", "VisitNEONScalarShiftImmediate"},
1965     },
1966   },
1967 
1968   { "UnallocNEONShiftImmediate",
1969     {15, 14, 13, 12, 11, 29},
1970     { {"00001x", "VisitUnallocated"},
1971       {"00011x", "VisitUnallocated"},
1972       {"00101x", "VisitUnallocated"},
1973       {"00111x", "VisitUnallocated"},
1974       {"010000", "VisitUnallocated"},
1975       {"01001x", "VisitUnallocated"},
1976       {"01011x", "VisitUnallocated"},
1977       {"011000", "VisitUnallocated"},
1978       {"01101x", "VisitUnallocated"},
1979       {"01111x", "VisitUnallocated"},
1980       {"10101x", "VisitUnallocated"},
1981       {"1011xx", "VisitUnallocated"},
1982       {"110xxx", "VisitUnallocated"},
1983       {"11101x", "VisitUnallocated"},
1984       {"11110x", "VisitUnallocated"},
1985       {"otherwise", "VisitNEONShiftImmediate"},
1986     },
1987   },
1988 
1989   { "UnallocNEONStoreSingleStruct",
1990     {21, 15, 14, 13, 12, 11, 10},
1991     { {"0010xx1", "VisitUnallocated"},
1992       {"0011xx1", "VisitUnallocated"},
1993       {"0100101", "VisitUnallocated"},
1994       {"0100x1x", "VisitUnallocated"},
1995       {"0101011", "VisitUnallocated"},
1996       {"01011x1", "VisitUnallocated"},
1997       {"0101x10", "VisitUnallocated"},
1998       {"1010xx1", "VisitUnallocated"},
1999       {"1011xx1", "VisitUnallocated"},
2000       {"1100011", "VisitUnallocated"},
2001       {"11001x1", "VisitUnallocated"},
2002       {"1100x10", "VisitUnallocated"},
2003       {"1101011", "VisitUnallocated"},
2004       {"11011x1", "VisitUnallocated"},
2005       {"1101x10", "VisitUnallocated"},
2006       {"x11xxxx", "VisitUnallocated"},
2007       {"otherwise", "VisitNEONLoadStoreSingleStruct"},
2008     },
2009   },
2010 
2011   { "UnallocNEONStoreSingleStructPostIndex",
2012     {21, 15, 14, 13, 12, 11, 10},
2013     { {"0010xx1", "VisitUnallocated"},
2014       {"0011xx1", "VisitUnallocated"},
2015       {"0100101", "VisitUnallocated"},
2016       {"0100x1x", "VisitUnallocated"},
2017       {"0101011", "VisitUnallocated"},
2018       {"01011x1", "VisitUnallocated"},
2019       {"0101x10", "VisitUnallocated"},
2020       {"1010xx1", "VisitUnallocated"},
2021       {"1011xx1", "VisitUnallocated"},
2022       {"1100011", "VisitUnallocated"},
2023       {"11001x1", "VisitUnallocated"},
2024       {"1100x10", "VisitUnallocated"},
2025       {"1101011", "VisitUnallocated"},
2026       {"11011x1", "VisitUnallocated"},
2027       {"1101x10", "VisitUnallocated"},
2028       {"x11xxxx", "VisitUnallocated"},
2029       {"otherwise", "VisitNEONLoadStoreSingleStructPostIndex"},
2030     },
2031   },
2032 
2033   { "UnallocNEONTable",
2034     {23, 22},
2035     { {"00", "VisitNEONTable"},
2036       {"otherwise", "VisitUnallocated"},
2037     },
2038   },
2039 
2040   { "UnallocRotateRightIntoFlags",
2041     {31, 30, 29, 4},
2042     { {"1010", "VisitRotateRightIntoFlags"},
2043       {"otherwise", "VisitUnallocated"},
2044     },
2045   },
2046 
2047   { "UnallocSystem",
2048     {21, 20, 19, 15, 14, 13, 12},
2049     { {"0000101", "VisitUnallocated"},
2050       {"000011x", "VisitUnallocated"},
2051       {"0001xxx", "VisitUnallocated"},
2052       {"100xxxx", "VisitUnallocated"},
2053       {"otherwise", "UnallocSystem_2"},
2054     },
2055   },
2056 
2057   { "UnallocSystem_2",
2058     {21, 20, 19, 15, 14, 13},
2059     { {"000000", "VisitUnallocated"},
2060       {"otherwise", "UnallocSystem_3"},
2061     },
2062   },
2063 
2064   { "UnallocSystem_3",
2065     {21, 20, 19, 16, 15, 14, 13},
2066     { {"0000001", "VisitUnallocated"},
2067       {"otherwise", "UnallocSystem_4"},
2068     },
2069   },
2070 
2071   { "UnallocSystem_4",
2072     {21, 20, 19, 17, 15, 14, 13},
2073     { {"0000001", "VisitUnallocated"},
2074       {"otherwise", "UnallocSystem_5"},
2075     },
2076   },
2077 
2078   { "UnallocSystem_5",
2079     {21, 20, 19, 18, 15, 14, 13},
2080     { {"0001001", "VisitUnallocated"},
2081       {"otherwise", "VisitSystem"},
2082     },
2083   },
2084 
2085   { "UnallocUnconditionalBranchToRegister",
2086     {15, 14, 13, 12},
2087     { {"0000", "UnallocUnconditionalBranchToRegister_2"},
2088       {"otherwise", "VisitUnallocated"},
2089     },
2090   },
2091 
2092   { "UnallocUnconditionalBranchToRegister_2",
2093     {20, 19, 18, 17, 16},
2094     { {"11111", "UnallocUnconditionalBranchToRegister_3"},
2095       {"otherwise", "VisitUnallocated"},
2096     },
2097   },
2098 
2099   { "UnallocUnconditionalBranchToRegister_3",
2100     {24, 23, 22, 21},
2101     { {"0011", "VisitUnallocated"},
2102       {"011x", "VisitUnallocated"},
2103       {"otherwise", "VisitUnconditionalBranchToRegister"},
2104     },
2105   },
2106 
2107   { "DecodeSVE101xxxxx",
2108     {15, 14, 13},
2109     { {"101", "DecodeSVE101xx101"},
2110       {"010", "VisitSVEContiguousLoad_ScalarPlusScalar"},
2111       {"otherwise", "VisitSVEMemContiguousLoad"},
2112     },
2113   },
2114 
2115   { "DecodeSVE101xx101",
2116     {20},
2117     { {"0", "VisitSVEContiguousLoad_ScalarPlusImm"},
2118       {"1", "VisitSVEMemContiguousLoad"},
2119     },
2120   },
2121 
2122   { "DecodeSVE00000001",
2123     {20, 19},
2124     { {"10", "VisitSVEMovprfx"},
2125       {"otherwise", "VisitSVEIntReduction"},
2126     },
2127   },
2128 };
2129 // clang-format on
2130 
2131 static const VisitorNode kVisitorNodes[] = {
2132 #define VISITOR_NODES(A) {"Visit" #A, &Decoder::Visit##A},
2133     VISITOR_LIST(VISITOR_NODES)
2134 #undef VISITOR_NODES
2135 };
2136 
2137 }  // namespace aarch64
2138 }  // namespace vixl
2139