6095 lines
499 KiB
C#
6095 lines
499 KiB
C#
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;
|
||
}
|
||
}
|
||
}
|
||
} |