Singularity/Library/PackageCache/com.unity.burst@1.8.4/Editor/BurstDisassembler.Core.x86....
2024-05-06 11:45:45 -07:00

6095 lines
499 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

namespace Unity.Burst.Editor
{
internal partial class BurstDisassembler
{
/// <summary>
/// Instruction information provider for x86-64.
/// </summary>
internal class X86AsmInstructionInfo
{
internal static bool GetX86InstructionInfo(string instructionName, out string instructionInfo)
{
var returnValue = true;
switch (instructionName)
{
case "aaa":
instructionInfo = "Adjusts the sum of two unpacked BCD (Binary-Coded Decimal) values to create an unpacked BCD result." +
" The AL register is the implied source and destination operand for this instruction. " +
"The AAA instruction is only useful when it follows an ADD instruction that adds " +
"(binary addition) two unpacked BCD values and stores a byte result in the AL register. " +
"The AAA instruction then adjusts the contents of the AL register to contain " +
"the correct 1-digit unpacked BCD result.";
break;
case "aad":
instructionInfo = "Adjusts two unpacked BCD (Binary-Coded Decimal) digits (the least-significant digit in the AL register " +
"and the most-significant digit in the AH register) so that a division operation " +
"performed on the result will yield a correct unpacked BCD value. The AAD instruction " +
"is only useful when it precedes a DIV instruction that divides (binary division) " +
"the adjusted value in the AX register by an unpacked BCD value.";
break;
case "aam":
instructionInfo = "Adjusts the result of the multiplication of two unpacked BCD (Binary-Coded Decimal) values to create " +
"a pair of unpacked (base 10) BCD values. The AX register is the implied source " +
"and destination operand for this instruction. The AAM instruction is only useful " +
"when it follows an MUL instruction that multiplies (binary multiplication) " +
"two unpacked BCD values and stores a word result in the AX register. " +
"The AAM instruction then adjusts the contents of the AX register to contain " +
"the correct 2-digit unpacked (base 10) BCD result.";
break;
case "aas":
instructionInfo = "Adjusts the result of the subtraction of two unpacked BCD (Binary-Coded Decimal) values to create a " +
"unpacked BCD result. The AL register is the implied source and destination " +
"operand for this instruction. The AAS instruction is only useful when it " +
"follows a SUB instruction that subtracts (binary subtraction) one unpacked " +
"BCD value from another and stores a byte result in the AL register. " +
"The AAA instruction then adjusts the contents of the AL register to contain " +
"the correct 1-digit unpacked BCD result.";
break;
case "adc":
instructionInfo = "Adds the destination operand (first operand), the source operand (second operand), " +
"and the carry (CF) flag and stores the result in the destination operand. " +
"The destination operand can be a register or a memory location; the source " +
"operand can be an immediate, a register, or a memory location. " +
"(However, two memory operands cannot be used in one instruction.) " +
"The state of the CF flag represents a carry from a previous addition. " +
"When an immediate value is used as an operand, it is sign-extended to the " +
"length of the destination operand format.";
break;
case "adcx":
instructionInfo = "Performs an unsigned addition of the destination operand (first operand), " +
"the source operand (second operand) and the carry-flag (CF) and stores the " +
"result in the destination operand. The destination operand is a " +
"general-purpose register, whereas the source operand can be a general-purpose " +
"register or memory location. The state of CF can represent a carry from a " +
"previous addition. The instruction sets the CF flag with the carry generated " +
"by the unsigned addition of the operands.";
break;
case "add":
instructionInfo = "Adds the destination operand (first operand) and the source operand " +
"(second operand) and then stores the result in the destination operand. " +
"The destination operand can be a register or a memory location; the source " +
"operand can be an immediate, a register, or a memory location. " +
"(However, two memory operands cannot be used in one instruction.) When an " +
"immediate value is used as an operand, it is sign-extended to the length of " +
"the destination operand format.";
break;
case "addpd":
case "vaddpd":
instructionInfo = "Add two, four or eight packed double-precision floating-point values from the " +
"first source operand to the second source operand, and stores the " +
"packed double-precision floating-point results in the destination operand.";
break;
case "addps":
case "vaddps":
instructionInfo = "Add four, eight or sixteen packed single-precision floating-point values " +
"from the first source operand with the second source operand, and stores the " +
"packed single-precision floating-point results in the destination operand.";
break;
case "addsd":
case "vaddsd":
instructionInfo = "Adds the low double-precision floating-point values from the second source " +
"operand and the first source operand and stores the double-precision " +
"floating-point result in the destination operand.";
break;
case "addss":
case "vaddss":
instructionInfo = "Adds the low single-precision floating-point values from the second source " +
"operand and the first source operand, and stores the double-precision " +
"floating-point result in the destination operand.";
break;
case "addsubpd":
case "vaddsubpd":
instructionInfo = "Adds odd-numbered double-precision floating-point values of the first source " +
"operand (second operand) with the corresponding double-precision floating-point " +
"values from the second source operand (third operand); stores the result in " +
"the odd-numbered values of the destination operand (first operand). " +
"Subtracts the even-numbered double-precision floating-point values from the " +
"second source operand from the corresponding double-precision floating values " +
"in the first source operand; stores the result into the even-numbered values " +
"of the destination operand.";
break;
case "addsubps":
case "vaddsubps":
instructionInfo = "Adds odd-numbered single-precision floating-point values of the first source " +
"operand (second operand) with the corresponding single-precision floating-point " +
"values from the second source operand (third operand); stores the result in " +
"the odd-numbered values of the destination operand (first operand). " +
"Subtracts the even-numbered single-precision floating-point values from the " +
"second source operand from the corresponding single-precision floating " +
"values in the first source operand; stores the result into the even-numbered " +
"values of the destination operand.";
break;
case "adox":
instructionInfo = "Performs an unsigned addition of the destination operand (first operand), " +
"the source operand (second operand) and the overflow-flag (OF) and stores " +
"the result in the destination operand. The destination operand is a " +
"general-purpose register, whereas the source operand can be a " +
"general-purpose register or memory location. The state of OF represents " +
"a carry from a previous addition. The instruction sets the OF flag with " +
"the carry generated by the unsigned addition of the operands.";
break;
case "aesdec":
case "vaesdec":
instructionInfo = "This instruction performs a single round of the AES decryption flow using " +
"the Equivalent Inverse Cipher, with the round key from the second source " +
"operand, operating on a 128-bit data (state) from the first source operand, " +
"and store the result in the destination operand.";
break;
case "aesdeclast":
case "vaesdeclast":
instructionInfo = "This instruction performs the last round of the AES decryption flow using " +
"the Equivalent Inverse Cipher, with the round key from the second source " +
"operand, operating on a 128-bit data (state) from the first source operand, " +
"and store the result in the destination operand.";
break;
case "aesenc":
case "vaesenc":
instructionInfo = "This instruction performs a single round of an AES encryption flow using a " +
"round key from the second source operand, operating on 128-bit data (state) " +
"from the first source operand, and store the result in the destination operand.";
break;
case "aesenclast":
case "vaesenclast":
instructionInfo = "This instruction performs the last round of an AES encryption flow using a " +
"round key from the second source operand, operating on 128-bit data (state) " +
"from the first source operand, and store the result in the destination operand.";
break;
case "aesimc":
case "vaesimc":
instructionInfo = "Perform the InvMixColumns transformation on the source operand and store " +
"the result in the destination operand. The destination operand is an XMM register. " +
"The source operand can be an XMM register or a 128-bit memory location.";
break;
case "aeskeygenassist":
case "vaeskeygenassist":
instructionInfo = "Assist in expanding the AES cipher key, by computing steps towards generating " +
"a round key for encryption, using 128-bit data specified in the source operand " +
"and an 8-bit round constant specified as an immediate, store the result in the " +
"destination operand.";
break;
case "and":
instructionInfo = "Performs a bitwise AND operation on the destination (first) and source " +
"(second) operands and stores the result in the destination operand location. " +
"The source operand can be an immediate, a register, or a memory location; " +
"the destination operand can be a register or a memory location. " +
"(However, two memory operands cannot be used in one instruction.) " +
"Each bit of the result is set to 1 if both corresponding bits of the first and " +
"second operands are 1; otherwise, it is set to 0.";
break;
case "andn":
instructionInfo = "Performs a bitwise logical AND of inverted second operand " +
"(the first source operand) with the third operand (the";
break;
case "andnpd":
case "vandnpd":
instructionInfo = "Performs a bitwise logical AND NOT of the two, four or eight packed " +
"double-precision floating-point values from the first source operand and " +
"the second source operand, and stores the result in the destination operand.";
break;
case "andnps":
case "vandnps":
instructionInfo = "Performs a bitwise logical AND NOT of the four, eight or sixteen packed " +
"single-precision floating-point values from the first source operand and " +
"the second source operand, and stores the result in the destination operand.";
break;
case "andpd":
case "vandpd":
instructionInfo = "Performs a bitwise logical AND of the two, four or eight packed double-precision " +
"floating-point values from the first source operand and the second source " +
"operand, and stores the result in the destination operand.";
break;
case "andps":
case "vandps":
instructionInfo = "Performs a bitwise logical AND of the four, eight or sixteen packed " +
"single-precision floating-point values from the first source operand and " +
"the second source operand, and stores the result in the destination operand.";
break;
case "arpl":
instructionInfo = "Compares the RPL (Requester Privilege Level) fields of two segment selectors. The first operand " +
"(the destination operand) contains one segment selector and the second operand " +
"(source operand) contains the other. If the RPL field of the destination operand is less than the " +
"RPL field of the source operand, the ZF flag is set and the RPL field of the " +
"destination operand is increased to match that of the source operand. " +
"Otherwise, the ZF flag is cleared and no change is made to the destination " +
"operand. (The destination operand can be a word register or a memory location; " +
"the source operand must be a word register.)";
break;
case "bextr":
instructionInfo = "Extracts contiguous bits from the first source operand (the second operand) " +
"using an index value and length value specified in the second source operand " +
"(the third operand). Bit 7:0 of the second source operand specifies the " +
"starting bit position of bit extraction. Bit 15:8 of " +
"the second source operand specifies the maximum number of bits (LENGTH) " +
"beginning at the START position to extract. Only bit positions up to " +
"(OperandSize -1) of the first source operand are extracted. The extracted " +
"bits are written to the destination register, starting from the least " +
"significant bit. All higher order bits in the destination operand " +
"(starting at bit position LENGTH) are zeroed. The destination register is " +
"cleared if no bits are extracted.";
break;
case "blendpd":
case "vblendpd":
instructionInfo = "Double-precision floating-point values from the second source operand " +
"(third operand) are conditionally merged with values from the first source " +
"operand (second operand) and written to the destination operand (first operand). " +
"The immediate bits [3:0] determine whether the corresponding double-precision " +
"floating-point value in the destination is copied from the second source or " +
"first source. If a bit in the mask, corresponding to a word, is " +
"\"1\", then the double-precision floating-point value in " +
"the second source operand is copied, else the value in the first source operand is copied.";
break;
case "blendps":
case "vblendps":
instructionInfo = "Packed single-precision floating-point values from the second source operand " +
"(third operand) are conditionally merged with values from the first source " +
"operand (second operand) and written to the destination operand (first operand). " +
"The immediate bits [7:0] determine whether the corresponding single precision " +
"floating-point value in the destination is copied from the second source or " +
"first source. If a bit in the mask, corresponding to a word, is \"1\", " +
"then the single-precision floating-point value in the second source operand " +
"is copied, else the value in the first source operand is copied.";
break;
case "blendvpd":
case "vblendvpd":
instructionInfo = "Conditionally copy each quadword data element of double-precision " +
"floating-point value from the second source operand and the first source " +
"operand depending on mask bits defined in the mask register operand. " +
"The mask bits are the most significant bit in each quadword element of the mask register.";
break;
case "blendvps":
case "vblendvps":
instructionInfo = "Conditionally copy each dword data element of single-precision floating-point " +
"value from the second source operand and the first source operand depending " +
"on mask bits defined in the mask register operand. The mask bits are the most " +
"significant bit in each dword element of the mask register.";
break;
case "blsi":
instructionInfo = "Extracts the lowest set bit from the source operand and set the corresponding " +
"bit in the destination register. All other bits in the destination operand " +
"are zeroed. If no bits are set in the source operand, BLSI sets all the bits " +
"in the destination to 0 and sets ZF and CF.";
break;
case "blsmsk":
instructionInfo = "Sets all the lower bits of the destination operand to \"1\" up to " +
"and including lowest set bit (=1) in the source operand. If source operand is " +
"zero, BLSMSK sets all bits of the destination operand to 1 and also sets CF to 1.";
break;
case "blsr":
instructionInfo = "Copies all bits from the source operand to the destination operand and resets " +
"(=0) the bit position in the destination operand that corresponds to the lowest " +
"set bit of the source operand. If the source operand is zero BLSR sets CF.";
break;
case "bndcl":
instructionInfo = "Compare the address in the second operand with the lower bound in bnd. " +
"The second operand can be either a register or memory operand. If the address " +
"is lower than the lower bound in bnd.LB, it will set BNDSTATUS to 01H and " +
"signal a #BR exception.";
break;
case "bndcu":
case "bndcn":
instructionInfo = "Compare the address in the second operand with the upper bound in bnd. " +
"The second operand can be either a register or a memory operand. If the " +
"address is higher than the upper bound in bnd.UB, it will set BNDSTATUS to " +
"01H and signal a #BR exception.";
break;
case "bndldx":
instructionInfo = "BNDLDX uses the linear address constructed from the base register and " +
"displacement of the SIB-addressing form of the memory operand (mib) to " +
"perform address translation to access a bound table entry and conditionally " +
"load the bounds in the BTE to the destination. The destination register is " +
"updated with the bounds in the BTE, if the content of the index register of " +
"mib matches the pointer value stored in the BTE.";
break;
case "bndmk":
instructionInfo = "Makes bounds from the second operand and stores the lower and upper bounds in " +
"the bound register bnd. The second operand must be a memory operand. " +
"The content of the base register from the memory operand is stored in the " +
"lower bound bnd.LB. The 1\'s complement of the effective address of m32/m64 " +
"is stored in the upper bound b.UB. Computation of m32/m64 has identical behavior to LEA.";
break;
case "bndmov":
instructionInfo = "BNDMOV moves a pair of lower and upper bound values from the source operand " +
"(the second operand) to the destination (the first operand). " +
"Each operation is 128-bit move. The exceptions are same as the MOV instruction.";
break;
case "bndstx":
instructionInfo = "BNDSTX uses the linear address constructed from the displacement and base " +
"register of the SIB-addressing form of the memory operand (mib) to perform " +
"address translation to store to a bound table entry. The bounds in the source " +
"operand bnd are written to the lower and upper bounds in the BTE. " +
"The content of the index register of mib is written to the pointer value field in the BTE.";
break;
case "bound":
instructionInfo = "BOUND determines if the first operand (array index) is within the bounds of " +
"an array specified the second operand (bounds operand). The array index is " +
"a signed integer located in a register. The bounds operand is a memory " +
"location that contains a pair of signed doubleword-integers " +
"(when the operand-size attribute is 32) or a pair of signed word-integers " +
"(when the operand-size attribute is 16). If the index is not within bounds, " +
"a BOUND range exceeded exception " +
"(#BR) is signaled. When this exception is generated, the saved return " +
"instruction pointer points to the BOUND instruction.";
break;
case "bsf":
instructionInfo = "Searches the source operand (second operand) for the least significant set bit " +
"(1 bit). If a least significant 1 bit is found, its bit index is stored in " +
"the destination operand (first operand). The source operand can be a register " +
"or a memory location; the destination operand is a register. The bit index " +
"is an unsigned offset from bit 0 of the source operand. If the content of the " +
"source operand is 0, the content of the destination operand is undefined.";
break;
case "bsr":
instructionInfo = "Searches the source operand (second operand) for the most significant set " +
"bit (1 bit). If a most significant 1 bit is found, its bit index is stored " +
"in the destination operand (first operand). The source operand can be a " +
"register or a memory location; the destination operand is a register. The " +
"bit index is an unsigned offset from bit 0 of the source operand. If the " +
"content source operand is 0, the content of the destination operand is undefined.";
break;
case "bswap":
instructionInfo = "Reverses the byte order of a 32-bit or 64-bit (destination) register. " +
"This instruction is provided for converting little-endian values to big-endian " +
"format and vice versa. To swap bytes in a word value (16-bit register), " +
"use the XCHG instruction. When the BSWAP instruction references a 16-bit " +
"register, the result is undefined.";
break;
case "bt":
instructionInfo = "Selects the bit in a bit string (specified with the first operand, " +
"called the bit base) at the bit-position designated by the bit offset " +
"(specified by the second operand) and stores the value of the bit in the " +
"CF flag. The bit base operand can be a register or a memory location; " +
"the bit offset operand can be a register or an immediate value:";
break;
case "btc":
instructionInfo = "Selects the bit in a bit string (specified with the first operand, called " +
"the bit base) at the bit-position designated by the bit offset operand " +
"(second operand), stores the value of the bit in the CF flag, and complements " +
"the selected bit in the bit string. The bit base operand can be a register " +
"or a memory location; the bit offset operand can be a register or an immediate value:";
break;
case "btr":
instructionInfo = "Selects the bit in a bit string (specified with the first operand, " +
"called the bit base) at the bit-position designated by the bit offset operand " +
"(second operand), stores the value of the bit in the CF flag, and clears the " +
"selected bit in the bit string to 0. The bit base operand can be a register " +
"or a memory location; the bit offset operand can be a register or an immediate value:";
break;
case "bts":
instructionInfo = "Selects the bit in a bit string (specified with the first operand, " +
"called the bit base) at the bit-position designated by the bit offset " +
"operand (second operand), stores the value of the bit in the CF flag, and " +
"sets the selected bit in the bit string to 1. The bit base operand can be " +
"a register or a memory location; the bit offset operand can be a register " +
"or an immediate value:";
break;
case "bzhi":
instructionInfo = "BZHI copies the bits of the first source operand (the second operand) into " +
"the destination operand (the first operand) and clears the higher bits in " +
"the destination according to the INDEX value specified by the second source " +
"operand (the third operand). The INDEX is specified by bits 7:0 of the " +
"second source operand. The INDEX value is saturated at the value of " +
"OperandSize -1. CF is set, if the number contained in the 8 low bits of " +
"the third operand is greater than OperandSize -1.";
break;
case "call":
instructionInfo = "Saves procedure linking information on the stack and branches to the called " +
"procedure specified using the target operand. The target operand specifies " +
"the address of the first instruction in the called procedure. The operand can " +
"be an immediate value, a general-purpose register, or a memory location.";
break;
case "cbw":
case "cwde":
case "cdqe":
instructionInfo = "Double the size of the source operand by means of sign extension. The CBW " +
"(convert byte to word) instruction copies the sign (bit 7) in the source " +
"operand into every bit in the AH register. The CWDE (convert word to " +
"double-word) instruction copies the sign (bit 15) of the word in the AX " +
"register into the high 16 bits of the EAX register.";
break;
case "cwd":
case "cdq":
case "cqo":
instructionInfo = "Doubles the size of the operand in register AX, EAX, or RAX " +
"(depending on the operand size) by means of sign extension and stores " +
"the result in registers DX:AX, EDX:EAX, or RDX:RAX, respectively. " +
"The CWD instruction copies the sign (bit 15) of the value in the AX " +
"register into every bit position in the DX register. The CDQ instruction " +
"copies the sign (bit 31) of the value in the EAX register into every bit " +
"position in the EDX register.";
break;
case "clac":
instructionInfo = "Clears the AC flag bit in EFLAGS register. This disables any alignment " +
"checking of user-mode data accesses. If the SMAP bit is set in the CR4 " +
"register, this disallows explicit supervisor-mode data accesses to user-mode pages.";
break;
case "clc":
instructionInfo = "Clears the CF flag in the EFLAGS register. Operation is the same in all modes.";
break;
case "cld":
instructionInfo = "Clears the DF flag in the EFLAGS register. When the DF flag is set to 0, " +
"string operations increment the index registers (ESI and/or EDI). " +
"Operation is the same in all modes.";
break;
case "cldemote":
instructionInfo = "Hints to hardware that the cache line that contains the linear address " +
"specified with the memory operand should be moved (\"demoted\") " +
"from the cache(s) closest to the processor core to a level more distant " +
"from the processor core. This may accelerate subsequent accesses to the " +
"line by other cores in the same coherence domain, especially if the line " +
"was written by the core that demotes the line. Moving the line in such a " +
"manner is a performance optimization, i.e., it is a hint which does not " +
"modify architectural state. Hardware may choose which level in the cache " +
"hierarchy to retain the line (e.g., L3 in typical server designs). " +
"The source operand is a byte memory location.";
break;
case "clflush":
instructionInfo = "Invalidates from every level of the cache hierarchy in the cache " +
"coherence domain the cache line that contains the linear address " +
"specified with the memory operand. If that cache line contains " +
"modified data at any level of the cache hierarchy, that data is " +
"written back to memory. The source operand is a byte memory location.";
break;
case "clflushopt":
instructionInfo = "Invalidates from every level of the cache hierarchy in the cache " +
"coherence domain the cache line that contains the linear address " +
"specified with the memory operand. If that cache line contains " +
"modified data at any level of the cache hierarchy, that data is " +
"written back to memory. The source operand is a byte memory location.";
break;
case "cli":
instructionInfo = "In most cases, CLI clears the IF flag in the EFLAGS register and no other " +
"flags are affected. Clearing the IF flag causes the processor to ignore " +
"maskable external interrupts. The IF flag and the CLI and STI instruction " +
"have no effect on the generation of exceptions and NMI interrupts.";
break;
case "clts":
instructionInfo = "Clears the task-switched (TS) flag in the CR0 register. This instruction " +
"is intended for use in operating-system procedures. It is a privileged " +
"instruction that can only be executed at a CPL of 0. It is allowed to be " +
"executed in real-address mode to allow initialization for protected mode.";
break;
case "clwb":
instructionInfo = "Writes back to memory the cache line (if modified) that contains the " +
"linear address specified with the memory operand from any level of the " +
"cache hierarchy in the cache coherence domain. The line may be retained " +
"in the cache hierarchy in non-modified state.";
break;
case "cmc":
instructionInfo = "Complements the CF flag in the EFLAGS register. CMC operation is the same " +
"in non-64-bit modes and 64-bit mode.";
break;
case "cmova":
case "cmovae":
case "cmovb":
case "cmovbe":
case "cmovc":
case "cmove":
case "cmovg":
case "cmovge":
case "cmovl":
case "cmovle":
case "cmovna":
case "cmovnae":
case "cmovnb":
case "cmovnbe":
case "cmovnc":
case "cmovne":
case "cmovng":
case "cmovnge":
case "cmovnl":
case "cmovnle":
case "cmovno":
case "cmovnp":
case "cmovns":
case "cmovnz":
case "cmovo":
case "cmovp":
case "cmovpe":
case "cmovpo":
case "cmovs":
case "cmovz":
instructionInfo = "The CMOVcc instructions check the state of one or more of the " +
"status flags in the EFLAGS register (CF, OF, PF, SF, and ZF) and perform " +
"a move operation if the flags are in a specified state (or condition). " +
"A condition code (cc) is associated with each instruction to " +
"indicate the condition being tested for. If the condition is not satisfied, " +
"a move is not performed and execution continues with the instruction " +
"following the CMOVcc instruction.";
break;
case "cmp":
instructionInfo = "Compares the first source operand with the second source operand and " +
"sets the status flags in the EFLAGS register according to the results. " +
"The comparison is performed by subtracting the second operand from the " +
"first operand and then setting the status flags in the same manner as " +
"the SUB instruction. When an immediate value is used as an operand, it " +
"is sign-extended to the length of the first operand.";
break;
case "cmppd":
instructionInfo = "Performs a SIMD compare of the packed double-precision floating-point " +
"values in the second source operand and the first source operand and " +
"returns the results of the comparison to the destination operand. " +
"The comparison predicate operand (immediate byte) specifies the type " +
"of comparison performed on each pair of packed values in the two source " +
"operands. Uses 3 bits for comparison predicate.";
break;
case "cmpeqpd":
instructionInfo = "Performs a SIMD compare equal of the packed double-precision floating-point " +
"values in the second source operand and the first source operand and " +
"returns the results of the comparison to the destination operand.";
break;
case "cmpltpd":
instructionInfo = "Performs a SIMD compare less than of the packed double-precision " +
"floating-point values in the second source operand and the first source " +
"operand and returns the results of the comparison to the destination operand.";
break;
case "cmplepd":
instructionInfo = "Performs a SIMD compare less or equal of the packed double-precision " +
"floating-point values in the second source operand and the first source " +
"operand and returns the results of the comparison to the destination operand.";
break;
case "cmpunordpd":
instructionInfo = "Performs a SIMD compare unordered of the packed double-precision " +
"floating-point values in the second source operand and the first source " +
"operand and returns the results of the comparison to the destination operand.";
break;
case "cmpneqpd":
instructionInfo = "Performs a SIMD compare not equal of the packed double-precision " +
"floating-point values in the second source operand and the first source " +
"operand and returns the results of the comparison to the destination operand.";
break;
case "cmpnltpd":
instructionInfo = "Performs a SIMD compare not less than of the packed double-precision " +
"floating-point values in the second source operand and the first source " +
"operand and returns the results of the comparison to the destination operand.";
break;
case "cmpnlepd":
instructionInfo = "Performs a SIMD compare not less than or equal of the packed " +
"double-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to the " +
"destination operand.";
break;
case "cmpordpd":
instructionInfo = "Performs a SIMD compare orderd of the packed double-precision " +
"floating-point values in the second source operand and the first source " +
"operand and returns the results of the comparison to the destination operand.";
break;
case "vcmppd":
instructionInfo = "Performs a SIMD compare of the packed double-precision floating-point " +
"values in the second source operand and the first source operand and " +
"returns the results of the comparison to the destination operand. " +
"The comparison predicate operand (immediate byte) specifies the type of " +
"comparison performed on each pair of packed values in the two source operands. " +
"Using 5 bits for comparison predicate.";
break;
case "vcmpeqpd":
instructionInfo = "Performs a SIMD equal (ordered, non-signaling) compare of the packed " +
"double-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to the " +
"destination operand.";
break;
case "vcmpltpd":
instructionInfo = "Performs a SIMD less-than (ordered, signaling) compare of the packed " +
"double-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to the " +
"destination operand.";
break;
case "vcmplepd":
instructionInfo = "Performs a SIMD less-than-or-equal (ordered, signaling) compare of the " +
"packed double-precision floating-point values in the second source " +
"operand and the first source operand and returns the results of the " +
"comparison to the destination operand.";
break;
case "vcmpunordpd":
instructionInfo = "Performs a SIMD unordered (non-signaling) compare of the packed " +
"double-precision floating-point values in the second source operand " +
"and the first source operand and returns the results of the comparison " +
"to the destination operand.";
break;
case "vcmpneqpd":
instructionInfo = "Performs a SIMD not-equal (unordered, non-signaling) compare of the " +
"packed double-precision floating-point values in the second source " +
"operand and the first source operand and returns the results of the " +
"comparison to the destination operand.";
break;
case "vcmpnltpd":
instructionInfo = "Performs a SIMD not-less-than (unordered, signaling) compare of the " +
"packed double-precision floating-point values in the second source " +
"operand and the first source operand and returns the results of the " +
"comparison to the destination operand.";
break;
case "vcmpnlepd":
instructionInfo = "Performs a SIMD not-less-than-or-equal (unordered, signaling) compare of " +
"the packed double-precision floating-point values in the second source " +
"operand and the first source operand and returns the results of the " +
"comparison to the destination operand.";
break;
case "vcmpordpd":
instructionInfo = "Performs a SIMD ordered (non-signaling) compare of the packed " +
"double-precision floating-point values in the second source operand " +
"and the first source operand and returns the results of the comparison " +
"to the destination operand.";
break;
case "vcmpeq_uqpd":
instructionInfo = "Performs a SIMD equal (unordered, non-signaling) compare of the packed " +
"double-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to the " +
"destination operand.";
break;
case "vcmpngepd":
instructionInfo = "Performs a SIMD not-greater-than-or-equal (unordered, signaling) compare " +
"of the packed double-precision floating-point values in the second source " +
"operand and the first source operand and returns the results of the " +
"comparison to the destination operand.";
break;
case "vcmpngtpd":
instructionInfo = "Performs a SIMD not-greater-than (unordered, signaling) compare of the " +
"packed double-precision floating-point values in the second source operand " +
"and the first source operand and returns the results of the comparison to " +
"the destination operand.";
break;
case "vcmpfalsepd":
instructionInfo = "Performs a SIMD false (ordered, non-signaling) compare of the packed " +
"double-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to " +
"the destination operand.";
break;
case "vcmpneq_oqpd":
instructionInfo = "Performs a SIMD not-equal (ordered, non-signaling) compare of the packed " +
"double-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to the " +
"destination operand.";
break;
case "vcmpgepd":
instructionInfo = "Performs a SIMD greater-than-or-equal (ordered, signaling) compare of the " +
"packed double-precision floating-point values in the second source operand " +
"and the first source operand and returns the results of the comparison to " +
"the destination operand.";
break;
case "vcmpgtpd":
instructionInfo = "Performs a SIMD greater-than (ordered, signaling) compare of the packed " +
"double-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to the " +
"destination operand.";
break;
case "vcmptruepd":
instructionInfo = "Performs a SIMD true (unordered, non-signaling) compare of the packed " +
"double-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to the " +
"destination operand.";
break;
case "vcmpeq_ospd":
instructionInfo = "Performs a SIMD equal (ordered, signaling) compare of the packed " +
"double-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to the " +
"destination operand.";
break;
case "vcmplt_oqpd":
instructionInfo = "Performs a SIMD less-than (ordered, nonsignaling) compare of the packed " +
"double-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to the " +
"destination operand.";
break;
case "vcmple_oqpd":
instructionInfo = "Performs a SIMD less-than-or-equal (ordered, nonsignaling) compare of the " +
"packed double-precision floating-point values in the second source operand " +
"and the first source operand and returns the results of the comparison to " +
"the destination operand.";
break;
case "vcmpunord_spd":
instructionInfo = "Performs a SIMD unordered (signaling) compare of the packed double-precision " +
"floating-point values in the second source operand and the first source " +
"operand and returns the results of the comparison to the destination operand.";
break;
case "vcmpneq_uspd":
instructionInfo = "Performs a SIMD not-equal (unordered, signaling) compare of the packed " +
"double-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to the " +
"destination operand.";
break;
case "vcmpnlt_uqpd":
instructionInfo = "Performs a SIMD not-less-than (unordered, nonsignaling) compare of the " +
"packed double-precision floating-point values in the second source operand " +
"and the first source operand and returns the results of the comparison to " +
"the destination operand.";
break;
case "vcmpnle_uqpd":
instructionInfo = "Performs a SIMD not-less-than-or-equal (unordered, nonsignaling) compare " +
"of the packed double-precision floating-point values in the second source " +
"operand and the first source operand and returns the results of the " +
"comparison to the destination operand.";
break;
case "vcmpord_spd":
instructionInfo = "Performs a SIMD ordered (signaling) compare of the packed double-precision " +
"floating-point values in the second source operand and the first source " +
"operand and returns the results of the comparison to the destination operand.";
break;
case "vcmpeq_uspd":
instructionInfo = "Performs a SIMD equal (unordered, signaling) compare of the packed " +
"double-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to " +
"the destination operand.";
break;
case "vcmpnge_uqpd":
instructionInfo = "Performs a SIMD not-greater-than-or-equal (unordered, non-signaling) " +
"compare of the packed double-precision floating-point values in the second " +
"source operand and the first source operand and returns the results of " +
"the comparison to the destination operand.";
break;
case "vcmpngt_uqpd":
instructionInfo = "Performs a SIMD not-greater-than (unordered, nonsignaling) compare of the " +
"packed double-precision floating-point values in the second source operand " +
"and the first source operand and returns the results of the comparison to " +
"the destination operand.";
break;
case "vcmpfalse_ospd":
instructionInfo = "Performs a SIMD false (ordered, signaling) compare of the packed " +
"double-precision floating-point values in the second source operand " +
"and the first source operand and returns the results of the comparison " +
"to the destination operand.";
break;
case "vcmpneq_ospd":
instructionInfo = "Performs a SIMD not-equal (ordered, signaling) compare of the packed " +
"double-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to " +
"the destination operand.";
break;
case "vcmpge_oqpd":
instructionInfo = "Performs a SIMD greater-than-or-equal (ordered, nonsignaling) compare of " +
"the packed double-precision floating-point values in the second source " +
"operand and the first source operand and returns the results of the " +
"comparison to the destination operand.";
break;
case "vcmpgt_oqpd":
instructionInfo = "Performs a SIMD greater-than (ordered, nonsignaling) compare of the " +
"packed double-precision floating-point values in the second source operand " +
"and the first source operand and returns the results of the comparison " +
"to the destination operand.";
break;
case "vcmptrue_usp":
instructionInfo = "Performs a SIMD true (unordered, signaling) compare of the packed " +
"double-precision floating-point values in the second source operand " +
"and the first source operand and returns the results of the comparison " +
"to the destination operand.";
break;
case "cmpps":
instructionInfo = "Performs a SIMD compare of the packed single-precision floating-point " +
"values in the second source operand and the first source operand and " +
"returns the results of the comparison to the destination operand. " +
"The comparison predicate operand (immediate byte) specifies the type " +
"of comparison performed on each of the pairs of packed values. Uses 3 " +
"bit for comparison predicate.";
break;
case "cmpeqps":
instructionInfo = "Performs a SIMD equal (ordered, non-signaling) compare of the packed " +
"single-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to " +
"the destination operand.";
break;
case "cmpltps":
instructionInfo = "Performs a SIMD less-than (ordered, signaling) compare of the packed " +
"single-precision floating-point values in the second source operand " +
"and the first source operand and returns the results of the comparison " +
"to the destination operand.";
break;
case "cmpleps":
instructionInfo = "Performs a SIMD less-than-or-equal (ordered, signaling) compare of the " +
"packed single-precision floating-point values in the second source " +
"operand and the first source operand and returns the results of the " +
"comparison to the destination operand.";
break;
case "cmpunordps":
instructionInfo = "Performs a SIMD unordered (non-signaling) compare of the packed " +
"single-precision floating-point values in the second source operand " +
"and the first source operand and returns the results of the comparison " +
"to the destination operand.";
break;
case "cmpneqps":
instructionInfo = "Performs a SIMD not-equal (unordered, non-signaling) compare of the " +
"packed single-precision floating-point values in the second source " +
"operand and the first source operand and returns the results of the " +
"comparison to the destination operand.";
break;
case "cmpnltps":
instructionInfo = "Performs a SIMD not-less-than (unordered, signaling) compare of the " +
"packed single-precision floating-point values in the second source " +
"operand and the first source operand and returns the results of the " +
"comparison to the destination operand.";
break;
case "cmpnleps":
instructionInfo = "Performs a SIMD not-less-than-or-equal (unordered, signaling) compare " +
"of the packed single-precision floating-point values in the second " +
"source operand and the first source operand and returns the results of " +
"the comparison to the destination operand.";
break;
case "cmpordps":
instructionInfo = "Performs a SIMD ordered (non-signaling) compare of the packed " +
"single-precision floating-point values in the second source operand " +
"and the first source operand and returns the results of the comparison " +
"to the destination operand.";
break;
case "vcmpps":
instructionInfo = "Performs a SIMD compare of the packed single-precision floating-point " +
"values in the second source operand and the first source operand and " +
"returns the results of the comparison to the destination operand. The " +
"comparison predicate operand (immediate byte) specifies the type of " +
"comparison performed on each of the pairs of packed values. Uses 5 bits " +
"for comparison predicate.";
break;
case "vcmpeqps":
instructionInfo = "Performs a SIMD equal (ordered, non-signaling) compare of the packed " +
"single-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to " +
"the destination operand.";
break;
case "vcmpltps":
instructionInfo = "Performs a SIMD less-than (ordered, signaling) compare of the packed " +
"single-precision floating-point values in the second source operand " +
"and the first source operand and returns the results of the comparison " +
"to the destination operand.";
break;
case "vcmpleps":
instructionInfo = "Performs a SIMD less-than-or-equal (ordered, signaling) compare of the " +
"packed single-precision floating-point values in the second source " +
"operand and the first source operand and returns the results of the " +
"comparison to the destination operand.";
break;
case "vcmpunordps":
instructionInfo = "Performs a SIMD unordered (non-signaling) compare of the packed " +
"single-precision floating-point values in the second source operand " +
"and the first source operand and returns the results of the comparison " +
"to the destination operand.";
break;
case "vcmpneqps":
instructionInfo = "Performs a SIMD not-equal (unordered, non-signaling) compare of the " +
"packed single-precision floating-point values in the second source " +
"operand and the first source operand and returns the results of the " +
"comparison to the destination operand.";
break;
case "vcmpnltps":
instructionInfo = "Performs a SIMD not-less-than (unordered, signaling) compare of the " +
"packed single-precision floating-point values in the second source " +
"operand and the first source operand and returns the results of the " +
"comparison to the destination operand.";
break;
case "vcmpnleps":
instructionInfo = "Performs a SIMD not-less-than-or-equal (unordered, signaling) compare " +
"of the packed single-precision floating-point values in the second " +
"source operand and the first source operand and returns the results of " +
"the comparison to the destination operand.";
break;
case "vcmpordps":
instructionInfo = "Performs a SIMD ordered (non-signaling) compare of the packed " +
"single-precision floating-point values in the second source operand " +
"and the first source operand and returns the results of the comparison " +
"to the destination operand.";
break;
case "vcmpeq_uqps":
instructionInfo = "Performs a SIMD equal (unordered, non-signaling) compare of the packed " +
"single-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to " +
"the destination operand.";
break;
case "vcmpngeps":
instructionInfo = "Performs a SIMD not-greater-than-or-equal (unordered, signaling) compare " +
"of the packed single-precision floating-point values in the second source " +
"operand and the first source operand and returns the results of the " +
"comparison to the destination operand.";
break;
case "vcmpngtps":
instructionInfo = "Performs a SIMD not-greater-than (unordered, signaling) compare of the " +
"packed single-precision floating-point values in the second source " +
"operand and the first source operand and returns the results of the " +
"comparison to the destination operand.";
break;
case "vcmpfalseps":
instructionInfo = "Performs a SIMD false (ordered, non-signaling) compare of the packed " +
"single-precision floating-point values in the second source operand " +
"and the first source operand and returns the results of the comparison " +
"to the destination operand.";
break;
case "vcmpneq_oqps":
instructionInfo = "Performs a SIMD not-equal (ordered, non-signaling) compare of the packed " +
"single-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to the " +
"destination operand.";
break;
case "vcmpgeps":
instructionInfo = "Performs a SIMD greater-than-or-equal (ordered, signaling) compare of " +
"the packed single-precision floating-point values in the second source " +
"operand and the first source operand and returns the results of the " +
"comparison to the destination operand.";
break;
case "vcmpgtps":
instructionInfo = "Performs a SIMD greater-than (ordered, signaling) compare of the packed " +
"single-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to " +
"the destination operand.";
break;
case "vcmptrueps":
instructionInfo = "Performs a SIMD true (unordered, non-signaling) compare of the packed " +
"single-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to " +
"the destination operand.";
break;
case "vcmpeq_osps":
instructionInfo = "Performs a SIMD equal (ordered, signaling) compare of the packed " +
"single-precision floating-point values in the second source operand " +
"and the first source operand and returns the results of the comparison " +
"to the destination operand.";
break;
case "vcmplt_oqps":
instructionInfo = "Performs a SIMD less-than (ordered, nonsignaling) compare of the packed " +
"single-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to " +
"the destination operand.";
break;
case "vcmple_oqps":
instructionInfo = "Performs a SIMD less-than-or-equal (ordered, nonsignaling) compare of " +
"the packed single-precision floating-point values in the second source " +
"operand and the first source operand and returns the results of the " +
"comparison to the destination operand.";
break;
case "vcmpunord_sps":
instructionInfo = "Performs a SIMD unordered (signaling) compare of the packed " +
"single-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to " +
"the destination operand.";
break;
case "vcmpneq_usps":
instructionInfo = "Performs a SIMD not-equal (unordered, signaling) compare of the packed " +
"single-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to " +
"the destination operand.";
break;
case "vcmpnlt_uqps":
instructionInfo = "Performs a SIMD not-less-than (unordered, nonsignaling) compare of the " +
"packed single-precision floating-point values in the second source " +
"operand and the first source operand and returns the results of the " +
"comparison to the destination operand.";
break;
case "vcmpnle_uqps":
instructionInfo = "Performs a SIMD not-less-than-or-equal (unordered, nonsignaling) compare " +
"of the packed single-precision floating-point values in the second source " +
"operand and the first source operand and returns the results of the " +
"comparison to the destination operand.";
break;
case "vcmpord_sps":
instructionInfo = "Performs a SIMD ordered (signaling) compare of the packed single-precision " +
"floating-point values in the second source operand and the first source " +
"operand and returns the results of the comparison to the destination operand.";
break;
case "vcmpeq_usps":
instructionInfo = "Performs a SIMD equal (unordered, signaling) compare of the packed " +
"single-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to the " +
"destination operand.";
break;
case "vcmpnge_uqps":
instructionInfo = "Performs a SIMD not-greater-than-or-equal (unordered, non-signaling) " +
"compare of the packed single-precision floating-point values in the " +
"second source operand and the first source operand and returns the " +
"results of the comparison to the destination operand.";
break;
case "vcmpngt_uqps":
instructionInfo = "Performs a SIMD not-greater-than (unordered, nonsignaling) compare of the " +
"packed single-precision floating-point values in the second source operand " +
"and the first source operand and returns the results of the comparison to " +
"the destination operand.";
break;
case "vcmpfalse_osps":
instructionInfo = "Performs a SIMD false (ordered, signaling) compare of the packed " +
"single-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to " +
"the destination operand.";
break;
case "vcmpneq_osps":
instructionInfo = "Performs a SIMD not-equal (ordered, signaling) compare of the packed " +
"single-precision floating-point values in the second source operand " +
"and the first source operand and returns the results of the comparison " +
"to the destination operand.";
break;
case "vcmpge_oqps":
instructionInfo = "Performs a SIMD greater-than-or-equal (ordered, nonsignaling) compare of " +
"the packed single-precision floating-point values in the second source " +
"operand and the first source operand and returns the results of the " +
"comparison to the destination operand.";
break;
case "vcmpgt_oqps":
instructionInfo = "Performs a SIMD greater-than (ordered, nonsignaling) compare of the packed " +
"single-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to the " +
"destination operand.";
break;
case "vcmptrue_uss":
instructionInfo = "Performs a SIMD true (unordered, signaling) compare of the packed " +
"single-precision floating-point values in the second source operand and " +
"the first source operand and returns the results of the comparison to the " +
"destination operand.";
break;
case "cmps":
case "cmpsb":
case "cmpsw":
case "cmpsd":
case "vcmpsd":
case "cmpsq":
instructionInfo = "Compares the byte, word, doubleword, or quadword specified with the first " +
"source operand with the byte, word, doubleword, or quadword specified with " +
"the second source operand and sets the status flags in the EFLAGS register " +
"according to the results.";
break;
case "vcmpngesd":
instructionInfo = "Compares the low double-precision floating-point values in the second " +
"source operand and the first source operand, using not greater than or " +
"equal, and returns the results in of the comparison to the destination " +
"operand. The comparison predicate operand (immediate operand) specifies " +
"the type of comparison performed.";
break;
case "vcmpngtsd":
instructionInfo = "Compares the low double-precision floating-point values in the second " +
"source operand and the first source operand, using not greater than, and " +
"returns the results in of the comparison to the destination operand. " +
"The comparison predicate operand (immediate operand) specifies the type of " +
"comparison performed.";
break;
case "vcmpfalsesd":
instructionInfo = "Compares the low double-precision floating-point values in the second " +
"source operand and the first source operand, using false, and returns " +
"the results in of the comparison to the destination operand. The comparison " +
"predicate operand (immediate operand) specifies the type of comparison performed.";
break;
case "vcmptruesd":
instructionInfo = "Compares the low double-precision floating-point values in the second " +
"source operand and the first source operand, using true, and returns the " +
"results in of the comparison to the destination operand. The comparison " +
"predicate operand (immediate operand) specifies the type of comparison performed.";
break;
case "vcmpgtsd":
instructionInfo = "Compares the low double-precision floating-point values in the second " +
"source operand and the first source operand, using greater than, and returns " +
"the results in of the comparison to the destination operand. The comparison " +
"predicate operand (immediate operand) specifies the type of comparison performed.";
break;
case "vcmpgesd":
instructionInfo = "Compares the low double-precision floating-point values in the second " +
"source operand and the first source operand, using greater than or equal, " +
"and returns the results in of the comparison to the destination operand. " +
"The comparison predicate operand (immediate operand) specifies the type of " +
"comparison performed.";
break;
case "cmpss":
case "vcmpss":
instructionInfo = "Compares the low single-precision floating-point values in the second " +
"source operand and the first source operand and returns the results of the " +
"comparison to the destination operand. The comparison predicate operand " +
"(immediate operand) specifies the type of comparison performed.";
break;
case "cmpeqsd":
case "vcmpeqsd":
instructionInfo = "Compares the low double-precision floating-point values in the second " +
"source operand and the first source operand with , and returns the results " +
"of the comparison to the destination operand.";
break;
case "cmpeqss":
case "vcmpeqss":
instructionInfo = "Compares the low single-precision floating-point values in the second " +
"source operand and the first source operand with equal, and returns the " +
"results of the comparison to the destination operand.";
break;
case "cmplesd":
case "vcmplesd":
instructionInfo = "Compares the low double-precision floating-point values in the second " +
"source operand and the first source operand with less than or equal, and " +
"returns the results of the comparison to the destination operand.";
break;
case "cmpless":
case "vcmpless":
instructionInfo = "Compares the low single-precision floating-point values in the second " +
"source operand and the first source operand with less than or equal, and " +
"returns the results of the comparison to the destination operand.";
break;
case "cmpltsd":
case "vcmpltsd":
instructionInfo = "Compares the low double-precision floating-point values in the second " +
"source operand and the first source operand with less than, and returns " +
"the results of the comparison to the destination operand.";
break;
case "cmpltss":
case "vcmpltss":
instructionInfo = "Compares the low single-precision floating-point values in the second " +
"source operand and the first source operand with kess than, and returns " +
"the results of the comparison to the destination operand.";
break;
case "cmpneqsd":
case "vcmpneqsd":
instructionInfo = "Compares the low double-precision floating-point values in the second " +
"source operand and the first source operand with not equal, and returns " +
"the results of the comparison to the destination operand.";
break;
case "cmpneqss":
case "vcmpneqss":
instructionInfo = "Compares the low single-precision floating-point values in the second " +
"source operand and the first source operand with not equal, and returns " +
"the results of the comparison to the destination operand.";
break;
case "cmpnlesd":
case "vcmpnlesd":
instructionInfo = "Compares the low double-precision floating-point values in the second " +
"source operand and the first source operand with not less than or equal, " +
"and returns the results of the comparison to the destination operand.";
break;
case "cmpnless":
case "vcmpnless":
instructionInfo = "Compares the low single-precision floating-point values in the second " +
"source operand and the first source operand with not less than or equal, " +
"and returns the results of the comparison to the destination operand.";
break;
case "cmpnltsd":
case "vcmpnltsd":
instructionInfo = "Compares the low double-precision floating-point values in the second " +
"source operand and the first source operand with not less than, and " +
"returns the results of the comparison to the destination operand.";
break;
case "cmpnltss":
case "vcmpnltss":
instructionInfo = "Compares the low single-precision floating-point values in the second " +
"source operand and the first source operand with not less than, and returns " +
"the results of the comparison to the destination operand.";
break;
case "cmpordsd":
case "vcmpordsd":
instructionInfo = "Compares the low double-precision floating-point values in the second " +
"source operand and the first source operand with ordered, and returns the " +
"results of the comparison to the destination operand.";
break;
case "cmpordss":
case "vcmpordss":
instructionInfo = "Compares the low single-precision floating-point values in the second " +
"source operand and the first source operand with ordered, and returns the " +
"results of the comparison to the destination operand.";
break;
case "vcmpngess":
instructionInfo = "Compares the low single-precision floating-point values in the second " +
"source operand and the first source operand with not greater than or equal, " +
"and returns the results of the comparison to the destination operand.";
break;
case "vcmpngtss":
instructionInfo = "Compares the low single-precision floating-point values in the second " +
"source operand and the first source operand with not greater than, and " +
"returns the results of the comparison to the destination operand.";
break;
case "vcmpfalsess":
instructionInfo = "Compares the low single-precision floating-point values in the second " +
"source operand and the first source operand with false, and returns the " +
"results of the comparison to the destination operand.";
break;
case "vcmpgess":
instructionInfo = "Compares the low single-precision floating-point values in the second " +
"source operand and the first source operand with greater than or equal, " +
"and returns the results of the comparison to the destination operand.";
break;
case "vcmpgtss":
instructionInfo = "Compares the low single-precision floating-point values in the second " +
"source operand and the first source operand with greater than, and " +
"returns the results of the comparison to the destination operand.";
break;
case "vcmptruess":
instructionInfo = "Compares the low single-precision floating-point values in the second " +
"source operand and the first source operand with true, and returns the " +
"results of the comparison to the destination operand.";
break;
case "cmpunordsd":
case "vcmpunordsd":
instructionInfo = "Compares the low double-precision floating-point values in the second " +
"source operand and the first source operand with unordered, and returns " +
"the results of the comparison to the destination operand.";
break;
case "cmpunordss":
case "vcmpunordss":
instructionInfo = "Compares the low single-precision floating-point values in the second " +
"source operand and the first source operand with unordered, and returns " +
"the results of the comparison to the destination operand.";
break;
case "cmpxchg":
instructionInfo = "Compares the value in the AL, AX, EAX, or RAX register with the first " +
"operand (destination operand). If the two values are equal, the second " +
"operand (source operand) is loaded into the destination operand. " +
"Otherwise, the destination operand is loaded into the AL, AX, EAX or RAX " +
"register. RAX register is available only in 64-bit mode.";
break;
case "cmpxchg8b":
case "cmpxchg16b":
instructionInfo = "Compares the 64-bit value in EDX:EAX (or 128-bit value in RDX:RAX if " +
"operand size is 128 bits) with the operand (destination operand). " +
"If the values are equal, the 64-bit value in ECX:EBX (or 128-bit value in " +
"RCX:RBX) is stored in the destination operand. Otherwise, the value in the " +
"destination operand is loaded into EDX:EAX (or RDX:RAX). The destination " +
"operand is an 8-byte memory location (or 16-byte memory location if " +
"operand size is 128 bits). For the EDX:EAX and ECX:EBX register pairs, EDX " +
"and ECX contain the high-order 32 bits and EAX and EBX contain the " +
"low-order 32 bits of a 64-bit value. For the RDX:RAX and RCX:RBX register " +
"pairs, RDX and RCX contain the high-order 64 bits and RAX and RBX contain " +
"the low-order 64bits of a 128-bit value.";
break;
case "comisd":
case "vcomisd":
instructionInfo = "Compares the double-precision floating-point values in the low quadwords " +
"of operand 1 (first operand) and operand 2 (second operand), and sets the " +
"ZF, PF, and CF flags in the EFLAGS register according to the result " +
"(unordered, greater than, less than, or equal). The OF, SF and AF flags in " +
"the EFLAGS register are set to 0. The unordered result is returned if " +
"either source operand is a NaN (QNaN or SNaN).";
break;
case "comiss":
case "vcomiss":
instructionInfo = "Compares the single-precision floating-point values in the low quadwords " +
"of operand 1 (first operand) and operand 2 (second operand), and sets the " +
"ZF, PF, and CF flags in the EFLAGS register according to the result " +
"(unordered, greater than, less than, or equal). The OF, SF and AF flags in " +
"the EFLAGS register are set to 0. The unordered result is returned if " +
"either source operand is a NaN (QNaN or SNaN).";
break;
case "cpuid":
instructionInfo = "The ID flag (bit 21) in the EFLAGS register indicates support for the " +
"CPUID instruction. If a software procedure can set and clear this flag, " +
"the processor executing the procedure supports the CPUID instruction. " +
"This instruction operates the same in non-64-bit modes and 64-bit mode.";
break;
case "crc32":
instructionInfo = "Starting with an initial value in the first operand (destination operand), " +
"accumulates a CRC32 (polynomial 11EDC6F41H) value for the second operand " +
"(source operand) and stores the result in the destination operand. " +
"The source operand can be a register or a memory location. The destination " +
"operand must be an r32 or r64 register. If the destination is an r64 " +
"register, then the 32-bit result is stored in the least significant double " +
"word and 00000000H is stored in the most significant double word of the r64 register.";
break;
case "cvtdq2pd":
case "vcvtdq2pd":
instructionInfo = "Converts two, four or eight packed signed doubleword integers in the source " +
"operand (the second operand) to two, four or eight packed double-precision " +
"floating-point values in the destination operand (the first operand).";
break;
case "cvtdq2ps":
case "vcvtdq2ps":
instructionInfo = "Converts four, eight or sixteen packed signed doubleword integers in the " +
"source operand to four, eight or sixteen packed single-precision " +
"floating-point values in the destination operand.";
break;
case "cvtpd2dq":
case "vcvtpd2dq":
instructionInfo = "Converts packed double-precision floating-point values in the source " +
"operand (second operand) to packed signed doubleword integers in the " +
"destination operand (first operand).";
break;
case "cvtpd2pi":
instructionInfo = "Converts two packed double-precision floating-point values in the source " +
"operand (second operand) to two packed signed doubleword integers in the " +
"destination operand (first operand).";
break;
case "cvtpd2ps":
case "vcvtpd2ps":
instructionInfo = "Converts two, four or eight packed double-precision floating-point values " +
"in the source operand (second operand) to two, four or eight packed " +
"single-precision floating-point values in the destination operand (first operand).";
break;
case "cvtpi2pd":
case "vcvtpi2pd":
instructionInfo = "Converts two packed signed doubleword integers in the source operand " +
"(second operand) to two packed double-precision floating-point values in " +
"the destination operand (first operand).";
break;
case "cvtpi2ps":
case "vcvtpi2ps":
instructionInfo = "Converts two packed signed doubleword integers in the source operand " +
"(second operand) to two packed single-precision floating-point values in " +
"the destination operand (first operand).";
break;
case "cvtps2dq":
case "vcvtps2dq":
instructionInfo = "Converts four, eight or sixteen packed single-precision floating-point " +
"values in the source operand to four, eight or sixteen signed doubleword " +
"integers in the destination operand.";
break;
case "cvtps2pd":
case "vcvtps2pd":
instructionInfo = "Converts two, four or eight packed single-precision floating-point values " +
"in the source operand (second operand) to two, four or eight packed " +
"double-precision floating-point values in the destination operand (first operand).";
break;
case "cvtps2pi":
case "vcvtps2pi":
instructionInfo = "Converts two packed single-precision floating-point values in the source " +
"operand (second operand) to two packed signed doubleword integers in the " +
"destination operand (first operand).";
break;
case "cvtsd2si":
case "vcvtsd2si":
instructionInfo = "Converts a double-precision floating-point value in the source operand " +
"(the second operand) to a signed double-word integer in the destination " +
"operand (first operand). The source operand can be an XMM register or a " +
"64-bit memory location. The destination operand is a general-purpose " +
"register. When the source operand is an XMM register, the double-precision " +
"floating-point value is contained in the low quadword of the register.";
break;
case "cvtsd2ss":
case "vcvtsd2ss":
instructionInfo = "Converts a double-precision floating-point value in the \"convert-from\" " +
"source operand (the second operand in SSE2 version, otherwise the third " +
"operand) to a single-precision floating-point value in the destination operand.";
break;
case "cvtsi2sd":
case "vcvtsi2sd":
instructionInfo = "Converts a signed doubleword integer (or signed quadword integer if " +
"operand size is 64 bits) in the \"convert-from\" source " +
"operand to a double-precision floating-point value in the destination " +
"operand. The result is stored in the low quadword of the destination " +
"operand, and the high quadword left unchanged. When conversion is inexact, " +
"the value returned is rounded according to the rounding control bits in the " +
"MXCSR register.";
break;
case "cvtsi2ss":
case "vcvtsi2ss":
instructionInfo = "Converts a signed doubleword integer (or signed quadword integer if " +
"operand size is 64 bits) in the \"convert-from\" source " +
"operand to a single-precision floating-point value in the destination " +
"operand (first operand). The \"convert-from\" source " +
"operand can be a general-purpose register or a memory location. The " +
"destination operand is an XMM register. The result is stored in the low " +
"doubleword of the destination operand, and the upper three doublewords are " +
"left unchanged. When a conversion is inexact, the value returned is rounded " +
"according to the rounding control bits in the MXCSR register or the " +
"embedded rounding control bits.";
break;
case "cvtss2sd":
case "vcvtss2sd":
instructionInfo = "Converts a single-precision floating-point value in the \"convert-from\" " +
"source operand to a double-precision floating-point value in the " +
"destination operand. When the \"convert-from\" source " +
"operand is an XMM register, the single-precision floating-point value is " +
"contained in the low doubleword of the register. The result is stored in " +
"the low quadword of the destination operand.";
break;
case "cvtss2si":
case "vcvtss2si":
instructionInfo = "Converts a single-precision floating-point value in the source operand (the " +
"second operand) to a signed doubleword integer (or signed quadword integer " +
"if operand size is 64 bits) in the destination operand (the first operand). " +
"The source operand can be an XMM register or a memory location. The " +
"destination operand is a general-purpose register. When the source operand " +
"is an XMM register, the single-precision floating-point value is contained " +
"in the low doubleword of the register.";
break;
case "cvttpd2dq":
case "vcvttpd2dq":
instructionInfo = "Converts two, four or eight packed double-precision floating-point values " +
"in the source operand (second operand) to two, four or eight packed signed " +
"doubleword integers in the destination operand (first operand).";
break;
case "cvttpd2pi":
case "vcvttpd2pi":
instructionInfo = "Converts two packed double-precision floating-point values in the source " +
"operand (second operand) to two packed signed doubleword integers in the " +
"destination operand (first operand). The source operand can be an XMM " +
"register or a 128-bit memory location. The destination operand is an MMX " +
"technology register.";
break;
case "cvttps2dq":
case "vcvttps2dq":
instructionInfo = "Converts four, eight or sixteen packed single-precision floating-point " +
"values in the source operand to four, eight or sixteen signed doubleword " +
"integers in the destination operand.";
break;
case "cvttps2pi":
case "vcvttps2pi":
instructionInfo = "Converts two packed single-precision floating-point values in the source " +
"operand (second operand) to two packed signed doubleword integers in the " +
"destination operand (first operand). The source operand can be an XMM " +
"register or a 64-bit memory location. The destination operand is an MMX " +
"technology register. When the source operand is an XMM register, the two " +
"single-precision floating-point values are contained in the low quadword " +
"of the register.";
break;
case "cvttsd2si":
case "vcvttsd2si":
instructionInfo = "Converts a double-precision floating-point value in the source operand " +
"(the second operand) to a signed double-word integer (or signed quadword " +
"integer if operand size is 64 bits) in the destination operand (the first " +
"operand). The source operand can be an XMM register or a 64-bit memory " +
"location. The destination operand is a general purpose register. When the " +
"source operand is an XMM register, the double-precision floating-point " +
"value is contained in the low quadword of the register.";
break;
case "cvttss2si":
case "vcvttss2si":
instructionInfo = "Converts a single-precision floating-point value in the source operand " +
"(the second operand) to a signed double-word integer (or signed quadword " +
"integer if operand size is 64 bits) in the destination operand (the first " +
"operand). The source operand can be an XMM register or a 32-bit memory " +
"location. The destination operand is a general purpose register. When the " +
"source operand is an XMM register, the single-precision floating-point " +
"value is contained in the low doubleword of the register.";
break;
case "daa":
instructionInfo = "Adjusts the sum of two packed BCD values to create a packed BCD result. " +
"The AL register is the implied source and destination operand. The DAA " +
"instruction is only useful when it follows an ADD instruction that adds " +
"(binary addition) two 2-digit, packed BCD values and stores a byte result " +
"in the AL register. The DAA instruction then adjusts the contents of the " +
"AL register to contain the correct 2-digit, packed BCD result. If a decimal " +
"carry is detected, the CF and AF flags are set accordingly.";
break;
case "das":
instructionInfo = "Adjusts the result of the subtraction of two packed BCD values to create " +
"a packed BCD result. The AL register is the implied source and destination " +
"operand. The DAS instruction is only useful when it follows a SUB " +
"instruction that subtracts (binary subtraction) one 2-digit, packed BCD " +
"value from another and stores a byte result in the AL register. The DAS " +
"instruction then adjusts the contents of the AL register to contain the " +
"correct 2-digit, packed BCD result. If a decimal borrow is detected, the CF " +
"and AF flags are set accordingly.";
break;
case "dec":
instructionInfo = "Subtracts 1 from the destination operand, while preserving the state of " +
"the CF flag. The destination operand can be a register or a memory location. " +
"This instruction allows a loop counter to be updated without disturbing the " +
"CF flag. (To perform a decrement operation that updates the CF flag, use a " +
"SUB instruction with an immediate operand of 1.)";
break;
case "div":
instructionInfo = "Divides unsigned the value in the AX, DX:AX, EDX:EAX, or RDX:RAX registers " +
"(dividend) by the source operand (divisor) and stores the result in the AX " +
"(AH:AL), DX:AX, EDX:EAX, or RDX:RAX registers. The source operand can be a " +
"general-purpose register or a memory location. The action of this " +
"instruction depends on the operand size (dividend/divisor). Division using " +
"64-bit operand is available only in 64-bit mode.";
break;
case "divpd":
case "vdivpd":
instructionInfo = "Performs a SIMD divide of the double-precision floating-point values in the " +
"first source operand by the floating-point values in the second source " +
"operand (the third operand). Results are written to the destination operand " +
"(the first operand).";
break;
case "divps":
case "vdivps":
instructionInfo = "Performs a SIMD divide of the four, eight or sixteen packed single-precision " +
"floating-point values in the first source operand (the second operand) by " +
"the four, eight or sixteen packed single-precision floating-point values in " +
"the second source operand (the third operand). Results are written to the " +
"destination operand (the first operand).";
break;
case "divsd":
case "vdivsd":
instructionInfo = "Divides the low double-precision floating-point value in the first source " +
"operand by the low double-precision floating-point value in the second " +
"source operand, and stores the double-precision floating-point result in " +
"the destination operand. The second source operand can be an XMM register " +
"or a 64-bit memory location. The first source and destination are XMM registers.";
break;
case "divss":
case "vdivss":
instructionInfo = "Divides the low single-precision floating-point value in the first source " +
"operand by the low single-precision floating-point value in the second " +
"source operand, and stores the single-precision floating-point result in " +
"the destination operand. The second source operand can be an XMM register " +
"or a 32-bit memory location.";
break;
case "dppd":
case "vdppd":
instructionInfo = "Conditionally multiplies the packed double-precision floating-point values " +
"in the destination operand (first operand) with the packed double-precision " +
"floating-point values in the source (second operand) depending on a mask " +
"extracted from bits [5:4] of the immediate operand (third operand). If a " +
"condition mask bit is zero, the corresponding multiplication is replaced by " +
"a value of 0.0 in the manner described by Section 12.8.4 of Intel " +
"64 and IA-32 Architectures Software Developers Manual, Volume 1.";
break;
case "dpps":
case "vdpps":
instructionInfo = "Conditionally multiplies the packed single precision floating-point values " +
"in the destination operand (first operand) with the packed single-precision " +
"floats in the source (second operand) depending on a mask extracted from " +
"the high 4 bits of the immediate byte (third operand). If a condition mask " +
"bit in Imm8[7:4] is zero, the corresponding multiplication is replaced by a " +
"value of 0.0 in the manner described by Section 12.8.4 of Intel " +
"64 and IA-32 Architectures Software Developers Manual, Volume 1.";
break;
case "emms":
instructionInfo = "Sets the values of all the tags in the x87 FPU tag word to empty (all 1s). " +
"This operation marks the x87 FPU data registers (which are aliased to the " +
"MMX technology registers) as available for use by x87 FPU floating-point " +
"instructions. All other MMX instructions (other than the EMMS instruction) " +
"set all the tags in x87 FPU tag word to valid (all 0s).";
break;
case "enter":
instructionInfo = "Creates a stack frame (comprising of space for dynamic storage and 1-32 " +
"frame pointer storage) for a procedure. The first operand (imm16) specifies " +
"the size of the dynamic storage in the stack frame (that is, the number of " +
"bytes of dynamically allocated on the stack for the procedure). The second " +
"operand (imm8) gives the lexical nesting level (0 to 31) of the procedure. " +
"The nesting level (imm8 mod 32) and the OperandSize attribute determine the " +
"size in bytes of the storage space for frame pointers.";
break;
case "extractps":
case "vextractps":
instructionInfo = "Extracts a single-precision floating-point value from the source operand " +
"(second operand) at the 32-bit offset specified from imm8. Immediate bits " +
"higher than the most significant offset for the vector length are ignored.";
break;
case "f2xm1":
instructionInfo = "Computes the exponential value of 2 to the power of the source operand " +
"minus 1. The source operand is located in register ST(0) and the result is " +
"also stored in ST(0). The value of the source operand must lie in the range " +
"-1.0 to +1.0. If the source value is outside this range, the " +
"result is undefined.";
break;
case "fabs":
instructionInfo = "Clears the sign bit of ST(0) to create the absolute value of the operand. " +
"The following table shows the results obtained when creating the absolute " +
"value of various classes of numbers.";
break;
case "fadd":
case "faddp":
case "fiadd":
instructionInfo = "Adds the destination and source operands and stores the sum in the " +
"destination location. The destination operand is always an FPU register; " +
"the source operand can be a register or a memory location. Source operands " +
"in memory can be in single-precision or double-precision floating-point " +
"format or in word or doubleword integer format.";
break;
case "fbld":
instructionInfo = "Converts the BCD source operand into double extended-precision " +
"floating-point format and pushes the value onto the FPU stack. The " +
"source operand is loaded without rounding errors. The sign of the source " +
"operand is preserved, including that of \xe2\x88\x920.";
break;
case "fbstp":
instructionInfo = "Converts the value in the ST(0) register to an 18-digit packed BCD integer, " +
"stores the result in the destination operand, and pops the register stack. " +
"If the source value is a non-integral value, it is rounded to an integer " +
"value, according to rounding mode specified by the RC field of the FPU " +
"control word. To pop the register stack, the processor marks the ST(0) " +
"register as empty and increments the stack pointer (TOP) by 1.";
break;
case "fchs":
instructionInfo = "Complements the sign bit of ST(0). This operation changes a positive value " +
"into a negative value of equal magnitude or vice versa. The following table " +
"shows the results obtained when changing the sign of various classes of numbers.";
break;
case "fclex":
case "fnclex":
instructionInfo = "Clears the floating-point exception flags (PE, UE, OE, ZE, DE, and IE), " +
"the exception summary status flag (ES), the stack fault flag (SF), and the " +
"busy flag (B) in the FPU status word. The FCLEX instruction checks for and " +
"handles any pending unmasked floating-point exceptions before clearing the " +
"exception flags; the FNCLEX instruction does not.";
break;
case "fcmovb":
case "fcmove":
case "fcmovbe":
case "fcmovu":
case "fcmovnb":
case "fcmovne":
case "fcmovnbe":
case "fcmovnu":
instructionInfo = "Tests the status flags in the EFLAGS register and moves the source operand " +
"(second operand) to the destination operand (first operand) if the given " +
"test condition is true. The condition for each mnemonic os given in the " +
"Description column above and in Chapter 8 in the Intel 64 and " +
"IA-32 Architectures Software Developers Manual, Volume 1. " +
"The source operand is always in the ST(i) register and the destination " +
"operand is always ST(0).";
break;
case "fcom":
case "fcomp":
case "fcompp":
instructionInfo = "Compares the contents of register ST(0) and source value and sets condition " +
"code flags C0, C2, and C3 in the FPU status word according to the results. " +
"The source operand can be a data register or a memory location. " +
"If no source operand is given, the value in ST(0) is compared with the " +
"value in ST(1). The sign of zero is ignored, so that -0.0 is " +
"equal to +0.0.";
break;
case "fcomi":
case "fcomip":
case "fucomi":
case "fucomip":
instructionInfo = "Performs an unordered comparison of the contents of registers ST(0) and " +
"ST(i) and sets the status flags ZF, PF, and CF in the EFLAGS register " +
"according to the results. The sign of zero is ignored " +
"for comparisons, so that -0.0 is equal to +0.0.";
break;
case "fcos":
instructionInfo = "Computes the approximate cosine of the source operand in register ST(0) " +
"and stores the result in ST(0). The source operand must be given in " +
"radians and must be within the range -2^63 to " +
"+2^63.";
break;
case "fdecstp":
instructionInfo = "Subtracts one from the TOP field of the FPU status word (decrements the " +
"top-of-stack pointer). If the TOP field contains a 0, it is set to 7. The " +
"effect of this instruction is to rotate the stack by one position. " +
"The contents of the FPU data registers and tag register are not affected.";
break;
case "fdiv":
case "fdivp":
case "fidiv":
instructionInfo = "Divides the destination operand by the source operand and stores the result " +
"in the destination location. The destination operand (dividend) is always " +
"in an FPU register; the source operand (divisor) can be a register or a " +
"memory location. Source operands in memory can be in single-precision or " +
"double-precision floating-point format, word or doubleword integer format.";
break;
case "fdivr":
case "fdivrp":
case "fidivr":
instructionInfo = "Divides the source operand by the destination operand and stores the " +
"result in the destination location. The destination operand (divisor) is " +
"always in an FPU register; the source operand (dividend) can be a register " +
"or a memory location. Source operands in memory can be in single-precision " +
"or double-precision floating-point format, word or doubleword integer format.";
break;
case "ffree":
instructionInfo = "Sets the tag in the FPU tag register associated with register ST(i) to " +
"empty (11B). The contents of ST(i) and the FPU stack-top pointer (TOP) are " +
"not affected.";
break;
case "ficom":
case "ficomp":
instructionInfo = "Compares the value in ST(0) with an integer source operand and sets the " +
"condition code flags C0, C2, and C3 in the FPU status word according to " +
"the results. The integer value is converted to double " +
"extended-precision floating-point format before the comparison is made.";
break;
case "fild":
instructionInfo = "Converts the signed-integer source operand into double extended-precision " +
"floating-point format and pushes the value onto the FPU register stack. " +
"The source operand can be a word, doubleword, or quadword integer. It is " +
"loaded without rounding errors. The sign of the source operand is preserved.";
break;
case "fmul":
case "fmulp":
case "fimul":
instructionInfo = "Multiplies the destination and source operands and stores the product in " +
"the destination location. The destination operand is always an FPU data " +
"register; the source operand can be an FPU data register or a memory " +
"location. Source operands in memory can be in single-precision or " +
"double-precision floating-point format or in word or doubleword integer format.";
break;
case "fincstp":
instructionInfo = "Adds one to the TOP field of the FPU status word (increments the " +
"top-of-stack pointer). If the TOP field contains a 7, it is set to 0. " +
"The effect of this instruction is to rotate the stack by one position. " +
"The contents of the FPU data registers and tag register are not affected. " +
"This operation is not equivalent to popping the stack, because the tag for " +
"the previous top-of-stack register is not marked empty.";
break;
case "finit":
case "fninit":
instructionInfo = "Sets the FPU control, status, tag, instruction pointer, and data pointer " +
"registers to their default states. The FPU control word is set to 037FH " +
"(round to nearest, all exceptions masked, 64-bit precision). The status word " +
"is cleared (no exception flags set, TOP is set to 0). The data registers " +
"in the register stack are left unchanged, but they are all tagged as empty " +
"(11B). Both the instruction and data pointers are cleared.";
break;
case "fist":
case "fistp":
instructionInfo = "The FIST instruction converts the value in the ST(0) register to a signed " +
"integer and stores the result in the destination operand. Values can be " +
"stored in word or doubleword integer format. The destination operand " +
"specifies the address where the first byte of the destination value is to " +
"be stored.";
break;
case "fisttp":
instructionInfo = "FISTTP converts the value in ST into a signed integer using truncation " +
"(chop) as rounding mode, transfers the result to the destination, and pop ST. " +
"FISTTP accepts word, short integer, and long integer destinations.";
break;
case "fsub":
case "fsubp":
case "fisub":
instructionInfo = "Subtracts the source operand from the destination operand and stores the " +
"difference in the destination location. The destination operand is always " +
"an FPU data register; the source operand can be a register or a memory " +
"location. Source operands in memory can be in single-precision or " +
"double-precision floating-point format or in word or doubleword integer format.";
break;
case "fsubr":
case "fsubrp":
case "fisubr":
instructionInfo = "Subtracts the destination operand from the source operand and stores the " +
"difference in the destination location. The destination operand is always " +
"an FPU register; the source operand can be a register or a memory location. " +
"Source operands in memory can be in single-precision or double-precision " +
"floating-point format or in word or doubleword integer format.";
break;
case "fld":
instructionInfo = "Pushes the source operand onto the FPU register stack. The source operand " +
"can be in single-precision, double-precision, or double extended-precision " +
"floating-point format. If the source operand is in single-precision or " +
"double-precision floating-point format, it is automatically converted to " +
"the double extended-precision floating-point format before being pushed on " +
"the stack.";
break;
case "fld1":
case "fldl2t":
case "fldl2e":
case "fldpi":
case "fldlg2":
case "fldln2":
case "fldz":
instructionInfo = "Push one of seven commonly used constants (in double extended-precision " +
"floating-point format) onto the FPU register stack. The constants that can " +
"be loaded with these instructions include +1.0, +0.0, log10^2, " +
"loge^2, pi, log2^10, and log2^e. For " +
"each constant, an internal 66-bit constant is rounded (as specified by the " +
"RC field in the FPU control word) to double extended-precision " +
"floating-point format. The inexact-result exception (#P) is not generated " +
"as a result of the rounding, nor is the C1 flag set in the x87 FPU status " +
"word if the value is rounded up.";
break;
case "fldcw":
instructionInfo = "Loads the 16-bit source operand into the FPU control word. The source " +
"operand is a memory location. This instruction is typically used to " +
"establish or change the FPUs mode of operation.";
break;
case "fldenv":
instructionInfo = "Loads the complete x87 FPU operating environment from memory into the " +
"FPU registers. The source operand specifies the first byte of the " +
"operating-environment data in memory. This data is typically written to " +
"the specified memory location by a FSTENV or FNSTENV instruction.";
break;
case "fnop":
instructionInfo = "Performs no FPU operation. This instruction takes up space in the " +
"instruction stream but does not affect the FPU or machine context, except " +
"the EIP register and the FPU Instruction Pointer.";
break;
case "fsave":
case "fnsave":
instructionInfo = "Stores the current FPU state (operating environment and register stack) " +
"at the specified destination in memory, and then re-initializes the FPU. " +
"The FSAVE instruction checks for and handles pending unmasked floating-point " +
"exceptions before storing the FPU state; the FNSAVE instruction does not.";
break;
case "fstcw":
case "fnstcw":
instructionInfo = "Stores the current value of the FPU control word at the specified " +
"destination in memory. The FSTCW instruction checks for and handles " +
"pending unmasked floating-point exceptions before storing the control " +
"word; the FNSTCW instruction does not.";
break;
case "fstenv":
case "fnstenv":
instructionInfo = "Saves the current FPU operating environment at the memory location specified " +
"with the destination operand, and then masks all floating-point exceptions. " +
"The FPU operating environment consists of the FPU control word, status word, " +
"tag word, instruction pointer, data pointer, and last opcode.";
break;
case "fstsw":
case "fnstsw":
instructionInfo = "Stores the current value of the x87 FPU status word in the destination " +
"location. The destination operand can be either a two-byte memory location " +
"or the AX register. The FSTSW instruction checks for and handles pending " +
"unmasked floating-point exceptions before storing the status word; the " +
"FNSTSW instruction does not.";
break;
case "fpatan":
instructionInfo = "Computes the arctangent of the source operand in register ST(1) divided by " +
"the source operand in register ST(0), stores the result in ST(1), and pops " +
"the FPU register stack. The result in register ST(0) has the same sign as " +
"the source operand ST(1) and a magnitude less than +\xcf\x80.";
break;
case "fprem":
instructionInfo = "Computes the remainder obtained from dividing the value in the ST(0) " +
"register (the dividend) by the value in the ST(1) register (the divisor or " +
"modulus), and stores the result in ST(0). The remainder " +
"represents the following value:";
break;
case "fprem1":
instructionInfo = "Computes the IEEE remainder obtained from dividing the value in the ST(0) " +
"register (the dividend) by the value in the ST(1) register (the divisor or " +
"modulus), and stores the result in ST(0). The remainder " +
"represents the following value:";
break;
case "fptan":
instructionInfo = "Computes the approximate tangent of the source operand in register ST(0), " +
"stores the result in ST(0), and pushes a 1.0 onto the FPU register stack. " +
"The source operand must be given in radians and must be less than " +
"+-2^63. The following table shows the unmasked results " +
"obtained when computing the partial tangent of various classes of numbers, " +
"assuming that underflow does not occur.";
break;
case "frndint":
instructionInfo = "Rounds the source value in the ST(0) register to the nearest integral value, " +
"depending on the current rounding mode (setting of the RC field of the FPU " +
"control word), and stores the result in ST(0).";
break;
case "frstor":
instructionInfo = "Loads the FPU state (operating environment and register stack) from the " +
"memory area specified with the source operand. This state data is typically " +
"written to the specified memory location by a previous FSAVE/FNSAVE instruction.";
break;
case "fscale":
instructionInfo = "Truncates the value in the source operand (toward 0) to an integral value " +
"and adds that value to the exponent of the destination operand. The " +
"destination and source operands are floating-point values located in " +
"registers ST(0) and ST(1), respectively. This instruction provides rapid " +
"multiplication or division by integral powers of 2.";
break;
case "fsin":
instructionInfo = "Computes an approximation of the sine of the source operand in register " +
"ST(0) and stores the result in ST(0). The source operand must be given in " +
"radians and must be within the range -2^63 to " +
"+2^63.";
break;
case "fsincos":
instructionInfo = "Computes both the approximate sine and the cosine of the source operand in " +
"register ST(0), stores the sine in ST(0), and pushes the cosine onto the " +
"top of the FPU register stack. (This instruction is faster than executing " +
"the FSIN and FCOS instructions in succession.)";
break;
case "fsqrt":
instructionInfo = "Computes the square root of the source value in the ST(0) register and " +
"stores the result in ST(0).";
break;
case "fst":
case "fstp":
instructionInfo = "The FST instruction copies the value in the ST(0) register to the " +
"destination operand, which can be a memory location or another register in " +
"the FPU register stack. When storing the value in memory, the value is " +
"converted to single-precision or double-precision floating-point format.";
break;
case "ftst":
instructionInfo = "Compares the value in the ST(0) register with 0.0 and sets the condition " +
"code flags C0, C2, and C3 in the FPU status word according to the results.";
break;
case "fucom":
case "fucomp":
case "fucompp":
instructionInfo = "Performs an unordered comparison of the contents of register ST(0) and " +
"ST(i) and sets condition code flags C0, C2, and C3 in the FPU status word " +
"according to the results (see the table below). If no operand is specified, " +
"the contents of registers ST(0) and ST(1) are compared. The sign of zero " +
"is ignored, so that -0.0 is equal to +0.0.";
break;
case "wait":
case "fwait":
instructionInfo = "Causes the processor to check for and handle pending, unmasked, " +
"floating-point exceptions before proceeding. (FWAIT is an alternate " +
"mnemonic for WAIT.)";
break;
case "fxam":
instructionInfo = "Examines the contents of the ST(0) register and sets the condition code " +
"flags C0, C2, and C3 in the FPU status word to indicate the class of value " +
"or number in the register (see the table below).";
break;
case "fxch":
instructionInfo = "Exchanges the contents of registers ST(0) and ST(i). If no source operand " +
"is specified, the contents of ST(0) and ST(1) are exchanged.";
break;
case "fxrstor":
case "fxrstor64":
instructionInfo = "Reloads the x87 FPU, MMX technology, XMM, and MXCSR registers from the " +
"512-byte memory image specified in the source operand. This data should " +
"have been written to memory previously using the FXSAVE instruction, and in " +
"the same format as required by the operating modes. The first byte of the " +
"data should be located on a 16-byte boundary. There are three distinct " +
"layouts of the FXSAVE state map: one for legacy and compatibility mode, a " +
"second format for 64-bit mode FXSAVE/FXRSTOR with REX.W=0, and the third " +
"format is for 64-bit mode with FXSAVE64/FXRSTOR64.";
break;
case "fxsave":
case "fxsave64":
instructionInfo = "Saves the current state of the x87 FPU, MMX technology, XMM, and MXCSR " +
"registers to a 512-byte memory location specified in the destination " +
"operand. The content layout of the 512 byte region depends on whether the " +
"processor is operating in non-64-bit operating modes or 64-bit sub-mode of " +
"IA-32e mode.";
break;
case "fxtract":
instructionInfo = "Separates the source value in the ST(0) register into its exponent and " +
"significand, stores the exponent in ST(0), and pushes the significand onto " +
"the register stack. Following this operation, the new top-of-stack register " +
"ST(0) contains the value of the original significand expressed as a " +
"floating-point value. The sign and significand of this value are the same " +
"as those found in the source operand, and the exponent is 3FFFH (biased " +
"value for a true exponent of zero). The ST(1) register contains the value " +
"of the original operands true (unbiased) exponent expressed as " +
"a floating-point value. (The operation performed by this instruction is a " +
"superset of the IEEE-recommended logb x) function.)";
break;
case "fyl2x":
instructionInfo = "Computes (ST(1) \xe2\x88\x97 log<sub>2</sub> (ST(0))), stores the result " +
"in register ST(1), and pops the FPU register stack. The source operand in " +
"ST(0) must be a non-zero positive number.";
break;
case "fyl2xp1":
instructionInfo = "Computes (ST(1) * log(ST(0) + 1.0))^2, stores the " +
"result in register ST(1), and pops the FPU register stack. The source " +
"operand in ST(0) must be in the range:";
break;
case "gf2p8affineinvqb":
instructionInfo = "The AFFINEINVB instruction computes an affine transformation in the Galois " +
"Field 2^8. For this instruction, an affine transformation is " +
"defined by A * inv(x) + b where \"A\" is an 8 by 8 bit " +
"matrix, and \"x\" and \"b\" are " +
"8-bit vectors. The inverse of the bytes in x is defined with respect to the " +
"reduction polynomial x^8 + x^4 + x^3 + x + 1.";
break;
case "gf2p8affineqb":
instructionInfo = "The AFFINEB instruction computes an affine transformation in the Galois " +
"Field 2^8. For this instruction, an affine transformation is " +
"defined by A * x + b where \"A\" is an 8 by 8 bit " +
"matrix, and \"x\" and \"b\" are " +
"8-bit vectors. One SIMD register (operand 1) holds \"x\" " +
"as either 16, 32 or 64 8-bit vectors. A second SIMD (operand 2) register or " +
"memory operand contains 2, 4, or 8 \"A\" values, which " +
"are operated upon by the correspondingly aligned 8 \"x\" " +
"values in the first register. The \"b\" vector is " +
"constant for all calculations and contained in the immediate byte.";
break;
case "gf2p8mulb":
instructionInfo = "The instruction multiplies elements in the finite field GF(2^8), " +
"operating on a byte (field element) in the first source operand and the " +
"corresponding byte in a second source operand. The field GF(2^8) " +
"is represented in polynomial representation with the reduction polynomial " +
"x^8 + x^4 + x^3 + x + 1.";
break;
case "haddpd":
case "vhaddpd":
instructionInfo = "Adds the double-precision floating-point values in the high and low " +
"quadwords of the destination operand and stores the result in the low " +
"quadword of the destination operand.";
break;
case "haddps":
case "vhaddps":
instructionInfo = "Adds the single-precision floating-point values in the first and second " +
"dwords of the destination operand and stores the result in the first dword " +
"of the destination operand.";
break;
case "hlt":
instructionInfo = "Stops instruction execution and places the processor in a HALT state. " +
"An enabled interrupt (including NMI and SMI), a debug exception, the " +
"BINIT# signal, the INIT# signal, or the RESET# signal will resume execution. " +
"If an interrupt (including NMI) is used to resume execution after a HLT " +
"instruction, the saved instruction pointer (CS:EIP) points to the " +
"instruction following the HLT instruction.";
break;
case "hsubpd":
case "vhsubpd":
instructionInfo = "The HSUBPD instruction subtracts horizontally the packed DP FP numbers " +
"of both operands.";
break;
case "hsubps":
case "vhsubps":
instructionInfo = "Subtracts the single-precision floating-point value in the second dword of " +
"the destination operand from the first dword of the destination operand and " +
"stores the result in the first dword of the destination operand.";
break;
case "idiv":
instructionInfo = "Divides the (signed) value in the AX, DX:AX, or EDX:EAX (dividend) by the " +
"source operand (divisor) and stores the result in the AX (AH:AL), DX:AX, " +
"or EDX:EAX registers. The source operand can be a general-purpose register " +
"or a memory location. The action of this instruction depends on the operand " +
"size (dividend/divisor).";
break;
case "imul":
instructionInfo = "Performs a signed multiplication of two operands. This instruction has " +
"three forms, depending on the number of operands.";
break;
case "in":
instructionInfo = "Copies the value from the I/O port specified with the second operand " +
"(source operand) to the destination operand (first operand). The source " +
"operand can be a byte-immediate or the DX register; the destination operand " +
"can be register AL, AX, or EAX, depending on the size of the port being " +
"accessed (8, 16, or 32 bits, respectively). Using the DX register as a " +
"source operand allows I/O port addresses from 0 to 65,535 to be accessed; " +
"using a byte immediate allows I/O port addresses 0 to 255 to be accessed.";
break;
case "inc":
instructionInfo = "Adds 1 to the destination operand, while preserving the state of the CF " +
"flag. The destination operand can be a register or a memory location. " +
"This instruction allows a loop counter to be updated without disturbing " +
"the CF flag. (Use a ADD instruction with an immediate operand of 1 to " +
"perform an increment operation that does updates the CF flag.)";
break;
case "ins":
case "insb":
case "insw":
case "insd":
case "vinsd":
instructionInfo = "Copies the data from the I/O port specified with the source operand " +
"(second operand) to the destination operand (first operand). The source " +
"operand is an I/O port address (from 0 to 65,535) that is read from the DX " +
"register. The destination operand is a memory location, the address of " +
"which is read from either the ES:DI, ES:EDI or the RDI registers (depending " +
"on the address-size attribute of the instruction, 16, 32 or 64, " +
"respectively). (The ES segment cannot be overridden with a segment override " +
"prefix.) The size of the I/O port being accessed (that is, the size of the " +
"source and destination operands) is determined by the opcode for an 8-bit " +
"I/O port or by the operand-size attribute of the instruction for a 16- or " +
"32-bit I/O port.";
break;
case "insertps":
case "vinsertps":
instructionInfo = "Copy a single-precision scalar floating-point element into a 128-bit vector " +
"register. The immediate operand has three fields, where the ZMask bits " +
"specify which elements of the destination will be set to zero, the Count_D " +
"bits specify which element of the destination will be overwritten with the " +
"scalar value, and for vector register sources the Count_S bits specify " +
"which element of the source will be copied. When the scalar source is a " +
"memory operand the Count_S bits are ignored.";
break;
case "int":
case "into":
case "int3":
case "int1":
instructionInfo = "The INTn instruction generates a call to the interrupt or " +
"exception handler specified with the destination operand. The destination operand " +
"specifies a vector from 0 to 255, encoded as an 8-bit unsigned intermediate " +
"value. Each vector provides an index to a gate descriptor in the IDT. The " +
"first 32 vectors are reserved by Intel for system use. Some of these " +
"vectors are used for internally generated exceptions.";
break;
case "invd":
instructionInfo = "Invalidates (flushes) the processors internal caches and issues " +
"a special-function bus cycle that directs external caches to also flush " +
"themselves. Data held in internal caches is not written back to main memory.";
break;
case "invlpg":
instructionInfo = "Invalidates any translation lookaside buffer (TLB) entries specified with " +
"the source operand. The source operand is a memory address. The processor " +
"determines the page that contains that address and flushes all TLB entries " +
"for that page.";
break;
case "invpcid":
instructionInfo = "Invalidates mappings in the translation lookaside buffers (TLBs) and " +
"paging-structure caches based on process-context identifier (PCID). " +
"Invalidation is based on the INVPCID type specified in the register operand " +
"and the INVPCID descriptor specified in the memory operand.";
break;
case "iret":
case "iretd":
instructionInfo = "Returns program control from an exception or interrupt handler to a program " +
"or procedure that was interrupted by an exception, an external interrupt, " +
"or a software-generated interrupt. These instructions are also used to " +
"perform a return from a nested task. (A nested task is created when a CALL " +
"instruction is used to initiate a task switch or when an interrupt or " +
"exception causes a task switch to an interrupt or exception handler.)";
break;
case "jmp":
instructionInfo = "Transfers program control to a different point in the instruction stream " +
"without recording return information. The destination (target) operand " +
"specifies the address of the instruction being jumped to. This operand can " +
"be an immediate value, a general-purpose register, or a memory location.";
break;
case "ja":
case "jae":
case "jb":
case "jbe":
case "jc":
case "jcxz":
case "jecxz":
case "jrcxz":
case "je":
case "jg":
case "jge":
case "jl":
case "jle":
case "jna":
case "jnae":
case "jnb":
case "jnbe":
case "jnc":
case "jne":
case "jng":
case "jnge":
case "jnl":
case "jnle":
case "jno":
case "jnp":
case "jns":
case "jnz":
case "jo":
case "jp":
case "jpe":
case "jpo":
case "js":
case "jz":
instructionInfo = "Checks the state of one or more of the status flags in the EFLAGS register " +
"(CF, OF, PF, SF, and ZF) and, if the flags are in the specified state " +
"(condition), performs a jump to the target instruction specified by the " +
"destination operand. A condition code (cc) is associated with each " +
"instruction to indicate the condition being tested for. If the condition is " +
"not satisfied, the jump is not performed and execution continues with the " +
"instruction following the Jcc instruction.";
break;
case "kaddw":
case "kaddb":
case "kaddq":
case "kaddd":
instructionInfo = "Adds the vector mask k2 and the vector mask k3, and writes the result into " +
"vector mask k1.";
break;
case "kandw":
case "kandb":
case "kandq":
case "kandd":
instructionInfo = "Performs a bitwise AND between the vector mask k2 and the vector mask k3, " +
"and writes the result into vector mask k1.";
break;
case "kandnw":
case "kandnb":
case "kandnq":
case "kandnd":
instructionInfo = "Performs a bitwise AND NOT between the vector mask k2 and the vector mask " +
"k3, and writes the result into vector mask k1.";
break;
case "kmovw":
case "kmovb":
case "kmovq":
case "kmovd":
instructionInfo = "Copies values from the source operand (second operand) to the destination " +
"operand (first operand). The source and destination operands can be mask " +
"registers, memory location or general purpose. The instruction cannot be " +
"used to transfer data between general purpose registers and or memory locations.";
break;
case "knotw":
case "knotb":
case "knotq":
case "knotd":
instructionInfo = "Performs a bitwise NOT of vector mask k2 and writes the result into vector mask k1.";
break;
case "korw":
case "korb":
case "korq":
case "kord":
instructionInfo = "Performs a bitwise OR between the vector mask k2 and the vector mask k3, " +
"and writes the result into vector mask k1 (three-operand form).";
break;
case "kortestw":
case "kortestb":
case "kortestq":
case "kortestd":
instructionInfo = "Performs a bitwise OR between the vector mask register k2, and the vector " +
"mask register k1, and sets CF and ZF based on the operation result.";
break;
case "kshiftlw":
case "kshiftlb":
case "kshiftlq":
case "kshiftld":
instructionInfo = "Shifts 8/16/32/64 bits in the second operand (source operand) left by the " +
"count specified in immediate byte and place the least significant " +
"8/16/32/64 bits of the result in the destination operand. The higher bits " +
"of the destination are zero-extended. The destination is set to zero if the " +
"count value is greater than 7 (for byte shift), 15 (for word shift), 31 " +
"(for doubleword shift) or 63 (for quadword shift).";
break;
case "kshiftrw":
case "kshiftrb":
case "kshiftrq":
case "kshiftrd":
instructionInfo = "Shifts 8/16/32/64 bits in the second operand (source operand) right by the " +
"count specified in immediate and place the least significant 8/16/32/64 " +
"bits of the result in the destination operand. The higher bits of the " +
"destination are zero-extended. The destination is set to zero if the count " +
"value is greater than 7 (for byte shift), 15 (for word shift), 31 (for " +
"doubleword shift) or 63 (for quadword shift).";
break;
case "ktestw":
case "ktestb":
case "ktestq":
case "ktestd":
instructionInfo = "Performs a bitwise comparison of the bits of the first source operand and " +
"corresponding bits in the second source operand. If the AND operation " +
"produces all zeros, the ZF is set else the ZF is clear. If the bitwise " +
"AND operation of the inverted first source operand with the second source " +
"operand produces all zeros the CF is set else the CF is clear. Only the " +
"EFLAGS register is updated.";
break;
case "kunpckbw":
case "kunpckwd":
case "kunpckdq":
instructionInfo = "Unpacks the lower 8/16/32 bits of the second and third operands (source " +
"operands) into the low part of the first operand (destination operand), " +
"starting from the low bytes. The result is zero-extended in the destination.";
break;
case "kxnorw":
case "kxnorb":
case "kxnorq":
case "kxnord":
instructionInfo = "Performs a bitwise XNOR between the vector mask k2 and the vector mask k3, " +
"and writes the result into vector mask k1 (three-operand form).";
break;
case "kxorw":
case "kxorb":
case "kxorq":
case "kxord":
instructionInfo = "Performs a bitwise XOR between the vector mask k2 and the vector mask k3, " +
"and writes the result into vector mask k1 (three-operand form).";
break;
case "lahf":
instructionInfo = "This instruction executes as described above in compatibility mode and " +
"legacy mode. It is valid in 64-bit mode only if " +
"CPUID.80000001H:ECX.LAHF-SAHF[bit 0] = 1.";
break;
case "lar":
instructionInfo = "Loads the access rights from the segment descriptor specified by the second " +
"operand (source operand) into the first operand (destination operand) and " +
"sets the ZF flag in the flag register. The source operand (which can be a " +
"register or a memory location) contains the segment selector for the " +
"segment descriptor being accessed. If the source operand is a memory " +
"address, only 16 bits of data are accessed. The destination operand is a " +
"general-purpose register.";
break;
case "lddqu":
case "vlddqu":
instructionInfo = "The instruction is functionally similar to (V)MOVDQU ymm/xmm, " +
"m256/m128 for loading from memory. That is: 32/16 bytes of data starting " +
"at an address specified by the source memory operand (second operand) are " +
"fetched from memory and placed in a destination register (first operand). " +
"The source operand need not be aligned on a 32/16-byte boundary. Up to 64/32 " +
"bytes may be loaded from memory; this is implementation dependent.";
break;
case "ldmxcsr":
case "vldmxcsr":
instructionInfo = "Loads the source operand into the MXCSR control/status register. The source " +
"operand is a 32-bit memory location.";
break;
case "lds":
case "les":
case "lfs":
case "lgs":
case "lss":
instructionInfo = "Loads a far pointer (segment selector and offset) from the second operand " +
"(source operand) into a segment register and the first operand (destination " +
"operand). The source operand specifies a 48-bit or a 32-bit pointer in " +
"memory depending on the current setting of the operand-size attribute (32 " +
"bits or 16 bits, respectively). The instruction opcode and the destination " +
"operand specify a segment register/general-purpose register pair. The 16-bit " +
"segment selector from the source operand is loaded into the segment " +
"register specified with the opcode (DS, SS, ES, FS, or GS). The 32-bit or " +
"16-bit offset is loaded into the register specified with the destination operand.";
break;
case "lea":
instructionInfo = "Computes the effective address of the second operand (the source operand) " +
"and stores it in the first operand (destination operand). The source operand " +
"is a memory address (offset part) specified with one of the processors " +
"addressing modes; the destination operand is a general-purpose register. " +
"The address-size and operand-size attributes affect the action performed by " +
"this instruction, as shown in the following table. The operand-size " +
"attribute of the instruction is determined by the chosen register; the " +
"address-size attribute is determined by the attribute of the code segment.";
break;
case "leave":
instructionInfo = "Releases the stack frame set up by an earlier ENTER instruction. The LEAVE " +
"instruction copies the frame pointer (in the EBP register) into the stack " +
"pointer register (ESP), which releases the stack space allocated to the " +
"stack frame. The old frame pointer (the frame pointer for the calling " +
"procedure that was saved by the ENTER instruction) is then popped from the " +
"stack into the EBP register, restoring the calling procedures " +
"stack frame.";
break;
case "lfence":
instructionInfo = "Performs a serializing operation on all load-from-memory instructions that " +
"were issued prior the LFENCE instruction. Specifically, LFENCE does not " +
"execute until all prior instructions have completed locally, and no later " +
"instruction begins execution until LFENCE completes. In particular, an " +
"instruction that loads from memory and that precedes an LFENCE receives data " +
"from memory prior to completion of the LFENCE. (An LFENCE that follows an " +
"instruction that stores to memory might complete before the " +
"data being stored have become globally visible.) Instructions following an " +
"LFENCE may be fetched from memory before the LFENCE, but they will not " +
"execute (even speculatively) until the LFENCE completes.";
break;
case "lgdt":
case "lidt":
instructionInfo = "Loads the values in the source operand into the global descriptor table " +
"register (GDTR) or the interrupt descriptor table register (IDTR). " +
"The source operand specifies a 6-byte memory location that contains the base " +
"address (a linear address) and the limit (size of table in bytes) of the " +
"global descriptor table (GDT) or the interrupt descriptor table (IDT). If " +
"operand-size attribute is 32 bits, a 16-bit limit (lower 2 bytes of the " +
"6-byte data operand) and a 32-bit base address (upper 4 bytes of the data " +
"operand) are loaded into the register. If the operand-size attribute is 16 " +
"bits, a 16-bit limit (lower 2 bytes) and a 24-bit base address (third, " +
"fourth, and fifth byte) are loaded. Here, the high-order byte of the operand " +
"is not used and the high-order byte of the base address in the GDTR or IDTR " +
"is filled with zeros.";
break;
case "lldt":
instructionInfo = "Loads the source operand into the segment selector field of the local " +
"descriptor table register (LDTR). The source operand (a general-purpose " +
"register or a memory location) contains a segment selector that points to a " +
"local descriptor table (LDT). After the segment selector is loaded in the " +
"LDTR, the processor uses the segment selector to locate the segment " +
"descriptor for the LDT in the global descriptor table (GDT). It then loads " +
"the segment limit and base address for the LDT from the segment descriptor " +
"into the LDTR. The segment registers DS, ES, SS, FS, GS, and CS are not " +
"affected by this instruction, nor is the LDTR field in the task state " +
"segment (TSS) for the current task.";
break;
case "lmsw":
instructionInfo = "Loads the source operand into the machine status word, bits 0 through 15 of " +
"register CR0. The source operand can be a 16-bit general-purpose register " +
"or a memory location. Only the low-order 4 bits of the source operand " +
"(which contains the PE, MP, EM, and TS flags) are loaded into CR0. The PG, " +
"CD, NW, AM, WP, NE, and ET flags of CR0 are not affected. The operand-size " +
"attribute has no effect on this instruction.";
break;
case "lock":
instructionInfo = "Causes the processors LOCK# signal to be asserted during " +
"execution of the accompanying instruction (turns the instruction into an " +
"atomic instruction). In a multiprocessor environment, the LOCK# signal " +
"ensures that the processor has exclusive use of any shared memory while the " +
"signal is asserted.";
break;
case "lods":
case "lodsb":
case "lodsw":
case "lodsd":
case "lodsq":
instructionInfo = "Loads a byte, word, or doubleword from the source operand into the AL, AX, " +
"or EAX register, respectively. The source operand is a memory location, the " +
"address of which is read from the DS:ESI or the DS:SI registers (depending " +
"on the address-size attribute of the instruction, 32 or 16, respectively). " +
"The DS segment may be overridden with a segment override prefix.";
break;
case "loop":
case "loope":
case "loopne":
case "loopnz":
case "loopz":
instructionInfo = "Performs a loop operation using the RCX, ECX or CX register as a counter " +
"(depending on whether address size is 64 bits, 32 bits, or 16 bits). Note " +
"that the LOOP instruction ignores REX.W; but 64-bit address size can be " +
"over-ridden using a 67H prefix. LOOPcc also accept the ZF flag as a " +
"condition for terminating the loop before the count reaches zero. With " +
"these forms of the instruction, a condition code (cc) is associated with " +
"each instruction to indicate the condition being tested for.";
break;
case "lsl":
instructionInfo = "Loads the unscrambled segment limit from the segment descriptor specified " +
"with the second operand (source operand) into the first operand (destination " +
"operand) and sets the ZF flag in the EFLAGS register. The source operand " +
"(which can be a register or a memory location) contains the segment selector " +
"for the segment descriptor being accessed. The destination operand is a " +
"general-purpose register.";
break;
case "ltr":
instructionInfo = "Loads the source operand into the segment selector field of the task " +
"register. The source operand (a general-purpose register or a memory " +
"location) contains a segment selector that points to a task state segment " +
"(TSS). After the segment selector is loaded in the task register, the " +
"processor uses the segment selector to locate the segment descriptor for the " +
"TSS in the global descriptor table (GDT). It then loads the segment limit " +
"and base address for the TSS from the segment descriptor into the task " +
"register. The task pointed to by the task register is marked busy, but a " +
"switch to the task does not occur.";
break;
case "lzcnt":
instructionInfo = "Counts the number of leading most significant zero bits in a source operand " +
"(second operand) returning the result into a destination (first operand).";
break;
case "maskmovdqu":
instructionInfo = "Stores selected bytes from the source operand (first operand) into an " +
"128-bit memory location. The mask operand (second operand) selects which " +
"bytes from the source operand are written to memory. The source and mask " +
"operands are XMM registers. The memory location specified by the effective " +
"address in the DI/EDI/RDI register (the default segment register is DS, but " +
"this may be overridden with a segment-override prefix). The memory location " +
"does not need to be aligned on a natural boundary. (The size of the store " +
"address depends on the address-size attribute.)";
break;
case "maskmovq":
instructionInfo = "Stores selected bytes from the source operand (first operand) into a 64-bit " +
"memory location. The mask operand (second operand) selects which bytes from " +
"the source operand are written to memory. The source and mask operands are " +
"MMX technology registers. The memory location specified by the effective " +
"address in the DI/EDI/RDI register (the default segment register is DS, but " +
"this may be overridden with a segment-override prefix). The memory location " +
"does not need to be aligned on a natural boundary. (The size of the store " +
"address depends on the address-size attribute.)";
break;
case "maxpd":
case "vmaxpd":
instructionInfo = "Performs a SIMD compare of the packed double-precision floating-point values " +
"in the first source operand and the second source operand and returns the " +
"maximum value for each pair of values to the destination operand.";
break;
case "maxps":
case "vmaxps":
instructionInfo = "Performs a SIMD compare of the packed single-precision floating-point values " +
"in the first source operand and the second source operand and returns the " +
"maximum value for each pair of values to the destination operand.";
break;
case "maxsd":
case "vmaxsd":
instructionInfo = "Compares the low double-precision floating-point values in the first source " +
"operand and the second source operand, and returns the maximum value to the " +
"low quadword of the destination operand. The second source operand can be an " +
"XMM register or a 64-bit memory location. The first source and destination " +
"operands are XMM registers. When the second source operand is a memory " +
"operand, only 64 bits are accessed.";
break;
case "maxss":
case "vmaxss":
instructionInfo = "Compares the low single-precision floating-point values in the first source " +
"operand and the second source operand, and returns the maximum value to the " +
"low doubleword of the destination operand.";
break;
case "mfence":
instructionInfo = "Performs a serializing operation on all load-from-memory and store-to-memory " +
"instructions that were issued prior the MFENCE instruction. This serializing " +
"operation guarantees that every load and store instruction that precedes the " +
"MFENCE instruction in program order becomes globally visible before any load " +
"or store instruction that follows the MFENCE instruction. The " +
"MFENCE instruction is ordered with respect to all load and store " +
"instructions, other MFENCE instructions, any LFENCE and SFENCE instructions, " +
"and any serializing instructions (such as the CPUID instruction). MFENCE " +
"does not serialize the instruction stream.";
break;
case "minpd":
case "vminpd":
instructionInfo = "Performs a SIMD compare of the packed double-precision floating-point values " +
"in the first source operand and the second source operand and returns the " +
"minimum value for each pair of values to the destination operand.";
break;
case "minps":
case "vminps":
instructionInfo = "Performs a SIMD compare of the packed single-precision floating-point " +
"values in the first source operand and the second source operand and returns " +
"the minimum value for each pair of values to the destination operand.";
break;
case "minsd":
case "vminsd":
instructionInfo = "Compares the low double-precision floating-point values in the first source " +
"operand and the second source operand, and returns the minimum value to the " +
"low quadword of the destination operand. When the source operand is a memory " +
"operand, only the 64 bits are accessed.";
break;
case "minss":
case "vminss":
instructionInfo = "Compares the low single-precision floating-point values in the first source " +
"operand and the second source operand and returns the minimum value to the " +
"low doubleword of the destination operand.";
break;
case "monitor":
instructionInfo = "The MONITOR instruction arms address monitoring hardware using an address " +
"specified in EAX (the address range that the monitoring hardware checks for " +
"store operations can be determined by using CPUID). A store to an address " +
"within the specified address range triggers the monitoring hardware. The " +
"state of monitor hardware is used by MWAIT.";
break;
case "mov":
instructionInfo = "Copies the second operand (source operand) to the first operand (destination " +
"operand). The source operand can be an immediate value, general-purpose " +
"register, segment register, or memory location; the destination register can " +
"be a general-purpose register, segment register, or memory location. Both " +
"operands must be the same size, which can be a byte, a word, a doubleword, " +
"or a quadword.";
break;
case "movabs":
instructionInfo = "Moves 4, 8 or 16 single-precision floating-point values from the source " +
"operand (second operand) to the destina-tion operand (first operand).";
break;
case "movapd":
case "vmovapd":
instructionInfo = "Moves 2, 4 or 8 double-precision floating-point values from the source " +
"operand (second operand) to the destination operand (first operand). This " +
"instruction can be used to load an XMM, YMM or ZMM register from an 128-bit, " +
"256-bit or 512-bit memory location, to store the contents of an XMM, YMM or " +
"ZMM register into a 128-bit, 256-bit or 512-bit memory location, or to move " +
"data between two XMM, two YMM or two ZMM registers.";
break;
case "movaps":
case "vmovaps":
instructionInfo = "Moves 4, 8 or 16 single-precision floating-point values from the source " +
"operand (second operand) to the destination operand (first operand). This " +
"instruction can be used to load an XMM, YMM or ZMM register from an 128-bit, " +
"256-bit or 512-bit memory location, to store the contents of an XMM, YMM or " +
"ZMM register into a 128-bit, 256-bit or 512-bit memory location, or to move " +
"data between two XMM, two YMM or two ZMM registers.";
break;
case "movbe":
instructionInfo = "Performs a byte swap operation on the data copied from the second operand " +
"(source operand) and store the result in the first operand (destination " +
"operand). The source operand can be a general-purpose register, or memory " +
"location; the destination register can be a general-purpose register, or a " +
"memory location; however, both operands can not be registers, and only one " +
"operand can be a memory location. Both operands must be the same size, which " +
"can be a word, a doubleword or quadword.";
break;
case "movd":
case "vmovd":
instructionInfo = "Copies a doubleword from the source operand (second operand) to the " +
"destination operand (first operand). The source and destination operands can " +
"be general-purpose registers, MMX technology registers, XMM registers, or " +
"32-bit memory locations. This instruction can be used to move a doubleword " +
"to and from the low doubleword of an MMX technology register and a " +
"general-purpose register or a 32-bit memory location, or to and from the low " +
"doubleword of an XMM register and a general-purpose register or a 32-bit " +
"memory location. The instruction cannot be used to transfer data between MMX " +
"technology registers, between XMM registers, between general-purpose " +
"registers, or between memory locations.";
break;
case "movddup":
case "vmovddup":
instructionInfo = "For 256-bit or higher versions: Duplicates even-indexed double-precision " +
"floating-point values from the source operand (the second operand) and into " +
"adjacent pair and store to the destination operand (the first operand).";
break;
case "movdir64b":
instructionInfo = "Moves 64-bytes as direct-store with 64-byte write atomicity from source " +
"memory address to destination memory address. The source operand is a " +
"normal memory operand. The destination operand is a memory location " +
"specified in a general-purpose register. The register content is interpreted " +
"as an offset into ES segment without any segment override. In 64-bit mode, " +
"the register operand width is 64-bits (32-bits with 67H prefix). Outside of " +
"64-bit mode, the register width is 32-bits when CS.D=1 (16-bits with 67H " +
"prefix), and 16-bits when CS.D=0 (32-bits with 67H prefix). MOVDIR64B " +
"requires the destination address to be 64-byte aligned. No alignment " +
"restriction is enforced for source operand.";
break;
case "movdiri":
instructionInfo = "Moves the doubleword integer in the source operand (second operand) to the " +
"destination operand (first operand) using a direct-store operation. The " +
"source operand is a general purpose register. The destination operand is a " +
"32-bit memory location. In 64-bit mode, the instructions default " +
"operation size is 32 bits. Use of the REX.R prefix permits access to " +
"additional registers (R8-R15). Use of the REX.W prefix promotes operation " +
"to 64 bits. See summary chart at the beginning of this section for encoding " +
"data and limits.";
break;
case "movdq2q":
instructionInfo = "Moves the low quadword from the source operand (second operand) to the " +
"destination operand (first operand). The source operand is an XMM register " +
"and the destination operand is an MMX technology register.";
break;
case "movdqa":
case "vmovdqa":
case "vmovdqa32":
case "vmovdqa64":
instructionInfo = "Note: VEX.vvvv and EVEX.vvvv are reserved and must be 1111b otherwise instructions will #UD.";
break;
case "movdqu":
case "vmovdqu":
case "vmovdqu8":
case "vmovdqu16":
case "vmovdqu32":
case "vmovdqu64":
instructionInfo = "Note: VEX.vvvv and EVEX.vvvv are reserved and must be 1111b otherwise instructions will #UD.";
break;
case "movhlps":
case "vmovhlps":
instructionInfo = "This instruction cannot be used for memory to register moves.";
break;
case "movhpd":
case "vmovhpd":
instructionInfo = "This instruction cannot be used for register to register or memory to memory moves.";
break;
case "movhps":
case "vmovhps":
instructionInfo = "This instruction cannot be used for register to register or memory to memory moves.";
break;
case "movlhps":
case "vmovlhps":
instructionInfo = "This instruction cannot be used for memory to register moves.";
break;
case "movlpd":
case "vmovlpd":
instructionInfo = "This instruction cannot be used for register to register or memory to memory moves.";
break;
case "movlps":
case "vmovlps":
instructionInfo = "This instruction cannot be used for register to register or memory to memory moves.";
break;
case "movmskpd":
case "vmovmskpd":
instructionInfo = "Extracts the sign bits from the packed double-precision floating-point " +
"values in the source operand (second operand), formats them into a 2-bit " +
"mask, and stores the mask in the destination operand (first operand). The " +
"source operand is an XMM register, and the destination operand is a " +
"general-purpose register. The mask is stored in the 2 low-order bits of the " +
"destination operand. Zero-extend the upper bits of the destination.";
break;
case "movmskps":
case "vmovmskps":
instructionInfo = "Extracts the sign bits from the packed single-precision floating-point " +
"values in the source operand (second operand), formats them into a 4- or " +
"8-bit mask, and stores the mask in the destination operand (first operand). " +
"The source operand is an XMM or YMM register, and the destination operand is " +
"a general-purpose register. The mask is stored in the 4 or 8 low-order bits " +
"of the destination operand. The upper bits of the destination operand beyond " +
"the mask are filled with zeros.";
break;
case "movntdq":
case "vmovntdq":
instructionInfo = "Moves the packed integers in the source operand (second operand) to the " +
"destination operand (first operand) using a non-temporal hint to prevent " +
"caching of the data during the write to memory. The source operand is an XMM " +
"register, YMM register or ZMM register, which is assumed to contain integer " +
"data (packed bytes, words, double-words, or quadwords). The destination " +
"operand is a 128-bit, 256-bit or 512-bit memory location. The memory operand " +
"must be aligned on a 16-byte (128-bit version), 32-byte (VEX.256 encoded " +
"version) or 64-byte (512-bit version) boundary otherwise a " +
"general-protection exception (#GP) will be generated.";
break;
case "movntdqa":
case "vmovntdqa":
instructionInfo = "MOVNTDQA loads a double quadword from the source operand (second operand) to " +
"the destination operand (first operand) using a non-temporal hint if the " +
"memory source is WC (write combining) memory type. For WC memory type, the " +
"nontemporal hint may be implemented by loading a temporary internal buffer " +
"with the equivalent of an aligned cache line without filling this data to " +
"the cache. Any memory-type aliased lines in the cache will be snooped and " +
"flushed. Subsequent MOVNTDQA reads to unread portions of the WC cache line " +
"will receive data from the temporary internal buffer if data is available. " +
"The temporary internal buffer may be flushed by the processor at any time " +
"for any reason, for example:";
break;
case "movnti":
instructionInfo = "Moves the doubleword integer in the source operand (second operand) to the " +
"destination operand (first operand) using a non-temporal hint to minimize " +
"cache pollution during the write to memory. The source operand is a " +
"general-purpose register. The destination operand is a 32-bit memory location.";
break;
case "movntpd":
case "vmovntpd":
instructionInfo = "Moves the packed double-precision floating-point values in the source " +
"operand (second operand) to the destination operand (first operand) using a " +
"non-temporal hint to prevent caching of the data during the write to memory. " +
"The source operand is an XMM register, YMM register or ZMM register, which " +
"is assumed to contain packed double-precision, floating-pointing data. The " +
"destination operand is a 128-bit, 256-bit or 512-bit memory location. The " +
"memory operand must be aligned on a 16-byte (128-bit version), 32-byte " +
"(VEX.256 encoded version) or 64-byte (EVEX.512 encoded version) boundary " +
"otherwise a general-protection exception (#GP) will be generated.";
break;
case "movntps":
case "vmovntps":
instructionInfo = "Moves the packed single-precision floating-point values in the source " +
"operand (second operand) to the destination operand (first operand) using a " +
"non-temporal hint to prevent caching of the data during the write to memory. " +
"The source operand is an XMM register, YMM register or ZMM register, which " +
"is assumed to contain packed single-precision, floating-pointing. The " +
"destination operand is a 128-bit, 256-bit or 512-bit memory location. The " +
"memory operand must be aligned on a 16-byte (128-bit version), 32-byte " +
"(VEX.256 encoded version) or 64-byte (EVEX.512 encoded version) boundary " +
"otherwise a general-protection exception (#GP) will be generated.";
break;
case "movntq":
instructionInfo = "Moves the quadword in the source operand (second operand) to the destination " +
"operand (first operand) using a non-temporal hint to minimize cache " +
"pollution during the write to memory. The source operand is an MMX " +
"technology register, which is assumed to contain packed integer data (packed " +
"bytes, words, or doublewords). The destination operand is a 64-bit memory location.";
break;
case "movq":
case "vmovq":
instructionInfo = "Copies a quadword from the source operand (second operand) to the " +
"destination operand (first operand). The source and destination operands can " +
"be MMX technology registers, XMM registers, or 64-bit memory locations. This " +
"instruction can be used to move a quadword between two MMX technology " +
"registers or between an MMX technology register and a 64-bit memory " +
"location, or to move data between two XMM registers or between an XMM " +
"register and a 64-bit memory location. The instruction cannot be used to " +
"transfer data between memory locations.";
break;
case "movq2dq":
instructionInfo = "Moves the quadword from the source operand (second operand) to the low " +
"quadword of the destination operand (first operand). The source operand is " +
"an MMX technology register and the destination operand is an XMM register.";
break;
case "movs":
case "movsb":
case "movsw":
case "movsq":
instructionInfo = "Moves the byte, word, or doubleword specified with the second operand " +
"(source operand) to the location specified with the first operand " +
"(destination operand). Both the source and destination operands are located " +
"in memory. The address of the source operand is read from the DS:ESI or the " +
"DS:SI registers (depending on the address-size attribute of the instruction, " +
"32 or 16, respectively). The address of the destination operand is read from " +
"the ES:EDI or the ES:DI registers (again depending on the address-size " +
"attribute of the instruction). The DS segment may be overridden with a " +
"segment override prefix, but the ES segment cannot be overridden.";
break;
case "movsd":
case "vmovsd":
instructionInfo = "Moves a scalar double-precision floating-point value from the source operand " +
"(second operand) to the destination operand (first operand). The source and " +
"destination operands can be XMM registers or 64-bit memory locations. This " +
"instruction can be used to move a double-precision floating-point value to " +
"and from the low quadword of an XMM register and a 64-bit memory location, " +
"or to move a double-precision floating-point value between the low quadwords " +
"of two XMM registers. The instruction cannot be used to transfer data " +
"between memory locations.";
break;
case "movshdup":
case "vmovshdup":
instructionInfo = "Duplicates odd-indexed single-precision floating-point values from the " +
"source operand (the second operand) to adjacent element pair in the " +
"destination operand (the first operand). The source operand is an XMM, YMM " +
"or ZMM register or 128, 256 or 512-bit memory location and the destination " +
"operand is an XMM, YMM or ZMM register.";
break;
case "movsldup":
case "vmovsldup":
instructionInfo = "Duplicates even-indexed single-precision floating-point values from the " +
"source operand (the second operand). The source operand is an XMM, YMM or " +
"ZMM register or 128, 256 or 512-bit memory location and the destination " +
"operand is an XMM, YMM or ZMM register.";
break;
case "movss":
case "vmovss":
instructionInfo = "Moves a scalar single-precision floating-point value from the source operand " +
"(second operand) to the destination operand (first operand). The source and " +
"destination operands can be XMM registers or 32-bit memory locations. This " +
"instruction can be used to move a single-precision floating-point value to " +
"and from the low doubleword of an XMM register and a 32-bit memory location, " +
"or to move a single-precision floating-point value between the low " +
"doublewords of two XMM registers. The instruction cannot be used to transfer " +
"data between memory locations.";
break;
case "movsx":
case "movsxd":
instructionInfo = "Copies the contents of the source operand (register or memory location) to " +
"the destination operand (register) and sign extends the value to 16 or 32 " +
"bits. The size of the converted value depends on the operand-size attribute.";
break;
case "movupd":
case "vmovupd":
instructionInfo = "Note: VEX.vvvv and EVEX.vvvv is reserved and must be 1111b otherwise instructions will #UD.";
break;
case "movups":
case "vmovups":
instructionInfo = "Note: VEX.vvvv and EVEX.vvvv is reserved and must be 1111b otherwise instructions will #UD.";
break;
case "movzx":
instructionInfo = "Copies the contents of the source operand (register or memory location) to " +
"the destination operand (register) and zero extends the value. The size of " +
"the converted value depends on the operand-size attribute.";
break;
case "mpsadbw":
case "vmpsadbw":
instructionInfo = "(V)MPSADBW calculates packed word results of sum-absolute-difference (SAD) " +
"of unsigned bytes from two blocks of 32-bit dword elements, using two select " +
"fields in the immediate byte to select the offsets of the two blocks within " +
"the first source operand and the second operand. Packed SAD word results are " +
"calculated within each 128-bit lane. Each SAD word result is calculated " +
"between a stationary block_2 (whose offset within the second source operand " +
"is selected by a two bit select control, multiplied by 32 bits) and a " +
"sliding block_1 at consecutive byte-granular position within the first source " +
"operand. The offset of the first 32-bit block of block_1 is selectable using " +
"a one bit select control, multiplied by 32 bits.";
break;
case "mul":
instructionInfo = "Performs an unsigned multiplication of the first operand (destination " +
"operand) and the second operand (source operand) and stores the result in the " +
"destination operand. The destination operand is an implied operand located in " +
"register AL, AX or EAX (depending on the size of the operand); the source " +
"operand is located in a general-purpose register or a memory location. The " +
"action of this instruction and the location of the result depends on the " +
"opcode and the operand size.";
break;
case "mulpd":
case "vmulpd":
instructionInfo = "Multiply packed double-precision floating-point values from the first source " +
"operand with corresponding values in the second source operand, and stores " +
"the packed double-precision floating-point results in the destination operand.";
break;
case "mulps":
case "vmulps":
instructionInfo = "Multiply the packed single-precision floating-point values from the first " +
"source operand with the corresponding values in the second source operand, " +
"and stores the packed double-precision floating-point results in the " +
"destination operand.";
break;
case "mulsd":
case "vmulsd":
instructionInfo = "Multiplies the low double-precision floating-point value in the second source " +
"operand by the low double-precision floating-point value in the first source " +
"operand, and stores the double-precision floating-point result in the " +
"destination operand. The second source operand can be an XMM register or a " +
"64-bit memory location. The first source operand and the destination operands " +
"are XMM registers.";
break;
case "mulss":
case "vmulss":
instructionInfo = "Multiplies the low single-precision floating-point value from the second " +
"source operand by the low single-precision floating-point value in the first " +
"source operand, and stores the single-precision floating-point result in the " +
"destination operand. The second source operand can be an XMM register or a " +
"32-bit memory location. The first source operand and the destination operands " +
"are XMM registers.";
break;
case "mulx":
instructionInfo = "Performs an unsigned multiplication of the implicit source operand (EDX/RDX) " +
"and the specified source operand (the third operand) and stores the low half " +
"of the result in the second destination (second operand), the high half of " +
"the result in the first destination operand (first operand), without reading " +
"or writing the arithmetic flags. This enables efficient programming where " +
"the software can interleave add with carry operations and multiplications.";
break;
case "mwait":
instructionInfo = "MWAIT instruction provides hints to allow the processor to enter an " +
"implementation-dependent optimized state. There are two principal targeted " +
"usages: address-range monitor and advanced power management. Both usages of " +
"MWAIT require the use of the MONITOR instruction.";
break;
case "neg":
instructionInfo = "Replaces the value of operand (the destination operand) with its two\'s " +
"complement. (This operation is equivalent to subtracting the operand from 0.) " +
"The destination operand is located in a general-purpose register or a memory " +
"location.";
break;
case "nop":
instructionInfo = "This instruction performs no operation. It is a one-byte or multi-byte NOP " +
"that takes up space in the instruction stream but does not impact machine " +
"context, except for the EIP register.";
break;
case "not":
instructionInfo = "Performs a bitwise NOT operation (each 1 is set to 0, and each 0 is set to 1) " +
"on the destination operand and stores the result in the destination operand " +
"location. The destination operand can be a register or a memory location.";
break;
case "or":
instructionInfo = "Performs a bitwise inclusive OR operation between the destination (first) " +
"and source (second) operands and stores the result in the destination operand " +
"location. The source operand can be an immediate, a register, or a memory " +
"location; the destination operand can be a register or a memory location. " +
"(However, two memory operands cannot be used in one instruction.) Each bit " +
"of the result of the OR instruction is set to 0 if both corresponding bits " +
"of the first and second operands are 0; otherwise, each bit is set to 1.";
break;
case "orpd":
case "vorpd":
instructionInfo = "Performs a bitwise logical OR of the two, four or eight packed " +
"double-precision floating-point values from the first source operand and the " +
"second source operand, and stores the result in the destination operand.";
break;
case "orps":
case "vorps":
instructionInfo = "Performs a bitwise logical OR of the four, eight or sixteen packed " +
"single-precision floating-point values from the first source operand and the " +
"second source operand, and stores the result in the destination operand";
break;
case "out":
instructionInfo = "Copies the value from the second operand (source operand) to the I/O port " +
"specified with the destination operand (first operand). The source operand " +
"can be register AL, AX, or EAX, depending on the size of the port being " +
"accessed (8, 16, or 32 bits, respectively); the destination operand can be a " +
"byte-immediate or the DX register. Using a byte immediate allows I/O port " +
"addresses 0 to 255 to be accessed; using the DX register as a source operand " +
"allows I/O ports from 0 to 65,535 to be accessed.";
break;
case "outs":
case "outsb":
case "outsw":
case "outsd":
instructionInfo = "Copies data from the source operand (second operand) to the I/O port " +
"specified with the destination operand (first operand). The source operand " +
"is a memory location, the address of which is read from either the DS:SI, " +
"DS:ESI or the RSI registers (depending on the address-size attribute of the " +
"instruction, 16, 32 or 64, respectively). (The DS segment may be overridden " +
"with a segment override prefix.) The destination operand is an I/O port " +
"address (from 0 to 65,535) that is read from the DX register. The size of " +
"the I/O port being accessed (that is, the size of the source and destination " +
"operands) is determined by the opcode for an 8-bit I/O port or by the " +
"operand-size attribute of the instruction for a 16- or 32-bit I/O port.";
break;
case "pabsb":
case "vpabsb":
case "pabsw":
case "vpabsw":
case "pabsd":
case "vpabsd":
case "pabsq":
instructionInfo = "PABSB/W/D computes the absolute value of each data element of the source " +
"operand (the second operand) and stores the UNSIGNED results in the " +
"destination operand (the first operand). PABSB operates on signed bytes, " +
"PABSW operates on signed 16-bit words, and PABSD operates on signed 32-bit integers.";
break;
case "packsswb":
case "vpacksswb":
case "packssdw":
case "vpackssdw":
instructionInfo = "Converts packed signed word integers into packed signed byte integers " +
"(PACKSSWB) or converts packed signed doubleword integers into packed signed " +
"word integers (PACKSSDW), using saturation to handle overflow conditions.";
break;
case "packusdw":
case "vpackusdw":
instructionInfo = "Converts packed signed doubleword integers in the first and second source " +
"operands into packed unsigned word integers using unsigned saturation to " +
"handle overflow conditions. If the signed doubleword value is beyond the " +
"range of an unsigned word (that is, greater than FFFFH or less than 0000H), " +
"the saturated unsigned word integer value of FFFFH or 0000H, respectively, " +
"is stored in the destination.";
break;
case "packuswb":
case "vpackuswb":
instructionInfo = "Converts 4, 8, 16 or 32 signed word integers from the destination operand " +
"(first operand) and 4, 8, 16 or 32 signed word integers from the source " +
"operand (second operand) into 8, 16, 32 or 64 unsigned byte integers and " +
"stores the result in the destination operand. If a signed word integer value " +
"is beyond the range of an unsigned byte integer (that is, greater than FFH " +
"or less than 00H), the saturated unsigned byte integer value of FFH or 00H, " +
"respectively, is stored in the destination.";
break;
case "paddb":
case "vpaddb":
case "paddw":
case "vpaddw":
case "paddd":
case "vpaddd":
case "paddq":
case "vpaddq":
instructionInfo = "Performs a SIMD add of the packed integers from the source operand (second " +
"operand) and the destination operand (first operand), and stores the packed " +
"integer results in the destination operand. Overflow is handled with " +
"wraparound, as described in the following paragraphs.";
break;
case "paddsb":
case "vpaddsb":
case "paddsw":
case "vpaddsw":
instructionInfo = "Performs a SIMD add of the packed signed integers from the source operand " +
"(second operand) and the destination operand (first operand), and stores the " +
"packed integer results in the destination operand. Overflow is handled with " +
"signed saturation, as described in the following paragraphs.";
break;
case "paddusb":
case "vpaddusb":
case "paddusw":
case "vpaddusw":
instructionInfo = "Performs a SIMD add of the packed unsigned integers from the source operand " +
"(second operand) and the destination operand (first operand), and stores the " +
"packed integer results in the destination operand. Overflow is handled with " +
"unsigned saturation, as described in the following paragraphs.";
break;
case "palignr":
case "vpalignr":
instructionInfo = "(V)PALIGNR concatenates the destination operand (the first operand) and the " +
"source operand (the second operand) into an intermediate composite, shifts " +
"the composite at byte granularity to the right by a constant immediate, and " +
"extracts the right-aligned result into the destination. The first and the " +
"second operands can be an MMX,";
break;
case "pand":
case "vpand":
instructionInfo = "Performs a bitwise logical AND operation on the first source operand and " +
"second source operand and stores the result in the destination operand. Each " +
"bit of the result is set to 1 if the corresponding bits of the first and " +
"second operands are 1, otherwise it is set to 0.";
break;
case "pandn":
case "vpandn":
instructionInfo = "Performs a bitwise logical NOT operation on the first source operand, then " +
"performs bitwise AND with second source operand and stores the result in the " +
"destination operand. Each bit of the result is set to 1 if the corresponding " +
"bit in the first operand is 0 and the corresponding bit in the second " +
"operand is 1, otherwise it is set to 0.";
break;
case "pause":
instructionInfo = "Improves the performance of spin-wait loops. When executing a " +
"\"spin-wait loop,\" processors will suffer a severe " +
"performance penalty when exiting the loop because it detects a possible " +
"memory order violation. The PAUSE instruction provides a hint to the " +
"processor that the code sequence is a spin-wait loop. The processor uses this " +
"hint to avoid the memory order violation in most situations, which greatly " +
"improves processor performance. For this reason, it is recommended that a " +
"PAUSE instruction be placed in all spin-wait loops.";
break;
case "pavgb":
case "vpavgb":
case "pavgw":
case "vpavgw":
instructionInfo = "Performs a SIMD average of the packed unsigned integers from the source " +
"operand (second operand) and the destination operand (first operand), and " +
"stores the results in the destination operand. For each corresponding pair " +
"of data elements in the first and second operands, the elements are added " +
"together, a 1 is added to the temporary sum, and that result is shifted " +
"right one bit position.";
break;
case "pblendvb":
case "vpblendvb":
instructionInfo = "Conditionally copies byte elements from the source operand (second operand) " +
"to the destination operand (first operand) depending on mask bits defined in " +
"the implicit third register argument, XMM0. The mask bits are the most " +
"significant bit in each byte element of the XMM0 register.";
break;
case "pblendw":
case "vpblendw":
instructionInfo = "Words from the source operand (second operand) are conditionally written to " +
"the destination operand (first operand) depending on bits in the immediate " +
"operand (third operand). The immediate bits (bits 7:0) form a mask that " +
"determines whether the corresponding word in the destination is copied from " +
"the source. If a bit in the mask, corresponding to a word, is \"1\", then " +
"the word is copied, else the word element in the destination operand is unchanged.";
break;
case "pclmulqdq":
case "vpclmulqdq":
instructionInfo = "Performs a carry-less multiplication of two quadwords, selected from the " +
"first source and second source operand according to the value of the " +
"immediate byte. Bits 4 and 0 are used to select which 64-bit half of each " +
"operand to use, other bits of the immediate byte are ignored.";
break;
case "pcmpeqb":
case "vpcmpeqb":
case "pcmpeqw":
case "vpcmpeqw":
case "pcmpeqd":
case "vpcmpeqd":
instructionInfo = "Performs a SIMD compare for equality of the packed bytes, words, or " +
"doublewords in the destination operand (first operand) and the source " +
"operand (second operand). If a pair of data elements is equal, the " +
"corresponding data element in the destination operand is set to all 1s; " +
"otherwise, it is set to all 0s.";
break;
case "pcmpeqq":
case "vpcmpeqq":
instructionInfo = "Performs an SIMD compare for equality of the packed quadwords in the " +
"destination operand (first operand) and the source operand (second operand). " +
"If a pair of data elements is equal, the corresponding data element in the " +
"destination is set to all 1s; otherwise, it is set to 0s.";
break;
case "pcmpestri":
case "vpcmpestri":
instructionInfo = "The instruction compares and processes data from two string fragments based " +
"on the encoded value in the Imm8 Control Byte, and generates an index stored " +
"to the count register (ECX).";
break;
case "pcmpestrm":
case "vpcmpestrm":
instructionInfo = "The instruction compares data from two string fragments based on the encoded " +
"value in the imm8 contol byte, " +
"and generates a mask stored to XMM0.";
break;
case "pcmpgtb":
case "vpcmpgtb":
case "pcmpgtw":
case "vpcmpgtw":
case "pcmpgtd":
case "vpcmpgtd":
instructionInfo = "Performs an SIMD signed compare for the greater value of the packed byte, " +
"word, or doubleword integers in the destination operand (first operand) and " +
"the source operand (second operand). If a data element in the destination " +
"operand is greater than the corresponding date element in the source operand, " +
"the corresponding data element in the destination operand is set to all 1s; " +
"otherwise, it is set to all 0s.";
break;
case "pcmpgtq":
case "vpcmpgtq":
instructionInfo = "Performs an SIMD signed compare for the packed quadwords in the destination " +
"operand (first operand) and the source operand (second operand). If the data " +
"element in the first (destination) operand is greater than the corresponding " +
"element in the second (source) operand, the corresponding data element in " +
"the destination is set to all 1s; otherwise, it is set to 0s.";
break;
case "pcmpistri":
case "vpcmpistri":
instructionInfo = "The instruction compares data from two strings based on the encoded value in " +
"the Imm8 Control Byte, " +
"and generates an index stored to ECX.";
break;
case "pcmpistrm":
case "vpcmpistrm":
instructionInfo = "The instruction compares data from two strings based on the encoded value in " +
"the imm8 byte generating a mask stored to XMM0.";
break;
case "pdep":
instructionInfo = "PDEP uses a mask in the second source operand (the third operand) to " +
"transfer/scatter contiguous low order bits in the first source operand " +
"(the second operand) into the destination (the first operand). PDEP takes " +
"the low bits from the first source operand and deposit them in the " +
"destination operand at the corresponding bit locations that are set in the " +
"second source operand (mask). All other bits (bits not set in mask) in " +
"destination are set to zero.";
break;
case "pext":
instructionInfo = "PEXT uses a mask in the second source operand (the third operand) to transfer " +
"either contiguous or non-contiguous bits in the first source operand (the " +
"second operand) to contiguous low order bit positions in the destination " +
"(the first operand). For each bit set in the MASK, PEXT extracts the " +
"corresponding bits from the first source operand and writes them into " +
"contiguous lower bits of destination operand. The remaining upper bits of " +
"destination are zeroed.";
break;
case "pextrb":
case "vpextrb":
case "pextrd":
case "vpextrd":
case "pextrq":
case "vpextrq":
instructionInfo = "Extract a byte/dword/qword integer value from the source XMM register at a " +
"byte/dword/qword offset determined from imm8[3:0]. The destination can be a " +
"register or byte/dword/qword memory location. If the destination is a " +
"register, the upper bits of the register are zero extended.";
break;
case "pextrw":
case "vpextrw":
instructionInfo = "Copies the word in the source operand (second operand) specified by the count " +
"operand (third operand) to the destination operand (first operand). The " +
"source operand can be an MMX technology register or an XMM register. The " +
"destination operand can be the low word of a general-purpose register or a " +
"16-bit memory address. The count operand is an 8-bit immediate. When " +
"specifying a word location in an MMX technology register, the 2 " +
"least-significant bits of the count operand specify the location; for an XMM " +
"register, the 3 least-significant bits specify the location. The content of " +
"the destination register above bit 16 is cleared (set to all 0s).";
break;
case "phaddw":
case "vphaddw":
case "phaddd":
case "vphaddd":
instructionInfo = "(V)PHADDW adds two adjacent 16-bit signed integers horizontally from the " +
"source and destination operands and packs the 16-bit signed results to the " +
"destination operand (first operand). (V)PHADDD adds two adjacent 32-bit " +
"signed integers horizontally from the source and destination operands and " +
"packs the 32-bit signed results to the destination operand (first operand). " +
"When the source operand is a 128-bit memory operand, the operand must be " +
"aligned on a 16-byte boundary or a general-protection exception (#GP) will be " +
"generated.";
break;
case "phaddsw":
case "vphaddsw":
instructionInfo = "(V)PHADDSW adds two adjacent signed 16-bit integers horizontally from the " +
"source and destination operands and saturates the signed results; packs the " +
"signed, saturated 16-bit results to the destination operand (first operand) " +
"When the source operand is a 128-bit memory operand, the operand must be " +
"aligned on a 16-byte boundary or a general-protection exception (#GP) will be generated.";
break;
case "phminposuw":
case "vphminposuw":
instructionInfo = "Determine the minimum unsigned word value in the source operand (second operand) " +
"and place the unsigned word in the low word (bits 0-15) of the destination " +
"operand (first operand). The word index of the minimum value is stored in " +
"bits 16-18 of the destination operand. The remaining upper bits of the " +
"destination are set to zero.";
break;
case "phsubw":
case "vphsubw":
case "phsubd":
case "vphsubd":
instructionInfo = "(V)PHSUBW performs horizontal subtraction on each adjacent pair of 16-bit " +
"signed integers by subtracting the most significant word from the least " +
"significant word of each pair in the source and destination operands, and " +
"packs the signed 16-bit results to the destination operand (first operand). " +
"(V)PHSUBD performs horizontal subtraction on each adjacent pair of 32-bit " +
"signed integers by subtracting the most significant doubleword from the " +
"least significant doubleword of each pair, and packs the signed 32-bit " +
"result to the destination operand. When the source operand is a 128-bit " +
"memory operand, the operand must be aligned on a 16-byte boundary or a " +
"general-protection exception (#GP) will be generated.";
break;
case "phsubsw":
case "vphsubsw":
instructionInfo = "(V)PHSUBSW performs horizontal subtraction on each adjacent pair of 16-bit " +
"signed integers by subtracting the most significant word from the least " +
"significant word of each pair in the source and destination operands. The " +
"signed, saturated 16-bit results are packed to the destination operand " +
"(first operand). When the source operand is a 128-bit memory operand, the " +
"operand must be aligned on a 16-byte boundary or a general-protection " +
"exception (#GP) will be generated.";
break;
case "pinsrb":
case "vpinsrb":
case "pinsrd":
case "vpinsrd":
case "pinsrq":
case "vpinsrq":
instructionInfo = "Copies a byte/dword/qword from the source operand (second operand) and " +
"inserts it in the destination operand (first operand) at the location " +
"specified with the count operand (third operand). (The other elements in the " +
"destination register are left untouched.) The source operand can be a " +
"general-purpose register or a memory location. (When the source operand is a " +
"general-purpose register, PINSRB copies the low byte of the register.) " +
"The destination operand is an XMM register. The count operand is an 8-bit " +
"immediate. When specifying a qword[dword, byte] location in an XMM register, " +
"the [2, 4] least-significant bit(s) of the count operand specify the location.";
break;
case "pinsrw":
case "vpinsrw":
instructionInfo = "Copies a word from the source operand (second operand) and inserts it in the " +
"destination operand (first operand) at the location specified with the count " +
"operand (third operand). (The other words in the destination register are " +
"left untouched.) The source operand can be a general-purpose register or a " +
"16-bit memory location. (When the source operand is a general-purpose " +
"register, the low word of the register is copied.) The destination operand " +
"can be an MMX technology register or an XMM register. The count operand is " +
"an 8-bit immediate. When specifying a word location in an MMX technology " +
"register, the 2 least-significant bits of the count operand specify the " +
"location; for an XMM register, the 3 least-significant bits specify the location.";
break;
case "pmaddubsw":
case "vpmaddubsw":
instructionInfo = "(V)PMADDUBSW multiplies vertically each unsigned byte of the destination " +
"operand (first operand) with the corresponding signed byte of the source " +
"operand (second operand), producing intermediate signed 16-bit integers. " +
"Each adjacent pair of signed words is added and the saturated result is " +
"packed to the destination operand. For example, the lowest-order bytes " +
"(bits 7-0) in the source and destination operands are multiplied and the " +
"intermediate signed word result is added with the corresponding intermediate " +
"result from the 2nd lowest-order bytes (bits 15-8) of the operands; the " +
"sign-saturated result is stored in the lowest word of the destination " +
"register (15-0). The same operation is performed on the other pairs of " +
"adjacent bytes. Both operands can be MMX register or XMM registers. When the " +
"source operand is a 128-bit memory operand, the operand must be aligned on a " +
"16-byte boundary or a general-protection exception (#GP) will be generated.";
break;
case "pmaddwd":
case "vpmaddwd":
instructionInfo = "Multiplies the individual signed words of the destination operand " +
"(first operand) by the corresponding signed words of the source operand " +
"(second operand), producing temporary signed, doubleword results. The " +
"adjacent double-word results are then summed and stored in the destination " +
"operand. For example, the corresponding low-order words (15-0) and (31-16) " +
"in the source and destination operands are multiplied by one another and the " +
"double-word results are added together and stored in the low doubleword of " +
"the destination register (31-0). The same operation is performed on the " +
"other pairs of adjacent words.";
break;
case "pmaxsb":
case "vpmaxsb":
case "pmaxsw":
case "vpmaxsw":
case "pmaxsd":
case "vpmaxsd":
case "pmaxsq":
instructionInfo = "Performs a SIMD compare of the packed signed byte, word, dword or qword " +
"integers in the second source operand and the first source operand and " +
"returns the maximum value for each pair of integers to the destination operand.";
break;
case "pmaxub":
case "vpmaxub":
case "pmaxuw":
case "vpmaxuw":
instructionInfo = "Performs a SIMD compare of the packed unsigned byte, word integers in the " +
"second source operand and the first source operand and returns the maximum " +
"value for each pair of integers to the destination operand.";
break;
case "pmaxud":
case "vpmaxud":
case "pmaxuq":
instructionInfo = "Performs a SIMD compare of the packed unsigned dword or qword integers in " +
"the second source operand and the first source operand and returns the " +
"maximum value for each pair of integers to the destination operand.";
break;
case "pminsb":
case "vpminsb":
case "pminsw":
case "vpminsw":
instructionInfo = "Performs a SIMD compare of the packed signed byte, word, or dword integers " +
"in the second source operand and the first source operand and returns the " +
"minimum value for each pair of integers to the destination operand.";
break;
case "pminsd":
case "vpminsd":
case "pminsq":
instructionInfo = "Performs a SIMD compare of the packed signed dword or qword integers in the " +
"second source operand and the first source operand and returns the minimum " +
"value for each pair of integers to the destination operand.";
break;
case "pminub":
case "vpminub":
case "pminuw":
case "vpminuw":
instructionInfo = "Performs a SIMD compare of the packed unsigned byte or word integers in the " +
"second source operand and the first source operand and returns the minimum " +
"value for each pair of integers to the destination operand.";
break;
case "pminud":
case "vpminud":
case "pminuq":
instructionInfo = "Performs a SIMD compare of the packed unsigned dword/qword integers in the " +
"second source operand and the first source operand and returns the minimum " +
"value for each pair of integers to the destination operand.";
break;
case "pmovmskb":
case "vpmovmskb":
instructionInfo = "Creates a mask made up of the most significant bit of each byte of the source " +
"operand (second operand) and stores the result in the low byte or word of " +
"the destination operand (first operand).";
break;
case "pmovsx":
instructionInfo = "Legacy and VEX encoded versions: Packed byte, word, or dword integers in the " +
"low bytes of the source operand (second operand) are sign extended to word, " +
"dword, or quadword integers and stored in packed signed bytes the destination operand.";
break;
case "vpmovsxbw":
instructionInfo = "Sign extend 8 packed 8-bit integers in the low 8 bytes of xmm2/m64 to 8 " +
"packed 16-bit integers in xmm1.";
break;
case "vpmovsxbd":
instructionInfo = "Sign extend 4 packed 8-bit integers in the low 4 bytes of xmm2/m32 to 4 " +
"packed 32-bit integers in xmm1.";
break;
case "vpmovsxbq":
instructionInfo = "Sign extend 2 packed 8-bit integers in the low 2 bytes of xmm2/m16 to 2 " +
"packed 64-bit integers in xmm1.";
break;
case "pmovsxwd":
instructionInfo = "Sign extend 4 packed 16-bit integers in the low 8 bytes of xmm2/m64 to 4 " +
"packed 32-bit integers in xmm1.";
break;
case "pmovsxwq":
instructionInfo = "Sign extend 2 packed 16-bit integers in the low 4 bytes of xmm2/m32 to 2 " +
"packed 64-bit integers in xmm1.";
break;
case "vpmovsxdq":
instructionInfo = "Sign extend 2 packed 32-bit integers in the low 8 bytes of xmm2/m64 to 2 " +
"packed 64-bit integers in xmm1.";
break;
case "vpmovsxwd":
instructionInfo = "Sign extend packed 16-bit integers in the low bytes of xmm2/m128 to packed " +
"32-bit integers in ymm1.";
break;
case "vpmovsxwq":
instructionInfo = "Sign extend packed 16-bit integers in the low bytes of xmm2/m64 to packed " +
"64-bit integers in ymm1.";
break;
case "pmovzx":
instructionInfo = "Legacy, VEX and EVEX encoded versions: Packed byte, word, or dword integers " +
"starting from the low bytes of the source operand (second operand) are zero " +
"extended to word, dword, or quadword integers and stored in packed signed " +
"bytes the destination operand.";
break;
case "pmovzxbw":
case "pmovzxbd":
case "pmovzxbq":
case "pmovzxwd":
case "pmovzxwq":
case "pmovzxdq":
case "vpmovzxbw":
case "vpmovzxbd":
case "vpmovzxbq":
case "vpmovzxwd":
case "vpmovzxwq":
case "vpmovzxdq":
instructionInfo = "Packed move with zero extend.";
break;
case "pmuldq":
case "vpmuldq":
instructionInfo = "Multiplies packed signed doubleword integers in the even-numbered " +
"(zero-based reference) elements of the first source operand with the packed " +
"signed doubleword integers in the corresponding elements of the second source " +
"operand and stores packed signed quadword results in the destination operand.";
break;
case "pmulhrsw":
case "vpmulhrsw":
instructionInfo = "PMULHRSW multiplies vertically each signed 16-bit integer from the " +
"destination operand (first operand) with the corresponding signed 16-bit " +
"integer of the source operand (second operand), producing intermediate, " +
"signed 32-bit integers. Each intermediate 32-bit integer is truncated to the " +
"18 most significant bits. Rounding is always performed by adding 1 to the " +
"least significant bit of the 18-bit intermediate result. The final result is " +
"obtained by selecting the 16 bits immediately to the right of the most " +
"significant bit of each 18-bit intermediate result and packed to the destination operand.";
break;
case "pmulhuw":
case "vpmulhuw":
instructionInfo = "Performs a SIMD unsigned multiply of the packed unsigned word integers in the " +
"destination operand (first operand) and the source operand (second operand), " +
"and stores the high 16 bits of each 32-bit intermediate results in the destination operand.";
break;
case "pmulhw":
case "vpmulhw":
instructionInfo = "Performs a SIMD signed multiply of the packed signed word integers in the " +
"destination operand (first operand) and the source operand (second operand), " +
"and stores the high 16 bits of each intermediate 32-bit result in the destination operand.";
break;
case "pmulld":
case "vpmulld":
case "pmullq":
instructionInfo = "Performs a SIMD signed multiply of the packed signed dword/qword integers " +
"from each element of the first source operand with the corresponding element " +
"in the second source operand. The low 32/64 bits of each 64/128-bit " +
"intermediate results are stored to the destination operand.";
break;
case "pmullw":
case "vpmullw":
instructionInfo = "Performs a SIMD signed multiply of the packed signed word integers in the " +
"destination operand (first operand) and the source operand (second operand), " +
"and stores the low 16 bits of each intermediate 32-bit result in the destination operand.";
break;
case "pmuludq":
case "vpmuludq":
instructionInfo = "Multiplies the first operand (destination operand) by the second operand " +
"(source operand) and stores the result in the destination operand.";
break;
case "pop":
instructionInfo = "Loads the value from the top of the stack to the location specified with the " +
"destination operand (or explicit opcode) and then increments the stack pointer. " +
"The destination operand can be a general-purpose register, memory location, or segment register.";
break;
case "popa":
case "popad":
instructionInfo = "Pops doublewords (POPAD) or words (POPA) from the stack into the " +
"general-purpose registers. The registers are loaded in the following order: " +
"EDI, ESI, EBP, EBX, EDX, ECX, and EAX (if the operand-size attribute is 32) " +
"and DI, SI, BP, BX, DX, CX, and AX (if the operand-size attribute is 16). " +
"(These instructions reverse the operation of the PUSHA/PUSHAD instructions.) " +
"The value on the stack for the ESP or SP register is ignored. Instead, the " +
"ESP or SP register is incremented after each register is loaded.";
break;
case "popcnt":
instructionInfo = "This instruction calculates the number of bits set to 1 in the second " +
"operand (source) and returns the count in the first operand (a destination " +
"register).";
break;
case "popf":
case "popfd":
case "popfq":
instructionInfo = "Pops a doubleword (POPFD) from the top of the stack (if the current " +
"operand-size attribute is 32) and stores the value in the EFLAGS register, " +
"or pops a word from the top of the stack (if the operand-size attribute is 16) " +
"and stores it in the lower 16 bits of the EFLAGS register (that is, the FLAGS " +
"register). These instructions reverse the operation of the PUSHF/PUSHFD/PUSHFQ instructions.";
break;
case "por":
case "vpor":
instructionInfo = "Performs a bitwise logical OR operation on the source operand " +
"(second operand) and the destination operand (first operand) and stores the " +
"result in the destination operand. Each bit of the result is set to 1 if " +
"either or both of the corresponding bits of the first and second operands are " +
"1; otherwise, it is set to 0.";
break;
case "prefetchw":
instructionInfo = "Fetches the cache line of data from memory that contains the byte specified " +
"with the source operand to a location in the 1st or 2nd level cache and " +
"invalidates other cached instances of the line.";
break;
case "prefetcht0":
case "prefetcht1":
case "prefetcht2":
case "prefetchnta":
instructionInfo = "Fetches the line of data from memory that contains the byte specified with " +
"the source operand to a location in the cache hierarchy specified by a locality hint:";
break;
case "psadbw":
case "vpsadbw":
instructionInfo = "Computes the absolute value of the difference of 8 unsigned byte integers " +
"from the source operand (second operand) and from the destination operand " +
"(first operand). These 8 differences are then summed to produce an unsigned " +
"word integer result that is stored in the destination operand.";
break;
case "pshufb":
case "vpshufb":
instructionInfo = "PSHUFB performs in-place shuffles of bytes in the destination operand (the " +
"first operand) according to the shuffle control mask in the source operand " +
"(the second operand). The instruction permutes the data in the destination " +
"operand, leaving the shuffle mask unaffected. If the most significant bit " +
"(bit[7]) of each byte of the shuffle control mask is set, then constant zero " +
"is written in the result byte. Each byte in the shuffle control mask forms an " +
"index to permute the corresponding byte in the destination operand. The value " +
"of each index is the least significant 4 bits (128-bit operation) or 3 bits " +
"(64-bit operation) of the shuffle control byte. When the source operand is a " +
"128-bit memory operand, the operand must be aligned on a 16-byte boundary or " +
"a general-protection exception (#GP) will be generated.";
break;
case "pshufd":
case "vpshufd":
instructionInfo = "Copies doublewords from source operand (second operand) and inserts them in " +
"the destination operand (first operand) at the locations selected with the " +
"order operand (third operand). Each 2-bit field in the order operand selects " +
"the contents of one doubleword location within a 128-bit lane and copy to the " +
"target element in the destination operand. For example, bits 0 and 1 of the " +
"order operand targets the first doubleword element in the low and high 128-bit " +
"lane of the destination operand for 256-bit VPSHUFD. The encoded value of bits " +
"1:0 of the order operand determines which doubleword element (from the " +
"respective 128-bit lane) of the source operand will be copied to doubleword 0 " +
"of the destination operand.";
break;
case "pshufhw":
case "vpshufhw":
instructionInfo = "Copies words from the high quadword of a 128-bit lane of the source operand " +
"and inserts them in the high quadword of the destination operand at word " +
"locations (of the respective lane) selected with the immediate operand. This " +
"256-bit operation is similar to the in-lane operation used by the 256-bit " +
"VPSHUFD instruction. For 128-bit operation, only the low 128-bit lane is " +
"operative. Each 2-bit field in the immediate operand selects the contents of " +
"one word location in the high quadword of the destination operand. The binary " +
"encodings of the immediate operand fields select words (0, 1, 2 or 3, 4) from " +
"the high quadword of the source operand to be copied to the destination operand. " +
"The low quadword of the source operand is copied to the low quadword of the " +
"destination operand, for each 128-bit lane.";
break;
case "pshuflw":
case "vpshuflw":
instructionInfo = "Copies words from the low quadword of a 128-bit lane of the source operand " +
"and inserts them in the low quadword of the destination operand at word " +
"locations (of the respective lane) selected with the immediate operand. The " +
"256-bit operation is similar to the in-lane operation used by the 256-bit " +
"VPSHUFD instruction. For 128-bit operation, only the low 128-bit lane is " +
"operative. Each 2-bit field in the immediate operand selects the contents of " +
"one word location in the low quadword of the destination operand. The binary " +
"encodings of the immediate operand fields select words (0, 1, 2 or 3) from the " +
"low quadword of the source operand to be copied to the destination operand. " +
"The high quadword of the source operand is copied to the high quadword of the " +
"destination operand, for each 128-bit lane.";
break;
case "pshufw":
instructionInfo = "Copies words from the source operand (second operand) and inserts them in the " +
"destination operand (first operand) at word locations selected with the order " +
"operand (third operand). This operation is similar to the operation used by " +
"the PSHUFD instruction. For the PSHUFW instruction, each 2-bit field in the " +
"order operand selects the contents of one word location in the destination " +
"operand. The encodings of the order operand fields select words from the source " +
"operand to be copied to the destination operand.";
break;
case "psignb":
case "vpsignb":
case "psignw":
case "vpsignw":
case "psignd":
case "vpsignd":
instructionInfo = "(V)PSIGNB/(V)PSIGNW/(V)PSIGND negates each data element of the destination " +
"operand (the first operand) if the signed integer value of the corresponding " +
"data element in the source operand (the second operand) is less than zero. " +
"If the signed integer value of a data element in the source operand is positive, " +
"the corresponding data element in the destination operand is unchanged. " +
"If a data element in the source operand is zero, the corresponding data element " +
"in the destination operand is set to zero.";
break;
case "psllw":
case "vpsllw":
case "pslld":
case "vpslld":
case "psllq":
case "vpsllq":
instructionInfo = "Shifts the bits in the individual data elements (words, doublewords, or " +
"quadword) in the destination operand (first operand) to the left by the " +
"number of bits specified in the count operand (second operand). As the bits " +
"in the data elements are shifted left, the empty low-order bits are cleared " +
"(set to 0). If the value specified by the count operand is greater than 15 " +
"(for words), 31 (for doublewords), or 63 (for a quadword), then the destination " +
"operand is set to all 0s.";
break;
case "pslldq":
case "vpslldq":
instructionInfo = "Shifts the destination operand (first operand) to the left by the number of " +
"bytes specified in the count operand (second operand). The empty low-order " +
"bytes are cleared (set to all 0s). If the value specified by the count operand " +
"is greater than 15, the destination operand is set to all 0s. The count " +
"operand is an 8-bit immediate.";
break;
case "psraw":
case "vpsraw":
case "psrad":
case "vpsrad":
case "psraq":
instructionInfo = "Shifts the bits in the individual data elements (words, doublewords or quadwords) " +
"in the destination operand (first operand) to the right by the number of bits " +
"specified in the count operand (second operand). As the bits in the data " +
"elements are shifted right, the empty high-order bits are filled with the initial " +
"value of the sign bit of the data element. If the value specified by the count " +
"operand is greater than 15 (for words), 31 (for doublewords), or 63 " +
"(for quadwords), each destination data element is filled with the initial value " +
"of the sign bit of the element.)";
break;
case "psrlw":
case "vpsrlw":
case "psrld":
case "vpsrld":
case "psrlq":
case "vpsrlq":
instructionInfo = "Shifts the bits in the individual data elements (words, doublewords, or " +
"quadword) in the destination operand (first operand) to the right by the number " +
"of bits specified in the count operand (second operand). As the bits in the " +
"data elements are shifted right, the empty high-order bits are cleared (set to 0). " +
"If the value specified by the count operand is greater than 15 (for words), " +
"31 (for doublewords), or 63 (for a quadword), then the destination operand is set to all 0s.";
break;
case "psrldq":
case "vpsrldq":
instructionInfo = "Shifts the destination operand (first operand) to the right by the number of " +
"bytes specified in the count operand (second operand). The empty high-order " +
"bytes are cleared (set to all 0s). If the value specified by the count operand " +
"is greater than 15, the destination operand is set to all 0s. The count " +
"operand is an 8-bit immediate.";
break;
case "psubb":
case "vpsubb":
case "psubw":
case "vpsubw":
case "psubd":
case "vpsubd":
instructionInfo = "Performs a SIMD subtract of the packed integers of the source operand " +
"(second operand) from the packed integers of the destination operand " +
"(first operand), and stores the packed integer results in the destination operand. " +
"Overflow is handled with wraparound, as described in the following paragraphs.";
break;
case "psubq":
case "vpsubq":
instructionInfo = "Subtracts the second operand (source operand) from the first operand " +
"(destination operand) and stores the result in the destination operand. " +
"When packed quadword operands are used, a SIMD subtract is performed. " +
"When a quadword result is too large to be represented in 64 bits (overflow), " +
"the result is wrapped around and the low 64 bits are written to the " +
"destination element (that is, the carry is ignored).";
break;
case "psubsb":
case "vpsubsb":
case "psubsw":
case "vpsubsw":
instructionInfo = "Performs a SIMD subtract of the packed signed integers of the source operand " +
"(second operand) from the packed signed integers of the destination operand " +
"(first operand), and stores the packed integer results in the destination operand. " +
"Overflow is handled with signed saturation, as described in the following paragraphs.";
break;
case "psubsiw":
instructionInfo = "Word packed subtract second operand from the first operand with saturaiont using implied destination.";
break;
case "psubusb":
case "vpsubusb":
case "psubusw":
case "vpsubusw":
instructionInfo = "Performs a SIMD subtract of the packed unsigned integers of the source operand " +
"(second operand) from the packed unsigned integers of the destination operand " +
"(first operand), and stores the packed unsigned integer results in the destination operand. " +
"Overflow is handled with unsigned saturation, as described in the following paragraphs.";
break;
case "ptest":
case "vptest":
instructionInfo = "PTEST and VPTEST set the ZF flag if all bits in the result are 0 of the " +
"bitwise AND of the first source operand (first operand) and the second source " +
"operand (second operand). VPTEST sets the CF flag if all bits in the result " +
"are 0 of the bitwise AND of the second source operand (second operand) and the " +
"logical NOT of the destination operand.";
break;
case "ptwrite":
instructionInfo = "This instruction reads data in the source operand and sends it to the Intel " +
"Processor Trace hardware to be encoded in a PTW packet if TriggerEn, " +
"ContextEn, FilterEn, and PTWEn are all set to 1. The size of data is 64-bit " +
"if using REX.W in 64-bit mode, otherwise 32-bits of data are copied from the source operand.";
break;
case "punpckhbw":
case "vpunpckhbw":
case "punpckhwd":
case "vpunpckhwd":
case "punpckhdq":
case "vpunpckhdq":
case "punpckhqdq":
case "vpunpckhqdq":
instructionInfo = "Unpacks and interleaves the high-order data elements (bytes, words, " +
"doublewords, or quadwords) of the destination operand (first operand) and " +
"source operand (second operand) into the destination operand. The low-order " +
"data elements are ignored.";
break;
case "punpcklbw":
case "vpunpcklbw":
case "punpcklwd":
case "vpunpcklwd":
case "punpckldq":
case "vpunpckldq":
case "punpcklqdq":
case "vpunpcklqdq":
instructionInfo = "Unpacks and interleaves the low-order data elements (bytes, words, " +
"doublewords, and quadwords) of the destination operand (first operand) and " +
"source operand (second operand) into the destination operand. The high-order " +
"data elements are ignored.";
break;
case "push":
instructionInfo = "Decrements the stack pointer and then stores the source operand on the top of " +
"the stack. Address and operand sizes are determined and used as follows:";
break;
case "pusha":
case "pushad":
instructionInfo = "Pushes the contents of the general-purpose registers onto the stack. " +
"The registers are stored on the stack in the following order: EAX, ECX, EDX, " +
"EBX, ESP (original value), EBP, ESI, and EDI (if the current operand-size " +
"attribute is 32) and AX, CX, DX, BX, SP (original value), BP, SI, and DI " +
"(if the operand-size attribute is 16). These instructions perform the reverse " +
"operation of the POPA/POPAD instructions. The value pushed for the ESP or SP " +
"register is its value before prior to pushing the first register.";
break;
case "pushf":
case "pushfd":
case "pushfq":
instructionInfo = "Decrements the stack pointer by 4 (if the current operand-size attribute is 32) " +
"and pushes the entire contents of the EFLAGS register onto the stack, or " +
"decrements the stack pointer by 2 (if the operand-size attribute is 16) and " +
"pushes the lower 16 bits of the EFLAGS register (that is, the FLAGS register) " +
"onto the stack. These instructions reverse the operation of the POPF/POPFD instructions.";
break;
case "pxor":
case "vpxor":
instructionInfo = "Performs a bitwise logical exclusive-OR (XOR) operation on the source " +
"operand (second operand) and the destination operand (first operand) and " +
"stores the result in the destination operand. Each bit of the result is 1 if " +
"the corresponding bits of the two operands are different; each bit is 0 if " +
"the corresponding bits of the operands are the same.";
break;
case "rcl":
case "rcr":
case "rol":
case "ror":
instructionInfo = "Shifts (rotates) the bits of the first operand (destination operand) the " +
"number of bit positions specified in the second operand (count operand) and " +
"stores the result in the destination operand. The destination operand can be " +
"a register or a memory location; the count operand is an unsigned integer that " +
"can be an immediate or a value in the CL register. The count is masked to 5 " +
"bits (or 6 bits if in 64-bit mode and REX.W = 1).";
break;
case "rcpps":
case "vrcpps":
instructionInfo = "Performs a SIMD computation of the approximate reciprocals of the four packed " +
"single-precision floating-point values in the source operand (second operand) " +
"stores the packed single-precision floating-point results in the destination " +
"operand. The source operand can be an XMM register or a 128-bit memory location. " +
"The destination operand is an XMM register.";
break;
case "rcpss":
case "vrcpss":
instructionInfo = "Computes of an approximate reciprocal of the low single-precision " +
"floating-point value in the source operand (second operand) and stores the " +
"single-precision floating-point result in the destination operand. The source " +
"operand can be an XMM register or a 32-bit memory location. The destination " +
"operand is an XMM register. The three high-order doublewords of the destination " +
"operand remain unchanged.";
break;
case "rdfsbase":
case "rdgsbase":
instructionInfo = "Loads the general-purpose register indicated by the modR/M:r/m field with the " +
"FS or GS segment base address.";
break;
case "rdmsr":
instructionInfo = "Reads the contents of a 64-bit model specific register (MSR) specified in the " +
"ECX register into registers EDX:EAX. (On processors that support the Intel 64 " +
"architecture, the high-order 32 bits of RCX are ignored.) The EDX register is " +
"loaded with the high-order 32 bits of the MSR and the EAX register is loaded " +
"with the low-order 32 bits. (On processors that support the Intel 64 architecture, " +
"the high-order 32 bits of each of RAX and RDX are cleared.) If fewer than 64 bits " +
"are implemented in the MSR being read, the values returned to EDX:EAX in " +
"unimplemented bit locations are undefined.";
break;
case "rdpid":
instructionInfo = "Reads the value of the IA32_TSC_AUX MSR (address C0000103H) into the destination " +
"register. The value of CS.D and operand-size prefixes (66H and REX.W) do not " +
"affect the behavior of the RDPID instruction.";
break;
case "rdpkru":
instructionInfo = "Reads the value of PKRU into EAX and clears EDX. ECX must be 0 when RDPKRU " +
"is executed; otherwise, a general-protection exception (#GP) occurs.";
break;
case "rdpmc":
instructionInfo = "The EAX register is loaded with the low-order 32 bits. The EDX register is " +
"loaded with the supported high-order bits of the counter. The number of " +
"high-order bits loaded into EDX is implementation specific on processors that " +
"do no support architectural performance monitoring. The width of fixed-function " +
"and general-purpose performance counters on processors supporting architectural " +
"performance monitoring are reported by CPUID 0AH leaf. See below for the " +
"treatment of the EDX register for \xe2\x80\x9cfast\xe2\x80\x9d reads.";
break;
case "rdrand":
instructionInfo = "Loads a hardware generated random value and store it in the destination register. " +
"The size of the random value is determined by the destination register size and " +
"operating mode. The Carry Flag indicates whether a random value is available at " +
"the time the instruction is executed. CF=1 indicates that the data in the " +
"destination is valid. Otherwise CF=0 and the data in the destination operand " +
"will be returned as zeros for the specified width. All other flags are forced " +
"to 0 in either situation. Software must check the state of CF=1 for determining " +
"if a valid random value has been returned, otherwise it is expected to loop " +
"and retry execution of RDRAND.";
break;
case "rdseed":
instructionInfo = "Loads a hardware generated random value and store it in the destination register. " +
"The random value is generated from an Enhanced NRBG (Non Deterministic " +
"Random Bit Generator) that is compliant to NIST SP800-90B and NIST SP800-90C " +
"in the XOR construction mode. The size of the random value is determined by " +
"the destination register size and operating mode. The Carry Flag indicates " +
"whether a random value is available at the time the instruction is executed. " +
"CF=1 indicates that the data in the destination is valid. Otherwise CF=0 and " +
"the data in the destination operand will be returned as zeros for the specified width. " +
"All other flags are forced to 0 in either situation. Software must check the " +
"state of CF=1 for determining if a valid random seed value has been returned, " +
"otherwise it is expected to loop and retry execution of RDSEED (see Section 1.2).";
break;
case "rdtsc":
instructionInfo = "Reads the current value of the processor\xe2\x80\x99s time-stamp counter " +
"(a 64-bit MSR) into the EDX:EAX registers. The EDX register is loaded with " +
"the high-order 32 bits of the MSR and the EAX register is loaded with the " +
"low-order 32 bits. (On processors that support the Intel 64 architecture, " +
"the high-order 32 bits of each of RAX and RDX are cleared.)";
break;
case "rdtscp":
instructionInfo = "Reads the current value of the processor\xe2\x80\x99s time-stamp counter " +
"(a 64-bit MSR) into the EDX:EAX registers and also reads the value of the " +
"IA32_TSC_AUX MSR (address C0000103H) into the ECX register. The EDX register " +
"is loaded with the high-order 32 bits of the IA32_TSC MSR; the EAX register " +
"is loaded with the low-order 32 bits of the IA32_TSC MSR; and the ECX register " +
"is loaded with the low-order 32-bits of IA32_TSC_AUX MSR. On processors that " +
"support the Intel 64 architecture, the high-order 32 bits of each of RAX, RDX, " +
"and RCX are cleared.";
break;
case "rep":
case "repe":
case "repz":
case "repne":
case "repnz":
instructionInfo = "Repeats a string instruction the number of times specified in the count " +
"register or until the indicated condition of the ZF flag is no longer met. " +
"The REP (repeat), REPE (repeat while equal), REPNE (repeat while not equal), " +
"REPZ (repeat while zero), and REPNZ (repeat while not zero) mnemonics are " +
"prefixes that can be added to one of the string instructions. The REP prefix " +
"can be added to the INS, OUTS, MOVS, LODS, and STOS instructions, and the REPE, " +
"REPNE, REPZ, and REPNZ prefixes can be added to the CMPS and SCAS instructions. " +
"(The REPZ and REPNZ prefixes are synonymous forms of the REPE and REPNE prefixes, " +
"respectively.) The F3H prefix is defined for the following instructions and undefined for the rest:";
break;
case "ret":
instructionInfo = "Transfers program control to a return address located on the top of the stack. " +
"The address is usually placed on the stack by a CALL instruction, and the " +
"return is made to the instruction that follows the CALL instruction.";
break;
case "rorx":
instructionInfo = "Rotates the bits of second operand right by the count value specified in imm8 " +
"without affecting arithmetic flags. The RORX instruction does not read or " +
"write the arithmetic flags.";
break;
case "roundpd":
case "vroundpd":
instructionInfo = "Round the 2 double-precision floating-point values in the source operand " +
"(second operand) using the rounding mode specified in the immediate operand " +
"(third operand) and place the results in the destination operand (first operand). " +
"The rounding process rounds each input floating-point value to an integer value " +
"and returns the integer result as a double-precision floating-point value.";
break;
case "roundps":
case "vroundps":
instructionInfo = "Round the 4 single-precision floating-point values in the source operand " +
"(second operand) using the rounding mode specified in the immediate operand " +
"(third operand) and place the results in the destination operand (first operand). " +
"The rounding process rounds each input floating-point value to an integer " +
"value and returns the integer result as a single-precision floating-point value.";
break;
case "roundsd":
case "vroundsd":
instructionInfo = "Round the DP FP value in the lower qword of the source operand (second operand) " +
"using the rounding mode specified in the immediate operand (third operand) " +
"and place the result in the destination operand (first operand). The rounding " +
"process rounds a double-precision floating-point input to an integer value " +
"and returns the integer result as a double precision floating-point value in " +
"the lowest position. The upper double precision floating-point value in the " +
"destination is retained.";
break;
case "roundss":
case "vroundss":
instructionInfo = "Round the single-precision floating-point value in the lowest dword of the " +
"source operand (second operand) using the rounding mode specified in the " +
"immediate operand (third operand) and place the result in the destination " +
"operand (first operand). The rounding process rounds a single-precision " +
"floating-point input to an integer value and returns the result as a " +
"single-precision floating-point value in the lowest position. The upper three " +
"single-precision floating-point values in the destination are retained.";
break;
case "rsm":
instructionInfo = "Returns program control from system management mode (SMM) to the application " +
"program or operating-system procedure that was interrupted when the processor " +
"received an SMM interrupt. The processor\xe2\x80\x99s state is restored from " +
"the dump created upon entering SMM. If the processor detects invalid state " +
"information during state restoration, it enters the shutdown state. " +
"The following invalid information can cause a shutdown:";
break;
case "rsqrtps":
case "vrsqrtps":
instructionInfo = "Performs a SIMD computation of the approximate reciprocals of the square " +
"roots of the four packed single-precision floating-point values in the source " +
"operand (second operand) and stores the packed single-precision floating-point " +
"results in the destination operand. The source operand can be an XMM register " +
"or a 128-bit memory location. The destination operand is an XMM register.";
break;
case "rsqrtss":
case "vrsqrtss":
instructionInfo = "Computes an approximate reciprocal of the square root of the low single-precision " +
"floating-point value in the source operand (second operand) stores the " +
"single-precision floating-point result in the destination operand. " +
"The source operand can be an XMM register or a 32-bit memory location. " +
"The destination operand is an XMM register. The three high-order doublewords " +
"of the destination operand remain unchanged.";
break;
case "sahf":
instructionInfo = "Loads the SF, ZF, AF, PF, and CF flags of the EFLAGS register with values " +
"from the corresponding bits in the AH register (bits 7, 6, 4, 2, and 0, respectively). " +
"Bits 1, 3, and 5 of register AH are ignored; the corresponding reserved bits " +
"(1, 3, and 5) in the EFLAGS register remain.";
break;
case "sal":
case "sar":
case "shl":
case "shr":
instructionInfo = "Shifts the bits in the first operand (destination operand) to the left or " +
"right by the number of bits specified in the second operand (count operand). " +
"Bits shifted beyond the destination operand boundary are first shifted into " +
"the CF flag, then discarded. At the end of the shift operation, the CF flag " +
"contains the last bit shifted out of the destination operand.";
break;
case "sarx":
case "shlx":
case "shrx":
instructionInfo = "Shifts the bits of the first source operand (the second operand) to the left " +
"or right by a COUNT value specified in the second source operand (the third operand). " +
"The result is written to the destination operand (the first operand).";
break;
case "sbb":
instructionInfo = "Adds the source operand (second operand) and the carry (CF) flag, and subtracts " +
"the result from the destination operand (first operand). The result of the " +
"subtraction is stored in the destination operand. The destination operand can " +
"be a register or a memory location; the source operand can be an immediate, a " +
"register, or a memory location. (However, two memory operands cannot be used " +
"in one instruction.) The state of the CF flag represents a borrow from a previous subtraction.";
break;
case "scas":
case "scasb":
case "scasw":
case "scasd":
instructionInfo = "In non-64-bit modes and in default 64-bit mode: this instruction compares a " +
"byte, word, doubleword or quadword specified using a memory operand with the " +
"value in AL, AX, or EAX. It then sets status flags in EFLAGS recording the " +
"results. The memory operand address is read from ES:(E)DI register (depending " +
"on the address-size attribute of the instruction and the current operational mode). " +
"Note that ES cannot be overridden with a segment override prefix.";
break;
case "seta":
case "setae":
case "setb":
case "setbe":
case "setc":
case "sete":
case "setg":
case "setge":
case "setl":
case "setle":
case "setna":
case "setnae":
case "setnb":
case "setnbe":
case "setnc":
case "setne":
case "setng":
case "setnge":
case "setnl":
case "setnle":
case "setno":
case "setnp":
case "setns":
case "setnz":
case "seto":
case "setp":
case "setpe":
case "setpo":
case "sets":
case "setz":
instructionInfo = "Sets the destination operand to 0 or 1 depending on the settings of the status " +
"flags (CF, SF, OF, ZF, and PF) in the EFLAGS register. The destination operand " +
"points to a byte register or a byte in memory. " +
"The condition code suffix (cc) indicates the condition being tested for.";
break;
case "sfence":
instructionInfo = "Orders processor execution relative to all memory stores prior to the SFENCE instruction. " +
"The processor ensures that every store prior to SFENCE is globally visible before " +
"any store after SFENCE becomes globally visible. The SFENCE instruction is " +
"ordered with respect to memory stores, other SFENCE instructions, MFENCE instructions, " +
"and any serializing instructions (such as the CPUID instruction). It is not " +
"ordered with respect to memory loads or the LFENCE instruction.";
break;
case "sgdt":
instructionInfo = "Stores the content of the global descriptor table register (GDTR) in the " +
"destination operand. The destination operand specifies a memory location.";
break;
case "sha1msg1":
instructionInfo = "The SHA1MSG1 instruction is one of two SHA1 message scheduling instructions. " +
"The instruction performs an intermediate calculation for the next four SHA1 message dwords.";
break;
case "sha1msg2":
instructionInfo = "The SHA1MSG2 instruction is one of two SHA1 message scheduling instructions. " +
"The instruction performs the final calculation to derive the next four SHA1 message dwords.";
break;
case "sha1nexte":
instructionInfo = "The SHA1NEXTE calculates the SHA1 state variable E after four rounds of " +
"operation from the current SHA1 state variable A in the destination operand. " +
"The calculated value of the SHA1 state variable E is added to the source operand, " +
"which contains the scheduled dwords.";
break;
case "sha1rnds4":
instructionInfo = "The SHA1RNDS4 instruction performs four rounds of SHA1 operation using an " +
"initial SHA1 state (A,B,C,D) from the first operand (which is a source operand " +
"and the destination operand) and some pre-computed sum of the next 4 round " +
"message dwords, and state variable E from the second operand (a source operand). " +
"The updated SHA1 state (A,B,C,D) after four rounds of processing is stored in the destination operand.";
break;
case "sha256msg1":
instructionInfo = "The SHA256MSG1 instruction is one of two SHA256 message scheduling instructions. " +
"The instruction performs an intermediate calculation for the next four SHA256 message dwords.";
break;
case "sha256msg2":
instructionInfo = "The SHA256MSG2 instruction is one of two SHA2 message scheduling instructions. " +
"The instruction performs the final calculation for the next four SHA256 message dwords.";
break;
case "sha256rnds2":
instructionInfo = "The SHA256RNDS2 instruction performs 2 rounds of SHA256 operation using an " +
"initial SHA256 state (C,D,G,H) from the first operand, an initial SHA256 state " +
"(A,B,E,F) from the second operand, and a pre-computed sum of the next 2 round " +
"message dwords and the corresponding round constants from the implicit operand xmm0. " +
"Note that only the two lower dwords of XMM0 are used by the instruction.";
break;
case "shld":
instructionInfo = "The SHLD instruction is used for multi-precision shifts of 64 bits or more.";
break;
case "shrd":
instructionInfo = "The SHRD instruction is useful for multi-precision shifts of 64 bits or more.";
break;
case "shufpd":
case "vshufpd":
instructionInfo = "Selects a double-precision floating-point value of an input pair using a bit " +
"control and move to a designated element of the destination operand. " +
"The low-to-high order of double-precision element of the destination operand " +
"is interleaved between the first source operand and the second source operand " +
"at the granularity of input pair of 128 bits. Each bit in the imm8 byte, " +
"starting from bit 0, is the select control of the corresponding element of the " +
"destination to received the shuffled result of an input pair.";
break;
case "shufps":
case "vshufps":
instructionInfo = "Selects a single-precision floating-point value of an input quadruplet using " +
"a two-bit control and move to a designated element of the destination operand. " +
"Each 64-bit element-pair of a 128-bit lane of the destination operand is " +
"interleaved between the corresponding lane of the first source operand and the " +
"second source operand at the granularity 128 bits. Each two bits in the imm8 byte, " +
"starting from bit 0, is the select control of the corresponding element of a " +
"128-bit lane of the destination to received the shuffled result of an input quadruplet. " +
"The two lower elements of a 128-bit lane in the destination receives shuffle " +
"results from the quadruple of the first source operand. The next two elements " +
"of the destination receives shuffle results from the quadruple of the second source operand.";
break;
case "sidt":
instructionInfo = "Stores the content the interrupt descriptor table register (IDTR) in the " +
"destination operand. The destination operand specifies a 6-byte memory location.";
break;
case "sldt":
instructionInfo = "Stores the segment selector from the local descriptor table register (LDTR) " +
"in the destination operand. The destination operand can be a general-purpose " +
"register or a memory location. The segment selector stored with this instruction " +
"points to the segment descriptor (located in the GDT) for the current LDT. " +
"This instruction can only be executed in protected mode.";
break;
case "smsw":
instructionInfo = "Stores the machine status word (bits 0 through 15 of control register CR0) " +
"into the destination operand. The destination operand can be a general-purpose " +
"register or a memory location.";
break;
case "sqrtpd":
case "vsqrtpd":
instructionInfo = "Performs a SIMD computation of the square roots of the two, four or eight " +
"packed double-precision floating-point values in the source operand " +
"(the second operand) stores the packed double-precision floating-point results " +
"in the destination operand (the first operand).";
break;
case "sqrtps":
case "vsqrtps":
instructionInfo = "Performs a SIMD computation of the square roots of the four, eight or sixteen " +
"packed single-precision floating-point values in the source operand " +
"(second operand) stores the packed single-precision floating-point results in the destination operand.";
break;
case "sqrtsd":
case "vsqrtsd":
instructionInfo = "Computes the square root of the low double-precision floating-point value in " +
"the second source operand and stores the double-precision floating-point result " +
"in the destination operand. The second source operand can be an XMM register " +
"or a 64-bit memory location. The first source and destination operands are XMM registers.";
break;
case "sqrtss":
case "vsqrtss":
instructionInfo = "Computes the square root of the low single-precision floating-point value in " +
"the second source operand and stores the single-precision floating-point result " +
"in the destination operand. The second source operand can be an XMM register " +
"or a 32-bit memory location. The first source and destination operands is an XMM register.";
break;
case "stac":
instructionInfo = "Sets the AC flag bit in EFLAGS register. This may enable alignment checking " +
"of user-mode data accesses. This allows explicit supervisor-mode data accesses " +
"to user-mode pages even if the SMAP bit is set in the CR4 register.";
break;
case "stc":
instructionInfo = "Sets the CF flag in the EFLAGS register. Operation is the same in all modes.";
break;
case "std":
instructionInfo = "Sets the DF flag in the EFLAGS register. When the DF flag is set to 1, string " +
"operations decrement the index registers (ESI and/or EDI). Operation is the same in all modes.";
break;
case "sti":
instructionInfo = "In most cases, STI sets the interrupt flag (IF) in the EFLAGS register. " +
"This allows the processor to respond to maskable hardware interrupts.";
break;
case "stmxcsr":
case "vstmxcsr":
instructionInfo = "Stores the contents of the MXCSR control and status register to the destination " +
"operand. The destination operand is a 32-bit memory location. The reserved bits " +
"in the MXCSR register are stored as 0s.";
break;
case "stos":
case "stosb":
case "stosw":
case "stosd":
case "stosq":
instructionInfo = "In non-64-bit and default 64-bit mode; stores a byte, word, or doubleword " +
"from the AL, AX, or EAX register (respectively) into the destination operand. " +
"The destination operand is a memory location, the address of which is read " +
"from either the ES:EDI or ES:DI register (depending on the address-size " +
"attribute of the instruction and the mode of operation). The ES segment cannot " +
"be overridden with a segment override prefix.";
break;
case "str":
instructionInfo = "Stores the segment selector from the task register (TR) in the destination operand. " +
"The destination operand can be a general-purpose register or a memory location. " +
"The segment selector stored with this instruction points to the task state segment " +
"(TSS) for the currently running task.";
break;
case "sub":
instructionInfo = "Subtracts the second operand (source operand) from the first operand " +
"(destination operand) and stores the result in the destination operand. " +
"The destination operand can be a register or a memory location; the source " +
"operand can be an immediate, register, or memory location. (However, two memory " +
"operands cannot be used in one instruction.) When an immediate value is used " +
"as an operand, it is sign-extended to the length of the destination operand format.";
break;
case "subpd":
case "vsubpd":
instructionInfo = "Performs a SIMD subtract of the two, four or eight packed double-precision " +
"floating-point values of the second Source operand from the first Source " +
"operand, and stores the packed double-precision floating-point results in the " +
"destination operand.";
break;
case "subps":
case "vsubps":
instructionInfo = "Performs a SIMD subtract of the packed single-precision floating-point values " +
"in the second Source operand from the First Source operand, and stores the " +
"packed single-precision floating-point results in the destination operand.";
break;
case "subsd":
case "vsubsd":
instructionInfo = "Subtract the low double-precision floating-point value in the second source " +
"operand from the first source operand and stores the double-precision " +
"floating-point result in the low quadword of the destination operand.";
break;
case "subss":
case "vsubss":
instructionInfo = "Subtract the low single-precision floating-point value from the second source " +
"operand and the first source operand and store the double-precision " +
"floating-point result in the low doubleword of the destination operand.";
break;
case "swapgs":
instructionInfo = "SWAPGS exchanges the current GS base register value with the value contained " +
"in MSR address C0000102H (IA32_KERNEL_GS_BASE). The SWAPGS instruction is a " +
"privileged instruction intended for use by system software.";
break;
case "syscall":
instructionInfo = "SYSCALL invokes an OS system-call handler at privilege level 0. It does so " +
"by loading RIP from the IA32_LSTAR MSR (after saving the address of the " +
"instruction following SYSCALL into RCX). (The WRMSR instruction ensures that " +
"the IA32_LSTAR MSR always contain a canonical address.)";
break;
case "sysenter":
instructionInfo = "Executes a fast call to a level 0 system procedure or routine. SYSENTER is a " +
"companion instruction to SYSEXIT. The instruction is optimized to provide the " +
"maximum performance for system calls from user code running at privilege level " +
"3 to operating system or executive procedures running at privilege level 0.";
break;
case "sysexit":
instructionInfo = "Executes a fast return to privilege level 3 user code. SYSEXIT is a companion " +
"instruction to the SYSENTER instruction. The instruction is optimized to provide " +
"the maximum performance for returns from system procedures executing at " +
"protections levels 0 to user procedures executing at protection level 3. It must " +
"be executed from code executing at privilege level 0.";
break;
case "sysret":
instructionInfo = "SYSRET is a companion instruction to the SYSCALL instruction. It returns from " +
"an OS system-call handler to user code at privilege level 3. It does so by " +
"loading RIP from RCX and loading RFLAGS from R11.<sup>1</sup> With a 64-bit " +
"operand size, SYSRET remains in 64-bit mode; otherwise, it enters compatibility " +
"mode and only the low 32 bits of the registers are loaded.";
break;
case "test":
instructionInfo = "Computes the bit-wise logical AND of first operand (source 1 operand) and the " +
"second operand (source 2 operand) and sets the SF, ZF, and PF status flags " +
"according to the result. The result is then discarded.";
break;
case "tpause":
instructionInfo = "TPAUSE instructs the processor to enter an implementation-dependent optimized state. " +
"There are two such optimized states to choose from: light-weight power/performance " +
"optimized state, and improved power/performance optimized state. " +
"The selection between the two is governed by the explicit input register bit[0] source operand.";
break;
case "tzcnt":
instructionInfo = "TZCNT counts the number of trailing least significant zero bits in source " +
"operand (second operand) and returns the result in destination operand (first operand). " +
"TZCNT is an extension of the BSF instruction. The key difference between " +
"TZCNT and BSF instruction is that TZCNT provides operand size as output when " +
"source operand is zero while in the case of BSF instruction, if source operand " +
"is zero, the content of destination operand are undefined. On processors that " +
"do not support TZCNT, the instruction byte encoding is executed as BSF.";
break;
case "ucomisd":
case "vucomisd":
instructionInfo = "Performs an unordered compare of the double-precision floating-point values " +
"in the low quadwords of operand 1 (first operand) and operand 2 (second operand), " +
"and sets the ZF, PF, and CF flags in the EFLAGS register according to the result " +
"(unordered, greater than, less than, or equal). The OF, SF and AF flags in the " +
"EFLAGS register are set to 0. The unordered result is returned if either source " +
"operand is a NaN (QNaN or SNaN).";
break;
case "ucomiss":
case "vucomiss":
instructionInfo = "Compares the single-precision floating-point values in the low doublewords of " +
"operand 1 (first operand) and operand 2 (second operand), and sets the ZF, PF, " +
"and CF flags in the EFLAGS register according to the result (unordered, " +
"greater than, less than, or equal). The OF, SF and AF flags in the EFLAGS " +
"register are set to 0. The unordered result is returned if either source " +
"operand is a NaN (QNaN or SNaN).";
break;
case "ud":
instructionInfo = "Generates an invalid opcode exception. This instruction is provided for " +
"software testing to explicitly generate an invalid opcode exception. The " +
"opcodes for this instruction are reserved for this purpose.";
break;
case "umonitor":
instructionInfo = "The UMONITOR instruction arms address monitoring hardware using an address " +
"specified in the source register (the address range that the monitoring " +
"hardware checks for store operations can be determined by using the CPUID " +
"monitor leaf function, EAX=05H). A store to an address within the specified " +
"address range triggers the monitoring hardware. The state of monitor hardware " +
"is used by UMWAIT.";
break;
case "umwait":
instructionInfo = "UMWAIT instructs the processor to enter an implementation-dependent optimized " +
"state while monitoring a range of addresses. The optimized state may be " +
"either a light-weight power/performance optimized state or an improved " +
"power/performance optimized state. The selection between the two states is " +
"governed by the explicit input register bit[0] source operand.";
break;
case "unpckhpd":
case "vunpckhpd":
instructionInfo = "Performs an interleaved unpack of the high double-precision floating-point " +
"values from the first source operand and the second source operand.";
break;
case "unpckhps":
case "vunpckhps":
instructionInfo = "Performs an interleaved unpack of the high single-precision floating-point " +
"values from the first source operand and the second source operand.";
break;
case "unpcklpd":
case "vunpcklpd":
instructionInfo = "Performs an interleaved unpack of the low double-precision floating-point " +
"values from the first source operand and the second source operand.";
break;
case "unpcklps":
case "vunpcklps":
instructionInfo = "Performs an interleaved unpack of the low single-precision floating-point " +
"values from the first source operand and the second source operand.";
break;
case "valignd":
case "valignq":
instructionInfo = "Concatenates and shifts right doubleword/quadword elements of the first " +
"source operand (the second operand) and the second source operand " +
"(the third operand) into a 1024/512/256-bit intermediate vector. " +
"The low 512/256/128-bit of the intermediate vector is written to the " +
"destination operand (the first operand) using the writemask k1. " +
"The destination and first source operands are ZMM/YMM/XMM registers. " +
"The second source operand can be a ZMM/YMM/XMM register, a 512/256/128-bit " +
"memory location or a 512/256/128-bit vector broadcasted from a 32/64-bit memory location.";
break;
case "vblendmpd":
case "vblendmps":
instructionInfo = "Performs an element-by-element blending between float64/float32 elements in " +
"the first source operand (the second operand) with the elements in the second " +
"source operand (the third operand) using an opmask register as select control. " +
"The blended result is written to the destination register.";
break;
case "vbroadcast":
case "vbroadcastsd":
case "vbroadcastss":
case "vbroadcastf128":
case "vbroadcasti128":
instructionInfo = "Load floating-point values as one tuple from the source operand " +
"(second operand) in memory and broadcast to all elements of the destination " +
"operand (first operand).";
break;
case "vcompresspd":
instructionInfo = "Compress (store) up to 8 double-precision floating-point values from the " +
"source operand (the second operand) as a contiguous vector to the destination " +
"operand (the first operand) The source operand is a ZMM/YMM/XMM register, " +
"the destination operand can be a ZMM/YMM/XMM register or a 512/256/128-bit memory location.";
break;
case "vcompressps":
instructionInfo = "Compress (stores) up to 16 single-precision floating-point values from the " +
"source operand (the second operand) to the destination operand (the first operand). " +
"The source operand is a ZMM/YMM/XMM register, the destination operand can be a " +
"ZMM/YMM/XMM register or a 512/256/128-bit memory location.";
break;
case "vcvtpd2qq":
instructionInfo = "Converts packed double-precision floating-point values in the source operand " +
"(second operand) to packed quadword integers in the destination operand (first operand).";
break;
case "vcvtpd2udq":
instructionInfo = "Converts packed double-precision floating-point values in the source operand " +
"(the second operand) to packed unsigned doubleword integers in the destination " +
"operand (the first operand).";
break;
case "vcvtpd2uqq":
instructionInfo = "Converts packed double-precision floating-point values in the source operand " +
"(second operand) to packed unsigned quadword integers in the destination " +
"operand (first operand).";
break;
case "vcvtph2ps":
instructionInfo = "Converts packed half precision (16-bits) floating-point values in the " +
"low-order bits of the source operand (the second operand) to packed " +
"single-precision floating-point values and writes the converted values into " +
"the destination operand (the first operand).";
break;
case "vcvtps2ph":
instructionInfo = "Convert packed single-precision floating values in the source operand to " +
"half-precision (16-bit) floating-point values and store to the destination operand. " +
"The rounding mode is specified using the immediate field (imm8).";
break;
case "vcvtps2qq":
instructionInfo = "Converts eight packed single-precision floating-point values in the source " +
"operand to eight signed quadword integers in the destination operand.";
break;
case "vcvtps2udq":
instructionInfo = "Converts sixteen packed single-precision floating-point values in the source " +
"operand to sixteen unsigned double-word integers in the destination operand.";
break;
case "vcvtps2uqq":
instructionInfo = "Converts up to eight packed single-precision floating-point values in the " +
"source operand to unsigned quadword integers in the destination operand.";
break;
case "vcvtqq2pd":
instructionInfo = "Converts packed quadword integers in the source operand (second operand) to " +
"packed double-precision floating-point values in the destination operand (first operand).";
break;
case "vcvtqq2ps":
instructionInfo = "Converts packed quadword integers in the source operand (second operand) to " +
"packed single-precision floating-point values in the destination operand (first operand).";
break;
case "vcvtsd2usi":
instructionInfo = "Converts a double-precision floating-point value in the source operand " +
"(the second operand) to an unsigned doubleword integer in the destination " +
"operand (the first operand). The source operand can be an XMM register or a " +
"64-bit memory location. The destination operand is a general-purpose register. " +
"When the source operand is an XMM register, the double-precision floating-point " +
"value is contained in the low quadword of the register.";
break;
case "vcvtss2usi":
instructionInfo = "Converts a single-precision floating-point value in the source operand " +
"(the second operand) to an unsigned double-word integer (or unsigned quadword " +
"integer if operand size is 64 bits) in the destination operand (the first operand). " +
"The source operand can be an XMM register or a memory location. " +
"The destination operand is a general-purpose register. When the source operand " +
"is an XMM register, the single-precision floating-point value is contained " +
"in the low doubleword of the register.";
break;
case "vcvttpd2qq":
instructionInfo = "Converts with truncation packed double-precision floating-point values in " +
"the source operand (second operand) to packed quadword integers in the " +
"destination operand (first operand).";
break;
case "vcvttpd2udq":
instructionInfo = "Converts with truncation packed double-precision floating-point values in " +
"the source operand (the second operand) to packed unsigned doubleword integers " +
"in the destination operand (the first operand).";
break;
case "vcvttpd2uqq":
instructionInfo = "Converts with truncation packed double-precision floating-point values in " +
"the source operand (second operand) to packed unsigned quadword integers in " +
"the destination operand (first operand).";
break;
case "vcvttps2qq":
instructionInfo = "Converts with truncation packed single-precision floating-point values in " +
"the source operand to eight signed quadword integers in the destination operand.";
break;
case "vcvttps2udq":
instructionInfo = "Converts with truncation packed single-precision floating-point values in " +
"the source operand to sixteen unsigned doubleword integers in the destination operand.";
break;
case "vcvttps2uqq":
instructionInfo = "Converts with truncation up to eight packed single-precision floating-point " +
"values in the source operand to unsigned quadword integers in the destination operand.";
break;
case "vcvttsd2usi":
instructionInfo = "Converts with truncation a double-precision floating-point value in the " +
"source operand (the second operand) to an unsigned doubleword integer " +
"(or unsigned quadword integer if operand size is 64 bits) in the destination " +
"operand (the first operand). The source operand can be an XMM register or a " +
"64-bit memory location. The destination operand is a general-purpose register. " +
"When the source operand is an XMM register, the double-precision floating-point " +
"value is contained in the low quadword of the register.";
break;
case "vcvttss2usi":
instructionInfo = "Converts with truncation a single-precision floating-point value in the " +
"source operand (the second operand) to an unsigned doubleword integer " +
"(or unsigned quadword integer if operand size is 64 bits) in the destination " +
"operand (the first operand). The source operand can be an XMM register or a " +
"memory location. The destination operand is a general-purpose register. " +
"When the source operand is an XMM register, the single-precision floating-point " +
"value is contained in the low doubleword of the register.";
break;
case "vcvtudq2pd":
instructionInfo = "Converts packed unsigned doubleword integers in the source operand (second " +
"operand) to packed double-precision floating-point values in the destination " +
"operand (first operand).";
break;
case "vcvtudq2ps":
instructionInfo = "Converts packed unsigned doubleword integers in the source operand (second " +
"operand) to single-precision floating-point values in the destination operand " +
"(first operand).";
break;
case "vcvtuqq2pd":
instructionInfo = "Converts packed unsigned quadword integers in the source operand (second " +
"operand) to packed double-precision floating-point values in the destination " +
"operand (first operand).";
break;
case "vcvtuqq2ps":
instructionInfo = "Converts packed unsigned quadword integers in the source operand (second " +
"operand) to single-precision floating-point values in the destination operand " +
"(first operand).";
break;
case "vcvtusi2sd":
instructionInfo = "Converts an unsigned doubleword integer (or unsigned quadword integer if " +
"operand size is 64 bits) in the second source operand to a double-precision " +
"floating-point value in the destination operand. The result is stored in the " +
"low quadword of the destination operand. When conversion is inexact, the value " +
"returned is rounded according to the rounding control bits in the MXCSR register.";
break;
case "vcvtusi2ss":
instructionInfo = "Converts a unsigned doubleword integer (or unsigned quadword integer if " +
"operand size is 64 bits) in the source operand (second operand) to a " +
"single-precision floating-point value in the destination operand (first operand). " +
"The source operand can be a general-purpose register or a memory location. " +
"The destination operand is an XMM register. The result is stored in the low " +
"doubleword of the destination operand. When a conversion is inexact, the value " +
"returned is rounded according to the rounding control bits in the MXCSR " +
"register or the embedded rounding control bits.";
break;
case "vdbpsadbw":
instructionInfo = "Compute packed SAD (sum of absolute differences) word results of unsigned " +
"bytes from two 32-bit dword elements. Packed SAD word results are calculated " +
"in multiples of qword superblocks, producing 4 SAD word results in each " +
"64-bit superblock of the destination register.";
break;
case "verr":
case "verw":
instructionInfo = "Verifies whether the code or data segment specified with the source operand " +
"is readable (VERR) or writable (VERW) from the current privilege level (CPL). " +
"The source operand is a 16-bit register or a memory location that contains " +
"the segment selector for the segment to be verified. If the segment is " +
"accessible and readable (VERR) or writable (VERW), the ZF flag is set; " +
"otherwise, the ZF flag is cleared. Code segments are never verified as writable. " +
"This check cannot be performed on system segments.";
break;
case "vexpandpd":
instructionInfo = "Expand (load) up to 8/4/2, contiguous, double-precision floating-point values " +
"of the input vector in the source operand (the second operand) to sparse " +
"elements in the destination operand (the first operand) selected by the writemask k1.";
break;
case "vexpandps":
instructionInfo = "Expand (load) up to 16/8/4, contiguous, single-precision floating-point values " +
"of the input vector in the source operand (the second operand) to sparse " +
"elements of the destination operand (the first operand) selected by the writemask k1.";
break;
case "vextractf128":
case "vextractf32x4":
case "vextractf64x2":
case "vextractf32x8":
case "vextractf64x4":
instructionInfo = "VEXTRACTF128/VEXTRACTF32x4 and VEXTRACTF64x2 extract 128-bits of single-precision " +
"floating-point values from the source operand (the second operand) and store " +
"to the low 128-bit of the destination operand (the first operand). The 128-bit " +
"data extraction occurs at an 128-bit granular offset specified by imm8[0] " +
"(256-bit) or imm8[1:0] as the multiply factor. The destination may be either " +
"a vector register or an 128-bit memory location.";
break;
case "vextracti128":
case "vextracti32x4":
case "vextracti64x2":
case "vextracti32x8":
case "vextracti64x4":
instructionInfo = "VEXTRACTI128/VEXTRACTI32x4 and VEXTRACTI64x2 extract 128-bits of doubleword " +
"integer values from the source operand (the second operand) and store to the " +
"low 128-bit of the destination operand (the first operand). The 128-bit data " +
"extraction occurs at an 128-bit granular offset specified by imm8[0] (256-bit) " +
"or imm8[1:0] as the multiply factor. The destination may be either a vector " +
"register or an 128-bit memory location.";
break;
case "vfixupimmpd":
instructionInfo = "Perform fix-up of quad-word elements encoded in double-precision floating-point " +
"format in the first source operand (the second operand) using a 32-bit, " +
"two-level look-up table specified in the corresponding quadword element of " +
"the second source operand (the third operand) with exception reporting specifier " +
"imm8. The elements that are fixed-up are selected by mask bits of 1 specified " +
"in the opmask k1. Mask bits of 0 in the opmask k1 or table response action of " +
"0000b preserves the corresponding element of the first operand. The fixed-up " +
"elements from the first source operand and the preserved element in the first " +
"operand are combined as the final results in the destination operand (the first operand).";
break;
case "vfixupimmps":
instructionInfo = "Perform fix-up of doubleword elements encoded in single-precision floating-point " +
"format in the first source operand (the second operand) using a 32-bit, " +
"two-level look-up table specified in the corresponding doubleword element of " +
"the second source operand (the third operand) with exception reporting specifier imm8. " +
"The elements that are fixed-up are selected by mask bits of 1 specified in " +
"the opmask k1. Mask bits of 0 in the opmask k1 or table response action of 0000b " +
"preserves the corresponding element of the first operand. The fixed-up elements " +
"from the first source operand and the preserved element in the first operand " +
"are combined as the final results in the destination operand (the first operand).";
break;
case "vfixupimmsd":
instructionInfo = "Perform a fix-up of the low quadword element encoded in double-precision " +
"floating-point format in the first source operand (the second operand) using " +
"a 32-bit, two-level look-up table specified in the low quadword element of the " +
"second source operand (the third operand) with exception reporting specifier imm8. " +
"The element that is fixed-up is selected by mask bit of 1 specified in the " +
"opmask k1. Mask bit of 0 in the opmask k1 or table response action of 0000b " +
"preserves the corresponding element of the first operand. The fixed-up element " +
"from the first source operand or the preserved element in the first operand " +
"becomes the low quadword element of the destination operand (the first operand). " +
"Bits 127:64 of the destination operand is copied from the corresponding bits " +
"of the first source operand. The destination and first source operands are " +
"XMM registers. The second source operand can be a XMM register or a 64- bit " +
"memory location.";
break;
case "vfixupimmss":
instructionInfo = "Perform a fix-up of the low doubleword element encoded in single-precision " +
"floating-point format in the first source operand (the second operand) using " +
"a 32-bit, two-level look-up table specified in the low doubleword element of " +
"the second source operand (the third operand) with exception reporting specifier " +
"imm8. The element that is fixed-up is selected by mask bit of 1 specified in " +
"the opmask k1. Mask bit of 0 in the opmask k1 or table response action of 0000b " +
"preserves the corresponding element of the first operand. The fixed-up element " +
"from the first source operand or the preserved element in the first operand " +
"becomes the low doubleword element of the destination operand (the first " +
"operand) Bits 127:32 of the destination operand is copied from the corresponding " +
"bits of the first source operand. The destination and first source operands " +
"are XMM registers. The second source operand can be a XMM register or a 32-bit " +
"memory location.";
break;
case "vfmadd123pd":
case "vfmadd132pd":
case "vfmadd213pd":
case "vfmadd231pd":
case "vfmadd321pd":
case "vfmadd312pd":
instructionInfo = "Performs a set of SIMD multiply-add computation on packed double-precision " +
"floating-point values using three source operands and writes the multiply-add " +
"results in the destination operand. The destination operand is also the first " +
"source operand. The second operand must be a SIMD register. The third source " +
"operand can be a SIMD register or a memory location.";
break;
case "vfmadd123ps":
case "vfmadd132ps":
case "vfmadd213ps":
case "vfmadd231ps":
case "vfmadd321ps":
case "vfmadd312ps":
instructionInfo = "Performs a set of SIMD multiply-add computation on packed single-precision " +
"floating-point values using three source operands and writes the multiply-add " +
"results in the destination operand. The destination operand is also the first " +
"source operand. The second operand must be a SIMD register. The third source " +
"operand can be a SIMD register or a memory location.";
break;
case "vfmadd123sd":
case "vfmadd132sd":
case "vfmadd213sd":
case "vfmadd231sd":
case "vfmadd321sd":
case "vfmadd312sd":
instructionInfo = "Performs a SIMD multiply-add computation on the low double-precision " +
"floating-point values using three source operands and writes the multiply-add " +
"result in the destination operand. The destination operand is also the first " +
"source operand. The first and second operand are XMM registers. The third " +
"source operand can be an XMM register or a 64-bit memory location.";
break;
case "vfmadd123ss":
case "vfmadd132ss":
case "vfmadd213ss":
case "vfmadd231ss":
case "vfmadd321ss":
case "vfmadd312ss":
instructionInfo = "Performs a SIMD multiply-add computation on single-precision floating-point " +
"values using three source operands and writes the multiply-add results in the " +
"destination operand. The destination operand is also the first source operand. " +
"The first and second operands are XMM registers. The third source operand can " +
"be a XMM register or a 32-bit memory location.";
break;
case "vfmaddsub132pd":
case "vfmaddsub213pd":
case "vfmaddsub231pd":
case "vfmaddsub123pd":
case "vfmaddsub312pd":
case "vfmaddsub321pd":
instructionInfo = "VFMADDSUB132PD: Multiplies the two, four, or eight packed double-precision " +
"floating-point values from the first source operand to the two or four packed " +
"double-precision floating-point values in the third source operand. From the " +
"infinite precision intermediate result, adds the odd double-precision " +
"floating-point elements and subtracts the even double-precision floating-point " +
"values in the second source operand, performs rounding and stores the resulting " +
"two or four packed double-precision floating-point values to the destination " +
"operand (first source operand).";
break;
case "vfmaddsub132ps":
case "vfmaddsub213ps":
case "vfmaddsub231ps":
case "vfmaddsub123ps":
case "vfmaddsub312ps":
case "vfmaddsub321ps":
instructionInfo = "VFMADDSUB132PS: Multiplies the four, eight or sixteen packed single-precision " +
"floating-point values from the first source operand to the corresponding packed " +
"single-precision floating-point values in the third source operand. From the " +
"infinite precision intermediate result, adds the odd single-precision " +
"floating-point elements and subtracts the even single-precision floating-point " +
"values in the second source operand, performs rounding and stores the resulting " +
"packed single-precision floating-point values to the destination operand " +
"(first source operand).";
break;
case "vfmsub132pd":
case "vfmsub213pd":
case "vfmsub231pd":
case "vfmsub123pd":
case "vfmsub312pd":
case "vfmsub321pd":
instructionInfo = "Performs a set of SIMD multiply-subtract computation on packed double-precision " +
"floating-point values using three source operands and writes the multiply-subtract " +
"results in the destination operand. The destination operand is also the first " +
"source operand. The second operand must be a SIMD register. The third source " +
"operand can be a SIMD register or a memory location.";
break;
case "vfmsub132ps":
case "vfmsub213ps":
case "vfmsub231ps":
case "vfmsub123ps":
case "vfmsub312ps":
case "vfmsub321ps":
instructionInfo = "Performs a set of SIMD multiply-subtract computation on packed single-precision " +
"floating-point values using three source operands and writes the " +
"multiply-subtract results in the destination operand. The destination operand " +
"is also the first source operand. The second operand must be a SIMD register. " +
"The third source operand can be a SIMD register or a memory location.";
break;
case "vfmsub132sd":
case "vfmsub213sd":
case "vfmsub231sd":
case "vfmsub123sd":
case "vfmsub312sd":
case "vfmsub321sd":
instructionInfo = "Performs a SIMD multiply-subtract computation on the low packed double-precision " +
"floating-point values using three source operands and writes the multiply-subtract " +
"result in the destination operand. The destination operand is also the first " +
"source operand. The second operand must be a XMM register. The third source " +
"operand can be a XMM register or a 64-bit memory location.";
break;
case "vfmsub132ss":
case "vfmsub213ss":
case "vfmsub231ss":
case "vfmsub123ss":
case "vfmsub312ss":
case "vfmsub321ss":
instructionInfo = "Performs a SIMD multiply-subtract computation on the low packed single-precision " +
"floating-point values using three source operands and writes the multiply-subtract result in the destination operand. The destination operand is also the first source operand. The second operand must be a XMM register. The third source operand can be a XMM register or a 32-bit memory location.";
break;
case "vfmsubadd132pd":
case "vfmsubadd213pd":
case "vfmsubadd231pd":
case "vfmsubadd123pd":
case "vfmsubadd312pd":
case "vfmsubadd321pd":
instructionInfo = "VFMSUBADD132PD: Multiplies the two, four, or eight packed double-precision " +
"floating-point values from the first source operand to the two or four packed " +
"double-precision floating-point values in the third source operand. From the " +
"infinite precision intermediate result, subtracts the odd double-precision " +
"floating-point elements and adds the even double-precision floating-point " +
"values in the second source operand, performs rounding and stores the " +
"resulting two or four packed double-precision floating-point values to the " +
"destination operand (first source operand).";
break;
case "vfmsubadd132ps":
case "vfmsubadd213ps":
case "vfmsubadd231ps":
case "vfmsubadd123ps":
case "vfmsubadd312ps":
case "vfmsubadd321ps":
instructionInfo = "VFMSUBADD132PS: Multiplies the four, eight or sixteen packed single-precision " +
"floating-point values from the first source operand to the corresponding packed " +
"single-precision floating-point values in the third source operand. From the " +
"infinite precision intermediate result, subtracts the odd single-precision " +
"floating-point elements and adds the even single-precision floating-point " +
"values in the second source operand, performs rounding and stores the resulting " +
"packed single-precision floating-point values to the destination operand " +
"(first source operand).";
break;
case "vfnmadd132pd":
case "vfnmadd213pd":
case "vfnmadd231pd":
case "vfnmadd123pd":
case "vfnmadd312pd":
case "vfnmadd321pd":
instructionInfo = "VFNMADD132PD: Multiplies the two, four or eight packed double-precision " +
"floating-point values from the first source operand to the two, four or " +
"eight packed double-precision floating-point values in the third source " +
"operand, adds the negated infinite precision intermediate result to the two, " +
"four or eight packed double-precision floating-point values in the second " +
"source operand, performs rounding and stores the resulting two, four or eight " +
"packed double-precision floating-point values to the destination operand " +
"(first source operand).";
break;
case "vfnmadd132ps":
case "vfnmadd213ps":
case "vfnmadd231ps":
case "vfnmadd123ps":
case "vfnmadd312ps":
case "vfnmadd321ps":
instructionInfo = "VFNMADD132PS: Multiplies the four, eight or sixteen packed single-precision " +
"floating-point values from the first source operand to the four, eight or " +
"sixteen packed single-precision floating-point values in the third source " +
"operand, adds the negated infinite precision intermediate result to the four, " +
"eight or sixteen packed single-precision floating-point values in the second " +
"source operand, performs rounding and stores the resulting four, eight or " +
"sixteen packed single-precision floating-point values to the destination " +
"operand (first source operand).";
break;
case "vfnmadd132sd":
case "vfnmadd213sd":
case "vfnmadd231sd":
case "vfnmadd123sd":
case "vfnmadd312sd":
case "vfnmadd321sd":
instructionInfo = "VFNMADD132SD: Multiplies the low packed double-precision floating-point value " +
"from the first source operand to the low packed double-precision floating-point " +
"value in the third source operand, adds the negated infinite precision " +
"intermediate result to the low packed double-precision floating-point values " +
"in the second source operand, performs rounding and stores the resulting packed " +
"double-precision floating-point value to the destination operand (first source operand).";
break;
case "vfnmadd132ss":
case "vfnmadd213ss":
case "vfnmadd231ss":
case "vfnmadd123ss":
case "vfnmadd312ss":
case "vfnmadd321ss":
instructionInfo = "VFNMADD132SS: Multiplies the low packed single-precision floating-point value " +
"from the first source operand to the low packed single-precision floating-point " +
"value in the third source operand, adds the negated infinite precision " +
"intermediate result to the low packed single-precision floating-point value " +
"in the second source operand, performs rounding and stores the resulting " +
"packed single-precision floating-point value to the destination operand (first source operand).";
break;
case "vfnmsub132pd":
case "vfnmsub213pd":
case "vfnmsub231pd":
case "vfnmsub123pd":
case "vfnmsub312pd":
case "vfnmsub321pd":
instructionInfo = "VFNMSUB132PD: Multiplies the two, four or eight packed double-precision " +
"floating-point values from the first source operand to the two, four or " +
"eight packed double-precision floating-point values in the third source operand. " +
"From negated infinite precision intermediate results, subtracts the two, " +
"four or eight packed double-precision floating-point values in the second " +
"source operand, performs rounding and stores the resulting two, four or eight " +
"packed double-precision floating-point values to the destination operand (first source operand).";
break;
case "vfnmsub132ps":
case "vfnmsub213ps":
case "vfnmsub231ps":
case "vfnmsub123ps":
case "vfnmsub312ps":
case "vfnmsub321ps":
instructionInfo = "VFNMSUB132PS: Multiplies the four, eight or sixteen packed single-precision " +
"floating-point values from the first source operand to the four, eight or " +
"sixteen packed single-precision floating-point values in the third source operand. " +
"From negated infinite precision intermediate results, subtracts the four, " +
"eight or sixteen packed single-precision floating-point values in the second " +
"source operand, performs rounding and stores the resulting four, eight or " +
"sixteen packed single-precision floating-point values to the destination " +
"operand (first source operand).";
break;
case "vfnmsub132sd":
case "vfnmsub213sd":
case "vfnmsub231sd":
case "vfnmsub123sd":
case "vfnmsub312sd":
case "vfnmsub321sd":
instructionInfo = "VFNMSUB132SD: Multiplies the low packed double-precision floating-point value " +
"from the first source operand to the low packed double-precision floating-point " +
"value in the third source operand. From negated infinite precision " +
"intermediate result, subtracts the low double-precision floating-point value " +
"in the second source operand, performs rounding and stores the resulting " +
"packed double-precision floating-point value to the destination operand (first source operand).";
break;
case "vfnmsub132ss":
case "vfnmsub213ss":
case "vfnmsub231ss":
case "vfnmsub123ss":
case "vfnmsub312ss":
case "vfnmsub321ss":
instructionInfo = "VFNMSUB132SS: Multiplies the low packed single-precision floating-point " +
"value from the first source operand to the low packed single-precision " +
"floating-point value in the third source operand. From negated infinite " +
"precision intermediate result, the low single-precision floating-point " +
"value in the second source operand, performs rounding and stores the " +
"resulting packed single-precision floating-point value to the destination " +
"operand (first source operand).";
break;
case "vfpclasspd":
instructionInfo = "The FPCLASSPD instruction checks the packed double precision floating point " +
"values for special categories, specified by the set bits in the imm8 byte. " +
"Each set bit in imm8 specifies a category of floating-point values that the " +
"input data element is classified against. The classified results of all " +
"specified categories of an input value are ORed together to form the final " +
"boolean result for the input element. The result of each element is written " +
"to the corresponding bit in a mask register k2 according to the writemask k1. " +
"Bits [MAX_KL-1:8/4/2] of the destination are cleared.";
break;
case "vfpclassps":
instructionInfo = "The FPCLASSPS instruction checks the packed single-precision floating point " +
"values for special categories, specified by the set bits in the imm8 byte. " +
"Each set bit in imm8 specifies a category of floating-point values that the " +
"input data element is classified against. The classified results of all " +
"specified categories of an input value are ORed together to form the final " +
"boolean result for the input element. The result of each element is written " +
"to the corresponding bit in a mask register k2 according to the writemask k1. " +
"Bits [MAX_KL-1:16/8/4] of the destination are cleared.";
break;
case "vfpclasssd":
instructionInfo = "The FPCLASSSD instruction checks the low double precision floating point value " +
"in the source operand for special categories, specified by the set bits in " +
"the imm8 byte. Each set bit in imm8 specifies a category of floating-point " +
"values that the input data element is classified against. The classified " +
"results of all specified categories of an input value are ORed together to " +
"form the final boolean result for the input element. The result is written to " +
"the low bit in a mask register k2 according to the writemask k1. Bits " +
"MAX_KL-1: 1 of the destination are cleared.";
break;
case "vfpclassss":
instructionInfo = "The FPCLASSSS instruction checks the low single-precision floating point " +
"value in the source operand for special categories, specified by the set bits " +
"in the imm8 byte. Each set bit in imm8 specifies a category of floating-point " +
"values that the input data element is classified against. The classified " +
"results of all specified categories of an input value are ORed together to " +
"form the final boolean result for the input element. The result is written " +
"to the low bit in a mask register k2 according to the writemask k1. Bits " +
"MAX_KL-1: 1 of the destination are cleared.";
break;
case "vgatherdpd":
case "vgatherqpd":
instructionInfo = "The instruction conditionally loads up to 2 or 4 double-precision " +
"floating-point values from memory addresses specified by the memory operand " +
"(the second operand) and using qword indices. The memory operand uses the " +
"VSIB form of the SIB byte to specify a general purpose register operand as " +
"the common base, a vector register for an array of indices relative to the " +
"base and a constant scale factor.";
break;
case "vgatherdps":
case "vgatherqps":
instructionInfo = "The instruction conditionally loads up to 4 or 8 single-precision floating-point " +
"values from memory addresses specified by the memory operand (the second operand) " +
"and using dword indices. The memory operand uses the VSIB form of the SIB byte to " +
"specify a general purpose register operand as the common base, a vector register " +
"for an array of indices relative to the base and a constant scale factor.";
break;
case "vgetexppd":
instructionInfo = "Extracts the biased exponents from the normalized DP FP representation of " +
"each qword data element of the source operand (the second operand) as unbiased " +
"signed integer value, or convert the denormal representation of input data to " +
"unbiased negative integer values. Each integer value of the unbiased exponent " +
"is converted to double-precision FP value and written to the corresponding " +
"qword elements of the destination operand (the first operand) as DP FP numbers.";
break;
case "vgetexpps":
instructionInfo = "Extracts the biased exponents from the normalized SP FP representation of " +
"each dword element of the source operand (the second operand) as unbiased " +
"signed integer value, or convert the denormal representation of input data to " +
"unbiased negative integer values. Each integer value of the unbiased exponent " +
"is converted to single-precision FP value and written to the corresponding " +
"dword elements of the destination operand (the first operand) as SP FP numbers.";
break;
case "vgetexpsd":
instructionInfo = "Extracts the biased exponent from the normalized DP FP representation of the " +
"low qword data element of the source operand (the third operand) as unbiased " +
"signed integer value, or convert the denormal representation of input data to " +
"unbiased negative integer values. The integer value of the unbiased exponent " +
"is converted to double-precision FP value and written to the destination operand " +
"(the first operand) as DP FP numbers. Bits (127:64) of the XMM register " +
"destination are copied from corresponding bits in the first source operand.";
break;
case "vgetexpss":
instructionInfo = "Extracts the biased exponent from the normalized SP FP representation of the " +
"low doubleword data element of the source operand (the third operand) as " +
"unbiased signed integer value, or convert the denormal representation of input " +
"data to unbiased negative integer values. The integer value of the unbiased " +
"exponent is converted to single-precision FP value and written to the destination " +
"operand (the first operand) as SP FP numbers. Bits (127:32) of the XMM register " +
"destination are copied from corresponding bits in the first source operand.";
break;
case "vgetmantpd":
instructionInfo = "Convert double-precision floating values in the source operand (the second " +
"operand) to DP FP values with the mantissa normalization and sign control " +
"specified by the imm8 byte. The converted results are written to the destination " +
"operand (the first operand) using writemask k1. The normalized mantissa is " +
"specified by interv (imm8[1:0]) and the sign control (sc) is specified by " +
"bits 3:2 of the immediate byte.";
break;
case "vgetmantps":
instructionInfo = "Convert single-precision floating values in the source operand (the second " +
"operand) to SP FP values with the mantissa normalization and sign control " +
"specified by the imm8 byte. The converted results are written to the destination " +
"operand (the first operand) using writemask k1. The normalized mantissa is " +
"specified by interv (imm8[1:0]) and the sign control (sc) is specified by " +
"bits 3:2 of the immediate byte.";
break;
case "vgetmantsd":
instructionInfo = "Convert the double-precision floating values in the low quadword element of " +
"the second source operand (the third operand) to DP FP value with the mantissa " +
"normalization and sign control specified by the imm8 byte. The converted " +
"result is written to the low quadword element of the destination operand " +
"(the first operand) using writemask k1. Bits (127:64) of the XMM register " +
"destination are copied from corresponding bits in the first source operand. " +
"The normalized mantissa is specified by interv (imm8[1:0]) and the sign " +
"control (sc) is specified by bits 3:2 of the immediate byte.";
break;
case "vgetmantss":
instructionInfo = "Convert the single-precision floating values in the low doubleword element " +
"of the second source operand (the third operand) to SP FP value with the " +
"mantissa normalization and sign control specified by the imm8 byte. " +
"The converted result is written to the low doubleword element of the destination " +
"operand (the first operand) using writemask k1. Bits (127:32) of the XMM " +
"register destination are copied from corresponding bits in the first source " +
"operand. The normalized mantissa is specified by interv (imm8[1:0]) and the " +
"sign control (sc) is specified by bits 3:2 of the immediate byte.";
break;
case "vinsertf128":
case "vinsertf32x4":
case "vinsertf64x2":
case "vinsertf32x8":
case "vinsertf64x4":
instructionInfo = "VINSERTF128/VINSERTF32x4 and VINSERTF64x2 insert 128-bits of packed " +
"floating-point values from the second source operand (the third operand) " +
"into the destination operand (the first operand) at an 128-bit granularity " +
"offset multiplied by imm8[0] (256-bit) or imm8[1:0]. The remaining portions " +
"of the destination operand are copied from the corresponding fields of the " +
"first source operand (the second operand). The second source operand can be " +
"either an XMM register or a 128-bit memory location. The destination and " +
"first source operands are vector registers.";
break;
case "vinserti128":
case "vinserti32x4":
case "vinserti64x2":
case "vinserti32x8":
case "vinserti64x4":
instructionInfo = "VINSERTI32x4 and VINSERTI64x2 inserts 128-bits of packed integer values from " +
"the second source operand (the third operand) into the destination operand " +
"(the first operand) at an 128-bit granular offset multiplied by imm8[0] " +
"(256-bit) or imm8[1:0]. The remaining portions of the destination are copied " +
"from the corresponding fields of the first source operand (the second operand). " +
"The second source operand can be either an XMM register or a 128-bit memory " +
"location. The high 6/7bits of the immediate are ignored. The destination " +
"operand is a ZMM/YMM register and updated at 32 and 64-bit granularity " +
"according to the writemask.";
break;
case "vmaskmov":
instructionInfo = "Conditionally moves packed data elements from the second source operand into " +
"the corresponding data element of the destination operand, depending on the " +
"mask bits associated with each data element. The mask bits are specified in " +
"the first source operand.";
break;
case "vpblendd":
instructionInfo = "Dword elements from the source operand (second operand) are conditionally " +
"written to the destination operand (first operand) depending on bits in the " +
"immediate operand (third operand). The immediate bits (bits 7:0) form a mask " +
"that determines whether the corresponding word in the destination is copied " +
"from the source. If a bit in the mask, corresponding to a word, is \"1\", " +
"then the word is copied, else the word is unchanged.";
break;
case "vpblendmb":
case "vpblendmw":
instructionInfo = "Performs an element-by-element blending of byte/word elements between the " +
"first source operand byte vector register and the second source operand byte " +
"vector from memory or register, using the instruction mask as selector. " +
"The result is written into the destination byte vector register.";
break;
case "vpblendmd":
case "vpblendmq":
instructionInfo = "Performs an element-by-element blending of dword/qword elements between the " +
"first source operand (the second operand) and the elements of the second " +
"source operand (the third operand) using an opmask register as select control. " +
"The blended result is written into the destination.";
break;
case "vpbroadcast":
instructionInfo = "Load integer data from the source operand (the second operand) and broadcast " +
"to all elements of the destination operand (the first operand).";
break;
case "vpbroadcastb":
case "vpbroadcastw":
case "vpbroadcastd":
case "vpbroadcastq":
instructionInfo = "Broadcasts a 8-bit, 16-bit, 32-bit or 64-bit value from a general-purpose " +
"register (the second operand) to all the locations in the destination vector " +
"register (the first operand) using the writemask k1.";
break;
case "vpbroadcastm":
instructionInfo = "Broadcasts the zero-extended 64/32 bit value of the low byte/word of the " +
"source operand (the second operand) to each 64/32 bit element of the " +
"destination operand (the first operand). The source operand is an opmask register. " +
"The destination operand is a ZMM register (EVEX.512), YMM register (EVEX.256), " +
"or XMM register (EVEX.128).";
break;
case "vpcmpb":
case "vpcmpub":
instructionInfo = "Performs a SIMD compare of the packed byte values in the second source operand " +
"and the first source operand and returns the results of the comparison to the " +
"mask destination operand. The comparison predicate operand (immediate byte) " +
"specifies the type of comparison performed on each pair of packed values in " +
"the two source operands. The result of each comparison is a single mask bit " +
"result of 1 (comparison true) or 0 (comparison false).";
break;
case "vpcmpd":
case "vpcmpud":
instructionInfo = "Performs a SIMD compare of the packed integer values in the second source " +
"operand and the first source operand and returns the results of the comparison " +
"to the mask destination operand. The comparison predicate operand (immediate byte) " +
"specifies the type of comparison performed on each pair of packed values in " +
"the two source operands. The result of each comparison is a single mask bit " +
"result of 1 (comparison true) or 0 (comparison false).";
break;
case "vpcmpq":
case "vpcmpuq":
instructionInfo = "Performs a SIMD compare of the packed integer values in the second source " +
"operand and the first source operand and returns the results of the comparison " +
"to the mask destination operand. The comparison predicate operand (immediate " +
"byte) specifies the type of comparison performed on each pair of packed values " +
"in the two source operands. The result of each comparison is a single mask " +
"bit result of 1 (comparison true) or 0 (comparison false).";
break;
case "vpcmpw":
case "vpcmpuw":
instructionInfo = "Performs a SIMD compare of the packed integer word in the second source " +
"operand and the first source operand and returns the results of the comparison " +
"to the mask destination operand. The comparison predicate operand (immediate " +
"byte) specifies the type of comparison performed on each pair of packed values " +
"in the two source operands. The result of each comparison is a single mask " +
"bit result of 1 (comparison true) or 0 (comparison false).";
break;
case "vpcompressd":
instructionInfo = "Compress (store) up to 16/8/4 doubleword integer values from the source " +
"operand (second operand) to the destination operand (first operand). " +
"The source operand is a ZMM/YMM/XMM register, the destination operand can " +
"be a ZMM/YMM/XMM register or a 512/256/128-bit memory location.";
break;
case "vpcompressq":
instructionInfo = "Compress (stores) up to 8/4/2 quadword integer values from the source operand " +
"(second operand) to the destination operand (first operand). The source " +
"operand is a ZMM/YMM/XMM register, the destination operand can be a ZMM/YMM/XMM " +
"register or a 512/256/128-bit memory location.";
break;
case "vpconflictd":
case "vpconflictq":
instructionInfo = "Test each dword/qword element of the source operand (the second operand) for " +
"equality with all other elements in the source operand closer to the least " +
"significant element. Each element\xe2\x80\x99s comparison results form a bit " +
"vector, which is then zero extended and written to the destination according " +
"to the writemask.";
break;
case "vperm2f128":
instructionInfo = "Permute 128 bit floating-point-containing fields from the first source operand " +
"(second operand) and second source operand (third operand) using bits in the " +
"8-bit immediate and store results in the destination operand (first operand). " +
"The first source operand is a YMM register, the second source operand is a YMM " +
"register or a 256-bit memory location, and the destination operand is a YMM register.";
break;
case "vperm2i128":
instructionInfo = "Permute 128 bit integer data from the first source operand (second operand) " +
"and second source operand (third operand) using bits in the 8-bit immediate " +
"and store results in the destination operand (first operand). The first source " +
"operand is a YMM register, the second source operand is a YMM register or a " +
"256-bit memory location, and the destination operand is a YMM register.";
break;
case "vpermb":
instructionInfo = "Copies bytes from the second source operand (the third operand) to the " +
"destination operand (the first operand) according to the byte indices in the " +
"first source operand (the second operand). Note that this instruction permits " +
"a byte in the source operand to be copied to more than one location in the " +
"destination operand.";
break;
case "vpermd":
case "vpermw":
instructionInfo = "Copies doublewords (or words) from the second source operand (the third " +
"operand) to the destination operand (the first operand) according to the " +
"indices in the first source operand (the second operand). Note that this " +
"instruction permits a doubleword (word) in the source operand to be copied " +
"to more than one location in the destination operand.";
break;
case "vpermi2b":
instructionInfo = "Permutes byte values in the second operand (the first source operand) and " +
"the third operand (the second source operand) using the byte indices in the " +
"first operand (the destination operand) to select byte elements from the " +
"second or third source operands. The selected byte elements are written to " +
"the destination at byte granularity under the writemask k1.";
break;
case "vpermi2w":
case "vpermi2d":
case "vpermi2q":
case "vpermi2ps":
case "vpermi2pd":
instructionInfo = "Permutes 16-bit/32-bit/64-bit values in the second operand (the first source " +
"operand) and the third operand (the second source operand) using indices in " +
"the first operand to select elements from the second and third operands. " +
"The selected elements are written to the destination operand (the first " +
"operand) according to the writemask k1.";
break;
case "vpermilpd":
instructionInfo = "Permute pairs of double-precision floating-point values in the first source " +
"operand (second operand), each using a 1-bit control field residing in the " +
"corresponding quadword element of the second source operand (third operand). " +
"Permuted results are stored in the destination operand (first operand).";
break;
case "vpermilps":
instructionInfo = "Permute quadruples of single-precision floating-point values in the first " +
"source operand (second operand), each quadruplet using a 2-bit control field " +
"in the corresponding dword element of the second source operand. Permuted " +
"results are stored in the destination operand (first operand).";
break;
case "vpermpd":
instructionInfo = "The imm8 version: Copies quadword elements of double-precision floating-point " +
"values from the source operand (the second operand) to the destination " +
"operand (the first operand) according to the indices specified by the " +
"immediate operand (the third operand). Each two-bit value in the immediate " +
"byte selects a qword element in the source operand.";
break;
case "vpermps":
instructionInfo = "Copies doubleword elements of single-precision floating-point values from " +
"the second source operand (the third operand) to the destination operand " +
"(the first operand) according to the indices in the first source operand " +
"(the second operand). Note that this instruction permits a doubleword in " +
"the source operand to be copied to more than one location in the destination " +
"operand.";
break;
case "vpermq":
instructionInfo = "The imm8 version: Copies quadwords from the source operand (the second " +
"operand) to the destination operand (the first operand) according to the " +
"indices specified by the immediate operand (the third operand). Each two-bit " +
"value in the immediate byte selects a qword element in the source operand.";
break;
case "vpermt2b":
instructionInfo = "Permutes byte values from two tables, comprising of the first operand (also " +
"the destination operand) and the third operand (the second source operand). " +
"The second operand (the first source operand) provides byte indices to select " +
"byte results from the two tables. The selected byte elements are written to " +
"the destination at byte granularity under the writemask k1.";
break;
case "vpermt2w":
case "vpermt2d":
case "vpermt2q":
case "vpermt2ps":
case "vpermt2pd":
instructionInfo = "Permutes 16-bit/32-bit/64-bit values in the first operand and the third " +
"operand (the second source operand) using indices in the second operand " +
"(the first source operand) to select elements from the first and third operands. " +
"The selected elements are written to the destination operand (the first operand) " +
"according to the writemask k1.";
break;
case "vpexpandd":
instructionInfo = "Expand (load) up to 16 contiguous doubleword integer values of the input " +
"vector in the source operand (the second operand) to sparse elements in the " +
"destination operand (the first operand), selected by the writemask k1. " +
"The destination operand is a ZMM register, the source operand can be a ZMM " +
"register or memory location.";
break;
case "vpexpandq":
instructionInfo = "Expand (load) up to 8 quadword integer values from the source operand (the " +
"second operand) to sparse elements in the destination operand (the first " +
"operand), selected by the writemask k1. The destination operand is a ZMM " +
"register, the source operand can be a ZMM register or memory location.";
break;
case "vpgatherdd":
case "vpgatherqd":
instructionInfo = "The instruction conditionally loads up to 4 or 8 dword values from memory " +
"addresses specified by the memory operand (the second operand) and using " +
"dword indices. The memory operand uses the VSIB form of the SIB byte to " +
"specify a general purpose register operand as the common base, a vector " +
"register for an array of indices relative to the base and a constant scale factor.";
break;
case "vpgatherdq":
instructionInfo = "A set of 16 or 8 doubleword/quadword memory locations pointed to by base " +
"address BASE_ADDR and index vector VINDEX with scale SCALE are gathered. " +
"The result is written into vector zmm1. The elements are specified via the " +
"VSIB (i.e., the index register is a zmm, holding packed indices). " +
"Elements will only be loaded if their corresponding mask bit is one. If an " +
"element\xe2\x80\x99s mask bit is not set, the corresponding element of the " +
"destination register (zmm1) is left unchanged. The entire mask register will " +
"be set to zero by this instruction unless it triggers an exception.";
break;
case "vpgatherqq":
instructionInfo = "A set of 8 doubleword/quadword memory locations pointed to by base address " +
"BASE_ADDR and index vector VINDEX with scale SCALE are gathered. The result " +
"is written into a vector register. The elements are specified via the VSIB " +
"(i.e., the index register is a vector register, holding packed indices). " +
"Elements will only be loaded if their corresponding mask bit is one. If an " +
"element\xe2\x80\x99s mask bit is not set, the corresponding element of the " +
"destination register is left unchanged. The entire mask register will be set " +
"to zero by this instruction unless it triggers an exception.";
break;
case "vplzcntd":
case "vplzcntq":
instructionInfo = "Counts the number of leading most significant zero bits in each dword or " +
"qword element of the source operand (the second operand) and stores the " +
"results in the destination register (the first operand) according to the " +
"writemask. If an element is zero, the result for that element is the operand " +
"size of the element.";
break;
case "vpmadd52huq":
instructionInfo = "Multiplies packed unsigned 52-bit integers in each qword element of the first " +
"source operand (the second operand) with the packed unsigned 52-bit integers " +
"in the corresponding elements of the second source operand (the third operand) " +
"to form packed 104-bit intermediate results. The high 52-bit, unsigned integer " +
"of each 104-bit product is added to the corresponding qword unsigned integer " +
"of the destination operand (the first operand) under the writemask k1.";
break;
case "vpmadd52luq":
instructionInfo = "Multiplies packed unsigned 52-bit integers in each qword element of the first " +
"source operand (the second operand) with the packed unsigned 52-bit integers " +
"in the corresponding elements of the second source operand (the third operand) " +
"to form packed 104-bit intermediate results. The low 52-bit, unsigned integer " +
"of each 104-bit product is added to the corresponding qword unsigned integer " +
"of the destination operand (the first operand) under the writemask k1.";
break;
case "vpmaskmov":
case "vpmaskmovd":
case "vpmaskmovq":
instructionInfo = "Conditionally moves packed data elements from the second source operand into " +
"the corresponding data element of the destination operand, depending on the " +
"mask bits associated with each data element. The mask bits are specified in " +
"the first source operand.";
break;
case "vpmovb2m":
case "vpmovw2m":
case "vpmovd2m":
case "vpmovq2m":
instructionInfo = "Converts a vector register to a mask register. Each element in the destination " +
"register is set to 1 or 0 depending on the value of most significant bit of " +
"the corresponding element in the source register.";
break;
case "vpmovdb":
case "vpmovsdb":
case "vpmovusdb":
instructionInfo = "VPMOVDB down converts 32-bit integer elements in the source operand (the " +
"second operand) into packed bytes using truncation. VPMOVSDB converts signed " +
"32-bit integers into packed signed bytes using signed saturation. VPMOVUSDB " +
"convert unsigned double-word values into unsigned byte values using unsigned " +
"saturation.";
break;
case "vpmovdw":
case "vpmovsdw":
case "vpmovusdw":
instructionInfo = "VPMOVDW down converts 32-bit integer elements in the source operand (the " +
"second operand) into packed words using truncation. VPMOVSDW converts signed " +
"32-bit integers into packed signed words using signed saturation. VPMOVUSDW " +
"convert unsigned double-word values into unsigned word values using unsigned " +
"saturation.";
break;
case "vpmovm2b":
case "vpmovm2w":
case "vpmovm2d":
case "vpmovm2q":
instructionInfo = "Converts a mask register to a vector register. Each element in the destination " +
"register is set to all 1\xe2\x80\x99s or all 0\xe2\x80\x99s depending on the " +
"value of the corresponding bit in the source mask register.";
break;
case "vpmovqb":
case "vpmovsqb":
case "vpmovusqb":
instructionInfo = "VPMOVQB down converts 64-bit integer elements in the source operand (the " +
"second operand) into packed byte elements using truncation. VPMOVSQB converts " +
"signed 64-bit integers into packed signed bytes using signed saturation. " +
"VPMOVUSQB convert unsigned quad-word values into unsigned byte values using " +
"unsigned saturation. The source operand is a vector register. The destination " +
"operand is an XMM register or a memory location.";
break;
case "vpmovqd":
case "vpmovsqd":
case "vpmovusqd":
instructionInfo = "VPMOVQW down converts 64-bit integer elements in the source operand (the " +
"second operand) into packed double-words using truncation. VPMOVSQW converts " +
"signed 64-bit integers into packed signed doublewords using signed saturation. " +
"VPMOVUSQW convert unsigned quad-word values into unsigned double-word values " +
"using unsigned saturation.";
break;
case "vpmovqw":
case "vpmovsqw":
case "vpmovusqw":
instructionInfo = "VPMOVQW down converts 64-bit integer elements in the source operand (the " +
"second operand) into packed words using truncation. VPMOVSQW converts signed " +
"64-bit integers into packed signed words using signed saturation. VPMOVUSQW " +
"convert unsigned quad-word values into unsigned word values using unsigned " +
"saturation.";
break;
case "vpmovwb":
case "vpmovswb":
case "vpmovuswb":
instructionInfo = "VPMOVWB down converts 16-bit integers into packed bytes using truncation. " +
"VPMOVSWB converts signed 16-bit integers into packed signed bytes using signed " +
"saturation. VPMOVUSWB convert unsigned word values into unsigned byte values " +
"using unsigned saturation.";
break;
case "vpmultishiftqb":
instructionInfo = "This instruction selects eight unaligned bytes from each input qword element " +
"of the second source operand (the third operand) and writes eight assembled " +
"bytes for each qword element in the destination operand (the first operand). " +
"Each byte result is selected using a byte-granular shift control within the " +
"corresponding qword element of the first source operand (the second operand). " +
"Each byte result in the destination operand is updated under the writemask k1.";
break;
case "vprold":
case "vprolvd":
case "vprolq":
case "vprolvq":
instructionInfo = "Rotates the bits in the individual data elements (doublewords, or quadword) " +
"in the first source operand to the left by the number of bits specified in " +
"the count operand. If the value specified by the count operand is greater " +
"than 31 (for doublewords), or 63 (for a quadword), then the count operand " +
"modulo the data size (32 or 64) is used.";
break;
case "vprord":
case "vprorvd":
case "vprorq":
case "vprorvq":
instructionInfo = "Rotates the bits in the individual data elements (doublewords, or quadword) " +
"in the first source operand to the right by the number of bits specified in " +
"the count operand. If the value specified by the count operand is greater than " +
"31 (for doublewords), or 63 (for a quadword), then the count operand modulo " +
"the data size (32 or 64) is used.";
break;
case "vpscatterdd":
case "vpscatterdq":
case "vpscatterqd":
case "vpscatterqq":
instructionInfo = "Stores up to 16 elements (8 elements for qword indices) in doubleword vector " +
"or 8 elements in quadword vector to the memory locations pointed by base address " +
"BASE_ADDR and index vector VINDEX, with scale SCALE. The elements are specified " +
"via the VSIB (i.e., the index register is a vector register, holding packed " +
"indices). Elements will only be stored if their corresponding mask bit is one. " +
"The entire mask register will be set to zero by this instruction unless it triggers an exception.";
break;
case "vpsllvw":
case "vpsllvd":
case "vpsllvq":
instructionInfo = "Shifts the bits in the individual data elements (words, doublewords or quadword) " +
"in the first source operand to the left by the count value of respective data " +
"elements in the second source operand. As the bits in the data elements are " +
"shifted left, the empty low-order bits are cleared (set to 0).";
break;
case "vpsravw":
case "vpsravd":
case "vpsravq":
instructionInfo = "Shifts the bits in the individual data elements (word/doublewords/quadword) " +
"in the first source operand (the second operand) to the right by the number " +
"of bits specified in the count value of respective data elements in the second " +
"source operand (the third operand). As the bits in the data elements are " +
"shifted right, the empty high-order bits are set to the MSB (sign extension).";
break;
case "vpsrlvw":
case "vpsrlvd":
case "vpsrlvq":
instructionInfo = "Shifts the bits in the individual data elements (words, doublewords or " +
"quadword) in the first source operand to the right by the count value of " +
"respective data elements in the second source operand. As the bits in the " +
"data elements are shifted right, the empty high-order bits are cleared (set to 0).";
break;
case "vpternlogd":
case "vpternlogq":
instructionInfo = "VPTERNLOGD/Q takes three bit vectors of 512-bit length (in the first, second " +
"and third operand) as input data to form a set of 512 indices, each index is " +
"comprised of one bit from each input vector. The imm8 byte specifies a boolean " +
"logic table producing a binary value for each 3-bit index value. The final " +
"512-bit boolean result is written to the destination operand (the first operand) " +
"using the writemask k1 with the granularity of doubleword element or quadword " +
"element into the destination.";
break;
case "vptestmb":
case "vptestmw":
case "vptestmd":
case "vptestmq":
instructionInfo = "Performs a bitwise logical AND operation on the first source operand (the " +
"second operand) and second source operand (the third operand) and stores the " +
"result in the destination operand (the first operand) under the writemask. " +
"Each bit of the result is set to 1 if the bitwise AND of the corresponding " +
"elements of the first and second src operands is non-zero; otherwise it is " +
"set to 0.";
break;
case "vptestnmb":
case "vptestnmw":
case "vptestnmd":
case "vptestnmq":
instructionInfo = "Performs a bitwise logical NAND operation on the byte/word/doubleword/quadword " +
"element of the first source operand (the second operand) with the corresponding " +
"element of the second source operand (the third operand) and stores the " +
"logical comparison result into each bit of the destination operand (the first " +
"operand) according to the writemask k1. Each bit of the result is set to 1 if " +
"the bitwise AND of the corresponding elements of the first and second src " +
"operands is zero; otherwise it is set to 0.";
break;
case "vrangepd":
instructionInfo = "This instruction calculates 2/4/8 range operation outputs from two sets of " +
"packed input double-precision FP values in the first source operand (the second " +
"operand) and the second source operand (the third operand). The range outputs " +
"are written to the destination operand (the first operand) under the writemask " +
"k1.";
break;
case "vrangeps":
instructionInfo = "This instruction calculates 4/8/16 range operation outputs from two sets of " +
"packed input single-precision FP values in the first source operand (the second " +
"operand) and the second source operand (the third operand). The range outputs " +
"are written to the destination operand (the first operand) under the writemask k1.";
break;
case "vrangesd":
instructionInfo = "This instruction calculates a range operation output from two input " +
"double-precision FP values in the low qword element of the first source " +
"operand (the second operand) and second source operand (the third operand). " +
"The range output is written to the low qword element of the destination operand " +
"(the first operand) under the writemask k1.";
break;
case "vrangess":
instructionInfo = "This instruction calculates a range operation output from two input " +
"single-precision FP values in the low dword element of the first source operand " +
"(the second operand) and second source operand (the third operand). The range " +
"output is written to the low dword element of the destination operand (the " +
"first operand) under the writemask k1.";
break;
case "vrcp14pd":
instructionInfo = "This instruction performs a SIMD computation of the approximate reciprocals " +
"of eight/four/two packed double-precision floating-point values in the source " +
"operand (the second operand) and stores the packed double-precision " +
"floating-point results in the destination operand. The maximum relative error " +
"for this approximation is less than 2^-14.";
break;
case "vrcp14ps":
instructionInfo = "This instruction performs a SIMD computation of the approximate reciprocals " +
"of the packed single-precision floating-point values in the source operand " +
"(the second operand) and stores the packed single-precision floating-point " +
"results in the destination operand (the first operand). The maximum relative " +
"error for this approximation is less than 2^-14.";
break;
case "vrcp14sd":
instructionInfo = "This instruction performs a SIMD computation of the approximate reciprocal " +
"of the low double-precision floating-point value in the second source operand " +
"(the third operand) stores the result in the low quadword element of the " +
"destination operand (the first operand) according to the writemask k1. Bits " +
"(127:64) of the XMM register destination are copied from corresponding bits " +
"in the first source operand (the second operand). The maximum relative error " +
"for this approximation is less than 2^-14. The source operand can " +
"be an XMM register or a 64-bit memory location. The destination operand is an " +
"XMM register.";
break;
case "vrcp14ss":
instructionInfo = "This instruction performs a SIMD computation of the approximate reciprocal " +
"of the low single-precision floating-point value in the second source operand " +
"(the third operand) and stores the result in the low quadword element of the " +
"destination operand (the first operand) according to the writemask k1. Bits " +
"(127:32) of the XMM register destination are copied from corresponding bits " +
"in the first source operand (the second operand). The maximum relative error " +
"for this approximation is less than 2<sup>-14</sup>. The source operand can " +
"be an XMM register or a 32-bit memory location. The destination operand is an " +
"XMM register.";
break;
case "vreducepd":
instructionInfo = "Perform reduction transformation of the packed binary encoded double-precision " +
"FP values in the source operand (the second operand) and store the reduced " +
"results in binary FP format to the destination operand (the first operand) " +
"under the writemask k1.";
break;
case "vreduceps":
instructionInfo = "Perform reduction transformation of the packed binary encoded single-precision " +
"FP values in the source operand (the second operand) and store the reduced " +
"results in binary FP format to the destination operand (the first operand) " +
"under the writemask k1.";
break;
case "vreducesd":
instructionInfo = "Perform a reduction transformation of the binary encoded double-precision FP " +
"value in the low qword element of the second source operand (the third operand) " +
"and store the reduced result in binary FP format to the low qword element of " +
"the destination operand (the first operand) under the writemask k1. Bits 127:64 " +
"of the destination operand are copied from respective qword elements of the " +
"first source operand (the second operand).";
break;
case "vreducess":
instructionInfo = "Perform a reduction transformation of the binary encoded single-precision FP " +
"value in the low dword element of the second source operand (the third operand) " +
"and store the reduced result in binary FP format to the low dword element of " +
"the destination operand (the first operand) under the writemask k1. Bits 127:32 " +
"of the destination operand are copied from respective dword elements of the " +
"first source operand (the second operand).";
break;
case "vrndscalepd":
instructionInfo = "Round the double-precision floating-point values in the source operand by the " +
"rounding mode specified in the immediate operand and places the result in the " +
"destination operand.";
break;
case "vrndscaleps":
instructionInfo = "Round the single-precision floating-point values in the source operand by the " +
"rounding mode specified in the immediate operand and places the result in " +
"the destination operand.";
break;
case "vrndscalesd":
instructionInfo = "Rounds a double-precision floating-point value in the low quadword element of " +
"the second source operand (the third operand) by the rounding mode specified " +
"in the immediate operand and places the result in the corresponding element of " +
"the destination operand (the first operand) according to the writemask. " +
"The quadword element at bits 127:64 of the destination is copied from the " +
"first source operand (the second operand).";
break;
case "vrndscaless":
instructionInfo = "Rounds the single-precision floating-point value in the low doubleword element " +
"of the second source operand (the third operand) by the rounding mode specified " +
"in the immediate operand and places the result in the corresponding element of " +
"the destination operand (the first operand) according to the writemask. " +
"The double-word elements at bits 127:32 of the destination are copied from " +
"the first source operand (the second operand).";
break;
case "vrsqrt14pd":
instructionInfo = "This instruction performs a SIMD computation of the approximate reciprocals " +
"of the square roots of the eight packed double-precision floating-point values " +
"in the source operand (the second operand) and stores the packed double-precision " +
"floating-point results in the destination operand (the first operand) " +
"according to the writemask. The maximum relative error for this approximation " +
"is less than 2^-14.";
break;
case "vrsqrt14ps":
instructionInfo = "This instruction performs a SIMD computation of the approximate reciprocals " +
"of the square roots of 16 packed single-precision floating-point values in " +
"the source operand (the second operand) and stores the packed single-precision " +
"floating-point results in the destination operand (the first operand) according " +
"to the writemask. The maximum relative error for this approximation is less " +
"than 2-14.";
break;
case "vrsqrt14sd":
instructionInfo = "Computes the approximate reciprocal of the square roots of the scalar " +
"double-precision floating-point value in the low quadword element of the " +
"source operand (the second operand) and stores the result in the low quadword " +
"element of the destination operand (the first operand) according to the writemask. " +
"The maximum relative error for this approximation is less than 2^-14. " +
"The source operand can be an XMM register or a 32-bit memory location. " +
"The destination operand is an XMM register.";
break;
case "vrsqrt14ss":
instructionInfo = "Computes of the approximate reciprocal of the square root of the scalar " +
"single-precision floating-point value in the low doubleword element of the " +
"source operand (the second operand) and stores the result in the low doubleword " +
"element of the destination operand (the first operand) according to the writemask. " +
"The maximum relative error for this approximation is less than 2^-14. " +
"The source operand can be an XMM register or a 32-bit memory location. " +
"The destination operand is an XMM register.";
break;
case "vscalefpd":
instructionInfo = "Performs a floating-point scale of the packed double-precision floating-point " +
"values in the first source operand by multiplying it by 2 power of the " +
"double-precision floating-point values in second source operand.";
break;
case "vscalefps":
instructionInfo = "Performs a floating-point scale of the packed single-precision floating-point " +
"values in the first source operand by multiplying it by 2 power of the float32 " +
"values in second source operand.";
break;
case "vscalefsd":
instructionInfo = "Performs a floating-point scale of the packed double-precision floating-point " +
"value in the first source operand by multiplying it by 2 power of the " +
"double-precision floating-point value in second source operand.";
break;
case "vscalefss":
instructionInfo = "Performs a floating-point scale of the scalar single-precision floating-point " +
"value in the first source operand by multiplying it by 2 power of the " +
"float32 value in second source operand.";
break;
case "vscatterdps":
case "vscatterdpd":
case "vscatterqps":
case "vscatterqpd":
instructionInfo = "Stores up to 16 elements (or 8 elements) in doubleword/quadword vector zmm1 " +
"to the memory locations pointed by base address BASE_ADDR and index vector " +
"VINDEX, with scale SCALE. The elements are specified via the VSIB (i.e., the " +
"index register is a vector register, holding packed indices). Elements will " +
"only be stored if their corresponding mask bit is one. The entire mask register " +
"will be set to zero by this instruction unless it triggers an exception.";
break;
case "vshuff32x4":
case "vshuff64x2":
case "vshufi32x4":
case "vshufi64x2":
instructionInfo = "256-bit Version: Moves one of the two 128-bit packed single-precision " +
"floating-point values from the first source operand (second operand) into the " +
"low 128-bit of the destination operand (first operand); moves one of the two " +
"packed 128-bit floating-point values from the second source operand (third " +
"operand) into the high 128-bit of the destination operand. The selector operand " +
"(third operand) determines which values are moved to the destination operand.";
break;
case "vtestpd":
case "vtestps":
instructionInfo = "VTESTPS performs a bitwise comparison of all the sign bits of the packed " +
"single-precision elements in the first source operation and corresponding " +
"sign bits in the second source operand. If the AND of the source sign bits " +
"with the dest sign bits produces all zeros, the ZF is set else the ZF is clear. " +
"If the AND of the source sign bits with the inverted dest sign bits produces " +
"all zeros the CF is set else the CF is clear. An attempt to execute VTESTPS " +
"with VEX.W=1 will cause #UD.";
break;
case "vzeroall":
instructionInfo = "The instruction zeros contents of all XMM or YMM registers.";
break;
case "vzeroupper":
instructionInfo = "The instruction zeros the bits in position 128 and higher of all YMM registers. " +
"The lower 128-bits of the registers (the corresponding XMM registers) are unmodified.";
break;
case "wbinvd":
instructionInfo = "Writes back all modified cache lines in the processors internal " +
"cache to main memory and invalidates (flushes) the internal caches. " +
"The instruction then issues a special-function bus cycle that directs external " +
"caches to also write back modified data and another bus cycle to indicate that " +
"the external caches should be invalidated.";
break;
case "wrfsbase":
case "wrgsbase":
instructionInfo = "Loads the FS or GS segment base address with the general-purpose register " +
"indicated by the modR/M:r/m field.";
break;
case "wrmsr":
instructionInfo = "Writes the contents of registers EDX:EAX into the 64-bit model specific " +
"register (MSR) specified in the ECX register. (On processors that support the " +
"Intel 64 architecture, the high-order 32 bits of RCX are ignored.) " +
"The contents of the EDX register are copied to high-order 32 bits of the " +
"selected MSR and the contents of the EAX register are copied to low-order 32 " +
"bits of the MSR. (On processors that support the Intel 64 architecture, the " +
"high-order 32 bits of each of RAX and RDX are ignored.) Undefined or reserved " +
"bits in an MSR should be set to values previously read.";
break;
case "wrpkru":
instructionInfo = "Writes the value of EAX into PKRU. ECX and EDX must be 0 when WRPKRU is executed; " +
"otherwise, a general-protection exception (#GP) occurs.";
break;
case "xabort":
instructionInfo = "XABORT forces an RTM abort. Following an RTM abort, the logical processor " +
"resumes execution at the fallback address computed through the outermost " +
"XBEGIN instruction. The EAX register is updated to reflect an XABORT instruction " +
"caused the abort, and the imm8 argument will be provided in bits 31:24 of EAX.";
break;
case "xacquire":
case "xrelease":
instructionInfo = "The XACQUIRE prefix is a hint to start lock elision on the memory address " +
"specified by the instruction and the XRELEASE prefix is a hint to end lock " +
"elision on the memory address specified by the instruction.";
break;
case "xadd":
instructionInfo = "Exchanges the first operand (destination operand) with the second operand " +
"(source operand), then loads the sum of the two values into the destination " +
"operand. The destination operand can be a register or a memory location; the source operand is a register.";
break;
case "xbegin":
instructionInfo = "The XBEGIN instruction specifies the start of an RTM code region. If the " +
"logical processor was not already in transactional execution, then the XBEGIN " +
"instruction causes the logical processor to transition into transactional " +
"execution. The XBEGIN instruction that transitions the logical processor into " +
"transactional execution is referred to as the outermost XBEGIN instruction. " +
"The instruction also specifies a relative offset to compute the address of the " +
"fallback code path following a transactional abort.";
break;
case "xchg":
instructionInfo = "Exchanges the contents of the destination (first) and source (second) operands. " +
"The operands can be two general-purpose registers or a register and a memory " +
"location. If a memory operand is referenced, the processors locking " +
"protocol is automatically implemented for the duration of the exchange operation, " +
"regardless of the presence or absence of the LOCK prefix or of the value of the IOPL.";
break;
case "xend":
instructionInfo = "The instruction marks the end of an RTM code region. If this corresponds to " +
"the outermost scope (that is, including this XEND instruction, the number of " +
"XBEGIN instructions is the same as number of XEND instructions), the logical " +
"processor will attempt to commit the logical processor state atomically. " +
"If the commit fails, the logical processor will rollback all architectural " +
"register and memory updates performed during the RTM execution. The logical " +
"processor will resume execution at the fallback address computed from the " +
"outermost XBEGIN instruction. The EAX register is updated to reflect RTM abort " +
"information.";
break;
case "xgetbv":
instructionInfo = "Reads the contents of the extended control register (XCR) specified in the " +
"ECX register into registers EDX:EAX. (On processors that support the Intel 64 " +
"architecture, the high-order 32 bits of RCX are ignored.) The EDX register is " +
"loaded with the high-order 32 bits of the XCR and the EAX register is loaded " +
"with the low-order 32 bits. (On processors that support the Intel 64 architecture, " +
"the high-order 32 bits of each of RAX and RDX are cleared.) If fewer than 64 bits " +
"are implemented in the XCR being read, the values returned to EDX:EAX in " +
"unimplemented bit locations are undefined.";
break;
case "xlat":
case "xlatb":
instructionInfo = "Locates a byte entry in a table in memory, using the contents of the AL " +
"register as a table index, then copies the contents of the table entry back " +
"into the AL register. The index in the AL register is treated as an unsigned integer. " +
"The XLAT and XLATB instructions get the base address of the table in memory " +
"from either the DS:EBX or the DS:BX registers (depending on the address-size " +
"attribute of the instruction, 32 or 16, respectively). (The DS segment may be " +
"overridden with a segment override prefix.)";
break;
case "xor":
instructionInfo = "Performs a bitwise exclusive OR (XOR) operation on the destination (first) " +
"and source (second) operands and stores the result in the destination operand " +
"location. The source operand can be an immediate, a register, or a memory " +
"location; the destination operand can be a register or a memory location. " +
"(However, two memory operands cannot be used in one instruction.) Each bit of " +
"the result is 1 if the corresponding bits of the operands are different; each " +
"bit is 0 if the corresponding bits are the same.";
break;
case "xorpd":
case "vxorpd":
instructionInfo = "Performs a bitwise logical XOR of the two, four or eight packed double-precision " +
"floating-point values from the first source operand and the second source " +
"operand, and stores the result in the destination operand";
break;
case "xorps":
case "vxorps":
instructionInfo = "Performs a bitwise logical XOR of the four, eight or sixteen packed " +
"single-precision floating-point values from the first source operand and the " +
"second source operand, and stores the result in the destination operand";
break;
case "xrstor":
case "xrstor64":
instructionInfo = "Performs a full or partial restore of processor state components from the " +
"XSAVE area located at the memory address specified by the source operand. " +
"The implicit EDX:EAX register pair specifies a 64-bit instruction mask. " +
"The specific state components restored correspond to the bits set in the " +
"requested-feature bitmap (RFBM), which is the logical-AND of EDX:EAX and XCR0.";
break;
case "xrstors":
case "xrstors64":
instructionInfo = "Performs a full or partial restore of processor state components from the " +
"XSAVE area located at the memory address specified by the source operand. " +
"The implicit EDX:EAX register pair specifies a 64-bit instruction mask. " +
"The specific state components restored correspond to the bits set in the " +
"requested-feature bitmap (RFBM), which is the logical-AND of EDX:EAX and the " +
"logical-OR of XCR0 with the IA32_XSS MSR. XRSTORS may be executed only if CPL = 0.";
break;
case "xsave":
case "xsave64":
instructionInfo = "Performs a full or partial save of processor state components to the XSAVE " +
"area located at the memory address specified by the destination operand. " +
"The implicit EDX:EAX register pair specifies a 64-bit instruction mask. " +
"The specific state components saved correspond to the bits set in the " +
"requested-feature bitmap (RFBM), which is the logical-AND of EDX:EAX and XCR0.";
break;
case "xsavec":
case "xsavec64":
instructionInfo = "Performs a full or partial save of processor state components to the XSAVE " +
"area located at the memory address specified by the destination operand. " +
"The implicit EDX:EAX register pair specifies a 64-bit instruction mask. " +
"The specific state components saved correspond to the bits set in the " +
"requested-feature bitmap (RFBM), which is the logical-AND of EDX:EAX and XCR0.";
break;
case "xsaveopt":
case "xsaveopt64":
instructionInfo = "Performs a full or partial save of processor state components to the XSAVE " +
"area located at the memory address specified by the destination operand. " +
"The implicit EDX:EAX register pair specifies a 64-bit instruction mask. " +
"The specific state components saved correspond to the bits set in the " +
"requested-feature bitmap (RFBM), which is the logical-AND of EDX:EAX and XCR0.";
break;
case "xsaves":
case "xsaves64":
instructionInfo = "Performs a full or partial save of processor state components to the XSAVE " +
"area located at the memory address specified by the destination operand. " +
"The implicit EDX:EAX register pair specifies a 64-bit instruction mask. " +
"The specific state components saved correspond to the bits set in the " +
"requested-feature bitmap (RFBM), the logicalAND of EDX:EAX and the logical-OR " +
"of XCR0 with the IA32_XSS MSR. XSAVES may be executed only if CPL = 0.";
break;
case "xsetbv":
instructionInfo = "Writes the contents of registers EDX:EAX into the 64-bit extended control " +
"register (XCR) specified in the ECX register. (On processors that support " +
"the Intel 64 architecture, the high-order 32 bits of RCX are ignored.) " +
"The contents of the EDX register are copied to high-order 32 bits of the " +
"selected XCR and the contents of the EAX register are copied to low-order " +
"32 bits of the XCR. (On processors that support the Intel 64 architecture, " +
"the high-order 32 bits of each of RAX and RDX are ignored.) Undefined or " +
"reserved bits in an XCR should be set to values previously read.";
break;
case "xtest":
instructionInfo = "The XTEST instruction queries the transactional execution status. If the " +
"instruction executes inside a transactionally executing RTM region or a " +
"transactionally executing HLE region, then the ZF flag is cleared, else it is set.";
break;
case "invept":
instructionInfo = "Invalidates mappings in the translation lookaside buffers (TLBs) and paging-structure " +
"caches that were derived from extended page tables (EPT). Invalidation is based on the " +
"INVEPT type specified in the register operand and the INVEPT descriptor specified in the memory operand.";
break;
case "invvpid":
instructionInfo = "Invalidates mappings in the translation lookaside buffers (TLBs) and " +
"paging-structure caches based on virtualprocessor identifier (VPID). " +
"Invalidation is based on the INVVPID type specified in the register " +
"operand and the INVVPID descriptor specified in the memory operand.";
break;
case "vmcall":
instructionInfo = "This instruction allows guest software can make a call for service into an " +
"underlying VM monitor. The details of the programming interface for such calls " +
"are VMM-specific; this instruction does nothing more than cause a VM exit, " +
"registering the appropriate exit reason.";
break;
case "vmclear":
instructionInfo = "This instruction applies to the VMCS whose VMCS region resides at the physical " +
"address contained in the instruction operand. The instruction ensures that " +
"VMCS data for that VMCS (some of these data may be currently maintained on " +
"the processor) are copied to the VMCS region in memory. It also initializes " +
"parts of the VMCS region (for example, it sets the launch state of that VMCS to clear).";
break;
case "vmfunc":
instructionInfo = "This instruction allows software in VMX non-root operation to invoke a VM " +
"function, which is processor functionality enabled and configured by software " +
"in VMX root operation. The value of EAX selects the specific VM function being " +
"invoked.";
break;
case "vmlaunch":
instructionInfo = "Effects a VM entry managed by the current VMCS. VMLAUNCH fails if the launch " +
"state of current VMCS is not \"clear\". If the instruction is successful, it " +
"sets the launch state to \"launched.\"";
break;
case "vmresume":
instructionInfo = "Effects a VM entry managed by the current VMCS. VMRESUME fails if the launch " +
"state of the current VMCS is not \"launched.\"";
break;
case "vmptrld":
instructionInfo = "Marks the current-VMCS pointer valid and loads it with the physical address " +
"in the instruction operand. The instruction fails if its operand is not properly " +
"aligned, sets unsupported physical-address bits, or is equal to the VMXON " +
"pointer. In addition, the instruction fails if the 32 bits in memory referenced " +
"by the operand do not match the VMCS revision identifier supported by this processor.";
break;
case "vmptrst":
instructionInfo = "Stores the current-VMCS pointer into a specified memory address. The operand " +
"of this instruction is always 64 bits and is always in memory.";
break;
case "vmread":
instructionInfo = "Reads a specified field from a VMCS and stores it into a specified destination " +
"operand (register or memory). In VMX root operation, the instruction reads " +
"from the current VMCS. If executed in VMX non-root operation, the instruction " +
"reads from the VMCS referenced by the VMCS link pointer field in the current VMCS.";
break;
case "vmwrite":
instructionInfo = "Writes the contents of a primary source operand (register or memory) to a " +
"specified field in a VMCS. In VMX root operation, the instruction writes to " +
"the current VMCS. If executed in VMX non-root operation, the instruction writes " +
"to the VMCS referenced by the VMCS link pointer field in the current VMCS.";
break;
case "vmxoff":
instructionInfo = "Takes the logical processor out of VMX operation, unblocks INIT signals, " +
"conditionally re-enables A20M, and clears any address-range monitoring.";
break;
case "vmxon":
instructionInfo = "Puts the logical processor in VMX operation with no current VMCS, blocks INIT " +
"signals, disables A20M, and clears any address-range monitoring established by " +
"the MONITOR instruction.";
break;
case "prefetchwt1":
instructionInfo = "Fetches the line of data from memory that contains the byte specified with the " +
"source operand to a location in the cache hierarchy specified by an intent to " +
"write hint (so that data is brought into Exclusive state via a request for " +
"ownership) and a locality hint: T1 (temporal data with respect to first level " +
"cache)—prefetch data into the second level cache.";
break;
case "ud2":
instructionInfo = "Generates an invalid opcode exception. This instruction is provided for software " +
"testing to explicitly generate an invalid opcode. The opcode for this instruction " +
"is reserved for this purpose.";
break;
case "rex64":
instructionInfo = "Specify that the instruction is 64 bit.";
break;
case "extrq":
instructionInfo = "Extract field from register.";
break;
case "insertq":
instructionInfo = "Insert field.";
break;
case "movntsd":
instructionInfo = "Move non-temporal scalar double-precision floating point.";
break;
case "movntss":
case "vmovntss":
instructionInfo = "Move non-temporal scalar single-presicion floating point.";
break;
case "femms":
instructionInfo = "Faster enter/exit of the mmx or floating-point state.";
break;
case "paddsiw":
instructionInfo = "This instruction adds the signed words of the source operand to the signed " +
"words of the destination operand and writes the results to the implied MMX register. " +
"The purpose of this instruction is the same as the PADDSW instruction, except " +
"that it preserves both source operands.";
break;
case "paveb":
instructionInfo = " The PAVEB insruction calculates the average of the unsigned bytes of the " +
"source operand and the unsigned bytes of the destination operand and writes " +
"the result to the MMX register.";
break;
case "pavgusb":
instructionInfo = "Average of unsigned packed 8-bit values.";
break;
case "pdistib":
instructionInfo = "The PDISTIB instruction calculates the distance between the unsigned bytes " +
"of two source operands, adds the result to the unsigned byte in the implied " +
"destination operand, and saturates the result. The result is written to the " +
"implied MMX register. The DEST must be an MMX register. The SRC must be a " +
"64-bit memory operand. The accumulator and destination is an MMX register which " +
"depends on the DEST.";
break;
case "pf2id":
instructionInfo = "Converts packed floating-point operand to packed 32-bit integer.";
break;
case "pfacc":
instructionInfo = "Floating-point accumulate";
break;
case "pfadd":
instructionInfo = "Packed, floating-point addition";
break;
case "pfcmpeq":
instructionInfo = "Packed floating-point comparison, equal to";
break;
case "pfcmpge":
instructionInfo = "Packed floating-point comparison, greater than or equal to";
break;
case "pfcmpgt":
instructionInfo = "Packed floating-point comparison, greater than";
break;
case "pfmax":
instructionInfo = "Packed floating-point maximum";
break;
case "pfmin":
instructionInfo = "Packed floating-point minimum";
break;
case "pfmul":
instructionInfo = "Packed floating-point multiplication";
break;
case "pfrcp":
instructionInfo = "Floating-point reciprocal approximation";
break;
case "pfrcpit1":
instructionInfo = "Packed floating-point reciprocal, first iteration step";
break;
case "pfrcpit2":
instructionInfo = "Packed floating-point reciprocal/reciprocal square root, second iteration step";
break;
case "pfrsqit1":
instructionInfo = "Packed floating-point reciprocal square root, first iteration step";
break;
case "pfrsqrt":
instructionInfo = "Floating-point reciprocal square root approximation";
break;
case "pfsub":
instructionInfo = "Packed floating-point subtraction";
break;
case "pfsubr":
instructionInfo = "Packed floating-point reverse subtraction";
break;
case "pi2fd":
instructionInfo = "Packed 32-bit integer to floating-point conversion";
break;
case "pmulhrw":
instructionInfo = "Multiply signed packed 16-bit values with rounding and store the high 16 bits";
break;
case "prefetch":
instructionInfo = "Prefetch processor cache line into L1 data cache";
break;
case "pmachriw":
instructionInfo = "Multiplies the two source operands using the method described for PMULHRW, " +
"and then accumulates the result with the value in the implied destination " +
"register using wrap-around arithmetic. The final result is placed in the implied " +
"DEST register. The DEST must be an MMX register. The SRC must be a 64-bit memory " +
"operand. The destination operand is an implied MMX register that depends on the DEST.";
break;
case "pmagw":
instructionInfo = "Compares the absolute value of the packed words in first and second register, " +
"and stores the largest word in the first register.";
break;
case "pmulhriw":
instructionInfo = "Multiply the packed words in the two registers.";
break;
case "pmvzb":
instructionInfo = "Packed conditional move each byte from soruce register to destination register, " +
"when the corresponding byte in the MMX register is zero.";
break;
case "pmvgezb":
instructionInfo = "Packed conditional move each byte from source register to destination reqister, " +
"when the corresponding byte in the MMX register is greather than or equal to zero.";
break;
case "pmvlzb":
instructionInfo = "Packed conditional move each byte from source register to destination reqister, " +
"when the corresponding byte in the MMX register is less than zero.";
break;
case "pmvnzb":
instructionInfo = "Packed conditional move each byte from source register to destination reqister," +
" when the corresponding byte in the MMX register is not zero.";
break;
case "pmovsxbd":
instructionInfo = "Sign extend the lower 8-bit integer of each packed dword element into packed signed dword integers.";
break;
case "pmovsxbq":
instructionInfo = "Sign extend the lower 8-bit integer of each packed qword element into packed signed qword integers.";
break;
case "pmovsxbw":
instructionInfo = "Sign extend the lower 8-bit integer of each packed word element into packed signed word integers.";
break;
case "pmovsxdq":
instructionInfo = "Sign extend the lower 32-bit integer of each packed qword element into packed signed qword integers.";
break;
case "pmulhrwa":
instructionInfo = "Aligned high multiply of word packed registers with rounding.";
break;
case "pmulhrwc":
instructionInfo = "Packed high multiply of word packed complex numbers with rounding.";
break;
case "vmaskmovps":
instructionInfo = "Conditionally load packed single-precision values from third operand using " +
"mask in second operand and store in first operand.";
break;
case "vmaskmovpd":
instructionInfo = "Conditionally load packed double-precision values from third operand using " +
"mask in second operand and store in first operand.";
break;
case "vmaskmovdqu":
instructionInfo = "Selectively write bytes from first operand to memory location using the byte " +
"mask in second operand. The default memory location is specified by DS:DI/EDI/RDI";
break;
case "vldqqu":
instructionInfo = "The instruction is a special 128-bit unaligned load designed to avoid cache " +
"line splits. If the address of a 16- byte load is on a 16-byte boundary, it " +
"loads the bytes requested. If the address of the load is not aligned on a " +
"16-byte boundary, it loads a 32-byte block starting at the 16-byte aligned " +
"address immediately below the load request. It then extracts the requested 16 byte";
break;
case "vmovntqq":
instructionInfo = "Store 256 bits of data from ymm register into memory using non-temporal hint.";
break;
case "vmovqqa":
instructionInfo = "Move 256 bits of data aligned either from memory to register ymm, or the other way.";
break;
case "vmovqqu":
instructionInfo = "Move 256 bits of data unaligned either from memory to register ymm or the other way.";
break;
default:
instructionInfo = string.Empty;
returnValue = false;
break;
}
return returnValue;
}
}
}
}