Rasagar/Library/PackageCache/com.unity.burst/Editor/BurstDisassembler.Core.ARM64.info.cs
2024-08-26 23:07:20 +03:00

2758 lines
132 KiB
C#

using System;
using System.Linq;
namespace Unity.Burst.Editor
{
internal partial class BurstDisassembler
{
internal class ARM64InstructionInfo
{
internal static bool GetARM64Info(string instructionName, out string instructionInfo)
{
var instr = ARM64AsmTokenKindProvider.TryRemoveT(new StringSlice(instructionName));
var retVal = TryFindInstructionInfo(instr, out instructionInfo);
if (retVal)
{
return retVal;
}
// Could not find info, so try and remove possible instruction condition code.
instr = ARM64AsmTokenKindProvider.TryRemoveCond(instr);
return TryFindInstructionInfo(instr, out instructionInfo);
}
private static bool TryFindInstructionInfo(StringSlice instr, out string instructionInfo)
{
var returnValue = true;
switch (instr.ToString())
{
case "bkpt":
instructionInfo = "Functions as breakpoint by causing the core to enter Debug state.";
break;
case "usat":
instructionInfo = "Unsigned saturate to any bit position, with optional shift before saturating.";
break;
case "stmia":
case "stm":
instructionInfo = "Store multiple registers incrementing address after each transfer.";
break;
case "stmib":
instructionInfo = "Store multiple registers incrementing address before each transfer.";
break;
case "stmda":
instructionInfo = "Store multiple registers decrement address after each transfer.";
break;
case "stmdb":
instructionInfo = "Store multiple registers decrement address before each transfer.";
break;
case "ldmia":
case "ldm":
instructionInfo = "Load multiple registers incrementing address after each transfer.";
break;
case "ldmib":
instructionInfo = "Load multiple registers incrementing address before each transfer.";
break;
case "ldmda":
instructionInfo = "Load multiple registers decrement address after each transfer.";
break;
case "ldmdb":
instructionInfo = "Load multiple registers decrement addres before each transfer.";
break;
case "adc":
instructionInfo = "Add with Carry.";
break;
case "add":
case "addw":
instructionInfo = "Add.";
break;
case "adds":
instructionInfo = "Add, setting flags.";
break;
case "vadd":
instructionInfo = "Adds corresponding elements of two vectors.";
break;
case "vaddl":
instructionInfo = "Vector add long.";
break;
case "vaddw":
instructionInfo = "Vector add wide.";
break;
case "adr":
instructionInfo = "Form PC-relative address.";
break;
case "adrl":
instructionInfo = "Loads a program or register-relative address.";
break;
case "adrp":
instructionInfo = "Form PC-relative address to 4KB page.";
break;
case "and":
instructionInfo = "Bitwise AND.";
break;
case "asr":
instructionInfo = "Arithmetic Shift Right.";
break;
case "asrs":
instructionInfo = "Arithmetic Shift Right, setting flags.";
break;
case "uxtab":
instructionInfo = "Zero extend Byte and Add.";
break;
case "uxtah":
instructionInfo = "Zero extend Halfword and Add. Extends a 16-bit value to a 32-bit value.";
break;
case "at":
instructionInfo = "Address Translate.";
break;
case "it":
case "itt":
case "ittt":
case "itttt":
instructionInfo = "If-Then condition for the next #t instruction(s).";
break;
case "ite":
case "itte":
case "itee":
case "ittee":
case "ittte":
instructionInfo = "If-Then-Else condition running next #t instruction(s) if true and then " +
"the instruction thereafter if condition is false.";
break;
case "b":
instructionInfo = "Branch.";
break;
case "bfi":
instructionInfo = "Bitfield Insert.";
break;
case "bfm":
instructionInfo = "Bitfield Move.";
break;
case "bfxil":
instructionInfo = "Bitfield extract and insert at low end.";
break;
case "bic":
instructionInfo = "Bitwise Bit Clear.";
break;
case "bl":
instructionInfo = "Branch with Link.";
break;
case "blr":
instructionInfo = "Branch with Link to Register.";
break;
case "br":
instructionInfo = "Branch to Register.";
break;
case "brk":
instructionInfo = "Breakpoint instruction.";
break;
case "cbnz":
instructionInfo = "Compare and Branch on Nonzero.";
break;
case "cbz":
instructionInfo = "Compare and Branch on Zero.";
break;
case "ccmn":
instructionInfo = "Conditional Compare Negative.";
break;
case "ccmp":
instructionInfo = "Conditional Compare.";
break;
case "clrex":
instructionInfo = "Clear Exclusive.";
break;
case "cls":
instructionInfo = "Count leading sign bits.";
break;
case "clz":
instructionInfo = "Count leading zero bits.";
break;
case "cmn":
instructionInfo = "Compare Negative.";
break;
case "cmp":
instructionInfo = "Compare.";
break;
case "crc32b":
case "crc32h":
case "crc32w":
case "crc32x":
instructionInfo = "CRC32 checksum performs a cyclic redundancy check (CRC) calculation on a value held in a general-purpose register.";
break;
case "crc32cb":
case "crc32ch":
case "crc32cw":
case "crc32cx":
instructionInfo = "CRC32C checksum performs a cyclic redundancy check (CRC) calculation on a value held in a general-purpose register.";
break;
case "csel":
instructionInfo = "Conditional Select.";
break;
case "csinc":
instructionInfo = "Conditional Select Increment.";
break;
case "csinv":
instructionInfo = "Conditional Select Invert.";
break;
case "csneg":
instructionInfo = "Conditional Select Negation.";
break;
case "dc":
instructionInfo = "Data Cache operation.";
break;
case "dcps1":
instructionInfo = "Debug Change PE State to EL1.";
break;
case "dcps2":
instructionInfo = "Debug Change PE State to EL2.";
break;
case "dcps3":
instructionInfo = "Debug Change PE State to EL3.";
break;
case "dmb":
instructionInfo = "Data Memory Barrier.";
break;
case "drps":
instructionInfo = "Debug restore process state.";
break;
case "dsb":
instructionInfo = "Data Synchronization Barrier.";
break;
case "eon":
instructionInfo = "Bitwise Exclusive OR NOT.";
break;
case "eor":
instructionInfo = "Bitwise Exclusive OR.";
break;
case "eors":
instructionInfo = "Bitwise Exclusive OR, setting flags.";
break;
case "eret":
instructionInfo = "Returns from an exception.";
break;
case "extr":
instructionInfo = "Extract register.";
break;
case "hint":
instructionInfo = "Hint instruction.";
break;
case "hlt":
instructionInfo = "Halt instruction.";
break;
case "hvc":
instructionInfo = "Hypervisor call to allow OS code to call the Hypervisor.";
break;
case "ic":
instructionInfo = "Instruction Cache operation.";
break;
case "isb":
instructionInfo = "Instruction Synchronization Barrier.";
break;
case "lsl":
instructionInfo = "Logical Shift Left.";
break;
case "lsls":
instructionInfo = "Logical Shift Left, setting flags.";
break;
case "lsr":
instructionInfo = "Logical Shift Right.";
break;
case "lsrs":
instructionInfo = "Logical Shift Right, setting flags.";
break;
case "smmul":
instructionInfo = "Signed Most significant word Multiply.";
break;
case "umaal":
instructionInfo = "Unsigned Multiply Accumulate Accumulate Long.";
break;
case "madd":
instructionInfo = "Multiply-Add.";
break;
case "mneg":
instructionInfo = "Multiply-Negate.";
break;
case "beq":
instructionInfo = "Conditional branch Equal.";
break;
case "bne":
instructionInfo = "Conditional branch Not equal.";
break;
case "bcs":
instructionInfo = "Conditional branch Carry set (identical to HS).";
break;
case "bhs":
instructionInfo = "Conditional branch Unsigned higher or same (identical to CS).";
break;
case "bcc":
instructionInfo = "Conditional branch Carry clear (identical to LO).";
break;
case "blo":
instructionInfo = "Conditional branch Unsigned lower (identical to CC).";
break;
case "bmi":
instructionInfo = "Conditional branch Minus or negative result.";
break;
case "bpl":
instructionInfo = "Conditional branch Positive or zero result.";
break;
case "bvs":
instructionInfo = "Conditional branch Overflow.";
break;
case "bvc":
instructionInfo = "Conditional branch No overflow.";
break;
case "bhi":
instructionInfo = "Conditional branch Unsigned higher.";
break;
case "bls":
instructionInfo = "Conditional branch Unsigned lower or same.";
break;
case "bge":
instructionInfo = "Conditional branch Signed greater than or equal.";
break;
case "blt":
instructionInfo = "Conditional branch Signed less than.";
break;
case "bgt":
instructionInfo = "Conditional branch Signed greater than.";
break;
case "ble":
instructionInfo = "Conditional branch Signed less than or equal.";
break;
case "bal":
instructionInfo = "Conditional branch Always (this is the default).";
break;
case "bnv":
instructionInfo = "Conditional branch No overflow.";
break;
case "bx":
instructionInfo = "Branch and exchange instruction set.";
break;
case "blx":
instructionInfo =
"transfers program execution to the address specified by label and stores the " +
"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.";
break;
case "bxj":
instructionInfo = "Branch and change Jazelle state. Jazelle state means the processor executes Java bytecodes.";
break;
case "mov":
instructionInfo = "Move.";
break;
case "movs":
instructionInfo = "Move, setting condition flags.";
break;
case "movl":
instructionInfo = "Load a register with eiter a 32-bit or 64-bit immediate value, or any adress.";
break;
case "vmov":
instructionInfo = "Inset a floating-point immediate value in a single-precision or double-precision register, or" +
"copy one register into another register.";
break;
case "movk":
instructionInfo = "Move wide with keep.";
break;
case "movn":
instructionInfo = "Move wide with NOT.";
break;
case "movz":
instructionInfo = "Move wide with zero.";
break;
case "movt":
instructionInfo = "Move to top half of register.";
break;
case "movw":
instructionInfo = "Move word.";
break;
case "mrs":
instructionInfo = "Move System Register.";
break;
case "msr":
instructionInfo = "Move immediate value to Special Register.";
break;
case "msub":
instructionInfo = "Multiply-Subtract.";
break;
case "mul":
instructionInfo = "Multiply.";
break;
case "muls":
instructionInfo = "Multiply, setting flags.";
break;
case "vmul":
instructionInfo = "Multiplies corresponding elements in two vectors, and places the results in the destination vector.";
break;
case "mvn":
instructionInfo = "Bitwise NOT.";
break;
case "mvns":
instructionInfo = "Bitwise NOT, setting flags.";
break;
case "neg":
instructionInfo = "Negate.";
break;
case "ngc":
instructionInfo = "Negate with Carry.";
break;
case "nop":
instructionInfo = "No Operation.";
break;
case "orn":
instructionInfo = "Bitwise OR NOT.";
break;
case "orr":
instructionInfo = "Bitwise OR.";
break;
case "orrs":
instructionInfo = "Bitwise OR, setting flags.";
break;
case "rbit":
instructionInfo = "Reverse Bits.";
break;
case "ret":
instructionInfo = "Return from subroutine.";
break;
case "rev16":
instructionInfo = "Reverse bytes in 16-bit halfwords.";
break;
case "rev32":
instructionInfo = "Reverse bytes in 32-bit words.";
break;
case "rev64":
instructionInfo = "Reverse Bytes.";
break;
case "rev":
instructionInfo = "Reverse Bytes.";
break;
case "rrx":
instructionInfo = "Rotate right with extend.";
break;
case "ror":
instructionInfo = "Rotate right.";
break;
case "sbc":
instructionInfo = "Subtract with Carry.";
break;
case "sbfiz":
instructionInfo = "Signed Bitfield Insert in Zero.";
break;
case "sbfm":
instructionInfo = "Signed Bitfield Move.";
break;
case "sbfx":
instructionInfo = "Signed Bitfield Extract.";
break;
case "sdiv":
instructionInfo = "Signed Divide.";
break;
case "sev":
instructionInfo = "Send Event.";
break;
case "sevl":
instructionInfo = "Send Event Local.";
break;
case "smaddl":
instructionInfo = "Signed Multiply-Add Long.";
break;
case "smc":
instructionInfo = "Supervisor call to allow OS or Hypervisor code to call the Secure Monitor.";
break;
case "smnegl":
instructionInfo = "Signed Multiply-Negate Long.";
break;
case "smsubl":
instructionInfo = "Signed Multiply-Subtract Long.";
break;
case "smulh":
instructionInfo = "Signed Multiply High.";
break;
case "smull":
instructionInfo = "Signed Multiply Long.";
break;
case "sub":
case "subw":
instructionInfo = "Subtract.";
break;
case "vsub":
instructionInfo = "Subtract the elements of one vector from the corresponding elements of another " +
"vector, and places the results in the destination vector.";
break;
case "subs":
instructionInfo = "Subtract (extended register), setting flags.";
break;
case "rsb":
instructionInfo = "Reverse subtract i.e. for \"rsb {Rd, } Rn, <Operand2>\" Rn is subtracted " +
"from operand2 and saved in Rd register.";
break;
case "rsbs":
instructionInfo = "Reverse subtract, setting flags, i.e. for \"rsb {Rd, } Rn, <Operand2>\" Rn is subtracted " +
"from operand2 and saved in Rd register.";
break;
case "svc":
instructionInfo = "Supervisor call to allow application code to call the OS.";
break;
case "sxtb":
instructionInfo = "Signed Extend Byte.";
break;
case "sxth":
instructionInfo = "Sign Extend Halfword.";
break;
case "sxtw":
instructionInfo = "Sign Extend Word.";
break;
case "sys":
instructionInfo = "System instruction.";
break;
case "sysl":
instructionInfo = "System instruction with result.";
break;
case "tbnz":
instructionInfo = "Test bit and Branch if Nonzero.";
break;
case "tbz":
instructionInfo = "Test bit and Branch if Zero.";
break;
case "tlbi":
instructionInfo = "TLB Invalidate operation.";
break;
case "tst":
instructionInfo = ", setting the condition flags and discarding the result.";
break;
case "ubfiz":
instructionInfo = "Unsigned Bitfield Insert in Zero.";
break;
case "ubfm":
instructionInfo = "Unsigned Bitfield Move.";
break;
case "ubfx":
instructionInfo = "Unsigned Bitfield Extract.";
break;
case "udiv":
instructionInfo = "Unsigned Divide.";
break;
case "umaddl":
instructionInfo = "Unsigned Multiply-Add Long.";
break;
case "umnegl":
instructionInfo = "Unsigned Multiply-Negate Long.";
break;
case "umsubl":
instructionInfo = "Unsigned Multiply-Subtract Long.";
break;
case "umulh":
instructionInfo = "Unsigned Multiply High.";
break;
case "umull":
instructionInfo = "Unsigned Multiply Long.";
break;
case "uxtb":
instructionInfo = "Unsigned Extend Byte.";
break;
case "uxth":
instructionInfo = "Unsigned Extend Halfword.";
break;
case "wfe":
instructionInfo = "Wait For Event.";
break;
case "wfi":
instructionInfo = "Wait For Interrupt.";
break;
case "yield":
instructionInfo = "YIELD.";
break;
case "ldar":
instructionInfo = "Load-Acquire Register.";
break;
case "ldarb":
instructionInfo = "Load-Acquire Register Byte.";
break;
case "ldarh":
instructionInfo = "Load-Acquire Register Halfword.";
break;
case "ldaxp":
instructionInfo = "Load-Acquire Exclusive Pair of Registers.";
break;
case "ldaxr":
instructionInfo = "Load-Acquire Exclusive Register.";
break;
case "ldaxrb":
instructionInfo = "Load-Acquire Exclusive Register Byte.";
break;
case "ldaxrh":
instructionInfo = "Load-Acquire Exclusive Register Halfword.";
break;
case "ldnp":
instructionInfo = "Load Pair of Registers, with non-temporal hint.";
break;
case "ldp":
instructionInfo = "Load Pair of Registers.";
break;
case "ldpsw":
instructionInfo = "Load Pair of Registers Signed Word.";
break;
case "ldr":
instructionInfo = "Load Register.";
break;
case "ldrb":
instructionInfo = "Load Register Byte.";
break;
case "ldrh":
instructionInfo = "Load Register Halfword.";
break;
case "ldrd":
instructionInfo = "Load Register double.";
break;
case "ldrsb":
instructionInfo = "Load Register Signed Byte.";
break;
case "ldrsh":
instructionInfo = "Load Register Signed Halfword.";
break;
case "ldrsw":
instructionInfo = "Load Register Signed Word.";
break;
case "ldtr":
instructionInfo = "Load Register.";
break;
case "ldtrb":
instructionInfo = "Load Register Byte.";
break;
case "ldtrh":
instructionInfo = "Load Register Halfword.";
break;
case "ldtrsb":
instructionInfo = "Load Register Signed Byte.";
break;
case "ldtrsh":
instructionInfo = "Load Register Signed Halfword.";
break;
case "ldtrsw":
instructionInfo = "Load Register Signed Word.";
break;
case "ldur":
instructionInfo = "Load Register.";
break;
case "ldurb":
instructionInfo = "Load Register Byte.";
break;
case "ldurh":
instructionInfo = "Load Register Halfword.";
break;
case "ldursb":
instructionInfo = "Load Register Signed Byte.";
break;
case "ldursh":
instructionInfo = "Load Register Signed Halfword.";
break;
case "ldursw":
instructionInfo = "Load Register Signed Word.";
break;
case "ldxp":
instructionInfo = "Load Exclusive Pair of Registers.";
break;
case "ldxr":
instructionInfo = "Load Exclusive Register.";
break;
case "ldxrb":
instructionInfo = "Load Exclusive Register Byte.";
break;
case "ldxrh":
instructionInfo = "Load Exclusive Register Halfword.";
break;
case "prfm":
instructionInfo = "Prefetch Memory.";
break;
case "prfum":
instructionInfo = "Prefetch Memory.";
break;
case "stlr":
instructionInfo = "Store-Release Register.";
break;
case "stlrb":
instructionInfo = "Store-Release Register Byte.";
break;
case "stlrh":
instructionInfo = "Store-Release Register Halfword.";
break;
case "stlxp":
instructionInfo = "Store-Release Exclusive Pair of registers.";
break;
case "stlxr":
instructionInfo = "Store-Release Exclusive Register.";
break;
case "stlxrb":
instructionInfo = "Store-Release Exclusive Register Byte.";
break;
case "stlxrh":
instructionInfo = "Store-Release Exclusive Register Halfword.";
break;
case "stnp":
instructionInfo = "Store Pair of Registers, with non-temporal hint.";
break;
case "stp":
instructionInfo = "Store Pair of Registers.";
break;
case "str":
instructionInfo = "Store Register.";
break;
case "strd":
instructionInfo = "Store register double.";
break;
case "strb":
instructionInfo = "Store Register Byte.";
break;
case "strh":
instructionInfo = "Store Register Halfword.";
break;
case "sttr":
instructionInfo = "Store Register.";
break;
case "sttrb":
instructionInfo = "Store Register Byte.";
break;
case "sttrh":
instructionInfo = "Store Register Halfword.";
break;
case "stur":
instructionInfo = "Store Register.";
break;
case "sturb":
instructionInfo = "Store Register Byte.";
break;
case "sturh":
instructionInfo = "Store Register Halfword.";
break;
case "stxp":
instructionInfo = "Store Exclusive Pair of registers.";
break;
case "stxr":
instructionInfo = "Store Exclusive Register.";
break;
case "stxrb":
instructionInfo = "Store Exclusive Register Byte.";
break;
case "stxrh":
instructionInfo = "Store Exclusive Register Halfword.";
break;
case "fabs":
instructionInfo = "Floating-point Absolute value.";
break;
case "fadd":
instructionInfo = "Floating-point Add.";
break;
case "fccmp":
instructionInfo = "Floating-point Conditional quiet Compare.";
break;
case "fccmpe":
instructionInfo = "Floating-point Conditional signaling Compare.";
break;
case "fcmp":
instructionInfo = "Floating-point quiet Compare.";
break;
case "fcmpe":
instructionInfo = "Floating-point signaling Compare.";
break;
case "fcsel":
instructionInfo = "Floating-point Conditional Select.";
break;
case "fcvt":
instructionInfo = "Floating-point Convert precision.";
break;
case "fcvtas":
instructionInfo = "Floating-point Convert to Signed integer, rounding to nearest with ties to Away.";
break;
case "fcvtau":
instructionInfo = "Floating-point Convert to Unsigned integer, rounding to nearest with ties to Away.";
break;
case "fcvtms":
instructionInfo = "Floating-point Convert to Signed integer, rounding toward Minus infinity.";
break;
case "fcvtmu":
instructionInfo = "Floating-point Convert to Unsigned integer, rounding toward Minus infinity.";
break;
case "fcvtns":
instructionInfo = "Floating-point Convert to Signed integer, rounding to nearest with ties to even.";
break;
case "fcvtnu":
instructionInfo = "Floating-point Convert to Unsigned integer, rounding to nearest with ties to even.";
break;
case "fcvtps":
instructionInfo = "Floating-point Convert to Signed integer, rounding toward Plus infinity.";
break;
case "fcvtpu":
instructionInfo = "Floating-point Convert to Unsigned integer, rounding toward Plus infinity.";
break;
case "fcvtzs":
instructionInfo = "Floating-point Convert to Signed fixed-point, rounding toward Zero.";
break;
case "fcvtzu":
instructionInfo = "Floating-point Convert to Unsigned fixed-point, rounding toward Zero.";
break;
case "fdiv":
instructionInfo = "Floating-point Divide.";
break;
case "fmadd":
instructionInfo = "Floating-point fused Multiply-Add.";
break;
case "fmax":
instructionInfo = "Floating-point Maximum.";
break;
case "fmaxnm":
instructionInfo = "Floating-point Maximum Number.";
break;
case "fmin":
instructionInfo = "Floating-point Minimum.";
break;
case "fminnm":
instructionInfo = "Floating-point Minimum Number.";
break;
case "fmov":
instructionInfo = "Floating-point Move register without conversion.";
break;
case "fmsub":
instructionInfo = "Floating-point Fused Multiply-Subtract.";
break;
case "fmul":
instructionInfo = "Floating-point Multiply.";
break;
case "fneg":
instructionInfo = "Floating-point Negate.";
break;
case "fnmadd":
instructionInfo = "Floating-point Negated fused Multiply-Add.";
break;
case "fnmsub":
instructionInfo = "Floating-point Negated fused Multiply-Subtract.";
break;
case "fnmul":
instructionInfo = "Floating-point Multiply-Negate.";
break;
case "frinta":
instructionInfo = "Floating-point Round to Integral, to nearest with ties to Away.";
break;
case "frinti":
instructionInfo = "Floating-point Round to Integral, using current rounding mode.";
break;
case "frintm":
instructionInfo = "Floating-point Round to Integral, toward Minus infinity.";
break;
case "frintn":
instructionInfo = "Floating-point Round to Integral, to nearest with ties to even.";
break;
case "frintp":
instructionInfo = "Floating-point Round to Integral, toward Plus infinity.";
break;
case "frintx":
instructionInfo = "Floating-point Round to Integral exact, using current rounding mode.";
break;
case "frintz":
instructionInfo = "Floating-point Round to Integral, toward Zero.";
break;
case "fsqrt":
instructionInfo = "Floating-point Square Root.";
break;
case "fsub":
instructionInfo = "Floating-point Subtract.";
break;
case "scvtf":
instructionInfo = "Signed fixed-point Convert to Floating-point.";
break;
case "ucvtf":
instructionInfo = "Unsigned fixed-point Convert to Floating-point.";
break;
case "abs":
instructionInfo = "Absolute value.";
break;
case "vabs":
instructionInfo = "Returns the absolute value of each element in a vector.";
break;
case "addp":
instructionInfo = "Add Pair of elements.";
break;
case "cmeq":
instructionInfo = "Compare bitwise Equal.";
break;
case "cmge":
instructionInfo = "Compare signed Greater than or Equal.";
break;
case "cmgt":
instructionInfo = "Compare signed Greater than.";
break;
case "cmhi":
instructionInfo = "Compare unsigned Higher.";
break;
case "cmhs":
instructionInfo = "Compare unsigned Higher or Same.";
break;
case "cmle":
instructionInfo = "Compare signed Less than or Equal to zero.";
break;
case "cmlt":
instructionInfo = "Compare signed Less than zero.";
break;
case "cmtst":
instructionInfo = "Compare bitwise Test bits nonzero.";
break;
case "dup":
instructionInfo = "Duplicate vector element to scalar.";
break;
case "fabd":
instructionInfo = "Floating-point Absolute Difference.";
break;
case "facge":
instructionInfo = "Floating-point Absolute Compare Greater than or Equal.";
break;
case "facgt":
instructionInfo = "Floating-point Absolute Compare Greater than.";
break;
case "faddp":
instructionInfo = "Floating-point Add Pair of elements.";
break;
case "fcmeq":
instructionInfo = "Floating-point Compare Equal.";
break;
case "fcmge":
instructionInfo = "Floating-point Compare Greater than or Equal.";
break;
case "fcmgt":
instructionInfo = "Floating-point Compare Greater than.";
break;
case "fcmle":
instructionInfo = "Floating-point Compare Less than or Equal to zero.";
break;
case "fcmlt":
instructionInfo = "Floating-point Compare Less than zero.";
break;
case "fcvtxn":
instructionInfo = "Floating-point Convert to lower precision Narrow, rounding to odd.";
break;
case "fmaxnmp":
instructionInfo = "Floating-point Maximum Number of Pair of elements.";
break;
case "fmaxp":
instructionInfo = "Floating-point Maximum of Pair of elements.";
break;
case "fminnmp":
instructionInfo = "Floating-point Minimum Number of Pair of elements.";
break;
case "fminp":
instructionInfo = "Floating-point Minimum of Pair of elements.";
break;
case "fmla":
instructionInfo = "Floating-point fused Multiply-Add to accumulator.";
break;
case "fmls":
instructionInfo = "Floating-point fused Multiply-Subtract from accumulator.";
break;
case "fmulx":
instructionInfo = "Floating-point Multiply extended.";
break;
case "frecpe":
instructionInfo = "Floating-point Reciprocal Estimate.";
break;
case "frecps":
instructionInfo = "Floating-point Reciprocal Step.";
break;
case "frsqrte":
instructionInfo = "Floating-point Reciprocal Square Root Estimate.";
break;
case "frsqrts":
instructionInfo = "Floating-point Reciprocal Square Root Step.";
break;
case "shl":
instructionInfo = "Shift Left.";
break;
case "sli":
instructionInfo = "Shift Left and Insert.";
break;
case "sqabs":
instructionInfo = "Signed saturating Absolute value.";
break;
case "sqadd":
instructionInfo = "Signed saturating Add.";
break;
case "sqdmlal":
instructionInfo = "Signed saturating Doubling Multiply-Add Long.";
break;
case "sqdmlsl":
instructionInfo = "Signed saturating Doubling Multiply-Subtract Long.";
break;
case "sqdmulh":
instructionInfo = "Signed saturating Doubling Multiply returning High half.";
break;
case "sqdmull":
instructionInfo = "Signed saturating Doubling Multiply Long.";
break;
case "sqneg":
instructionInfo = "Signed saturating Negate.";
break;
case "sqrdmulh":
instructionInfo = "Signed saturating Rounding Doubling Multiply returning High half.";
break;
case "sqrshl":
instructionInfo = "Signed saturating Rounding Shift Left.";
break;
case "sqrshrn":
instructionInfo = "Signed saturating Rounded Shift Right Narrow.";
break;
case "sqrshrun":
instructionInfo = "Signed saturating Rounded Shift Right Unsigned Narrow.";
break;
case "sqshl":
instructionInfo = "Signed saturating Shift Left.";
break;
case "sqshlu":
instructionInfo = "Signed saturating Shift Left Unsigned.";
break;
case "sqshrn":
instructionInfo = "Signed saturating Shift Right Narrow.";
break;
case "sqshrun":
instructionInfo = "Signed saturating Shift Right Unsigned Narrow.";
break;
case "sqsub":
instructionInfo = "Signed saturating Subtract.";
break;
case "sqxtn":
instructionInfo = "Signed saturating extract Narrow.";
break;
case "sqxtun":
instructionInfo = "Signed saturating extract Unsigned Narrow.";
break;
case "sri":
instructionInfo = "Shift Right and Insert.";
break;
case "srshl":
instructionInfo = "Signed Rounding Shift Left.";
break;
case "srshr":
instructionInfo = "Signed Rounding Shift Right.";
break;
case "srsra":
instructionInfo = "Signed Rounding Shift Right and Accumulate.";
break;
case "sshl":
instructionInfo = "Signed Shift Left.";
break;
case "sshr":
instructionInfo = "Signed Shift Right.";
break;
case "ssra":
instructionInfo = "Signed Shift Right and Accumulate.";
break;
case "suqadd":
instructionInfo = "Signed saturating Accumulate of Unsigned value.";
break;
case "uqadd":
instructionInfo = "Unsigned saturating Add.";
break;
case "uqrshl":
instructionInfo = "Unsigned saturating Rounding Shift Left.";
break;
case "uqrshrn":
instructionInfo = "Unsigned saturating Rounded Shift Right Narrow.";
break;
case "uqshl":
instructionInfo = "Unsigned saturating Shift Left.";
break;
case "uqshrn":
instructionInfo = "Unsigned saturating Shift Right Narrow.";
break;
case "uqsub":
instructionInfo = "Unsigned saturating Subtract.";
break;
case "uqxtn":
instructionInfo = "Unsigned saturating extract Narrow.";
break;
case "urshl":
instructionInfo = "Unsigned Rounding Shift Left.";
break;
case "urshr":
instructionInfo = "Unsigned Rounding Shift Right.";
break;
case "ursra":
instructionInfo = "Unsigned Rounding Shift Right and Accumulate.";
break;
case "ushl":
instructionInfo = "Unsigned Shift Left.";
break;
case "ushr":
instructionInfo = "Unsigned Shift Right.";
break;
case "usqadd":
instructionInfo = "Unsigned saturating Accumulate of Signed value.";
break;
case "usra":
instructionInfo = "Unsigned Shift Right and Accumulate.";
break;
case "addhn":
case "addhn2":
instructionInfo = "Add returning High Narrow.";
break;
case "addv":
instructionInfo = "Add across Vector.";
break;
case "bif":
instructionInfo = "Bitwise Insert if False.";
break;
case "bit":
instructionInfo = "Bitwise Insert if True.";
break;
case "bsl":
instructionInfo = "Bitwise Select.";
break;
case "cnt":
instructionInfo = "Population Count per byte.";
break;
case "ext":
instructionInfo = "Extract vector from pair of vectors.";
break;
case "fcvtl":
case "fcvtl2":
instructionInfo = "Floating-point Convert to higher precision Long.";
break;
case "fcvtn":
case "fcvtn2":
instructionInfo = "Floating-point Convert to lower precision Narrow.";
break;
case "fcvtxn2":
instructionInfo = "Floating-point Convert to lower precision Narrow, rounding to odd.";
break;
case "fmaxnmv":
instructionInfo = "Floating-point Maximum Number across Vector.";
break;
case "fmaxv":
instructionInfo = "Floating-point Maximum across Vector.";
break;
case "fminnmv":
instructionInfo = "Floating-point Minimum Number across Vector.";
break;
case "fminv":
instructionInfo = "Floating-point Minimum across Vector.";
break;
case "frecpx":
instructionInfo = "Floating-point Reciprocal exponent.";
break;
case "ins":
instructionInfo = "Insert vector element from another vector element.";
break;
case "ld1":
instructionInfo = "Load multiple single-element structures to one, two, three, or four registers.";
break;
case "ld1r":
instructionInfo = "Load one single-element structure and Replicate to all lanes.";
break;
case "ld2":
instructionInfo = "Load multiple 2-element structures to two registers.";
break;
case "ld2r":
instructionInfo = "Load single 2-element structure and Replicate to all lanes of two registers.";
break;
case "ld3":
instructionInfo = "Load multiple 3-element structures to three registers.";
break;
case "ld3r":
instructionInfo = "Load single 3-element structure and Replicate to all lanes of three registers.";
break;
case "ld4":
instructionInfo = "Load multiple 4-element structures to four registers.";
break;
case "ld4r":
instructionInfo = "Load single 4-element structure and Replicate to all lanes of four registers.";
break;
case "mla":
instructionInfo = "Multiply-Add to accumulator (vector, by element).";
break;
case "mls":
instructionInfo = "Multiply-Subtract from accumulator (vector, by element).";
break;
case "movi":
instructionInfo = "Move Immediate.";
break;
case "mvni":
instructionInfo = "Move inverted Immediate.";
break;
case "not":
instructionInfo = "Bitwise NOT.";
break;
case "pmul":
instructionInfo = "Polynomial Multiply.";
break;
case "pmull":
case "pmull2":
instructionInfo = "Polynomial Multiply Long.";
break;
case "raddhn":
case "raddhn2":
instructionInfo = "Rounding Add returning High Narrow.";
break;
case "rshrn":
case "rshrn2":
instructionInfo = "Rounding Shift Right Narrow.";
break;
case "rsubhn":
case "rsubhn2":
instructionInfo = "Rounding Subtract returning High Narrow.";
break;
case "saba":
instructionInfo = "Signed Absolute difference and Accumulate.";
break;
case "sabal":
case "sabal2":
instructionInfo = "Signed Absolute difference and Accumulate Long.";
break;
case "sabd":
instructionInfo = "Signed Absolute Difference.";
break;
case "sabdl":
case "sabdl2":
instructionInfo = "Signed Absolute Difference Long.";
break;
case "sadalp":
instructionInfo = "Signed Add and Accumulate Long Pairwise.";
break;
case "saddl":
case "saddl2":
instructionInfo = "Signed Add Long.";
break;
case "saddlp":
instructionInfo = "Signed Add Long Pairwise.";
break;
case "saddlv":
instructionInfo = "Signed Add Long across Vector.";
break;
case "saddw":
case "saddw2":
instructionInfo = "Signed Add Wide.";
break;
case "shadd":
instructionInfo = "Signed Halving Add.";
break;
case "shll":
case "shll2":
instructionInfo = "Shift Left Long.";
break;
case "shrn":
case "shrn2":
instructionInfo = "Shift Right Narrow.";
break;
case "shsub":
instructionInfo = "Signed Halving Subtract.";
break;
case "smax":
instructionInfo = "Signed Maximum.";
break;
case "smaxp":
instructionInfo = "Signed Maximum Pairwise.";
break;
case "smaxv":
instructionInfo = "Signed Maximum across Vector.";
break;
case "smin":
instructionInfo = "Signed Minimum.";
break;
case "sminp":
instructionInfo = "Signed Minimum Pairwise.";
break;
case "sminv":
instructionInfo = "Signed Minimum across Vector.";
break;
case "smlabb":
case "smlabt":
case "smlatb":
case "smlatt":
instructionInfo = "Signed Multiply Accumulate performs a signed multiply accumulate operation.";
break;
case "smlal":
case "smlal2":
instructionInfo = "Signed Multiply-Add Long (vector, by element).";
break;
case "smlsl":
case "smlsl2":
instructionInfo = "Signed Multiply-Subtract Long (vector, by element).";
break;
case "smov":
instructionInfo = "Signed Move vector element to general-purpose register.";
break;
case "smull2":
instructionInfo = "Signed Multiply Long (vector, by element).";
break;
case "sqdmlal2":
instructionInfo = "Signed saturating Doubling Multiply-Add Long.";
break;
case "sqdmlsl2":
instructionInfo = "Signed saturating Doubling Multiply-Subtract Long.";
break;
case "sqdmull2":
instructionInfo = "Signed saturating Doubling Multiply Long.";
break;
case "sqrshrn2":
instructionInfo = "Signed saturating Rounded Shift Right Narrow.";
break;
case "sqrshrun2":
instructionInfo = "Signed saturating Rounded Shift Right Unsigned Narrow.";
break;
case "sqshrn2":
instructionInfo = "Signed saturating Shift Right Narrow.";
break;
case "sqshrun2":
instructionInfo = "Signed saturating Shift Right Unsigned Narrow.";
break;
case "sqxtn2":
instructionInfo = "Signed saturating extract Narrow.";
break;
case "sqxtun2":
instructionInfo = "Signed saturating extract Unsigned Narrow.";
break;
case "srhadd":
instructionInfo = "Signed Rounding Halving Add.";
break;
case "sshll":
case "sshll2":
instructionInfo = "Signed Shift Left Long.";
break;
case "ssubl":
case "ssubl2":
instructionInfo = "Signed Subtract Long.";
break;
case "ssubw":
case "ssubw2":
instructionInfo = "Signed Subtract Wide.";
break;
case "st1":
instructionInfo = "Store multiple single-element structures from one, two, three, or four registers.";
break;
case "st2":
instructionInfo = "Store multiple 2-element structures from two registers.";
break;
case "st3":
instructionInfo = "Store multiple 3-element structures from three registers.";
break;
case "st4":
instructionInfo = "Store multiple 4-element structures from four registers.";
break;
case "subhn":
case "subhn2":
instructionInfo = "Subtract returning High Narrow.";
break;
case "tbl":
instructionInfo = "Table vector Lookup.";
break;
case "tbx":
instructionInfo = "Table vector lookup extension.";
break;
case "tbb":
instructionInfo = "PC-relative forward branch using table of single byte offsets.";
break;
case "tbh":
instructionInfo = "PC-relative forward branch using table of halfword offsets.";
break;
case "trn1":
instructionInfo = "Transpose vectors.";
break;
case "trn2":
instructionInfo = "Transpose vectors.";
break;
case "uaba":
instructionInfo = "Unsigned Absolute difference and Accumulate.";
break;
case "uabal":
case "uabal2":
instructionInfo = "Unsigned Absolute difference and Accumulate Long.";
break;
case "uabd":
instructionInfo = "Unsigned Absolute Difference.";
break;
case "uabdl":
case "uabdl2":
instructionInfo = "Unsigned Absolute Difference Long.";
break;
case "uadalp":
instructionInfo = "Unsigned Add and Accumulate Long Pairwise.";
break;
case "uaddl":
case "uaddl2":
instructionInfo = "Unsigned Add Long.";
break;
case "uaddlp":
instructionInfo = "Unsigned Add Long Pairwise.";
break;
case "uaddlv":
instructionInfo = "Unsigned sum Long across Vector.";
break;
case "uaddw":
case "uaddw2":
instructionInfo = "Unsigned Add Wide.";
break;
case "uhadd":
instructionInfo = "Unsigned Halving Add.";
break;
case "uhsub":
instructionInfo = "Unsigned Halving Subtract.";
break;
case "umax":
instructionInfo = "Unsigned Maximum.";
break;
case "umaxp":
instructionInfo = "Unsigned Maximum Pairwise.";
break;
case "umaxv":
instructionInfo = "Unsigned Maximum across Vector.";
break;
case "umin":
instructionInfo = "Unsigned Minimum.";
break;
case "uminp":
instructionInfo = "Unsigned Minimum Pairwise.";
break;
case "uminv":
instructionInfo = "Unsigned Minimum across Vector.";
break;
case "umlal":
case "umlal2":
instructionInfo = "Unsigned Multiply-Add Long (vector, by element).";
break;
case "umlsl":
case "umlsl2":
instructionInfo = "Unsigned Multiply-Subtract Long (vector, by element).";
break;
case "umov":
instructionInfo = "Unsigned Move vector element to general-purpose register.";
break;
case "umull2":
instructionInfo = "Unsigned Multiply Long (vector, by element).";
break;
case "uqrshrn2":
instructionInfo = "Unsigned saturating Rounded Shift Right Narrow.";
break;
case "uqshrn2":
instructionInfo = "Unsigned saturating Shift Right Narrow.";
break;
case "uqxtn2":
instructionInfo = "Unsigned saturating extract Narrow.";
break;
case "urecpe":
instructionInfo = "Unsigned Reciprocal Estimate.";
break;
case "urhadd":
instructionInfo = "Unsigned Rounding Halving Add.";
break;
case "ursqrte":
instructionInfo = "Unsigned Reciprocal Square Root Estimate.";
break;
case "ushll":
case "ushll2":
instructionInfo = "Unsigned Shift Left Long.";
break;
case "usubl":
case "usubl2":
instructionInfo = "Unsigned Subtract Long.";
break;
case "usubw":
case "usubw2":
instructionInfo = "Unsigned Subtract Wide.";
break;
case "uzp1":
instructionInfo = "Unzip vectors.";
break;
case "uzp2":
instructionInfo = "Unzip vectors.";
break;
case "xtn":
case "xtn2":
instructionInfo = "Extract Narrow.";
break;
case "zip1":
instructionInfo = "Zip vectors.";
break;
case "zip2":
instructionInfo = "Zip vectors.";
break;
case "aesd":
instructionInfo = "AES single round decryption.";
break;
case "aese":
instructionInfo = "AES single round encryption.";
break;
case "aesimc":
instructionInfo = "AES inverse mix columns.";
break;
case "aesmc":
instructionInfo = "AES mix columns.";
break;
case "sha1c":
instructionInfo = "SHA1 hash update.";
break;
case "sha1h":
instructionInfo = "SHA1 fixed rotate.";
break;
case "sha1m":
instructionInfo = "SHA1 hash update.";
break;
case "sha1p":
instructionInfo = "SHA1 hash update.";
break;
case "sha1su0":
instructionInfo = "SHA1 schedule update 0.";
break;
case "sha1su1":
instructionInfo = "SHA1 schedule update 1.";
break;
case "sha256h2":
instructionInfo = "SHA256 hash update.";
break;
case "sha256h":
instructionInfo = "SHA256 hash update.";
break;
case "sha256su0":
instructionInfo = "SHA256 schedule update 0.";
break;
case "sha256su1":
instructionInfo = "SHA256 schedule update 1.";
break;
case "adcs":
instructionInfo = "Add with Carry, setting flags.";
break;
case "addg":
instructionInfo = "Add with Tag.";
break;
case "ands":
instructionInfo = "Bitwise AND (immediate), setting flags.";
break;
case "asrv":
instructionInfo = "Arithmetic Shift Right Variable.";
break;
case "autda":
instructionInfo = "Authenticate Data address, using key A.";
break;
case "autdza":
instructionInfo = "Authenticate Data address, using key A.";
break;
case "autdb":
instructionInfo = "Authenticate Data address, using key B.";
break;
case "autdzb":
instructionInfo = "Authenticate Data address, using key B.";
break;
case "autia":
instructionInfo = "Authenticate Instruction address, using key A.";
break;
case "autiza":
instructionInfo = "Authenticate Instruction address, using key A.";
break;
case "autia1716":
instructionInfo = "Authenticate Instruction address, using key A.";
break;
case "autiasp":
instructionInfo = "Authenticate Instruction address, using key A.";
break;
case "autiaz":
instructionInfo = "Authenticate Instruction address, using key A.";
break;
case "autib":
instructionInfo = "Authenticate Instruction address, using key B.";
break;
case "autizb":
instructionInfo = "Authenticate Instruction address, using key B.";
break;
case "autib1716":
instructionInfo = "Authenticate Instruction address, using key B.";
break;
case "autibsp":
instructionInfo = "Authenticate Instruction address, using key B.";
break;
case "autibz":
instructionInfo = "Authenticate Instruction address, using key B.";
break;
case "axflag":
instructionInfo = "Convert floating-point condition flags from Arm to external format.";
break;
case "b.cond":
instructionInfo = "Branch conditionally.";
break;
case "bfc":
instructionInfo = "Bitfield Clear, leaving other bits unchanged.";
break;
case "bics":
instructionInfo = "Bitwise Bit Clear (shifted register), setting flags.";
break;
case "blraa":
instructionInfo = "Branch with Link to Register, with pointer authentication.";
break;
case "blraaz":
instructionInfo = "Branch with Link to Register, with pointer authentication.";
break;
case "blrab":
instructionInfo = "Branch with Link to Register, with pointer authentication.";
break;
case "blrabz":
instructionInfo = "Branch with Link to Register, with pointer authentication.";
break;
case "braa":
instructionInfo = "Branch to Register, with pointer authentication.";
break;
case "braaz":
instructionInfo = "Branch to Register, with pointer authentication.";
break;
case "brab":
instructionInfo = "Branch to Register, with pointer authentication.";
break;
case "brabz":
instructionInfo = "Branch to Register, with pointer authentication.";
break;
case "bti":
instructionInfo = "Branch Target Identification.";
break;
case "cinc":
instructionInfo = "Conditional Increment.";
break;
case "cinv":
instructionInfo = "Conditional Invert.";
break;
case "cmpp":
instructionInfo = "Compare with Tag.";
break;
case "cneg":
instructionInfo = "Conditional Negate.";
break;
case "csdb":
instructionInfo = "Consumption of Speculative Data Barrier.";
break;
case "cset":
instructionInfo = "Conditional Set.";
break;
case "csetm":
instructionInfo = "Conditional Set Mask.";
break;
case "eretaa":
instructionInfo = "Exception Return, with pointer authentication.";
break;
case "eretab":
instructionInfo = "Exception Return, with pointer authentication.";
break;
case "esb":
instructionInfo = "Error Synchronization Barrier.";
break;
case "irg":
instructionInfo = "Insert Random Tag.";
break;
case "ldg":
instructionInfo = "Load Allocation Tag.";
break;
case "ldgv":
instructionInfo = "Load Allocation Tag.";
break;
case "lslv":
instructionInfo = "Logical Shift Left Variable.";
break;
case "lsrv":
instructionInfo = "Logical Shift Right Variable.";
break;
case "movl pseudo-instruction":
instructionInfo = "Load a register with either a 32-bit or 64-bit immediate value or any address.";
break;
case "negs":
instructionInfo = "Negate, setting flags.";
break;
case "ngcs":
instructionInfo = "Negate with Carry, setting flags.";
break;
case "pacda":
instructionInfo = "Pointer Authentication Code for Data address, using key A.";
break;
case "pacdza":
instructionInfo = "Pointer Authentication Code for Data address, using key A.";
break;
case "pacdb":
instructionInfo = "Pointer Authentication Code for Data address, using key B.";
break;
case "pacdzb":
instructionInfo = "Pointer Authentication Code for Data address, using key B.";
break;
case "pacga":
instructionInfo = "Pointer Authentication Code, using Generic key.";
break;
case "pacia":
instructionInfo = "Pointer Authentication Code for Instruction address, using key A.";
break;
case "paciza":
instructionInfo = "Pointer Authentication Code for Instruction address, using key A.";
break;
case "pacia1716":
instructionInfo = "Pointer Authentication Code for Instruction address, using key A.";
break;
case "paciasp":
instructionInfo = "Pointer Authentication Code for Instruction address, using key A.";
break;
case "paciaz":
instructionInfo = "Pointer Authentication Code for Instruction address, using key A.";
break;
case "pacib":
instructionInfo = "Pointer Authentication Code for Instruction address, using key B.";
break;
case "pacizb":
instructionInfo = "Pointer Authentication Code for Instruction address, using key B.";
break;
case "pacib1716":
instructionInfo = "Pointer Authentication Code for Instruction address, using key B.";
break;
case "pacibsp":
instructionInfo = "Pointer Authentication Code for Instruction address, using key B.";
break;
case "pacibz":
instructionInfo = "Pointer Authentication Code for Instruction address, using key B.";
break;
case "psb":
instructionInfo = "Profiling Synchronization Barrier.";
break;
case "retaa":
instructionInfo = "Return from subroutine, with pointer authentication.";
break;
case "retab":
instructionInfo = "Return from subroutine, with pointer authentication.";
break;
case "rorv":
instructionInfo = "Rotate Right Variable.";
break;
case "sbcs":
instructionInfo = "Subtract with Carry, setting flags.";
break;
case "st2g":
instructionInfo = "Store Allocation Tags.";
break;
case "stg":
instructionInfo = "Store Allocation Tag.";
break;
case "stgp":
instructionInfo = "Store Allocation Tag and Pair of registers.";
break;
case "stgv":
instructionInfo = "Store Tag Vector.";
break;
case "stz2g":
instructionInfo = "Store Allocation Tags, Zeroing.";
break;
case "stzg":
instructionInfo = "Store Allocation Tag, Zeroing.";
break;
case "subg":
instructionInfo = "Subtract with Tag.";
break;
case "subp":
instructionInfo = "Subtract Pointer.";
break;
case "subps":
instructionInfo = "Subtract Pointer, setting Flags.";
break;
case "xaflag":
instructionInfo = "Convert floating-point condition flags from external format to Arm format.";
break;
case "xpacd":
instructionInfo = "Strip Pointer Authentication Code.";
break;
case "xpaci":
instructionInfo = "Strip Pointer Authentication Code.";
break;
case "xpaclri":
instructionInfo = "Strip Pointer Authentication Code.";
break;
case "casa":
instructionInfo = "Compare and Swap word or doubleword in memory.";
break;
case "casal":
instructionInfo = "Compare and Swap word or doubleword in memory.";
break;
case "cas":
instructionInfo = "Compare and Swap word or doubleword in memory.";
break;
case "casl":
instructionInfo = "Compare and Swap word or doubleword in memory.";
break;
case "casab":
instructionInfo = "Compare and Swap byte in memory.";
break;
case "casalb":
instructionInfo = "Compare and Swap byte in memory.";
break;
case "casb":
instructionInfo = "Compare and Swap byte in memory.";
break;
case "caslb":
instructionInfo = "Compare and Swap byte in memory.";
break;
case "casah":
instructionInfo = "Compare and Swap halfword in memory.";
break;
case "casalh":
instructionInfo = "Compare and Swap halfword in memory.";
break;
case "cash":
instructionInfo = "Compare and Swap halfword in memory.";
break;
case "caslh":
instructionInfo = "Compare and Swap halfword in memory.";
break;
case "caspa":
instructionInfo = "Compare and Swap Pair of words or doublewords in memory.";
break;
case "caspal":
instructionInfo = "Compare and Swap Pair of words or doublewords in memory.";
break;
case "casp":
instructionInfo = "Compare and Swap Pair of words or doublewords in memory.";
break;
case "caspl":
instructionInfo = "Compare and Swap Pair of words or doublewords in memory.";
break;
case "ldadda":
instructionInfo = "Atomic add on word or doubleword in memory.";
break;
case "ldaddal":
instructionInfo = "Atomic add on word or doubleword in memory.";
break;
case "ldadd":
instructionInfo = "Atomic add on word or doubleword in memory.";
break;
case "ldaddl":
instructionInfo = "Atomic add on word or doubleword in memory.";
break;
case "ldaddab":
instructionInfo = "Atomic add on byte in memory.";
break;
case "ldaddalb":
instructionInfo = "Atomic add on byte in memory.";
break;
case "ldaddb":
instructionInfo = "Atomic add on byte in memory.";
break;
case "ldaddlb":
instructionInfo = "Atomic add on byte in memory.";
break;
case "ldaddah":
instructionInfo = "Atomic add on halfword in memory.";
break;
case "ldaddalh":
instructionInfo = "Atomic add on halfword in memory.";
break;
case "ldaddh":
instructionInfo = "Atomic add on halfword in memory.";
break;
case "ldaddlh":
instructionInfo = "Atomic add on halfword in memory.";
break;
case "ldapr":
instructionInfo = "Load-Acquire RCpc Register.";
break;
case "ldaprb":
instructionInfo = "Load-Acquire RCpc Register Byte.";
break;
case "ldaprh":
instructionInfo = "Load-Acquire RCpc Register Halfword.";
break;
case "ldclra":
instructionInfo = "Atomic bit clear on word or doubleword in memory.";
break;
case "ldclral":
instructionInfo = "Atomic bit clear on word or doubleword in memory.";
break;
case "ldclr":
instructionInfo = "Atomic bit clear on word or doubleword in memory.";
break;
case "ldclrl":
instructionInfo = "Atomic bit clear on word or doubleword in memory.";
break;
case "ldclrab":
instructionInfo = "Atomic bit clear on byte in memory.";
break;
case "ldclralb":
instructionInfo = "Atomic bit clear on byte in memory.";
break;
case "ldclrb":
instructionInfo = "Atomic bit clear on byte in memory.";
break;
case "ldclrlb":
instructionInfo = "Atomic bit clear on byte in memory.";
break;
case "ldclrah":
instructionInfo = "Atomic bit clear on halfword in memory.";
break;
case "ldclralh":
instructionInfo = "Atomic bit clear on halfword in memory.";
break;
case "ldclrh":
instructionInfo = "Atomic bit clear on halfword in memory.";
break;
case "ldclrlh":
instructionInfo = "Atomic bit clear on halfword in memory.";
break;
case "ldeora":
instructionInfo = "Atomic exclusive OR on word or doubleword in memory.";
break;
case "ldeoral":
instructionInfo = "Atomic exclusive OR on word or doubleword in memory.";
break;
case "ldeor":
instructionInfo = "Atomic exclusive OR on word or doubleword in memory.";
break;
case "ldeorl":
instructionInfo = "Atomic exclusive OR on word or doubleword in memory.";
break;
case "ldeorab":
instructionInfo = "Atomic exclusive OR on byte in memory.";
break;
case "ldeoralb":
instructionInfo = "Atomic exclusive OR on byte in memory.";
break;
case "ldeorb":
instructionInfo = "Atomic exclusive OR on byte in memory.";
break;
case "ldeorlb":
instructionInfo = "Atomic exclusive OR on byte in memory.";
break;
case "ldeorah":
instructionInfo = "Atomic exclusive OR on halfword in memory.";
break;
case "ldeoralh":
instructionInfo = "Atomic exclusive OR on halfword in memory.";
break;
case "ldeorh":
instructionInfo = "Atomic exclusive OR on halfword in memory.";
break;
case "ldeorlh":
instructionInfo = "Atomic exclusive OR on halfword in memory.";
break;
case "ldlar":
instructionInfo = "Load LOAcquire Register.";
break;
case "ldlarb":
instructionInfo = "Load LOAcquire Register Byte.";
break;
case "ldlarh":
instructionInfo = "Load LOAcquire Register Halfword.";
break;
case "ldr pseudo-instruction":
instructionInfo = "Load a register with either a 32-bit or 64-bit immediate value or any address.";
break;
case "ldraa":
instructionInfo = "Load Register, with pointer authentication.";
break;
case "ldrab":
instructionInfo = "Load Register, with pointer authentication.";
break;
case "ldrex":
instructionInfo = "Load Register Exclusive.";
break;
case "strex":
instructionInfo = "Store Register Exclusive.";
break;
case "ldseta":
instructionInfo = "Atomic bit set on word or doubleword in memory.";
break;
case "ldsetal":
instructionInfo = "Atomic bit set on word or doubleword in memory.";
break;
case "ldset":
instructionInfo = "Atomic bit set on word or doubleword in memory.";
break;
case "ldsetl":
instructionInfo = "Atomic bit set on word or doubleword in memory.";
break;
case "ldsetab":
instructionInfo = "Atomic bit set on byte in memory.";
break;
case "ldsetalb":
instructionInfo = "Atomic bit set on byte in memory.";
break;
case "ldsetb":
instructionInfo = "Atomic bit set on byte in memory.";
break;
case "ldsetlb":
instructionInfo = "Atomic bit set on byte in memory.";
break;
case "ldsetah":
instructionInfo = "Atomic bit set on halfword in memory.";
break;
case "ldsetalh":
instructionInfo = "Atomic bit set on halfword in memory.";
break;
case "ldseth":
instructionInfo = "Atomic bit set on halfword in memory.";
break;
case "ldsetlh":
instructionInfo = "Atomic bit set on halfword in memory.";
break;
case "ldsmaxa":
instructionInfo = "Atomic signed maximum on word or doubleword in memory.";
break;
case "ldsmaxal":
instructionInfo = "Atomic signed maximum on word or doubleword in memory.";
break;
case "ldsmax":
instructionInfo = "Atomic signed maximum on word or doubleword in memory.";
break;
case "ldsmaxl":
instructionInfo = "Atomic signed maximum on word or doubleword in memory.";
break;
case "ldsmaxab":
instructionInfo = "Atomic signed maximum on byte in memory.";
break;
case "ldsmaxalb":
instructionInfo = "Atomic signed maximum on byte in memory.";
break;
case "ldsmaxb":
instructionInfo = "Atomic signed maximum on byte in memory.";
break;
case "ldsmaxlb":
instructionInfo = "Atomic signed maximum on byte in memory.";
break;
case "ldsmaxah":
instructionInfo = "Atomic signed maximum on halfword in memory.";
break;
case "ldsmaxalh":
instructionInfo = "Atomic signed maximum on halfword in memory.";
break;
case "ldsmaxh":
instructionInfo = "Atomic signed maximum on halfword in memory.";
break;
case "ldsmaxlh":
instructionInfo = "Atomic signed maximum on halfword in memory.";
break;
case "ldsmina":
instructionInfo = "Atomic signed minimum on word or doubleword in memory.";
break;
case "ldsminal":
instructionInfo = "Atomic signed minimum on word or doubleword in memory.";
break;
case "ldsmin":
instructionInfo = "Atomic signed minimum on word or doubleword in memory.";
break;
case "ldsminl":
instructionInfo = "Atomic signed minimum on word or doubleword in memory.";
break;
case "ldsminab":
instructionInfo = "Atomic signed minimum on byte in memory.";
break;
case "ldsminalb":
instructionInfo = "Atomic signed minimum on byte in memory.";
break;
case "ldsminb":
instructionInfo = "Atomic signed minimum on byte in memory.";
break;
case "ldsminlb":
instructionInfo = "Atomic signed minimum on byte in memory.";
break;
case "ldsminah":
instructionInfo = "Atomic signed minimum on halfword in memory.";
break;
case "ldsminalh":
instructionInfo = "Atomic signed minimum on halfword in memory.";
break;
case "ldsminh":
instructionInfo = "Atomic signed minimum on halfword in memory.";
break;
case "ldsminlh":
instructionInfo = "Atomic signed minimum on halfword in memory.";
break;
case "ldumaxa":
instructionInfo = "Atomic unsigned maximum on word or doubleword in memory.";
break;
case "ldumaxal":
instructionInfo = "Atomic unsigned maximum on word or doubleword in memory.";
break;
case "ldumax":
instructionInfo = "Atomic unsigned maximum on word or doubleword in memory.";
break;
case "ldumaxl":
instructionInfo = "Atomic unsigned maximum on word or doubleword in memory.";
break;
case "ldumaxab":
instructionInfo = "Atomic unsigned maximum on byte in memory.";
break;
case "ldumaxalb":
instructionInfo = "Atomic unsigned maximum on byte in memory.";
break;
case "ldumaxb":
instructionInfo = "Atomic unsigned maximum on byte in memory.";
break;
case "ldumaxlb":
instructionInfo = "Atomic unsigned maximum on byte in memory.";
break;
case "ldumaxah":
instructionInfo = "Atomic unsigned maximum on halfword in memory.";
break;
case "ldumaxalh":
instructionInfo = "Atomic unsigned maximum on halfword in memory.";
break;
case "ldumaxh":
instructionInfo = "Atomic unsigned maximum on halfword in memory.";
break;
case "ldumaxlh":
instructionInfo = "Atomic unsigned maximum on halfword in memory.";
break;
case "ldumina":
instructionInfo = "Atomic unsigned minimum on word or doubleword in memory.";
break;
case "lduminal":
instructionInfo = "Atomic unsigned minimum on word or doubleword in memory.";
break;
case "ldumin":
instructionInfo = "Atomic unsigned minimum on word or doubleword in memory.";
break;
case "lduminl":
instructionInfo = "Atomic unsigned minimum on word or doubleword in memory.";
break;
case "lduminab":
instructionInfo = "Atomic unsigned minimum on byte in memory.";
break;
case "lduminalb":
instructionInfo = "Atomic unsigned minimum on byte in memory.";
break;
case "lduminb":
instructionInfo = "Atomic unsigned minimum on byte in memory.";
break;
case "lduminlb":
instructionInfo = "Atomic unsigned minimum on byte in memory.";
break;
case "lduminah":
instructionInfo = "Atomic unsigned minimum on halfword in memory.";
break;
case "lduminalh":
instructionInfo = "Atomic unsigned minimum on halfword in memory.";
break;
case "lduminh":
instructionInfo = "Atomic unsigned minimum on halfword in memory.";
break;
case "lduminlh":
instructionInfo = "Atomic unsigned minimum on halfword in memory.";
break;
case "stadd":
instructionInfo = "Atomic add on word or doubleword in memory, without return.";
break;
case "staddl":
instructionInfo = "Atomic add on word or doubleword in memory, without return.";
break;
case "staddb":
instructionInfo = "Atomic add on byte in memory, without return.";
break;
case "staddlb":
instructionInfo = "Atomic add on byte in memory, without return.";
break;
case "staddh":
instructionInfo = "Atomic add on halfword in memory, without return.";
break;
case "staddlh":
instructionInfo = "Atomic add on halfword in memory, without return.";
break;
case "stclr":
instructionInfo = "Atomic bit clear on word or doubleword in memory, without return.";
break;
case "stclrl":
instructionInfo = "Atomic bit clear on word or doubleword in memory, without return.";
break;
case "stclrb":
instructionInfo = "Atomic bit clear on byte in memory, without return.";
break;
case "stclrlb":
instructionInfo = "Atomic bit clear on byte in memory, without return.";
break;
case "stclrh":
instructionInfo = "Atomic bit clear on halfword in memory, without return.";
break;
case "stclrlh":
instructionInfo = "Atomic bit clear on halfword in memory, without return.";
break;
case "steor":
instructionInfo = "Atomic exclusive OR on word or doubleword in memory, without return.";
break;
case "steorl":
instructionInfo = "Atomic exclusive OR on word or doubleword in memory, without return.";
break;
case "steorb":
instructionInfo = "Atomic exclusive OR on byte in memory, without return.";
break;
case "steorlb":
instructionInfo = "Atomic exclusive OR on byte in memory, without return.";
break;
case "steorh":
instructionInfo = "Atomic exclusive OR on halfword in memory, without return.";
break;
case "steorlh":
instructionInfo = "Atomic exclusive OR on halfword in memory, without return.";
break;
case "stllr":
instructionInfo = "Store LORelease Register.";
break;
case "stllrb":
instructionInfo = "Store LORelease Register Byte.";
break;
case "stllrh":
instructionInfo = "Store LORelease Register Halfword.";
break;
case "stset":
instructionInfo = "Atomic bit set on word or doubleword in memory, without return.";
break;
case "stsetl":
instructionInfo = "Atomic bit set on word or doubleword in memory, without return.";
break;
case "stsetb":
instructionInfo = "Atomic bit set on byte in memory, without return.";
break;
case "stsetlb":
instructionInfo = "Atomic bit set on byte in memory, without return.";
break;
case "stseth":
instructionInfo = "Atomic bit set on halfword in memory, without return.";
break;
case "stsetlh":
instructionInfo = "Atomic bit set on halfword in memory, without return.";
break;
case "stsmax":
instructionInfo = "Atomic signed maximum on word or doubleword in memory, without return.";
break;
case "stsmaxl":
instructionInfo = "Atomic signed maximum on word or doubleword in memory, without return.";
break;
case "stsmaxb":
instructionInfo = "Atomic signed maximum on byte in memory, without return.";
break;
case "stsmaxlb":
instructionInfo = "Atomic signed maximum on byte in memory, without return.";
break;
case "stsmaxh":
instructionInfo = "Atomic signed maximum on halfword in memory, without return.";
break;
case "stsmaxlh":
instructionInfo = "Atomic signed maximum on halfword in memory, without return.";
break;
case "stsmin":
instructionInfo = "Atomic signed minimum on word or doubleword in memory, without return.";
break;
case "stsminl":
instructionInfo = "Atomic signed minimum on word or doubleword in memory, without return.";
break;
case "stsminb":
instructionInfo = "Atomic signed minimum on byte in memory, without return.";
break;
case "stsminlb":
instructionInfo = "Atomic signed minimum on byte in memory, without return.";
break;
case "stsminh":
instructionInfo = "Atomic signed minimum on halfword in memory, without return.";
break;
case "stsminlh":
instructionInfo = "Atomic signed minimum on halfword in memory, without return.";
break;
case "stumax":
instructionInfo = "Atomic unsigned maximum on word or doubleword in memory, without return.";
break;
case "stumaxl":
instructionInfo = "Atomic unsigned maximum on word or doubleword in memory, without return.";
break;
case "stumaxb":
instructionInfo = "Atomic unsigned maximum on byte in memory, without return.";
break;
case "stumaxlb":
instructionInfo = "Atomic unsigned maximum on byte in memory, without return.";
break;
case "stumaxh":
instructionInfo = "Atomic unsigned maximum on halfword in memory, without return.";
break;
case "stumaxlh":
instructionInfo = "Atomic unsigned maximum on halfword in memory, without return.";
break;
case "stumin":
instructionInfo = "Atomic unsigned minimum on word or doubleword in memory, without return.";
break;
case "stuminl":
instructionInfo = "Atomic unsigned minimum on word or doubleword in memory, without return.";
break;
case "stuminb":
instructionInfo = "Atomic unsigned minimum on byte in memory, without return.";
break;
case "stuminlb":
instructionInfo = "Atomic unsigned minimum on byte in memory, without return.";
break;
case "stuminh":
instructionInfo = "Atomic unsigned minimum on halfword in memory, without return.";
break;
case "stuminlh":
instructionInfo = "Atomic unsigned minimum on halfword in memory, without return.";
break;
case "swpa":
instructionInfo = "Swap word or doubleword in memory.";
break;
case "swpal":
instructionInfo = "Swap word or doubleword in memory.";
break;
case "swp":
instructionInfo = "Swap word or doubleword in memory.";
break;
case "swpl":
instructionInfo = "Swap word or doubleword in memory.";
break;
case "swpab":
instructionInfo = "Swap byte in memory.";
break;
case "swpalb":
instructionInfo = "Swap byte in memory.";
break;
case "swpb":
instructionInfo = "Swap byte in memory.";
break;
case "swplb":
instructionInfo = "Swap byte in memory.";
break;
case "swpah":
instructionInfo = "Swap halfword in memory.";
break;
case "swpalh":
instructionInfo = "Swap halfword in memory.";
break;
case "swph":
instructionInfo = "Swap halfword in memory.";
break;
case "swplh":
instructionInfo = "Swap halfword in memory.";
break;
case "fjcvtzs":
instructionInfo = "Floating-point Javascript Convert to Signed fixed-point, rounding toward Zero.";
break;
case "fcmla":
instructionInfo = "Floating-point Complex Multiply Accumulate (by element).";
break;
case "fmlal":
instructionInfo = "Floating-point fused Multiply-Add Long to accumulator (by element).";
break;
case "":
instructionInfo = "Floating-point fused Multiply-Add Long to accumulator (by element).";
break;
case "fmlsl":
instructionInfo = "Floating-point fused Multiply-Subtract Long from accumulator (by element).";
break;
case "sqrdmlah":
instructionInfo = "Signed Saturating Rounding Doubling Multiply Accumulate returning High Half (by element).";
break;
case "sqrdmlsh":
instructionInfo = "Signed Saturating Rounding Doubling Multiply Subtract returning High Half (by element).";
break;
case "fcadd":
instructionInfo = "Floating-point Complex Add.";
break;
case "sdot":
instructionInfo = "Dot Product signed arithmetic (vector, by element).";
break;
case "sxtl":
instructionInfo = "Signed extend Long.";
break;
case "sxtl2":
instructionInfo = "Signed extend Long.";
break;
case "udot":
instructionInfo = "Dot Product unsigned arithmetic (vector, by element).";
break;
case "uxtl":
instructionInfo = "Unsigned extend Long.";
break;
case "uxtl2":
instructionInfo = "Unsigned extend Long.";
break;
case "bcax":
instructionInfo = "SHA3 Bit Clear and XOR.";
break;
case "eor3":
instructionInfo = "SHA3 Three-way Exclusive OR.";
break;
case "rax1":
instructionInfo = "SHA3 Rotate and Exclusive OR.";
break;
case "sha512h2":
instructionInfo = "SHA512 Hash update part 2.";
break;
case "sha512h":
instructionInfo = "SHA512 Hash update part 1.";
break;
case "sha512su0":
instructionInfo = "SHA512 Schedule Update 0.";
break;
case "sha512su1":
instructionInfo = "SHA512 Schedule Update 1.";
break;
case "sm3partw1":
instructionInfo = "SM3 three-way exclusive OR on the combination of three 128-bit vectors.";
break;
case "sm3partw2":
instructionInfo = "SM3 three-way exclusive OR on the combination of three 128-bit vectors.";
break;
case "sm3ss1":
instructionInfo = "SM3 perform rotates and adds on three 128-bit vectors combined into a destination 128-bit SIMD and FP register.";
break;
case "sm3tt1a":
instructionInfo = "SM3 three-way exclusive OR on the combination of three 128-bit vectors and a 2-bit immediate index value.";
break;
case "sm3tt1b":
instructionInfo = "SM3 perform 32-bit majority function on the combination of three 128-bit vectors and 2-bit immediate index value.";
break;
case "sm3tt2a":
instructionInfo = "SM3 three-way exclusive OR of combined three 128-bit vectors and a 2-bit immediate index value.";
break;
case "sm3tt2b":
instructionInfo = "SM3 perform 32-bit majority function on the combination of three 128-bit vectors and 2-bit immediate index value.";
break;
case "sm4e":
instructionInfo = "SM4 Encode.";
break;
case "sm4ekey":
instructionInfo = "SM4 Key.";
break;
case "xar":
instructionInfo = "SHA3 Exclusive OR and Rotate.";
break;
case "vaba":
instructionInfo = "Absolute difference and Accumulate, Absolute difference and Accumulate Long.";
break;
case "vabl":
instructionInfo = "Absolute difference and Accumulate, Absolute difference and Accumulate Long.";
break;
case "vabd":
instructionInfo = "Absolute difference, Absolute difference Long.";
break;
case "vabdl":
instructionInfo = "Absolute difference, Absolute difference Long.";
break;
case "vacge":
instructionInfo = "Absolute Compare Greater than or Equal, Greater Than.";
break;
case "vacgt":
instructionInfo = "Absolute Compare Greater than or Equal, Greater Than.";
break;
case "vacle":
instructionInfo = "Absolute Compare Less than or Equal, Less Than (pseudo-instructions).";
break;
case "vaclt":
instructionInfo = "Absolute Compare Less than or Equal, Less Than (pseudo-instructions).";
break;
case "vaddhn":
instructionInfo = "Add, select High half.";
break;
case "vand":
instructionInfo = "Bitwise AND.";
break;
case "vbic":
instructionInfo = "Bitwise Bit Clear (register).";
break;
case "vbif":
instructionInfo = "Bitwise Insert if False.";
break;
case "vbit":
instructionInfo = "Bitwise Insert if True.";
break;
case "vbsl":
instructionInfo = "Bitwise Select.";
break;
case "vceq":
instructionInfo = "Compare Equal.";
break;
case "vcge":
instructionInfo = "Compare Greater than or Equal.";
break;
case "vcgt":
instructionInfo = "Compare Greater Than.";
break;
case "vcle":
instructionInfo = "Compare Less than or Equal.";
break;
case "vcls":
instructionInfo = "Count Leading Sign bits.";
break;
case "vcnt":
instructionInfo = "Count set bits.";
break;
case "vclt":
instructionInfo = "Compare Less Than.";
break;
case "vclz":
instructionInfo = "Count Leading Zeros.";
break;
case "vcvt":
instructionInfo = "Convert fixed-point or integer to floating point, floating-point to integer or fixed-point.";
break;
case "vdup":
instructionInfo = "Duplicate scalar to all lanes of vector.";
break;
case "veor":
instructionInfo = "Bitwise Exclusive OR.";
break;
case "vext":
instructionInfo = "Extract.";
break;
case "vfma":
instructionInfo = "Fused Multiply Accumulate, Fused Multiply Subtract (vector).";
break;
case "vfms":
instructionInfo = "Fused Multiply Accumulate, Fused Multiply Subtract (vector).";
break;
case "vhadd":
instructionInfo = "Halving Add.";
break;
case "vhsub":
instructionInfo = "Halving Subtract.";
break;
case "vld":
case "vld1":
case "vld2":
case "vld3":
case "vld4":
instructionInfo = "Vector Load.";
break;
case "vmax":
instructionInfo = "Maximum, Minimum.";
break;
case "vmin":
instructionInfo = "Maximum, Minimum.";
break;
case "vmla":
instructionInfo = "Multiply Accumulate (vector).";
break;
case "vmls":
instructionInfo = "Multiply Subtract (vector).";
break;
case "vmovl":
instructionInfo = "Move Long (register).";
break;
case "vmovn":
instructionInfo = "Move Narrow (register).";
break;
case "vmvn":
instructionInfo = "Move Negative (immediate).";
break;
case "vneg":
instructionInfo = "Negate.";
break;
case "vorn":
instructionInfo = "Bitwise OR NOT.";
break;
case "vorr":
instructionInfo = "Bitwise OR (register).";
break;
case "vpadal":
instructionInfo = "Pairwise Add and Accumulate Long.";
break;
case "vpadd":
instructionInfo = "Pairwise Add.";
break;
case "vpmax":
instructionInfo = "Pairwise Maximum, Pairwise Minimum.";
break;
case "vpmin":
instructionInfo = "Pairwise Maximum, Pairwise Minimum.";
break;
case "vqabs":
instructionInfo = "Absolute value, saturate.";
break;
case "vqadd":
instructionInfo = "Add, saturate.";
break;
case "vqdmlal":
instructionInfo = "Saturating Doubling Multiply Accumulate, and Multiply Subtract.";
break;
case "vqdmlsl":
instructionInfo = "Saturating Doubling Multiply Accumulate, and Multiply Subtract.";
break;
case "vqdmull":
instructionInfo = "Saturating Doubling Multiply.";
break;
case "vqdmulh":
instructionInfo = "Saturating Doubling Multiply returning High half.";
break;
case "vqmovn":
instructionInfo = "Saturating Move (register).";
break;
case "vqneg":
instructionInfo = "Negate, saturate.";
break;
case "vqrdmulh":
instructionInfo = "Saturating Doubling Multiply returning High half.";
break;
case "vqrshl":
instructionInfo = "Shift Left, Round, saturate (by signed variable).";
break;
case "vqrshrn":
instructionInfo = "Shift Right, Round, saturate (by immediate).";
break;
case "vqshl":
instructionInfo = "Shift Left, saturate (by immediate).";
break;
case "vqshrn":
instructionInfo = "Shift Right, saturate (by immediate).";
break;
case "vqsub":
instructionInfo = "Subtract, saturate.";
break;
case "vraddhn":
instructionInfo = "Add, select High half, Round.";
break;
case "vrecpe":
instructionInfo = "Reciprocal Estimate.";
break;
case "vrecps":
instructionInfo = "Reciprocal Step.";
break;
case "vrev":
case "vrev16":
case "vrev32":
case "vrev64":
instructionInfo = "Reverse elements.";
break;
case "vrhadd":
instructionInfo = "Halving Add, Round.";
break;
case "vrshr":
instructionInfo = "Shift Right and Round (by immediate).";
break;
case "vrshrn":
instructionInfo = "Shift Right, Round, Narrow (by immediate).";
break;
case "vrsqrte":
instructionInfo = "Reciprocal Square Root Estimate.";
break;
case "vrsqrts":
instructionInfo = "Reciprocal Square Root Step.";
break;
case "vrsra":
instructionInfo = "Shift Right, Round, and Accumulate (by immediate).";
break;
case "vrsubhn":
instructionInfo = "Subtract, select High half, Round.";
break;
case "vshl":
instructionInfo = "Shift Left (by immediate).";
break;
case "vshr":
instructionInfo = "Shift Right (by immediate).";
break;
case "vshrn":
instructionInfo = "Shift Right, Narrow (by immediate).";
break;
case "vsli":
instructionInfo = "Shift Left and Insert.";
break;
case "vsra":
instructionInfo = "Shift Right, Accumulate (by immediate).";
break;
case "vsri":
instructionInfo = "Shift Right and Insert.";
break;
case "vst":
case "vst1":
case "vst2":
case "vst3":
case "vst4":
instructionInfo = "Vector Store.";
break;
case "vsubhn":
instructionInfo = "Subtract, select High half.";
break;
case "vswp":
instructionInfo = "Swap vectors.";
break;
case "vtbl":
instructionInfo = "Vector table look-up.";
break;
case "vtbx":
instructionInfo = "Vector table look-up.";
break;
case "vtrn":
instructionInfo = "Vector transpose.";
break;
case "vtst":
instructionInfo = "Test bits.";
break;
case "vuzp":
instructionInfo = "Vector de-interleave.";
break;
case "vzip":
instructionInfo = "Vector interleave.";
break;
case "vldm":
case "vldmia":
case "vldmdb":
instructionInfo = "Load multiple.";
break;
case "vldr":
instructionInfo = "Load (see also VLDR pseudo-instruction).";
break;
case "vmrs":
instructionInfo = "Transfer from NEON and VFP system register to ARM register.";
break;
case "vmsr":
instructionInfo = "Transfer from ARM register to NEON and VFP system register.";
break;
case "vpop":
instructionInfo = "Pop VFP or NEON registers from full-descending stack.";
break;
case "vpush":
instructionInfo = "Push VFP or NEON registers to full-descending stack.";
break;
case "vstm":
case "vstmia":
instructionInfo = "Store multiple.";
break;
case "vstr":
instructionInfo = "Store.";
break;
case "vcmp":
instructionInfo = "Compare.";
break;
case "vcmpe":
instructionInfo = "Compare.";
break;
case "vcvtb":
instructionInfo = "Convert between half-precision and single-precision floating-point.";
break;
case "vcvtt":
instructionInfo = "Convert between half-precision and single-precision floating-point.";
break;
case "vdiv":
instructionInfo = "Divide.";
break;
case "vfnma":
instructionInfo = "Fused multiply accumulate with negation, Fused multiply subtract with negation.";
break;
case "vfnms":
instructionInfo = "Fused multiply accumulate with negation, Fused multiply subtract with negation.";
break;
case "vnmla":
instructionInfo = "Negated multiply accumulate.";
break;
case "vnmls":
instructionInfo = "Negated multiply subtract.";
break;
case "vnmul":
instructionInfo = "Negated multiply.";
break;
case "vsqrt":
instructionInfo = "Square Root.";
break;
case "push":
instructionInfo = "Push registers onto a full descending stack.";
break;
case "pop":
instructionInfo = "Pop registers of a full descending stack.";
break;
case "pkhbt":
case "pkhtb":
instructionInfo = "Halfword Packing instructions. Combine a halfword from one register with a halfword from another register.";
break;
default:
instructionInfo = string.Empty;
returnValue = false;
break;
}
return returnValue;
}
}
}
}