PMULUDQ
Usage: PMULUDQ dest,src Modifies flags: None
Multiplies the 'dest' by the 'src' and stores the result in the 'dest' operand.
Multiply Packed Unsigned 32-bit Integers, and Store.
PMULUDQ mm1,mm2/m64 ; 0F F4 /r [WILLAMETTE,SSE2]
PMULUDQ xmm1,xmm2/m128 ; 66 0F F4 /r [WILLAMETTE,SSE2]
PMULUDQ takes two packed unsigned 32-bit integer inputs, and multiplies the values in the inputs, forming quadword results. The source is either an unsigned doubleword in the low doubleword of a 64-bit operand, or it's two unsigned doublewords in the first and third doublewords of a 128-bit operand. This produces either one or two 64-bit results, which are stored in the respective quadword locations of the destination register.
The operation is:
dst[0-63] := dst[0-31] * src[0-31];
dst[64-127] := dst[64-95] * src[64-95].
The 'src' operand can be an unsigned doubleword integer stored in the low doubleword of an MMX technology register or a 64-bit memory location, or it can be two packed unsigned doubleword integers stored in the first (low) and third doublewords of an XMM register or an 128-bit memory location.
The 'dest' operand can be an unsigned doubleword integer stored in the low doubleword an MMX technology register or two packed doubleword integers stored in the first and third doublewords of an XMM register.
The 'result' is an unsigned quadword integer stored in the 'dest' an MMX technology register or two packed unsigned quadword integers stored in an XMM register. 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 'dest' element (that is, the carry is ignored).
EXAMPLE:
pmuludq xmm1 Label
PMULLW
Usage: PMULLW dest,src Modifies flags: None
Performs an SIMD signed multiply of the packed signed word integers in the 'dest' and the 'src' and stores the low 16 bits of each intermediate 32-bit result in the 'dest' operand.
Multiply Packed 16-bit Integers, and Store
PMULHW mm1,mm2/m64 ; 0F E5 /r [PENT,MMX]
PMULLW mm1,mm2/m64 ; 0F D5 /r [PENT,MMX]
PMULHW xmm1,xmm2/m128 ; 66 0F E5 /r [WILLAMETTE,SSE2]
PMULLW xmm1,xmm2/m128 ; 66 0F D5 /r [WILLAMETTE,SSE2]
PMULxW takes two packed unsigned 16-bit integer inputs, and multiplies the values in the inputs, forming doubleword results.
PMULHW then stores the top 16 bits of each doubleword in the destination (first) operand;
PMULLW stores the bottom 16 bits of each doubleword in the destination operand.
The 'src' operand can be an MMX technology register or a 64-bit memory location, or it can be an XMM register or a 128-bit memory location. The destination operand can be an MMX technology register or an XMM register.
EXAMPLE:
pmulw xmm1 Label
PMULHW
Usage: PMULHW dest,src Modifies flags: None
Performs an SIMD signed multiply of the packed signed word integers in the 'dest' and the 'src', and stores the high 16 bits of each intermediate 32-bit result in the 'dest' operand.
Multiply Packed 16-bit Integers, and Store
PMULHW mm1,mm2/m64 ; 0F E5 /r [PENT,MMX]
PMULLW mm1,mm2/m64 ; 0F D5 /r [PENT,MMX]
PMULHW xmm1,xmm2/m128 ; 66 0F E5 /r [WILLAMETTE,SSE2]
PMULLW xmm1,xmm2/m128 ; 66 0F D5 /r [WILLAMETTE,SSE2]
PMULxW takes two packed unsigned 16-bit integer inputs, and multiplies the values in the inputs, forming doubleword results.
PMULHW then stores the top 16 bits of each doubleword in the destination (first) operand;
PMULLW stores the bottom 16 bits of each doubleword in the destination operand.
The 'src' operand can be an MMX technology register or a 64-bit memory location, or it can be an XMM register or a 128-bit memory location. The destination operand can be an MMX technology register or an XMM register.
EXAMPLE:
pmulhw xmm1 Label
PMULHUW
Usage: PMULHUW dest,src Modifies flags: None
Performs an SIMD unsigned multiply of the packed unsigned word integers in the 'dest' and the 'src', and stores the high 16 bits of each 32-bit intermediate results in the 'dest' operand.
Multiply Packed 16-bit Integers, and Store High Word
PMULHUW mm1,mm2/m64 ; 0F E4 /r [KATMAI,MMX]
PMULHUW xmm1,xmm2/m128 ; 66 0F E4 /r [WILLAMETTE,SSE2]
PMULHUW takes two packed unsigned 16-bit integer inputs, multiplies the values in the inputs, then stores bits 16-31 of each result to the corresponding position of the destination register.
The source operand can be an MMX technology register or a 64-bit memory location, or it can be an XMM register or a 128-bit memory location. The destination operand can be an MMX technology register or an XMM register.
EXAMPLE:
pmulhuw xmm1 Label
PMULHRWA
Usage: PMULHRWA dest,src Modifies flags: None
Multiply signed packed 16-bit values with rounding and store.
Multiply Packed 16-bit Integers With Rounding, and Store High Word
PMULHRWA mm1,mm2/m64 ; 0F 0F /r B7 [PENT,3DNOW]
PMULHRWA takes two packed 16-bit integer inputs, multiplies the values in the inputs, rounds on bit 16 of each result, then stores bits 16-31 of each result to the corresponding position of the destination register.
The operation of this instruction is:
dst[0-15] := (src1[0-15] *src2[0-15] + 0x00008000)[16-31];
dst[16-31] := (src1[16-31]*src2[16-31] + 0x00008000)[16-31];
dst[32-47] := (src1[32-47]*src2[32-47] + 0x00008000)[16-31];
dst[48-63] := (src1[48-63]*src2[48-63] + 0x00008000)[16-31].
EXAMPLE:
pmulhrwa mm1 Label
PMOVMSKB
Usage: PMOVMSKB dest,src Modifies flags: None
Returns in 'dest' an 8-bit or 16-bit mask formed of the most significant bits of each byte of 'src' operand.
Move Byte Mask To Integer
PMOVMSKB reg32,mm ; 0F D7 /r [KATMAI,MMX]
PMOVMSKB reg32,xmm ; 66 0F D7 /r [WILLAMETTE,SSE2]
PMOVMSKB creates a mask made up of the most significant bit of each byte of the 'src' (2nd operand) and stores the result in the low byte or word of the 'dest' ( 1st operand).
The 'src' operand is an MMX technology register or an XMM register; the 'dest' operand is a general-purpose register.
When operating on 64-bit operands, the byte mask is 8 bits; when operating on 128-bit operands, the byte mask is 16-bits.
EXAMPLE:
pmovmskb ebx xmm1
PMINUB
Usage: PMINUB dest,src Modifies flags: None
Performs an SIMD compare of the packed unsigned byte integers in the 'dest' and the 'src', and returns the minimum value for each pair of byte integers to the 'dest' operand.
Packed Unsigned Integer Byte Minimum
PMINUB mm1,mm2/m64 ; 0F DA /r [KATMAI,MMX]
PMINUB xmm1,xmm2/m128 ; 66 0F DA /r [WILLAMETTE,SSE2]
PMINUB compares each pair of bytes in the two source operands, and for each pair it stores the minimum value in the destination register.
The 'src' operand can be an MMX technology register or a 64-bit memory location, or it can be an XMM register or a 128-bit memory location. The destination operand can be an MMX technology register or an XMM register.
EXAMPLE:
pminub xmm1 Label
PMINSW
Usage: PMINSW dest,src Modifies flags: None
Performs an SIMD compare of the packed signed word integers in the 'dest' and the 'src', and returns the minimum value for each pair of word integers to the 'dest' operand.
Packed Signed Integer Word Minimum
PMINSW mm1,mm2/m64 ; 0F EA /r [KATMAI,MMX]
PMINSW xmm1,xmm2/m128 ; 66 0F EA /r [WILLAMETTE,SSE2]
PMINSW compares each pair of words in the two source operands, and for each pair it stores the minimum value in the destination register.
The 'src' operand can be an MMX technology register or a 64-bit memory location, or it can be an XMM register or a 128-bit memory location. The 'dest' operand can be an MMX technology register or an XMM register.
EXAMPLE:
pminsw xmm1 Label
PMAXUB
Usage: PMAXUB dest,src Modifies flags: None
Performs an SIMD compare of the packed unsigned byte integers in the 'dest' and the 'src' and returns the maximum value for each pair of byte integers to the 'dest' operand.
Packed Unsigned Integer Byte Maximum
PMAXUB mm1,mm2/m64 ; 0F DE /r [KATMAI,MMX]
PMAXUB xmm1,xmm2/m128 ; 66 0F DE /r [WILLAMETTE,SSE2]
PMAXUB compares each pair of bytes in the two source operands, and for each pair it stores the maximum value in the destination register.
The 'src' operand can be an MMX technology register or a 64-bit memory location, or it can be an XMM register or a 128-bit memory location. The 'dest' operand can be an MMX technology register or an XMM register.
EXAMPLE:
pmaxub xmm1 Label
PMAXSW
Usage: PMAXSW dest,src Modifies flags: None
Performs an SIMD compare of the packed signed word integers in the 'dest' and the 'src' and returns the maximum value for each pair of word integers to the 'dest' operand.
Packed Signed Integer Word Maximum
PMAXSW mm1,mm2/m64 ; 0F EE /r [KATMAI,MMX]
PMAXSW xmm1,xmm2/m128 ; 66 0F EE /r [WILLAMETTE,SSE2]
PMAXSW compares each pair of words in the two source operands, and for each pair it stores the maximum value in the destination register.
The 'src' operand can be an MMX technology register or a 64-bit memory location, or it can be an XMM register or a 128-bit memory location. The 'dest' operand can be an MMX technology register or an XMM register.
EXAMPLE:
pmaxsw xmm1 Label