وو

وحید آنلاین . آرشیو وبلاگ وحیدمی دات آی آر . شرکت بیان. vahidmy.blog.ir

وو

وحید آنلاین . آرشیو وبلاگ وحیدمی دات آی آر . شرکت بیان. vahidmy.blog.ir

PMULUDQ

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

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

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

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

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

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

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

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

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

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