Intel 64 and IA-32 Architectures Software Developers Manual Volume 2B, Instruction Set Reference, N-Z

4-124 Vol. 2B
INSTRUCTION SET REFERENCE, N-Z
PMULUDQ—Multiply Packed Unsigned Doubleword Integers
Description
Multiplies the first operand (destination operand) by the second operand (source
operand) and stores the result in the destination operand. The source 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 destination 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 destination 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 destination element (that is,
the carry is ignored).
For 64-bit memory operands, 64 bits are fetched from memory, but only the low
doubleword is used in the computation; for 128-bit memory operands, 128 bits are
fetched from memory, but only the first and third doublewords are used in the
computation.
In 64-bit mode, using a REX prefix in the form of REX.R permits this instruction to
access additional registers (XMM8-XMM15).
Operation
PMULUDQ instruction with 64-Bit operands:
DEST[63:0] DEST[31:0]
SRC[31:0];
PMULUDQ instruction with 128-Bit operands:
DEST[63:0] DEST[31:0]
SRC[31:0];
DEST[127:64] DEST[95:64]
SRC[95:64];
Opcode Instruction
64-Bit
Mode
Compat/
Leg Mode Description
0F F4 /r PMULUDQ mm1,
mm2/m64
Valid Valid Multiply unsigned doubleword
integer in mm1 by unsigned
doubleword integer in mm2/m64,
and store the quadword result in
mm1.
66 OF F4 /r PMULUDQ xmm1,
xmm2/m128
Valid Valid Multiply packed unsigned
doubleword integers in xmm1 by
packed unsigned doubleword
integers in xmm2/m128, and store
the quadword results in xmm1.