A game about forced loneliness, made by TACStudios
1using System;
2using System.Linq;
3
4namespace Unity.Burst.Editor
5{
6 internal partial class BurstDisassembler
7 {
8 internal class ARM64InstructionInfo
9 {
10 internal static bool GetARM64Info(string instructionName, out string instructionInfo)
11 {
12 var instr = ARM64AsmTokenKindProvider.TryRemoveT(new StringSlice(instructionName));
13 var retVal = TryFindInstructionInfo(instr, out instructionInfo);
14
15 if (retVal)
16 {
17 return retVal;
18 }
19
20 // Could not find info, so try and remove possible instruction condition code.
21 instr = ARM64AsmTokenKindProvider.TryRemoveCond(instr);
22 return TryFindInstructionInfo(instr, out instructionInfo);
23 }
24
25 private static bool TryFindInstructionInfo(StringSlice instr, out string instructionInfo)
26 {
27 var returnValue = true;
28
29 switch (instr.ToString())
30 {
31 case "bkpt":
32 instructionInfo = "Functions as breakpoint by causing the core to enter Debug state.";
33 break;
34 case "usat":
35 instructionInfo = "Unsigned saturate to any bit position, with optional shift before saturating.";
36 break;
37 case "stmia":
38 case "stm":
39 instructionInfo = "Store multiple registers incrementing address after each transfer.";
40 break;
41 case "stmib":
42 instructionInfo = "Store multiple registers incrementing address before each transfer.";
43 break;
44 case "stmda":
45 instructionInfo = "Store multiple registers decrement address after each transfer.";
46 break;
47 case "stmdb":
48 instructionInfo = "Store multiple registers decrement address before each transfer.";
49 break;
50 case "ldmia":
51 case "ldm":
52 instructionInfo = "Load multiple registers incrementing address after each transfer.";
53 break;
54 case "ldmib":
55 instructionInfo = "Load multiple registers incrementing address before each transfer.";
56 break;
57 case "ldmda":
58 instructionInfo = "Load multiple registers decrement address after each transfer.";
59 break;
60 case "ldmdb":
61 instructionInfo = "Load multiple registers decrement addres before each transfer.";
62 break;
63 case "adc":
64 instructionInfo = "Add with Carry.";
65 break;
66 case "add":
67 case "addw":
68 instructionInfo = "Add.";
69 break;
70 case "adds":
71 instructionInfo = "Add, setting flags.";
72 break;
73 case "vadd":
74 instructionInfo = "Adds corresponding elements of two vectors.";
75 break;
76 case "vaddl":
77 instructionInfo = "Vector add long.";
78 break;
79 case "vaddw":
80 instructionInfo = "Vector add wide.";
81 break;
82 case "adr":
83 instructionInfo = "Form PC-relative address.";
84 break;
85 case "adrl":
86 instructionInfo = "Loads a program or register-relative address.";
87 break;
88 case "adrp":
89 instructionInfo = "Form PC-relative address to 4KB page.";
90 break;
91 case "and":
92 instructionInfo = "Bitwise AND.";
93 break;
94 case "asr":
95 instructionInfo = "Arithmetic Shift Right.";
96 break;
97 case "asrs":
98 instructionInfo = "Arithmetic Shift Right, setting flags.";
99 break;
100 case "uxtab":
101 instructionInfo = "Zero extend Byte and Add.";
102 break;
103 case "uxtah":
104 instructionInfo = "Zero extend Halfword and Add. Extends a 16-bit value to a 32-bit value.";
105 break;
106 case "at":
107 instructionInfo = "Address Translate.";
108 break;
109 case "it":
110 case "itt":
111 case "ittt":
112 case "itttt":
113 instructionInfo = "If-Then condition for the next #t instruction(s).";
114 break;
115 case "ite":
116 case "itte":
117 case "itee":
118 case "ittee":
119 case "ittte":
120 instructionInfo = "If-Then-Else condition running next #t instruction(s) if true and then " +
121 "the instruction thereafter if condition is false.";
122 break;
123 case "b":
124 instructionInfo = "Branch.";
125 break;
126 case "bfi":
127 instructionInfo = "Bitfield Insert.";
128 break;
129 case "bfm":
130 instructionInfo = "Bitfield Move.";
131 break;
132 case "bfxil":
133 instructionInfo = "Bitfield extract and insert at low end.";
134 break;
135 case "bic":
136 instructionInfo = "Bitwise Bit Clear.";
137 break;
138 case "bl":
139 instructionInfo = "Branch with Link.";
140 break;
141 case "blr":
142 instructionInfo = "Branch with Link to Register.";
143 break;
144 case "br":
145 instructionInfo = "Branch to Register.";
146 break;
147 case "brk":
148 instructionInfo = "Breakpoint instruction.";
149 break;
150 case "cbnz":
151 instructionInfo = "Compare and Branch on Nonzero.";
152 break;
153 case "cbz":
154 instructionInfo = "Compare and Branch on Zero.";
155 break;
156 case "ccmn":
157 instructionInfo = "Conditional Compare Negative.";
158 break;
159 case "ccmp":
160 instructionInfo = "Conditional Compare.";
161 break;
162 case "clrex":
163 instructionInfo = "Clear Exclusive.";
164 break;
165 case "cls":
166 instructionInfo = "Count leading sign bits.";
167 break;
168 case "clz":
169 instructionInfo = "Count leading zero bits.";
170 break;
171 case "cmn":
172 instructionInfo = "Compare Negative.";
173 break;
174 case "cmp":
175 instructionInfo = "Compare.";
176 break;
177 case "crc32b":
178 case "crc32h":
179 case "crc32w":
180 case "crc32x":
181 instructionInfo = "CRC32 checksum performs a cyclic redundancy check (CRC) calculation on a value held in a general-purpose register.";
182 break;
183 case "crc32cb":
184 case "crc32ch":
185 case "crc32cw":
186 case "crc32cx":
187 instructionInfo = "CRC32C checksum performs a cyclic redundancy check (CRC) calculation on a value held in a general-purpose register.";
188 break;
189 case "csel":
190 instructionInfo = "Conditional Select.";
191 break;
192 case "csinc":
193 instructionInfo = "Conditional Select Increment.";
194 break;
195 case "csinv":
196 instructionInfo = "Conditional Select Invert.";
197 break;
198 case "csneg":
199 instructionInfo = "Conditional Select Negation.";
200 break;
201 case "dc":
202 instructionInfo = "Data Cache operation.";
203 break;
204 case "dcps1":
205 instructionInfo = "Debug Change PE State to EL1.";
206 break;
207 case "dcps2":
208 instructionInfo = "Debug Change PE State to EL2.";
209 break;
210 case "dcps3":
211 instructionInfo = "Debug Change PE State to EL3.";
212 break;
213 case "dmb":
214 instructionInfo = "Data Memory Barrier.";
215 break;
216 case "drps":
217 instructionInfo = "Debug restore process state.";
218 break;
219 case "dsb":
220 instructionInfo = "Data Synchronization Barrier.";
221 break;
222 case "eon":
223 instructionInfo = "Bitwise Exclusive OR NOT.";
224 break;
225 case "eor":
226 instructionInfo = "Bitwise Exclusive OR.";
227 break;
228 case "eors":
229 instructionInfo = "Bitwise Exclusive OR, setting flags.";
230 break;
231 case "eret":
232 instructionInfo = "Returns from an exception.";
233 break;
234 case "extr":
235 instructionInfo = "Extract register.";
236 break;
237 case "hint":
238 instructionInfo = "Hint instruction.";
239 break;
240 case "hlt":
241 instructionInfo = "Halt instruction.";
242 break;
243 case "hvc":
244 instructionInfo = "Hypervisor call to allow OS code to call the Hypervisor.";
245 break;
246 case "ic":
247 instructionInfo = "Instruction Cache operation.";
248 break;
249 case "isb":
250 instructionInfo = "Instruction Synchronization Barrier.";
251 break;
252 case "lsl":
253 instructionInfo = "Logical Shift Left.";
254 break;
255 case "lsls":
256 instructionInfo = "Logical Shift Left, setting flags.";
257 break;
258 case "lsr":
259 instructionInfo = "Logical Shift Right.";
260 break;
261 case "lsrs":
262 instructionInfo = "Logical Shift Right, setting flags.";
263 break;
264 case "smmul":
265 instructionInfo = "Signed Most significant word Multiply.";
266 break;
267 case "umaal":
268 instructionInfo = "Unsigned Multiply Accumulate Accumulate Long.";
269 break;
270 case "madd":
271 instructionInfo = "Multiply-Add.";
272 break;
273 case "mneg":
274 instructionInfo = "Multiply-Negate.";
275 break;
276 case "beq":
277 instructionInfo = "Conditional branch Equal.";
278 break;
279 case "bne":
280 instructionInfo = "Conditional branch Not equal.";
281 break;
282 case "bcs":
283 instructionInfo = "Conditional branch Carry set (identical to HS).";
284 break;
285 case "bhs":
286 instructionInfo = "Conditional branch Unsigned higher or same (identical to CS).";
287 break;
288 case "bcc":
289 instructionInfo = "Conditional branch Carry clear (identical to LO).";
290 break;
291 case "blo":
292 instructionInfo = "Conditional branch Unsigned lower (identical to CC).";
293 break;
294 case "bmi":
295 instructionInfo = "Conditional branch Minus or negative result.";
296 break;
297 case "bpl":
298 instructionInfo = "Conditional branch Positive or zero result.";
299 break;
300 case "bvs":
301 instructionInfo = "Conditional branch Overflow.";
302 break;
303 case "bvc":
304 instructionInfo = "Conditional branch No overflow.";
305 break;
306 case "bhi":
307 instructionInfo = "Conditional branch Unsigned higher.";
308 break;
309 case "bls":
310 instructionInfo = "Conditional branch Unsigned lower or same.";
311 break;
312 case "bge":
313 instructionInfo = "Conditional branch Signed greater than or equal.";
314 break;
315 case "blt":
316 instructionInfo = "Conditional branch Signed less than.";
317 break;
318 case "bgt":
319 instructionInfo = "Conditional branch Signed greater than.";
320 break;
321 case "ble":
322 instructionInfo = "Conditional branch Signed less than or equal.";
323 break;
324 case "bal":
325 instructionInfo = "Conditional branch Always (this is the default).";
326 break;
327 case "bnv":
328 instructionInfo = "Conditional branch No overflow.";
329 break;
330 case "bx":
331 instructionInfo = "Branch and exchange instruction set.";
332 break;
333 case "blx":
334 instructionInfo =
335 "transfers program execution to the address specified by label and stores the " +
336 "address of the next instruction in the LR (R14) register. BLX can change the core state from ARM to Thumb, or from Thumb to ARM.";
337 break;
338 case "bxj":
339 instructionInfo = "Branch and change Jazelle state. Jazelle state means the processor executes Java bytecodes.";
340 break;
341 case "mov":
342 instructionInfo = "Move.";
343 break;
344 case "movs":
345 instructionInfo = "Move, setting condition flags.";
346 break;
347 case "movl":
348 instructionInfo = "Load a register with eiter a 32-bit or 64-bit immediate value, or any adress.";
349 break;
350 case "vmov":
351 instructionInfo = "Inset a floating-point immediate value in a single-precision or double-precision register, or" +
352 "copy one register into another register.";
353 break;
354 case "movk":
355 instructionInfo = "Move wide with keep.";
356 break;
357 case "movn":
358 instructionInfo = "Move wide with NOT.";
359 break;
360 case "movz":
361 instructionInfo = "Move wide with zero.";
362 break;
363 case "movt":
364 instructionInfo = "Move to top half of register.";
365 break;
366 case "movw":
367 instructionInfo = "Move word.";
368 break;
369 case "mrs":
370 instructionInfo = "Move System Register.";
371 break;
372 case "msr":
373 instructionInfo = "Move immediate value to Special Register.";
374 break;
375 case "msub":
376 instructionInfo = "Multiply-Subtract.";
377 break;
378 case "mul":
379 instructionInfo = "Multiply.";
380 break;
381 case "muls":
382 instructionInfo = "Multiply, setting flags.";
383 break;
384 case "vmul":
385 instructionInfo = "Multiplies corresponding elements in two vectors, and places the results in the destination vector.";
386 break;
387 case "mvn":
388 instructionInfo = "Bitwise NOT.";
389 break;
390 case "mvns":
391 instructionInfo = "Bitwise NOT, setting flags.";
392 break;
393 case "neg":
394 instructionInfo = "Negate.";
395 break;
396 case "ngc":
397 instructionInfo = "Negate with Carry.";
398 break;
399 case "nop":
400 instructionInfo = "No Operation.";
401 break;
402 case "orn":
403 instructionInfo = "Bitwise OR NOT.";
404 break;
405 case "orr":
406 instructionInfo = "Bitwise OR.";
407 break;
408 case "orrs":
409 instructionInfo = "Bitwise OR, setting flags.";
410 break;
411 case "rbit":
412 instructionInfo = "Reverse Bits.";
413 break;
414 case "ret":
415 instructionInfo = "Return from subroutine.";
416 break;
417 case "rev16":
418 instructionInfo = "Reverse bytes in 16-bit halfwords.";
419 break;
420 case "rev32":
421 instructionInfo = "Reverse bytes in 32-bit words.";
422 break;
423 case "rev64":
424 instructionInfo = "Reverse Bytes.";
425 break;
426 case "rev":
427 instructionInfo = "Reverse Bytes.";
428 break;
429 case "rrx":
430 instructionInfo = "Rotate right with extend.";
431 break;
432 case "ror":
433 instructionInfo = "Rotate right.";
434 break;
435 case "sbc":
436 instructionInfo = "Subtract with Carry.";
437 break;
438 case "sbfiz":
439 instructionInfo = "Signed Bitfield Insert in Zero.";
440 break;
441 case "sbfm":
442 instructionInfo = "Signed Bitfield Move.";
443 break;
444 case "sbfx":
445 instructionInfo = "Signed Bitfield Extract.";
446 break;
447 case "sdiv":
448 instructionInfo = "Signed Divide.";
449 break;
450 case "sev":
451 instructionInfo = "Send Event.";
452 break;
453 case "sevl":
454 instructionInfo = "Send Event Local.";
455 break;
456 case "smaddl":
457 instructionInfo = "Signed Multiply-Add Long.";
458 break;
459 case "smc":
460 instructionInfo = "Supervisor call to allow OS or Hypervisor code to call the Secure Monitor.";
461 break;
462 case "smnegl":
463 instructionInfo = "Signed Multiply-Negate Long.";
464 break;
465 case "smsubl":
466 instructionInfo = "Signed Multiply-Subtract Long.";
467 break;
468 case "smulh":
469 instructionInfo = "Signed Multiply High.";
470 break;
471 case "smull":
472 instructionInfo = "Signed Multiply Long.";
473 break;
474 case "sub":
475 case "subw":
476 instructionInfo = "Subtract.";
477 break;
478 case "vsub":
479 instructionInfo = "Subtract the elements of one vector from the corresponding elements of another " +
480 "vector, and places the results in the destination vector.";
481 break;
482 case "subs":
483 instructionInfo = "Subtract (extended register), setting flags.";
484 break;
485 case "rsb":
486 instructionInfo = "Reverse subtract i.e. for \"rsb {Rd, } Rn, <Operand2>\" Rn is subtracted " +
487 "from operand2 and saved in Rd register.";
488 break;
489 case "rsbs":
490 instructionInfo = "Reverse subtract, setting flags, i.e. for \"rsb {Rd, } Rn, <Operand2>\" Rn is subtracted " +
491 "from operand2 and saved in Rd register.";
492 break;
493 case "svc":
494 instructionInfo = "Supervisor call to allow application code to call the OS.";
495 break;
496 case "sxtb":
497 instructionInfo = "Signed Extend Byte.";
498 break;
499 case "sxth":
500 instructionInfo = "Sign Extend Halfword.";
501 break;
502 case "sxtw":
503 instructionInfo = "Sign Extend Word.";
504 break;
505 case "sys":
506 instructionInfo = "System instruction.";
507 break;
508 case "sysl":
509 instructionInfo = "System instruction with result.";
510 break;
511 case "tbnz":
512 instructionInfo = "Test bit and Branch if Nonzero.";
513 break;
514 case "tbz":
515 instructionInfo = "Test bit and Branch if Zero.";
516 break;
517 case "tlbi":
518 instructionInfo = "TLB Invalidate operation.";
519 break;
520 case "tst":
521 instructionInfo = ", setting the condition flags and discarding the result.";
522 break;
523 case "ubfiz":
524 instructionInfo = "Unsigned Bitfield Insert in Zero.";
525 break;
526 case "ubfm":
527 instructionInfo = "Unsigned Bitfield Move.";
528 break;
529 case "ubfx":
530 instructionInfo = "Unsigned Bitfield Extract.";
531 break;
532 case "udiv":
533 instructionInfo = "Unsigned Divide.";
534 break;
535 case "umaddl":
536 instructionInfo = "Unsigned Multiply-Add Long.";
537 break;
538 case "umnegl":
539 instructionInfo = "Unsigned Multiply-Negate Long.";
540 break;
541 case "umsubl":
542 instructionInfo = "Unsigned Multiply-Subtract Long.";
543 break;
544 case "umulh":
545 instructionInfo = "Unsigned Multiply High.";
546 break;
547 case "umull":
548 instructionInfo = "Unsigned Multiply Long.";
549 break;
550 case "uxtb":
551 instructionInfo = "Unsigned Extend Byte.";
552 break;
553 case "uxth":
554 instructionInfo = "Unsigned Extend Halfword.";
555 break;
556 case "wfe":
557 instructionInfo = "Wait For Event.";
558 break;
559 case "wfi":
560 instructionInfo = "Wait For Interrupt.";
561 break;
562 case "yield":
563 instructionInfo = "YIELD.";
564 break;
565 case "ldar":
566 instructionInfo = "Load-Acquire Register.";
567 break;
568 case "ldarb":
569 instructionInfo = "Load-Acquire Register Byte.";
570 break;
571 case "ldarh":
572 instructionInfo = "Load-Acquire Register Halfword.";
573 break;
574 case "ldaxp":
575 instructionInfo = "Load-Acquire Exclusive Pair of Registers.";
576 break;
577 case "ldaxr":
578 instructionInfo = "Load-Acquire Exclusive Register.";
579 break;
580 case "ldaxrb":
581 instructionInfo = "Load-Acquire Exclusive Register Byte.";
582 break;
583 case "ldaxrh":
584 instructionInfo = "Load-Acquire Exclusive Register Halfword.";
585 break;
586 case "ldnp":
587 instructionInfo = "Load Pair of Registers, with non-temporal hint.";
588 break;
589 case "ldp":
590 instructionInfo = "Load Pair of Registers.";
591 break;
592 case "ldpsw":
593 instructionInfo = "Load Pair of Registers Signed Word.";
594 break;
595 case "ldr":
596 instructionInfo = "Load Register.";
597 break;
598 case "ldrb":
599 instructionInfo = "Load Register Byte.";
600 break;
601 case "ldrh":
602 instructionInfo = "Load Register Halfword.";
603 break;
604 case "ldrd":
605 instructionInfo = "Load Register double.";
606 break;
607 case "ldrsb":
608 instructionInfo = "Load Register Signed Byte.";
609 break;
610 case "ldrsh":
611 instructionInfo = "Load Register Signed Halfword.";
612 break;
613 case "ldrsw":
614 instructionInfo = "Load Register Signed Word.";
615 break;
616 case "ldtr":
617 instructionInfo = "Load Register.";
618 break;
619 case "ldtrb":
620 instructionInfo = "Load Register Byte.";
621 break;
622 case "ldtrh":
623 instructionInfo = "Load Register Halfword.";
624 break;
625 case "ldtrsb":
626 instructionInfo = "Load Register Signed Byte.";
627 break;
628 case "ldtrsh":
629 instructionInfo = "Load Register Signed Halfword.";
630 break;
631 case "ldtrsw":
632 instructionInfo = "Load Register Signed Word.";
633 break;
634 case "ldur":
635 instructionInfo = "Load Register.";
636 break;
637 case "ldurb":
638 instructionInfo = "Load Register Byte.";
639 break;
640 case "ldurh":
641 instructionInfo = "Load Register Halfword.";
642 break;
643 case "ldursb":
644 instructionInfo = "Load Register Signed Byte.";
645 break;
646 case "ldursh":
647 instructionInfo = "Load Register Signed Halfword.";
648 break;
649 case "ldursw":
650 instructionInfo = "Load Register Signed Word.";
651 break;
652 case "ldxp":
653 instructionInfo = "Load Exclusive Pair of Registers.";
654 break;
655 case "ldxr":
656 instructionInfo = "Load Exclusive Register.";
657 break;
658 case "ldxrb":
659 instructionInfo = "Load Exclusive Register Byte.";
660 break;
661 case "ldxrh":
662 instructionInfo = "Load Exclusive Register Halfword.";
663 break;
664 case "prfm":
665 instructionInfo = "Prefetch Memory.";
666 break;
667 case "prfum":
668 instructionInfo = "Prefetch Memory.";
669 break;
670 case "stlr":
671 instructionInfo = "Store-Release Register.";
672 break;
673 case "stlrb":
674 instructionInfo = "Store-Release Register Byte.";
675 break;
676 case "stlrh":
677 instructionInfo = "Store-Release Register Halfword.";
678 break;
679 case "stlxp":
680 instructionInfo = "Store-Release Exclusive Pair of registers.";
681 break;
682 case "stlxr":
683 instructionInfo = "Store-Release Exclusive Register.";
684 break;
685 case "stlxrb":
686 instructionInfo = "Store-Release Exclusive Register Byte.";
687 break;
688 case "stlxrh":
689 instructionInfo = "Store-Release Exclusive Register Halfword.";
690 break;
691 case "stnp":
692 instructionInfo = "Store Pair of Registers, with non-temporal hint.";
693 break;
694 case "stp":
695 instructionInfo = "Store Pair of Registers.";
696 break;
697 case "str":
698 instructionInfo = "Store Register.";
699 break;
700 case "strd":
701 instructionInfo = "Store register double.";
702 break;
703 case "strb":
704 instructionInfo = "Store Register Byte.";
705 break;
706 case "strh":
707 instructionInfo = "Store Register Halfword.";
708 break;
709 case "sttr":
710 instructionInfo = "Store Register.";
711 break;
712 case "sttrb":
713 instructionInfo = "Store Register Byte.";
714 break;
715 case "sttrh":
716 instructionInfo = "Store Register Halfword.";
717 break;
718 case "stur":
719 instructionInfo = "Store Register.";
720 break;
721 case "sturb":
722 instructionInfo = "Store Register Byte.";
723 break;
724 case "sturh":
725 instructionInfo = "Store Register Halfword.";
726 break;
727 case "stxp":
728 instructionInfo = "Store Exclusive Pair of registers.";
729 break;
730 case "stxr":
731 instructionInfo = "Store Exclusive Register.";
732 break;
733 case "stxrb":
734 instructionInfo = "Store Exclusive Register Byte.";
735 break;
736 case "stxrh":
737 instructionInfo = "Store Exclusive Register Halfword.";
738 break;
739 case "fabs":
740 instructionInfo = "Floating-point Absolute value.";
741 break;
742 case "fadd":
743 instructionInfo = "Floating-point Add.";
744 break;
745 case "fccmp":
746 instructionInfo = "Floating-point Conditional quiet Compare.";
747 break;
748 case "fccmpe":
749 instructionInfo = "Floating-point Conditional signaling Compare.";
750 break;
751 case "fcmp":
752 instructionInfo = "Floating-point quiet Compare.";
753 break;
754 case "fcmpe":
755 instructionInfo = "Floating-point signaling Compare.";
756 break;
757 case "fcsel":
758 instructionInfo = "Floating-point Conditional Select.";
759 break;
760 case "fcvt":
761 instructionInfo = "Floating-point Convert precision.";
762 break;
763 case "fcvtas":
764 instructionInfo = "Floating-point Convert to Signed integer, rounding to nearest with ties to Away.";
765 break;
766 case "fcvtau":
767 instructionInfo = "Floating-point Convert to Unsigned integer, rounding to nearest with ties to Away.";
768 break;
769 case "fcvtms":
770 instructionInfo = "Floating-point Convert to Signed integer, rounding toward Minus infinity.";
771 break;
772 case "fcvtmu":
773 instructionInfo = "Floating-point Convert to Unsigned integer, rounding toward Minus infinity.";
774 break;
775 case "fcvtns":
776 instructionInfo = "Floating-point Convert to Signed integer, rounding to nearest with ties to even.";
777 break;
778 case "fcvtnu":
779 instructionInfo = "Floating-point Convert to Unsigned integer, rounding to nearest with ties to even.";
780 break;
781 case "fcvtps":
782 instructionInfo = "Floating-point Convert to Signed integer, rounding toward Plus infinity.";
783 break;
784 case "fcvtpu":
785 instructionInfo = "Floating-point Convert to Unsigned integer, rounding toward Plus infinity.";
786 break;
787 case "fcvtzs":
788 instructionInfo = "Floating-point Convert to Signed fixed-point, rounding toward Zero.";
789 break;
790 case "fcvtzu":
791 instructionInfo = "Floating-point Convert to Unsigned fixed-point, rounding toward Zero.";
792 break;
793 case "fdiv":
794 instructionInfo = "Floating-point Divide.";
795 break;
796 case "fmadd":
797 instructionInfo = "Floating-point fused Multiply-Add.";
798 break;
799 case "fmax":
800 instructionInfo = "Floating-point Maximum.";
801 break;
802 case "fmaxnm":
803 instructionInfo = "Floating-point Maximum Number.";
804 break;
805 case "fmin":
806 instructionInfo = "Floating-point Minimum.";
807 break;
808 case "fminnm":
809 instructionInfo = "Floating-point Minimum Number.";
810 break;
811 case "fmov":
812 instructionInfo = "Floating-point Move register without conversion.";
813 break;
814 case "fmsub":
815 instructionInfo = "Floating-point Fused Multiply-Subtract.";
816 break;
817 case "fmul":
818 instructionInfo = "Floating-point Multiply.";
819 break;
820 case "fneg":
821 instructionInfo = "Floating-point Negate.";
822 break;
823 case "fnmadd":
824 instructionInfo = "Floating-point Negated fused Multiply-Add.";
825 break;
826 case "fnmsub":
827 instructionInfo = "Floating-point Negated fused Multiply-Subtract.";
828 break;
829 case "fnmul":
830 instructionInfo = "Floating-point Multiply-Negate.";
831 break;
832 case "frinta":
833 instructionInfo = "Floating-point Round to Integral, to nearest with ties to Away.";
834 break;
835 case "frinti":
836 instructionInfo = "Floating-point Round to Integral, using current rounding mode.";
837 break;
838 case "frintm":
839 instructionInfo = "Floating-point Round to Integral, toward Minus infinity.";
840 break;
841 case "frintn":
842 instructionInfo = "Floating-point Round to Integral, to nearest with ties to even.";
843 break;
844 case "frintp":
845 instructionInfo = "Floating-point Round to Integral, toward Plus infinity.";
846 break;
847 case "frintx":
848 instructionInfo = "Floating-point Round to Integral exact, using current rounding mode.";
849 break;
850 case "frintz":
851 instructionInfo = "Floating-point Round to Integral, toward Zero.";
852 break;
853 case "fsqrt":
854 instructionInfo = "Floating-point Square Root.";
855 break;
856 case "fsub":
857 instructionInfo = "Floating-point Subtract.";
858 break;
859 case "scvtf":
860 instructionInfo = "Signed fixed-point Convert to Floating-point.";
861 break;
862 case "ucvtf":
863 instructionInfo = "Unsigned fixed-point Convert to Floating-point.";
864 break;
865 case "abs":
866 instructionInfo = "Absolute value.";
867 break;
868 case "vabs":
869 instructionInfo = "Returns the absolute value of each element in a vector.";
870 break;
871 case "addp":
872 instructionInfo = "Add Pair of elements.";
873 break;
874 case "cmeq":
875 instructionInfo = "Compare bitwise Equal.";
876 break;
877 case "cmge":
878 instructionInfo = "Compare signed Greater than or Equal.";
879 break;
880 case "cmgt":
881 instructionInfo = "Compare signed Greater than.";
882 break;
883 case "cmhi":
884 instructionInfo = "Compare unsigned Higher.";
885 break;
886 case "cmhs":
887 instructionInfo = "Compare unsigned Higher or Same.";
888 break;
889 case "cmle":
890 instructionInfo = "Compare signed Less than or Equal to zero.";
891 break;
892 case "cmlt":
893 instructionInfo = "Compare signed Less than zero.";
894 break;
895 case "cmtst":
896 instructionInfo = "Compare bitwise Test bits nonzero.";
897 break;
898 case "dup":
899 instructionInfo = "Duplicate vector element to scalar.";
900 break;
901 case "fabd":
902 instructionInfo = "Floating-point Absolute Difference.";
903 break;
904 case "facge":
905 instructionInfo = "Floating-point Absolute Compare Greater than or Equal.";
906 break;
907 case "facgt":
908 instructionInfo = "Floating-point Absolute Compare Greater than.";
909 break;
910 case "faddp":
911 instructionInfo = "Floating-point Add Pair of elements.";
912 break;
913 case "fcmeq":
914 instructionInfo = "Floating-point Compare Equal.";
915 break;
916 case "fcmge":
917 instructionInfo = "Floating-point Compare Greater than or Equal.";
918 break;
919 case "fcmgt":
920 instructionInfo = "Floating-point Compare Greater than.";
921 break;
922 case "fcmle":
923 instructionInfo = "Floating-point Compare Less than or Equal to zero.";
924 break;
925 case "fcmlt":
926 instructionInfo = "Floating-point Compare Less than zero.";
927 break;
928 case "fcvtxn":
929 instructionInfo = "Floating-point Convert to lower precision Narrow, rounding to odd.";
930 break;
931 case "fmaxnmp":
932 instructionInfo = "Floating-point Maximum Number of Pair of elements.";
933 break;
934 case "fmaxp":
935 instructionInfo = "Floating-point Maximum of Pair of elements.";
936 break;
937 case "fminnmp":
938 instructionInfo = "Floating-point Minimum Number of Pair of elements.";
939 break;
940 case "fminp":
941 instructionInfo = "Floating-point Minimum of Pair of elements.";
942 break;
943 case "fmla":
944 instructionInfo = "Floating-point fused Multiply-Add to accumulator.";
945 break;
946 case "fmls":
947 instructionInfo = "Floating-point fused Multiply-Subtract from accumulator.";
948 break;
949 case "fmulx":
950 instructionInfo = "Floating-point Multiply extended.";
951 break;
952 case "frecpe":
953 instructionInfo = "Floating-point Reciprocal Estimate.";
954 break;
955 case "frecps":
956 instructionInfo = "Floating-point Reciprocal Step.";
957 break;
958 case "frsqrte":
959 instructionInfo = "Floating-point Reciprocal Square Root Estimate.";
960 break;
961 case "frsqrts":
962 instructionInfo = "Floating-point Reciprocal Square Root Step.";
963 break;
964 case "shl":
965 instructionInfo = "Shift Left.";
966 break;
967 case "sli":
968 instructionInfo = "Shift Left and Insert.";
969 break;
970 case "sqabs":
971 instructionInfo = "Signed saturating Absolute value.";
972 break;
973 case "sqadd":
974 instructionInfo = "Signed saturating Add.";
975 break;
976 case "sqdmlal":
977 instructionInfo = "Signed saturating Doubling Multiply-Add Long.";
978 break;
979 case "sqdmlsl":
980 instructionInfo = "Signed saturating Doubling Multiply-Subtract Long.";
981 break;
982 case "sqdmulh":
983 instructionInfo = "Signed saturating Doubling Multiply returning High half.";
984 break;
985 case "sqdmull":
986 instructionInfo = "Signed saturating Doubling Multiply Long.";
987 break;
988 case "sqneg":
989 instructionInfo = "Signed saturating Negate.";
990 break;
991 case "sqrdmulh":
992 instructionInfo = "Signed saturating Rounding Doubling Multiply returning High half.";
993 break;
994 case "sqrshl":
995 instructionInfo = "Signed saturating Rounding Shift Left.";
996 break;
997 case "sqrshrn":
998 instructionInfo = "Signed saturating Rounded Shift Right Narrow.";
999 break;
1000 case "sqrshrun":
1001 instructionInfo = "Signed saturating Rounded Shift Right Unsigned Narrow.";
1002 break;
1003 case "sqshl":
1004 instructionInfo = "Signed saturating Shift Left.";
1005 break;
1006 case "sqshlu":
1007 instructionInfo = "Signed saturating Shift Left Unsigned.";
1008 break;
1009 case "sqshrn":
1010 instructionInfo = "Signed saturating Shift Right Narrow.";
1011 break;
1012 case "sqshrun":
1013 instructionInfo = "Signed saturating Shift Right Unsigned Narrow.";
1014 break;
1015 case "sqsub":
1016 instructionInfo = "Signed saturating Subtract.";
1017 break;
1018 case "sqxtn":
1019 instructionInfo = "Signed saturating extract Narrow.";
1020 break;
1021 case "sqxtun":
1022 instructionInfo = "Signed saturating extract Unsigned Narrow.";
1023 break;
1024 case "sri":
1025 instructionInfo = "Shift Right and Insert.";
1026 break;
1027 case "srshl":
1028 instructionInfo = "Signed Rounding Shift Left.";
1029 break;
1030 case "srshr":
1031 instructionInfo = "Signed Rounding Shift Right.";
1032 break;
1033 case "srsra":
1034 instructionInfo = "Signed Rounding Shift Right and Accumulate.";
1035 break;
1036 case "sshl":
1037 instructionInfo = "Signed Shift Left.";
1038 break;
1039 case "sshr":
1040 instructionInfo = "Signed Shift Right.";
1041 break;
1042 case "ssra":
1043 instructionInfo = "Signed Shift Right and Accumulate.";
1044 break;
1045 case "suqadd":
1046 instructionInfo = "Signed saturating Accumulate of Unsigned value.";
1047 break;
1048 case "uqadd":
1049 instructionInfo = "Unsigned saturating Add.";
1050 break;
1051 case "uqrshl":
1052 instructionInfo = "Unsigned saturating Rounding Shift Left.";
1053 break;
1054 case "uqrshrn":
1055 instructionInfo = "Unsigned saturating Rounded Shift Right Narrow.";
1056 break;
1057 case "uqshl":
1058 instructionInfo = "Unsigned saturating Shift Left.";
1059 break;
1060 case "uqshrn":
1061 instructionInfo = "Unsigned saturating Shift Right Narrow.";
1062 break;
1063 case "uqsub":
1064 instructionInfo = "Unsigned saturating Subtract.";
1065 break;
1066 case "uqxtn":
1067 instructionInfo = "Unsigned saturating extract Narrow.";
1068 break;
1069 case "urshl":
1070 instructionInfo = "Unsigned Rounding Shift Left.";
1071 break;
1072 case "urshr":
1073 instructionInfo = "Unsigned Rounding Shift Right.";
1074 break;
1075 case "ursra":
1076 instructionInfo = "Unsigned Rounding Shift Right and Accumulate.";
1077 break;
1078 case "ushl":
1079 instructionInfo = "Unsigned Shift Left.";
1080 break;
1081 case "ushr":
1082 instructionInfo = "Unsigned Shift Right.";
1083 break;
1084 case "usqadd":
1085 instructionInfo = "Unsigned saturating Accumulate of Signed value.";
1086 break;
1087 case "usra":
1088 instructionInfo = "Unsigned Shift Right and Accumulate.";
1089 break;
1090 case "addhn":
1091 case "addhn2":
1092 instructionInfo = "Add returning High Narrow.";
1093 break;
1094 case "addv":
1095 instructionInfo = "Add across Vector.";
1096 break;
1097 case "bif":
1098 instructionInfo = "Bitwise Insert if False.";
1099 break;
1100 case "bit":
1101 instructionInfo = "Bitwise Insert if True.";
1102 break;
1103 case "bsl":
1104 instructionInfo = "Bitwise Select.";
1105 break;
1106 case "cnt":
1107 instructionInfo = "Population Count per byte.";
1108 break;
1109 case "ext":
1110 instructionInfo = "Extract vector from pair of vectors.";
1111 break;
1112 case "fcvtl":
1113 case "fcvtl2":
1114 instructionInfo = "Floating-point Convert to higher precision Long.";
1115 break;
1116 case "fcvtn":
1117 case "fcvtn2":
1118 instructionInfo = "Floating-point Convert to lower precision Narrow.";
1119 break;
1120 case "fcvtxn2":
1121 instructionInfo = "Floating-point Convert to lower precision Narrow, rounding to odd.";
1122 break;
1123 case "fmaxnmv":
1124 instructionInfo = "Floating-point Maximum Number across Vector.";
1125 break;
1126 case "fmaxv":
1127 instructionInfo = "Floating-point Maximum across Vector.";
1128 break;
1129 case "fminnmv":
1130 instructionInfo = "Floating-point Minimum Number across Vector.";
1131 break;
1132 case "fminv":
1133 instructionInfo = "Floating-point Minimum across Vector.";
1134 break;
1135 case "frecpx":
1136 instructionInfo = "Floating-point Reciprocal exponent.";
1137 break;
1138 case "ins":
1139 instructionInfo = "Insert vector element from another vector element.";
1140 break;
1141 case "ld1":
1142 instructionInfo = "Load multiple single-element structures to one, two, three, or four registers.";
1143 break;
1144 case "ld1r":
1145 instructionInfo = "Load one single-element structure and Replicate to all lanes.";
1146 break;
1147 case "ld2":
1148 instructionInfo = "Load multiple 2-element structures to two registers.";
1149 break;
1150 case "ld2r":
1151 instructionInfo = "Load single 2-element structure and Replicate to all lanes of two registers.";
1152 break;
1153 case "ld3":
1154 instructionInfo = "Load multiple 3-element structures to three registers.";
1155 break;
1156 case "ld3r":
1157 instructionInfo = "Load single 3-element structure and Replicate to all lanes of three registers.";
1158 break;
1159 case "ld4":
1160 instructionInfo = "Load multiple 4-element structures to four registers.";
1161 break;
1162 case "ld4r":
1163 instructionInfo = "Load single 4-element structure and Replicate to all lanes of four registers.";
1164 break;
1165 case "mla":
1166 instructionInfo = "Multiply-Add to accumulator (vector, by element).";
1167 break;
1168 case "mls":
1169 instructionInfo = "Multiply-Subtract from accumulator (vector, by element).";
1170 break;
1171 case "movi":
1172 instructionInfo = "Move Immediate.";
1173 break;
1174 case "mvni":
1175 instructionInfo = "Move inverted Immediate.";
1176 break;
1177 case "not":
1178 instructionInfo = "Bitwise NOT.";
1179 break;
1180 case "pmul":
1181 instructionInfo = "Polynomial Multiply.";
1182 break;
1183 case "pmull":
1184 case "pmull2":
1185 instructionInfo = "Polynomial Multiply Long.";
1186 break;
1187 case "raddhn":
1188 case "raddhn2":
1189 instructionInfo = "Rounding Add returning High Narrow.";
1190 break;
1191 case "rshrn":
1192 case "rshrn2":
1193 instructionInfo = "Rounding Shift Right Narrow.";
1194 break;
1195 case "rsubhn":
1196 case "rsubhn2":
1197 instructionInfo = "Rounding Subtract returning High Narrow.";
1198 break;
1199 case "saba":
1200 instructionInfo = "Signed Absolute difference and Accumulate.";
1201 break;
1202 case "sabal":
1203 case "sabal2":
1204 instructionInfo = "Signed Absolute difference and Accumulate Long.";
1205 break;
1206 case "sabd":
1207 instructionInfo = "Signed Absolute Difference.";
1208 break;
1209 case "sabdl":
1210 case "sabdl2":
1211 instructionInfo = "Signed Absolute Difference Long.";
1212 break;
1213 case "sadalp":
1214 instructionInfo = "Signed Add and Accumulate Long Pairwise.";
1215 break;
1216 case "saddl":
1217 case "saddl2":
1218 instructionInfo = "Signed Add Long.";
1219 break;
1220 case "saddlp":
1221 instructionInfo = "Signed Add Long Pairwise.";
1222 break;
1223 case "saddlv":
1224 instructionInfo = "Signed Add Long across Vector.";
1225 break;
1226 case "saddw":
1227 case "saddw2":
1228 instructionInfo = "Signed Add Wide.";
1229 break;
1230 case "shadd":
1231 instructionInfo = "Signed Halving Add.";
1232 break;
1233 case "shll":
1234 case "shll2":
1235 instructionInfo = "Shift Left Long.";
1236 break;
1237 case "shrn":
1238 case "shrn2":
1239 instructionInfo = "Shift Right Narrow.";
1240 break;
1241 case "shsub":
1242 instructionInfo = "Signed Halving Subtract.";
1243 break;
1244 case "smax":
1245 instructionInfo = "Signed Maximum.";
1246 break;
1247 case "smaxp":
1248 instructionInfo = "Signed Maximum Pairwise.";
1249 break;
1250 case "smaxv":
1251 instructionInfo = "Signed Maximum across Vector.";
1252 break;
1253 case "smin":
1254 instructionInfo = "Signed Minimum.";
1255 break;
1256 case "sminp":
1257 instructionInfo = "Signed Minimum Pairwise.";
1258 break;
1259 case "sminv":
1260 instructionInfo = "Signed Minimum across Vector.";
1261 break;
1262 case "smlabb":
1263 case "smlabt":
1264 case "smlatb":
1265 case "smlatt":
1266 instructionInfo = "Signed Multiply Accumulate performs a signed multiply accumulate operation.";
1267 break;
1268 case "smlal":
1269 case "smlal2":
1270 instructionInfo = "Signed Multiply-Add Long (vector, by element).";
1271 break;
1272 case "smlsl":
1273 case "smlsl2":
1274 instructionInfo = "Signed Multiply-Subtract Long (vector, by element).";
1275 break;
1276 case "smov":
1277 instructionInfo = "Signed Move vector element to general-purpose register.";
1278 break;
1279 case "smull2":
1280 instructionInfo = "Signed Multiply Long (vector, by element).";
1281 break;
1282 case "sqdmlal2":
1283 instructionInfo = "Signed saturating Doubling Multiply-Add Long.";
1284 break;
1285 case "sqdmlsl2":
1286 instructionInfo = "Signed saturating Doubling Multiply-Subtract Long.";
1287 break;
1288 case "sqdmull2":
1289 instructionInfo = "Signed saturating Doubling Multiply Long.";
1290 break;
1291 case "sqrshrn2":
1292 instructionInfo = "Signed saturating Rounded Shift Right Narrow.";
1293 break;
1294 case "sqrshrun2":
1295 instructionInfo = "Signed saturating Rounded Shift Right Unsigned Narrow.";
1296 break;
1297 case "sqshrn2":
1298 instructionInfo = "Signed saturating Shift Right Narrow.";
1299 break;
1300 case "sqshrun2":
1301 instructionInfo = "Signed saturating Shift Right Unsigned Narrow.";
1302 break;
1303 case "sqxtn2":
1304 instructionInfo = "Signed saturating extract Narrow.";
1305 break;
1306 case "sqxtun2":
1307 instructionInfo = "Signed saturating extract Unsigned Narrow.";
1308 break;
1309 case "srhadd":
1310 instructionInfo = "Signed Rounding Halving Add.";
1311 break;
1312 case "sshll":
1313 case "sshll2":
1314 instructionInfo = "Signed Shift Left Long.";
1315 break;
1316 case "ssubl":
1317 case "ssubl2":
1318 instructionInfo = "Signed Subtract Long.";
1319 break;
1320 case "ssubw":
1321 case "ssubw2":
1322 instructionInfo = "Signed Subtract Wide.";
1323 break;
1324 case "st1":
1325 instructionInfo = "Store multiple single-element structures from one, two, three, or four registers.";
1326 break;
1327 case "st2":
1328 instructionInfo = "Store multiple 2-element structures from two registers.";
1329 break;
1330 case "st3":
1331 instructionInfo = "Store multiple 3-element structures from three registers.";
1332 break;
1333 case "st4":
1334 instructionInfo = "Store multiple 4-element structures from four registers.";
1335 break;
1336 case "subhn":
1337 case "subhn2":
1338 instructionInfo = "Subtract returning High Narrow.";
1339 break;
1340 case "tbl":
1341 instructionInfo = "Table vector Lookup.";
1342 break;
1343 case "tbx":
1344 instructionInfo = "Table vector lookup extension.";
1345 break;
1346 case "tbb":
1347 instructionInfo = "PC-relative forward branch using table of single byte offsets.";
1348 break;
1349 case "tbh":
1350 instructionInfo = "PC-relative forward branch using table of halfword offsets.";
1351 break;
1352 case "trn1":
1353 instructionInfo = "Transpose vectors.";
1354 break;
1355 case "trn2":
1356 instructionInfo = "Transpose vectors.";
1357 break;
1358 case "uaba":
1359 instructionInfo = "Unsigned Absolute difference and Accumulate.";
1360 break;
1361 case "uabal":
1362 case "uabal2":
1363 instructionInfo = "Unsigned Absolute difference and Accumulate Long.";
1364 break;
1365 case "uabd":
1366 instructionInfo = "Unsigned Absolute Difference.";
1367 break;
1368 case "uabdl":
1369 case "uabdl2":
1370 instructionInfo = "Unsigned Absolute Difference Long.";
1371 break;
1372 case "uadalp":
1373 instructionInfo = "Unsigned Add and Accumulate Long Pairwise.";
1374 break;
1375 case "uaddl":
1376 case "uaddl2":
1377 instructionInfo = "Unsigned Add Long.";
1378 break;
1379 case "uaddlp":
1380 instructionInfo = "Unsigned Add Long Pairwise.";
1381 break;
1382 case "uaddlv":
1383 instructionInfo = "Unsigned sum Long across Vector.";
1384 break;
1385 case "uaddw":
1386 case "uaddw2":
1387 instructionInfo = "Unsigned Add Wide.";
1388 break;
1389 case "uhadd":
1390 instructionInfo = "Unsigned Halving Add.";
1391 break;
1392 case "uhsub":
1393 instructionInfo = "Unsigned Halving Subtract.";
1394 break;
1395 case "umax":
1396 instructionInfo = "Unsigned Maximum.";
1397 break;
1398 case "umaxp":
1399 instructionInfo = "Unsigned Maximum Pairwise.";
1400 break;
1401 case "umaxv":
1402 instructionInfo = "Unsigned Maximum across Vector.";
1403 break;
1404 case "umin":
1405 instructionInfo = "Unsigned Minimum.";
1406 break;
1407 case "uminp":
1408 instructionInfo = "Unsigned Minimum Pairwise.";
1409 break;
1410 case "uminv":
1411 instructionInfo = "Unsigned Minimum across Vector.";
1412 break;
1413 case "umlal":
1414 case "umlal2":
1415 instructionInfo = "Unsigned Multiply-Add Long (vector, by element).";
1416 break;
1417 case "umlsl":
1418 case "umlsl2":
1419 instructionInfo = "Unsigned Multiply-Subtract Long (vector, by element).";
1420 break;
1421 case "umov":
1422 instructionInfo = "Unsigned Move vector element to general-purpose register.";
1423 break;
1424 case "umull2":
1425 instructionInfo = "Unsigned Multiply Long (vector, by element).";
1426 break;
1427 case "uqrshrn2":
1428 instructionInfo = "Unsigned saturating Rounded Shift Right Narrow.";
1429 break;
1430 case "uqshrn2":
1431 instructionInfo = "Unsigned saturating Shift Right Narrow.";
1432 break;
1433 case "uqxtn2":
1434 instructionInfo = "Unsigned saturating extract Narrow.";
1435 break;
1436 case "urecpe":
1437 instructionInfo = "Unsigned Reciprocal Estimate.";
1438 break;
1439 case "urhadd":
1440 instructionInfo = "Unsigned Rounding Halving Add.";
1441 break;
1442 case "ursqrte":
1443 instructionInfo = "Unsigned Reciprocal Square Root Estimate.";
1444 break;
1445 case "ushll":
1446 case "ushll2":
1447 instructionInfo = "Unsigned Shift Left Long.";
1448 break;
1449 case "usubl":
1450 case "usubl2":
1451 instructionInfo = "Unsigned Subtract Long.";
1452 break;
1453 case "usubw":
1454 case "usubw2":
1455 instructionInfo = "Unsigned Subtract Wide.";
1456 break;
1457 case "uzp1":
1458 instructionInfo = "Unzip vectors.";
1459 break;
1460 case "uzp2":
1461 instructionInfo = "Unzip vectors.";
1462 break;
1463 case "xtn":
1464 case "xtn2":
1465 instructionInfo = "Extract Narrow.";
1466 break;
1467 case "zip1":
1468 instructionInfo = "Zip vectors.";
1469 break;
1470 case "zip2":
1471 instructionInfo = "Zip vectors.";
1472 break;
1473 case "aesd":
1474 instructionInfo = "AES single round decryption.";
1475 break;
1476 case "aese":
1477 instructionInfo = "AES single round encryption.";
1478 break;
1479 case "aesimc":
1480 instructionInfo = "AES inverse mix columns.";
1481 break;
1482 case "aesmc":
1483 instructionInfo = "AES mix columns.";
1484 break;
1485 case "sha1c":
1486 instructionInfo = "SHA1 hash update.";
1487 break;
1488 case "sha1h":
1489 instructionInfo = "SHA1 fixed rotate.";
1490 break;
1491 case "sha1m":
1492 instructionInfo = "SHA1 hash update.";
1493 break;
1494 case "sha1p":
1495 instructionInfo = "SHA1 hash update.";
1496 break;
1497 case "sha1su0":
1498 instructionInfo = "SHA1 schedule update 0.";
1499 break;
1500 case "sha1su1":
1501 instructionInfo = "SHA1 schedule update 1.";
1502 break;
1503 case "sha256h2":
1504 instructionInfo = "SHA256 hash update.";
1505 break;
1506 case "sha256h":
1507 instructionInfo = "SHA256 hash update.";
1508 break;
1509 case "sha256su0":
1510 instructionInfo = "SHA256 schedule update 0.";
1511 break;
1512 case "sha256su1":
1513 instructionInfo = "SHA256 schedule update 1.";
1514 break;
1515 case "adcs":
1516 instructionInfo = "Add with Carry, setting flags.";
1517 break;
1518 case "addg":
1519 instructionInfo = "Add with Tag.";
1520 break;
1521 case "ands":
1522 instructionInfo = "Bitwise AND (immediate), setting flags.";
1523 break;
1524 case "asrv":
1525 instructionInfo = "Arithmetic Shift Right Variable.";
1526 break;
1527 case "autda":
1528 instructionInfo = "Authenticate Data address, using key A.";
1529 break;
1530 case "autdza":
1531 instructionInfo = "Authenticate Data address, using key A.";
1532 break;
1533 case "autdb":
1534 instructionInfo = "Authenticate Data address, using key B.";
1535 break;
1536 case "autdzb":
1537 instructionInfo = "Authenticate Data address, using key B.";
1538 break;
1539 case "autia":
1540 instructionInfo = "Authenticate Instruction address, using key A.";
1541 break;
1542 case "autiza":
1543 instructionInfo = "Authenticate Instruction address, using key A.";
1544 break;
1545 case "autia1716":
1546 instructionInfo = "Authenticate Instruction address, using key A.";
1547 break;
1548 case "autiasp":
1549 instructionInfo = "Authenticate Instruction address, using key A.";
1550 break;
1551 case "autiaz":
1552 instructionInfo = "Authenticate Instruction address, using key A.";
1553 break;
1554 case "autib":
1555 instructionInfo = "Authenticate Instruction address, using key B.";
1556 break;
1557 case "autizb":
1558 instructionInfo = "Authenticate Instruction address, using key B.";
1559 break;
1560 case "autib1716":
1561 instructionInfo = "Authenticate Instruction address, using key B.";
1562 break;
1563 case "autibsp":
1564 instructionInfo = "Authenticate Instruction address, using key B.";
1565 break;
1566 case "autibz":
1567 instructionInfo = "Authenticate Instruction address, using key B.";
1568 break;
1569 case "axflag":
1570 instructionInfo = "Convert floating-point condition flags from Arm to external format.";
1571 break;
1572 case "b.cond":
1573 instructionInfo = "Branch conditionally.";
1574 break;
1575 case "bfc":
1576 instructionInfo = "Bitfield Clear, leaving other bits unchanged.";
1577 break;
1578 case "bics":
1579 instructionInfo = "Bitwise Bit Clear (shifted register), setting flags.";
1580 break;
1581 case "blraa":
1582 instructionInfo = "Branch with Link to Register, with pointer authentication.";
1583 break;
1584 case "blraaz":
1585 instructionInfo = "Branch with Link to Register, with pointer authentication.";
1586 break;
1587 case "blrab":
1588 instructionInfo = "Branch with Link to Register, with pointer authentication.";
1589 break;
1590 case "blrabz":
1591 instructionInfo = "Branch with Link to Register, with pointer authentication.";
1592 break;
1593 case "braa":
1594 instructionInfo = "Branch to Register, with pointer authentication.";
1595 break;
1596 case "braaz":
1597 instructionInfo = "Branch to Register, with pointer authentication.";
1598 break;
1599 case "brab":
1600 instructionInfo = "Branch to Register, with pointer authentication.";
1601 break;
1602 case "brabz":
1603 instructionInfo = "Branch to Register, with pointer authentication.";
1604 break;
1605 case "bti":
1606 instructionInfo = "Branch Target Identification.";
1607 break;
1608 case "cinc":
1609 instructionInfo = "Conditional Increment.";
1610 break;
1611 case "cinv":
1612 instructionInfo = "Conditional Invert.";
1613 break;
1614 case "cmpp":
1615 instructionInfo = "Compare with Tag.";
1616 break;
1617 case "cneg":
1618 instructionInfo = "Conditional Negate.";
1619 break;
1620 case "csdb":
1621 instructionInfo = "Consumption of Speculative Data Barrier.";
1622 break;
1623 case "cset":
1624 instructionInfo = "Conditional Set.";
1625 break;
1626 case "csetm":
1627 instructionInfo = "Conditional Set Mask.";
1628 break;
1629 case "eretaa":
1630 instructionInfo = "Exception Return, with pointer authentication.";
1631 break;
1632 case "eretab":
1633 instructionInfo = "Exception Return, with pointer authentication.";
1634 break;
1635 case "esb":
1636 instructionInfo = "Error Synchronization Barrier.";
1637 break;
1638 case "irg":
1639 instructionInfo = "Insert Random Tag.";
1640 break;
1641 case "ldg":
1642 instructionInfo = "Load Allocation Tag.";
1643 break;
1644 case "ldgv":
1645 instructionInfo = "Load Allocation Tag.";
1646 break;
1647 case "lslv":
1648 instructionInfo = "Logical Shift Left Variable.";
1649 break;
1650 case "lsrv":
1651 instructionInfo = "Logical Shift Right Variable.";
1652 break;
1653 case "movl pseudo-instruction":
1654 instructionInfo = "Load a register with either a 32-bit or 64-bit immediate value or any address.";
1655 break;
1656 case "negs":
1657 instructionInfo = "Negate, setting flags.";
1658 break;
1659 case "ngcs":
1660 instructionInfo = "Negate with Carry, setting flags.";
1661 break;
1662 case "pacda":
1663 instructionInfo = "Pointer Authentication Code for Data address, using key A.";
1664 break;
1665 case "pacdza":
1666 instructionInfo = "Pointer Authentication Code for Data address, using key A.";
1667 break;
1668 case "pacdb":
1669 instructionInfo = "Pointer Authentication Code for Data address, using key B.";
1670 break;
1671 case "pacdzb":
1672 instructionInfo = "Pointer Authentication Code for Data address, using key B.";
1673 break;
1674 case "pacga":
1675 instructionInfo = "Pointer Authentication Code, using Generic key.";
1676 break;
1677 case "pacia":
1678 instructionInfo = "Pointer Authentication Code for Instruction address, using key A.";
1679 break;
1680 case "paciza":
1681 instructionInfo = "Pointer Authentication Code for Instruction address, using key A.";
1682 break;
1683 case "pacia1716":
1684 instructionInfo = "Pointer Authentication Code for Instruction address, using key A.";
1685 break;
1686 case "paciasp":
1687 instructionInfo = "Pointer Authentication Code for Instruction address, using key A.";
1688 break;
1689 case "paciaz":
1690 instructionInfo = "Pointer Authentication Code for Instruction address, using key A.";
1691 break;
1692 case "pacib":
1693 instructionInfo = "Pointer Authentication Code for Instruction address, using key B.";
1694 break;
1695 case "pacizb":
1696 instructionInfo = "Pointer Authentication Code for Instruction address, using key B.";
1697 break;
1698 case "pacib1716":
1699 instructionInfo = "Pointer Authentication Code for Instruction address, using key B.";
1700 break;
1701 case "pacibsp":
1702 instructionInfo = "Pointer Authentication Code for Instruction address, using key B.";
1703 break;
1704 case "pacibz":
1705 instructionInfo = "Pointer Authentication Code for Instruction address, using key B.";
1706 break;
1707 case "psb":
1708 instructionInfo = "Profiling Synchronization Barrier.";
1709 break;
1710 case "retaa":
1711 instructionInfo = "Return from subroutine, with pointer authentication.";
1712 break;
1713 case "retab":
1714 instructionInfo = "Return from subroutine, with pointer authentication.";
1715 break;
1716 case "rorv":
1717 instructionInfo = "Rotate Right Variable.";
1718 break;
1719 case "sbcs":
1720 instructionInfo = "Subtract with Carry, setting flags.";
1721 break;
1722 case "st2g":
1723 instructionInfo = "Store Allocation Tags.";
1724 break;
1725 case "stg":
1726 instructionInfo = "Store Allocation Tag.";
1727 break;
1728 case "stgp":
1729 instructionInfo = "Store Allocation Tag and Pair of registers.";
1730 break;
1731 case "stgv":
1732 instructionInfo = "Store Tag Vector.";
1733 break;
1734 case "stz2g":
1735 instructionInfo = "Store Allocation Tags, Zeroing.";
1736 break;
1737 case "stzg":
1738 instructionInfo = "Store Allocation Tag, Zeroing.";
1739 break;
1740 case "subg":
1741 instructionInfo = "Subtract with Tag.";
1742 break;
1743 case "subp":
1744 instructionInfo = "Subtract Pointer.";
1745 break;
1746 case "subps":
1747 instructionInfo = "Subtract Pointer, setting Flags.";
1748 break;
1749 case "xaflag":
1750 instructionInfo = "Convert floating-point condition flags from external format to Arm format.";
1751 break;
1752 case "xpacd":
1753 instructionInfo = "Strip Pointer Authentication Code.";
1754 break;
1755 case "xpaci":
1756 instructionInfo = "Strip Pointer Authentication Code.";
1757 break;
1758 case "xpaclri":
1759 instructionInfo = "Strip Pointer Authentication Code.";
1760 break;
1761 case "casa":
1762 instructionInfo = "Compare and Swap word or doubleword in memory.";
1763 break;
1764 case "casal":
1765 instructionInfo = "Compare and Swap word or doubleword in memory.";
1766 break;
1767 case "cas":
1768 instructionInfo = "Compare and Swap word or doubleword in memory.";
1769 break;
1770 case "casl":
1771 instructionInfo = "Compare and Swap word or doubleword in memory.";
1772 break;
1773 case "casab":
1774 instructionInfo = "Compare and Swap byte in memory.";
1775 break;
1776 case "casalb":
1777 instructionInfo = "Compare and Swap byte in memory.";
1778 break;
1779 case "casb":
1780 instructionInfo = "Compare and Swap byte in memory.";
1781 break;
1782 case "caslb":
1783 instructionInfo = "Compare and Swap byte in memory.";
1784 break;
1785 case "casah":
1786 instructionInfo = "Compare and Swap halfword in memory.";
1787 break;
1788 case "casalh":
1789 instructionInfo = "Compare and Swap halfword in memory.";
1790 break;
1791 case "cash":
1792 instructionInfo = "Compare and Swap halfword in memory.";
1793 break;
1794 case "caslh":
1795 instructionInfo = "Compare and Swap halfword in memory.";
1796 break;
1797 case "caspa":
1798 instructionInfo = "Compare and Swap Pair of words or doublewords in memory.";
1799 break;
1800 case "caspal":
1801 instructionInfo = "Compare and Swap Pair of words or doublewords in memory.";
1802 break;
1803 case "casp":
1804 instructionInfo = "Compare and Swap Pair of words or doublewords in memory.";
1805 break;
1806 case "caspl":
1807 instructionInfo = "Compare and Swap Pair of words or doublewords in memory.";
1808 break;
1809 case "ldadda":
1810 instructionInfo = "Atomic add on word or doubleword in memory.";
1811 break;
1812 case "ldaddal":
1813 instructionInfo = "Atomic add on word or doubleword in memory.";
1814 break;
1815 case "ldadd":
1816 instructionInfo = "Atomic add on word or doubleword in memory.";
1817 break;
1818 case "ldaddl":
1819 instructionInfo = "Atomic add on word or doubleword in memory.";
1820 break;
1821 case "ldaddab":
1822 instructionInfo = "Atomic add on byte in memory.";
1823 break;
1824 case "ldaddalb":
1825 instructionInfo = "Atomic add on byte in memory.";
1826 break;
1827 case "ldaddb":
1828 instructionInfo = "Atomic add on byte in memory.";
1829 break;
1830 case "ldaddlb":
1831 instructionInfo = "Atomic add on byte in memory.";
1832 break;
1833 case "ldaddah":
1834 instructionInfo = "Atomic add on halfword in memory.";
1835 break;
1836 case "ldaddalh":
1837 instructionInfo = "Atomic add on halfword in memory.";
1838 break;
1839 case "ldaddh":
1840 instructionInfo = "Atomic add on halfword in memory.";
1841 break;
1842 case "ldaddlh":
1843 instructionInfo = "Atomic add on halfword in memory.";
1844 break;
1845 case "ldapr":
1846 instructionInfo = "Load-Acquire RCpc Register.";
1847 break;
1848 case "ldaprb":
1849 instructionInfo = "Load-Acquire RCpc Register Byte.";
1850 break;
1851 case "ldaprh":
1852 instructionInfo = "Load-Acquire RCpc Register Halfword.";
1853 break;
1854 case "ldclra":
1855 instructionInfo = "Atomic bit clear on word or doubleword in memory.";
1856 break;
1857 case "ldclral":
1858 instructionInfo = "Atomic bit clear on word or doubleword in memory.";
1859 break;
1860 case "ldclr":
1861 instructionInfo = "Atomic bit clear on word or doubleword in memory.";
1862 break;
1863 case "ldclrl":
1864 instructionInfo = "Atomic bit clear on word or doubleword in memory.";
1865 break;
1866 case "ldclrab":
1867 instructionInfo = "Atomic bit clear on byte in memory.";
1868 break;
1869 case "ldclralb":
1870 instructionInfo = "Atomic bit clear on byte in memory.";
1871 break;
1872 case "ldclrb":
1873 instructionInfo = "Atomic bit clear on byte in memory.";
1874 break;
1875 case "ldclrlb":
1876 instructionInfo = "Atomic bit clear on byte in memory.";
1877 break;
1878 case "ldclrah":
1879 instructionInfo = "Atomic bit clear on halfword in memory.";
1880 break;
1881 case "ldclralh":
1882 instructionInfo = "Atomic bit clear on halfword in memory.";
1883 break;
1884 case "ldclrh":
1885 instructionInfo = "Atomic bit clear on halfword in memory.";
1886 break;
1887 case "ldclrlh":
1888 instructionInfo = "Atomic bit clear on halfword in memory.";
1889 break;
1890 case "ldeora":
1891 instructionInfo = "Atomic exclusive OR on word or doubleword in memory.";
1892 break;
1893 case "ldeoral":
1894 instructionInfo = "Atomic exclusive OR on word or doubleword in memory.";
1895 break;
1896 case "ldeor":
1897 instructionInfo = "Atomic exclusive OR on word or doubleword in memory.";
1898 break;
1899 case "ldeorl":
1900 instructionInfo = "Atomic exclusive OR on word or doubleword in memory.";
1901 break;
1902 case "ldeorab":
1903 instructionInfo = "Atomic exclusive OR on byte in memory.";
1904 break;
1905 case "ldeoralb":
1906 instructionInfo = "Atomic exclusive OR on byte in memory.";
1907 break;
1908 case "ldeorb":
1909 instructionInfo = "Atomic exclusive OR on byte in memory.";
1910 break;
1911 case "ldeorlb":
1912 instructionInfo = "Atomic exclusive OR on byte in memory.";
1913 break;
1914 case "ldeorah":
1915 instructionInfo = "Atomic exclusive OR on halfword in memory.";
1916 break;
1917 case "ldeoralh":
1918 instructionInfo = "Atomic exclusive OR on halfword in memory.";
1919 break;
1920 case "ldeorh":
1921 instructionInfo = "Atomic exclusive OR on halfword in memory.";
1922 break;
1923 case "ldeorlh":
1924 instructionInfo = "Atomic exclusive OR on halfword in memory.";
1925 break;
1926 case "ldlar":
1927 instructionInfo = "Load LOAcquire Register.";
1928 break;
1929 case "ldlarb":
1930 instructionInfo = "Load LOAcquire Register Byte.";
1931 break;
1932 case "ldlarh":
1933 instructionInfo = "Load LOAcquire Register Halfword.";
1934 break;
1935 case "ldr pseudo-instruction":
1936 instructionInfo = "Load a register with either a 32-bit or 64-bit immediate value or any address.";
1937 break;
1938 case "ldraa":
1939 instructionInfo = "Load Register, with pointer authentication.";
1940 break;
1941 case "ldrab":
1942 instructionInfo = "Load Register, with pointer authentication.";
1943 break;
1944 case "ldrex":
1945 instructionInfo = "Load Register Exclusive.";
1946 break;
1947 case "strex":
1948 instructionInfo = "Store Register Exclusive.";
1949 break;
1950 case "ldseta":
1951 instructionInfo = "Atomic bit set on word or doubleword in memory.";
1952 break;
1953 case "ldsetal":
1954 instructionInfo = "Atomic bit set on word or doubleword in memory.";
1955 break;
1956 case "ldset":
1957 instructionInfo = "Atomic bit set on word or doubleword in memory.";
1958 break;
1959 case "ldsetl":
1960 instructionInfo = "Atomic bit set on word or doubleword in memory.";
1961 break;
1962 case "ldsetab":
1963 instructionInfo = "Atomic bit set on byte in memory.";
1964 break;
1965 case "ldsetalb":
1966 instructionInfo = "Atomic bit set on byte in memory.";
1967 break;
1968 case "ldsetb":
1969 instructionInfo = "Atomic bit set on byte in memory.";
1970 break;
1971 case "ldsetlb":
1972 instructionInfo = "Atomic bit set on byte in memory.";
1973 break;
1974 case "ldsetah":
1975 instructionInfo = "Atomic bit set on halfword in memory.";
1976 break;
1977 case "ldsetalh":
1978 instructionInfo = "Atomic bit set on halfword in memory.";
1979 break;
1980 case "ldseth":
1981 instructionInfo = "Atomic bit set on halfword in memory.";
1982 break;
1983 case "ldsetlh":
1984 instructionInfo = "Atomic bit set on halfword in memory.";
1985 break;
1986 case "ldsmaxa":
1987 instructionInfo = "Atomic signed maximum on word or doubleword in memory.";
1988 break;
1989 case "ldsmaxal":
1990 instructionInfo = "Atomic signed maximum on word or doubleword in memory.";
1991 break;
1992 case "ldsmax":
1993 instructionInfo = "Atomic signed maximum on word or doubleword in memory.";
1994 break;
1995 case "ldsmaxl":
1996 instructionInfo = "Atomic signed maximum on word or doubleword in memory.";
1997 break;
1998 case "ldsmaxab":
1999 instructionInfo = "Atomic signed maximum on byte in memory.";
2000 break;
2001 case "ldsmaxalb":
2002 instructionInfo = "Atomic signed maximum on byte in memory.";
2003 break;
2004 case "ldsmaxb":
2005 instructionInfo = "Atomic signed maximum on byte in memory.";
2006 break;
2007 case "ldsmaxlb":
2008 instructionInfo = "Atomic signed maximum on byte in memory.";
2009 break;
2010 case "ldsmaxah":
2011 instructionInfo = "Atomic signed maximum on halfword in memory.";
2012 break;
2013 case "ldsmaxalh":
2014 instructionInfo = "Atomic signed maximum on halfword in memory.";
2015 break;
2016 case "ldsmaxh":
2017 instructionInfo = "Atomic signed maximum on halfword in memory.";
2018 break;
2019 case "ldsmaxlh":
2020 instructionInfo = "Atomic signed maximum on halfword in memory.";
2021 break;
2022 case "ldsmina":
2023 instructionInfo = "Atomic signed minimum on word or doubleword in memory.";
2024 break;
2025 case "ldsminal":
2026 instructionInfo = "Atomic signed minimum on word or doubleword in memory.";
2027 break;
2028 case "ldsmin":
2029 instructionInfo = "Atomic signed minimum on word or doubleword in memory.";
2030 break;
2031 case "ldsminl":
2032 instructionInfo = "Atomic signed minimum on word or doubleword in memory.";
2033 break;
2034 case "ldsminab":
2035 instructionInfo = "Atomic signed minimum on byte in memory.";
2036 break;
2037 case "ldsminalb":
2038 instructionInfo = "Atomic signed minimum on byte in memory.";
2039 break;
2040 case "ldsminb":
2041 instructionInfo = "Atomic signed minimum on byte in memory.";
2042 break;
2043 case "ldsminlb":
2044 instructionInfo = "Atomic signed minimum on byte in memory.";
2045 break;
2046 case "ldsminah":
2047 instructionInfo = "Atomic signed minimum on halfword in memory.";
2048 break;
2049 case "ldsminalh":
2050 instructionInfo = "Atomic signed minimum on halfword in memory.";
2051 break;
2052 case "ldsminh":
2053 instructionInfo = "Atomic signed minimum on halfword in memory.";
2054 break;
2055 case "ldsminlh":
2056 instructionInfo = "Atomic signed minimum on halfword in memory.";
2057 break;
2058 case "ldumaxa":
2059 instructionInfo = "Atomic unsigned maximum on word or doubleword in memory.";
2060 break;
2061 case "ldumaxal":
2062 instructionInfo = "Atomic unsigned maximum on word or doubleword in memory.";
2063 break;
2064 case "ldumax":
2065 instructionInfo = "Atomic unsigned maximum on word or doubleword in memory.";
2066 break;
2067 case "ldumaxl":
2068 instructionInfo = "Atomic unsigned maximum on word or doubleword in memory.";
2069 break;
2070 case "ldumaxab":
2071 instructionInfo = "Atomic unsigned maximum on byte in memory.";
2072 break;
2073 case "ldumaxalb":
2074 instructionInfo = "Atomic unsigned maximum on byte in memory.";
2075 break;
2076 case "ldumaxb":
2077 instructionInfo = "Atomic unsigned maximum on byte in memory.";
2078 break;
2079 case "ldumaxlb":
2080 instructionInfo = "Atomic unsigned maximum on byte in memory.";
2081 break;
2082 case "ldumaxah":
2083 instructionInfo = "Atomic unsigned maximum on halfword in memory.";
2084 break;
2085 case "ldumaxalh":
2086 instructionInfo = "Atomic unsigned maximum on halfword in memory.";
2087 break;
2088 case "ldumaxh":
2089 instructionInfo = "Atomic unsigned maximum on halfword in memory.";
2090 break;
2091 case "ldumaxlh":
2092 instructionInfo = "Atomic unsigned maximum on halfword in memory.";
2093 break;
2094 case "ldumina":
2095 instructionInfo = "Atomic unsigned minimum on word or doubleword in memory.";
2096 break;
2097 case "lduminal":
2098 instructionInfo = "Atomic unsigned minimum on word or doubleword in memory.";
2099 break;
2100 case "ldumin":
2101 instructionInfo = "Atomic unsigned minimum on word or doubleword in memory.";
2102 break;
2103 case "lduminl":
2104 instructionInfo = "Atomic unsigned minimum on word or doubleword in memory.";
2105 break;
2106 case "lduminab":
2107 instructionInfo = "Atomic unsigned minimum on byte in memory.";
2108 break;
2109 case "lduminalb":
2110 instructionInfo = "Atomic unsigned minimum on byte in memory.";
2111 break;
2112 case "lduminb":
2113 instructionInfo = "Atomic unsigned minimum on byte in memory.";
2114 break;
2115 case "lduminlb":
2116 instructionInfo = "Atomic unsigned minimum on byte in memory.";
2117 break;
2118 case "lduminah":
2119 instructionInfo = "Atomic unsigned minimum on halfword in memory.";
2120 break;
2121 case "lduminalh":
2122 instructionInfo = "Atomic unsigned minimum on halfword in memory.";
2123 break;
2124 case "lduminh":
2125 instructionInfo = "Atomic unsigned minimum on halfword in memory.";
2126 break;
2127 case "lduminlh":
2128 instructionInfo = "Atomic unsigned minimum on halfword in memory.";
2129 break;
2130 case "stadd":
2131 instructionInfo = "Atomic add on word or doubleword in memory, without return.";
2132 break;
2133 case "staddl":
2134 instructionInfo = "Atomic add on word or doubleword in memory, without return.";
2135 break;
2136 case "staddb":
2137 instructionInfo = "Atomic add on byte in memory, without return.";
2138 break;
2139 case "staddlb":
2140 instructionInfo = "Atomic add on byte in memory, without return.";
2141 break;
2142 case "staddh":
2143 instructionInfo = "Atomic add on halfword in memory, without return.";
2144 break;
2145 case "staddlh":
2146 instructionInfo = "Atomic add on halfword in memory, without return.";
2147 break;
2148 case "stclr":
2149 instructionInfo = "Atomic bit clear on word or doubleword in memory, without return.";
2150 break;
2151 case "stclrl":
2152 instructionInfo = "Atomic bit clear on word or doubleword in memory, without return.";
2153 break;
2154 case "stclrb":
2155 instructionInfo = "Atomic bit clear on byte in memory, without return.";
2156 break;
2157 case "stclrlb":
2158 instructionInfo = "Atomic bit clear on byte in memory, without return.";
2159 break;
2160 case "stclrh":
2161 instructionInfo = "Atomic bit clear on halfword in memory, without return.";
2162 break;
2163 case "stclrlh":
2164 instructionInfo = "Atomic bit clear on halfword in memory, without return.";
2165 break;
2166 case "steor":
2167 instructionInfo = "Atomic exclusive OR on word or doubleword in memory, without return.";
2168 break;
2169 case "steorl":
2170 instructionInfo = "Atomic exclusive OR on word or doubleword in memory, without return.";
2171 break;
2172 case "steorb":
2173 instructionInfo = "Atomic exclusive OR on byte in memory, without return.";
2174 break;
2175 case "steorlb":
2176 instructionInfo = "Atomic exclusive OR on byte in memory, without return.";
2177 break;
2178 case "steorh":
2179 instructionInfo = "Atomic exclusive OR on halfword in memory, without return.";
2180 break;
2181 case "steorlh":
2182 instructionInfo = "Atomic exclusive OR on halfword in memory, without return.";
2183 break;
2184 case "stllr":
2185 instructionInfo = "Store LORelease Register.";
2186 break;
2187 case "stllrb":
2188 instructionInfo = "Store LORelease Register Byte.";
2189 break;
2190 case "stllrh":
2191 instructionInfo = "Store LORelease Register Halfword.";
2192 break;
2193 case "stset":
2194 instructionInfo = "Atomic bit set on word or doubleword in memory, without return.";
2195 break;
2196 case "stsetl":
2197 instructionInfo = "Atomic bit set on word or doubleword in memory, without return.";
2198 break;
2199 case "stsetb":
2200 instructionInfo = "Atomic bit set on byte in memory, without return.";
2201 break;
2202 case "stsetlb":
2203 instructionInfo = "Atomic bit set on byte in memory, without return.";
2204 break;
2205 case "stseth":
2206 instructionInfo = "Atomic bit set on halfword in memory, without return.";
2207 break;
2208 case "stsetlh":
2209 instructionInfo = "Atomic bit set on halfword in memory, without return.";
2210 break;
2211 case "stsmax":
2212 instructionInfo = "Atomic signed maximum on word or doubleword in memory, without return.";
2213 break;
2214 case "stsmaxl":
2215 instructionInfo = "Atomic signed maximum on word or doubleword in memory, without return.";
2216 break;
2217 case "stsmaxb":
2218 instructionInfo = "Atomic signed maximum on byte in memory, without return.";
2219 break;
2220 case "stsmaxlb":
2221 instructionInfo = "Atomic signed maximum on byte in memory, without return.";
2222 break;
2223 case "stsmaxh":
2224 instructionInfo = "Atomic signed maximum on halfword in memory, without return.";
2225 break;
2226 case "stsmaxlh":
2227 instructionInfo = "Atomic signed maximum on halfword in memory, without return.";
2228 break;
2229 case "stsmin":
2230 instructionInfo = "Atomic signed minimum on word or doubleword in memory, without return.";
2231 break;
2232 case "stsminl":
2233 instructionInfo = "Atomic signed minimum on word or doubleword in memory, without return.";
2234 break;
2235 case "stsminb":
2236 instructionInfo = "Atomic signed minimum on byte in memory, without return.";
2237 break;
2238 case "stsminlb":
2239 instructionInfo = "Atomic signed minimum on byte in memory, without return.";
2240 break;
2241 case "stsminh":
2242 instructionInfo = "Atomic signed minimum on halfword in memory, without return.";
2243 break;
2244 case "stsminlh":
2245 instructionInfo = "Atomic signed minimum on halfword in memory, without return.";
2246 break;
2247 case "stumax":
2248 instructionInfo = "Atomic unsigned maximum on word or doubleword in memory, without return.";
2249 break;
2250 case "stumaxl":
2251 instructionInfo = "Atomic unsigned maximum on word or doubleword in memory, without return.";
2252 break;
2253 case "stumaxb":
2254 instructionInfo = "Atomic unsigned maximum on byte in memory, without return.";
2255 break;
2256 case "stumaxlb":
2257 instructionInfo = "Atomic unsigned maximum on byte in memory, without return.";
2258 break;
2259 case "stumaxh":
2260 instructionInfo = "Atomic unsigned maximum on halfword in memory, without return.";
2261 break;
2262 case "stumaxlh":
2263 instructionInfo = "Atomic unsigned maximum on halfword in memory, without return.";
2264 break;
2265 case "stumin":
2266 instructionInfo = "Atomic unsigned minimum on word or doubleword in memory, without return.";
2267 break;
2268 case "stuminl":
2269 instructionInfo = "Atomic unsigned minimum on word or doubleword in memory, without return.";
2270 break;
2271 case "stuminb":
2272 instructionInfo = "Atomic unsigned minimum on byte in memory, without return.";
2273 break;
2274 case "stuminlb":
2275 instructionInfo = "Atomic unsigned minimum on byte in memory, without return.";
2276 break;
2277 case "stuminh":
2278 instructionInfo = "Atomic unsigned minimum on halfword in memory, without return.";
2279 break;
2280 case "stuminlh":
2281 instructionInfo = "Atomic unsigned minimum on halfword in memory, without return.";
2282 break;
2283 case "swpa":
2284 instructionInfo = "Swap word or doubleword in memory.";
2285 break;
2286 case "swpal":
2287 instructionInfo = "Swap word or doubleword in memory.";
2288 break;
2289 case "swp":
2290 instructionInfo = "Swap word or doubleword in memory.";
2291 break;
2292 case "swpl":
2293 instructionInfo = "Swap word or doubleword in memory.";
2294 break;
2295 case "swpab":
2296 instructionInfo = "Swap byte in memory.";
2297 break;
2298 case "swpalb":
2299 instructionInfo = "Swap byte in memory.";
2300 break;
2301 case "swpb":
2302 instructionInfo = "Swap byte in memory.";
2303 break;
2304 case "swplb":
2305 instructionInfo = "Swap byte in memory.";
2306 break;
2307 case "swpah":
2308 instructionInfo = "Swap halfword in memory.";
2309 break;
2310 case "swpalh":
2311 instructionInfo = "Swap halfword in memory.";
2312 break;
2313 case "swph":
2314 instructionInfo = "Swap halfword in memory.";
2315 break;
2316 case "swplh":
2317 instructionInfo = "Swap halfword in memory.";
2318 break;
2319 case "fjcvtzs":
2320 instructionInfo = "Floating-point Javascript Convert to Signed fixed-point, rounding toward Zero.";
2321 break;
2322 case "fcmla":
2323 instructionInfo = "Floating-point Complex Multiply Accumulate (by element).";
2324 break;
2325 case "fmlal":
2326 instructionInfo = "Floating-point fused Multiply-Add Long to accumulator (by element).";
2327 break;
2328 case "":
2329 instructionInfo = "Floating-point fused Multiply-Add Long to accumulator (by element).";
2330 break;
2331 case "fmlsl":
2332 instructionInfo = "Floating-point fused Multiply-Subtract Long from accumulator (by element).";
2333 break;
2334 case "sqrdmlah":
2335 instructionInfo = "Signed Saturating Rounding Doubling Multiply Accumulate returning High Half (by element).";
2336 break;
2337 case "sqrdmlsh":
2338 instructionInfo = "Signed Saturating Rounding Doubling Multiply Subtract returning High Half (by element).";
2339 break;
2340 case "fcadd":
2341 instructionInfo = "Floating-point Complex Add.";
2342 break;
2343 case "sdot":
2344 instructionInfo = "Dot Product signed arithmetic (vector, by element).";
2345 break;
2346 case "sxtl":
2347 instructionInfo = "Signed extend Long.";
2348 break;
2349 case "sxtl2":
2350 instructionInfo = "Signed extend Long.";
2351 break;
2352 case "udot":
2353 instructionInfo = "Dot Product unsigned arithmetic (vector, by element).";
2354 break;
2355 case "uxtl":
2356 instructionInfo = "Unsigned extend Long.";
2357 break;
2358 case "uxtl2":
2359 instructionInfo = "Unsigned extend Long.";
2360 break;
2361 case "bcax":
2362 instructionInfo = "SHA3 Bit Clear and XOR.";
2363 break;
2364 case "eor3":
2365 instructionInfo = "SHA3 Three-way Exclusive OR.";
2366 break;
2367 case "rax1":
2368 instructionInfo = "SHA3 Rotate and Exclusive OR.";
2369 break;
2370 case "sha512h2":
2371 instructionInfo = "SHA512 Hash update part 2.";
2372 break;
2373 case "sha512h":
2374 instructionInfo = "SHA512 Hash update part 1.";
2375 break;
2376 case "sha512su0":
2377 instructionInfo = "SHA512 Schedule Update 0.";
2378 break;
2379 case "sha512su1":
2380 instructionInfo = "SHA512 Schedule Update 1.";
2381 break;
2382 case "sm3partw1":
2383 instructionInfo = "SM3 three-way exclusive OR on the combination of three 128-bit vectors.";
2384 break;
2385 case "sm3partw2":
2386 instructionInfo = "SM3 three-way exclusive OR on the combination of three 128-bit vectors.";
2387 break;
2388 case "sm3ss1":
2389 instructionInfo = "SM3 perform rotates and adds on three 128-bit vectors combined into a destination 128-bit SIMD and FP register.";
2390 break;
2391 case "sm3tt1a":
2392 instructionInfo = "SM3 three-way exclusive OR on the combination of three 128-bit vectors and a 2-bit immediate index value.";
2393 break;
2394 case "sm3tt1b":
2395 instructionInfo = "SM3 perform 32-bit majority function on the combination of three 128-bit vectors and 2-bit immediate index value.";
2396 break;
2397 case "sm3tt2a":
2398 instructionInfo = "SM3 three-way exclusive OR of combined three 128-bit vectors and a 2-bit immediate index value.";
2399 break;
2400 case "sm3tt2b":
2401 instructionInfo = "SM3 perform 32-bit majority function on the combination of three 128-bit vectors and 2-bit immediate index value.";
2402 break;
2403 case "sm4e":
2404 instructionInfo = "SM4 Encode.";
2405 break;
2406 case "sm4ekey":
2407 instructionInfo = "SM4 Key.";
2408 break;
2409 case "xar":
2410 instructionInfo = "SHA3 Exclusive OR and Rotate.";
2411 break;
2412 case "vaba":
2413 instructionInfo = "Absolute difference and Accumulate, Absolute difference and Accumulate Long.";
2414 break;
2415 case "vabl":
2416 instructionInfo = "Absolute difference and Accumulate, Absolute difference and Accumulate Long.";
2417 break;
2418 case "vabd":
2419 instructionInfo = "Absolute difference, Absolute difference Long.";
2420 break;
2421 case "vabdl":
2422 instructionInfo = "Absolute difference, Absolute difference Long.";
2423 break;
2424 case "vacge":
2425 instructionInfo = "Absolute Compare Greater than or Equal, Greater Than.";
2426 break;
2427 case "vacgt":
2428 instructionInfo = "Absolute Compare Greater than or Equal, Greater Than.";
2429 break;
2430 case "vacle":
2431 instructionInfo = "Absolute Compare Less than or Equal, Less Than (pseudo-instructions).";
2432 break;
2433 case "vaclt":
2434 instructionInfo = "Absolute Compare Less than or Equal, Less Than (pseudo-instructions).";
2435 break;
2436 case "vaddhn":
2437 instructionInfo = "Add, select High half.";
2438 break;
2439 case "vand":
2440 instructionInfo = "Bitwise AND.";
2441 break;
2442 case "vbic":
2443 instructionInfo = "Bitwise Bit Clear (register).";
2444 break;
2445 case "vbif":
2446 instructionInfo = "Bitwise Insert if False.";
2447 break;
2448 case "vbit":
2449 instructionInfo = "Bitwise Insert if True.";
2450 break;
2451 case "vbsl":
2452 instructionInfo = "Bitwise Select.";
2453 break;
2454 case "vceq":
2455 instructionInfo = "Compare Equal.";
2456 break;
2457 case "vcge":
2458 instructionInfo = "Compare Greater than or Equal.";
2459 break;
2460 case "vcgt":
2461 instructionInfo = "Compare Greater Than.";
2462 break;
2463 case "vcle":
2464 instructionInfo = "Compare Less than or Equal.";
2465 break;
2466 case "vcls":
2467 instructionInfo = "Count Leading Sign bits.";
2468 break;
2469 case "vcnt":
2470 instructionInfo = "Count set bits.";
2471 break;
2472 case "vclt":
2473 instructionInfo = "Compare Less Than.";
2474 break;
2475 case "vclz":
2476 instructionInfo = "Count Leading Zeros.";
2477 break;
2478 case "vcvt":
2479 instructionInfo = "Convert fixed-point or integer to floating point, floating-point to integer or fixed-point.";
2480 break;
2481 case "vdup":
2482 instructionInfo = "Duplicate scalar to all lanes of vector.";
2483 break;
2484 case "veor":
2485 instructionInfo = "Bitwise Exclusive OR.";
2486 break;
2487 case "vext":
2488 instructionInfo = "Extract.";
2489 break;
2490 case "vfma":
2491 instructionInfo = "Fused Multiply Accumulate, Fused Multiply Subtract (vector).";
2492 break;
2493 case "vfms":
2494 instructionInfo = "Fused Multiply Accumulate, Fused Multiply Subtract (vector).";
2495 break;
2496 case "vhadd":
2497 instructionInfo = "Halving Add.";
2498 break;
2499 case "vhsub":
2500 instructionInfo = "Halving Subtract.";
2501 break;
2502 case "vld":
2503 case "vld1":
2504 case "vld2":
2505 case "vld3":
2506 case "vld4":
2507 instructionInfo = "Vector Load.";
2508 break;
2509 case "vmax":
2510 instructionInfo = "Maximum, Minimum.";
2511 break;
2512 case "vmin":
2513 instructionInfo = "Maximum, Minimum.";
2514 break;
2515 case "vmla":
2516 instructionInfo = "Multiply Accumulate (vector).";
2517 break;
2518 case "vmls":
2519 instructionInfo = "Multiply Subtract (vector).";
2520 break;
2521 case "vmovl":
2522 instructionInfo = "Move Long (register).";
2523 break;
2524 case "vmovn":
2525 instructionInfo = "Move Narrow (register).";
2526 break;
2527 case "vmvn":
2528 instructionInfo = "Move Negative (immediate).";
2529 break;
2530 case "vneg":
2531 instructionInfo = "Negate.";
2532 break;
2533 case "vorn":
2534 instructionInfo = "Bitwise OR NOT.";
2535 break;
2536 case "vorr":
2537 instructionInfo = "Bitwise OR (register).";
2538 break;
2539 case "vpadal":
2540 instructionInfo = "Pairwise Add and Accumulate Long.";
2541 break;
2542 case "vpadd":
2543 instructionInfo = "Pairwise Add.";
2544 break;
2545 case "vpmax":
2546 instructionInfo = "Pairwise Maximum, Pairwise Minimum.";
2547 break;
2548 case "vpmin":
2549 instructionInfo = "Pairwise Maximum, Pairwise Minimum.";
2550 break;
2551 case "vqabs":
2552 instructionInfo = "Absolute value, saturate.";
2553 break;
2554 case "vqadd":
2555 instructionInfo = "Add, saturate.";
2556 break;
2557 case "vqdmlal":
2558 instructionInfo = "Saturating Doubling Multiply Accumulate, and Multiply Subtract.";
2559 break;
2560 case "vqdmlsl":
2561 instructionInfo = "Saturating Doubling Multiply Accumulate, and Multiply Subtract.";
2562 break;
2563 case "vqdmull":
2564 instructionInfo = "Saturating Doubling Multiply.";
2565 break;
2566 case "vqdmulh":
2567 instructionInfo = "Saturating Doubling Multiply returning High half.";
2568 break;
2569 case "vqmovn":
2570 instructionInfo = "Saturating Move (register).";
2571 break;
2572 case "vqneg":
2573 instructionInfo = "Negate, saturate.";
2574 break;
2575 case "vqrdmulh":
2576 instructionInfo = "Saturating Doubling Multiply returning High half.";
2577 break;
2578 case "vqrshl":
2579 instructionInfo = "Shift Left, Round, saturate (by signed variable).";
2580 break;
2581 case "vqrshrn":
2582 instructionInfo = "Shift Right, Round, saturate (by immediate).";
2583 break;
2584 case "vqshl":
2585 instructionInfo = "Shift Left, saturate (by immediate).";
2586 break;
2587 case "vqshrn":
2588 instructionInfo = "Shift Right, saturate (by immediate).";
2589 break;
2590 case "vqsub":
2591 instructionInfo = "Subtract, saturate.";
2592 break;
2593 case "vraddhn":
2594 instructionInfo = "Add, select High half, Round.";
2595 break;
2596 case "vrecpe":
2597 instructionInfo = "Reciprocal Estimate.";
2598 break;
2599 case "vrecps":
2600 instructionInfo = "Reciprocal Step.";
2601 break;
2602 case "vrev":
2603 case "vrev16":
2604 case "vrev32":
2605 case "vrev64":
2606 instructionInfo = "Reverse elements.";
2607 break;
2608 case "vrhadd":
2609 instructionInfo = "Halving Add, Round.";
2610 break;
2611 case "vrshr":
2612 instructionInfo = "Shift Right and Round (by immediate).";
2613 break;
2614 case "vrshrn":
2615 instructionInfo = "Shift Right, Round, Narrow (by immediate).";
2616 break;
2617 case "vrsqrte":
2618 instructionInfo = "Reciprocal Square Root Estimate.";
2619 break;
2620 case "vrsqrts":
2621 instructionInfo = "Reciprocal Square Root Step.";
2622 break;
2623 case "vrsra":
2624 instructionInfo = "Shift Right, Round, and Accumulate (by immediate).";
2625 break;
2626 case "vrsubhn":
2627 instructionInfo = "Subtract, select High half, Round.";
2628 break;
2629 case "vshl":
2630 instructionInfo = "Shift Left (by immediate).";
2631 break;
2632 case "vshr":
2633 instructionInfo = "Shift Right (by immediate).";
2634 break;
2635 case "vshrn":
2636 instructionInfo = "Shift Right, Narrow (by immediate).";
2637 break;
2638 case "vsli":
2639 instructionInfo = "Shift Left and Insert.";
2640 break;
2641 case "vsra":
2642 instructionInfo = "Shift Right, Accumulate (by immediate).";
2643 break;
2644 case "vsri":
2645 instructionInfo = "Shift Right and Insert.";
2646 break;
2647 case "vst":
2648 case "vst1":
2649 case "vst2":
2650 case "vst3":
2651 case "vst4":
2652 instructionInfo = "Vector Store.";
2653 break;
2654 case "vsubhn":
2655 instructionInfo = "Subtract, select High half.";
2656 break;
2657 case "vswp":
2658 instructionInfo = "Swap vectors.";
2659 break;
2660 case "vtbl":
2661 instructionInfo = "Vector table look-up.";
2662 break;
2663 case "vtbx":
2664 instructionInfo = "Vector table look-up.";
2665 break;
2666 case "vtrn":
2667 instructionInfo = "Vector transpose.";
2668 break;
2669 case "vtst":
2670 instructionInfo = "Test bits.";
2671 break;
2672 case "vuzp":
2673 instructionInfo = "Vector de-interleave.";
2674 break;
2675 case "vzip":
2676 instructionInfo = "Vector interleave.";
2677 break;
2678 case "vldm":
2679 case "vldmia":
2680 case "vldmdb":
2681 instructionInfo = "Load multiple.";
2682 break;
2683 case "vldr":
2684 instructionInfo = "Load (see also VLDR pseudo-instruction).";
2685 break;
2686 case "vmrs":
2687 instructionInfo = "Transfer from NEON and VFP system register to ARM register.";
2688 break;
2689 case "vmsr":
2690 instructionInfo = "Transfer from ARM register to NEON and VFP system register.";
2691 break;
2692 case "vpop":
2693 instructionInfo = "Pop VFP or NEON registers from full-descending stack.";
2694 break;
2695 case "vpush":
2696 instructionInfo = "Push VFP or NEON registers to full-descending stack.";
2697 break;
2698 case "vstm":
2699 case "vstmia":
2700 instructionInfo = "Store multiple.";
2701 break;
2702 case "vstr":
2703 instructionInfo = "Store.";
2704 break;
2705 case "vcmp":
2706 instructionInfo = "Compare.";
2707 break;
2708 case "vcmpe":
2709 instructionInfo = "Compare.";
2710 break;
2711 case "vcvtb":
2712 instructionInfo = "Convert between half-precision and single-precision floating-point.";
2713 break;
2714 case "vcvtt":
2715 instructionInfo = "Convert between half-precision and single-precision floating-point.";
2716 break;
2717 case "vdiv":
2718 instructionInfo = "Divide.";
2719 break;
2720 case "vfnma":
2721 instructionInfo = "Fused multiply accumulate with negation, Fused multiply subtract with negation.";
2722 break;
2723 case "vfnms":
2724 instructionInfo = "Fused multiply accumulate with negation, Fused multiply subtract with negation.";
2725 break;
2726 case "vnmla":
2727 instructionInfo = "Negated multiply accumulate.";
2728 break;
2729 case "vnmls":
2730 instructionInfo = "Negated multiply subtract.";
2731 break;
2732 case "vnmul":
2733 instructionInfo = "Negated multiply.";
2734 break;
2735 case "vsqrt":
2736 instructionInfo = "Square Root.";
2737 break;
2738 case "push":
2739 instructionInfo = "Push registers onto a full descending stack.";
2740 break;
2741 case "pop":
2742 instructionInfo = "Pop registers of a full descending stack.";
2743 break;
2744 case "pkhbt":
2745 case "pkhtb":
2746 instructionInfo = "Halfword Packing instructions. Combine a halfword from one register with a halfword from another register.";
2747 break;
2748 default:
2749 instructionInfo = string.Empty;
2750 returnValue = false;
2751 break;
2752 }
2753
2754 return returnValue;
2755 }
2756 }
2757 }
2758}