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