Intel 64 and IA-32 Architectures Software Developers Manual Volume 1, Basic Architecture

12-10 Vol. 1
PROGRAMMING WITH SSE3 AND SUPPLEMENTAL SSE3
12.6 SSSE3 INSTRUCTIONS
SSSE3 instructions include:
Twelve instructions that perform horizontal addition or subtraction operations.
Six instructions that evaluate the absolute values.
Two instructions that perform multiply and add operations and speed up the
evaluation of dot products.
Two instructions that accelerate packed-integer multiply operations and produce
integer values with scaling.
Two instructions that perform a byte-wise, in-place shuffle according to the
second shuffle control operand.
Six instructions that negate packed integers in the destination operand if the
signs of the corresponding element in the source operand is less than zero.
Two instructions that align data from the composite of two operands.
The operands of these instructions are packed integers of byte, word, or double word
sizes. The operands are stored as 64 or 128 bit data in MMX registers, XMM registers,
or memory.
The instructions are discussed in more detail in the following paragraphs.
12.6.1 Horizontal Addition/Subtraction
In analogy to the packed, floating-point horizontal add and subtract instructions in
SSE3, SSSE3 offers similar capabilities on packed integer data. Data elements of
signed words, doublewords are supported. Saturated version for horizontal add and
subtract on signed words are also supported. The horizontal data movement of
PHADD is shown in Figure 12-3.
Figure 12-3. Horizontal Data Movement in PHADDD
X0 + X1X2 + X3Y0 + Y1Y2 + Y3
X2
X0
ADD
Y1
Y0
ADD
Y2
Y3
X1
X3
ADD
ADD