CPUID
SSE2
CPUID.01H:EDX[26]
Instructions
124 mnemonics
Processors
Every x86-64 processor in XED’s model and Zen 3 to Zen 6
Linux flag
sse2

SSE2 turned the XMM registers into general vector registers: two packed doubles (“PD” and “SD” forms) and integer vectors of bytes to quadwords, mostly the MMX instructions widened to 128 bits, which is why many pages here list both MMX and XMM forms. It also added LFENCE, MFENCE and MOVNTI.

Because every x86-64 processor has SSE2, the x86-64 ABIs pass and return float and double values in XMM registers and compilers do scalar floating point with SSE2 instead of the x87, which stays in use for long double (see the calling conventions).

Instructions

Mnemonics with at least one form in SSE2. Each page lists all forms of the mnemonic, including those of other extensions.
MnemonicSummaryForms
ADDPDAdds two packed doubles of the source to those of the destination XMM register.2
ADDSDAdds the low double of the source to the low double of the destination; the upper half of the destination is kept.2
ANDNPDComputes the bitwise AND of the inverted destination with the source, as packed doubles.2
ANDPDComputes the bitwise AND of two XMM operands, as packed doubles.2
CMPPDCompares two packed doubles with one of eight predicates an immediate selects, into all-ones or all-zeros elements.2
CMPSDCompares the low doubles with one of eight predicates an immediate selects, into an all-ones or all-zeros element.2
COMISDCompares the low doubles and sets ZF, PF and CF, clearing OF, SF and AF; any NaN raises an invalid exception.2
CVTDQ2PDConverts the two low signed doublewords of the source to doubles.2
CVTDQ2PSConverts four packed signed doublewords to singles, rounding as MXCSR says.2
CVTPD2DQConverts two packed doubles to signed doublewords in the low half, rounding as MXCSR says and zeroing the high half.2
CVTPD2PIConverts two packed doubles to signed doublewords in an MMX register, rounding as MXCSR says.2
CVTPD2PSConverts two packed doubles to singles in the low half, rounding as MXCSR says and zeroing the high half.2
CVTPI2PDConverts two signed doublewords from an MMX register or memory to doubles.2
CVTPS2DQConverts four packed singles to signed doublewords, rounding as MXCSR says.2
CVTPS2PDConverts the two low singles of the source to doubles, which is exact.2
CVTSD2SIConverts the low double to a signed 32- or 64-bit integer in a general-purpose register, rounding as MXCSR says.4
CVTSD2SSConverts the low double of the source to single, rounding as MXCSR says; the other elements of the destination are kept.2
CVTSI2SDConverts a signed 32- or 64-bit integer to double in the low element; the upper half of the destination is kept.4
CVTSS2SDConverts the low single of the source to double, which is exact; the upper half of the destination is kept.2
CVTTPD2DQConverts two packed doubles to signed doublewords in the low half, truncating toward zero and zeroing the high half.2
CVTTPD2PIConverts two packed doubles to signed doublewords in an MMX register, truncating toward zero.2
CVTTPS2DQConverts four packed singles to signed doublewords, truncating toward zero.2
CVTTSD2SIConverts the low double to a signed 32- or 64-bit integer in a general-purpose register, truncating toward zero.4
DIVPDDivides the two packed doubles of the destination XMM register by those of the source.2
DIVSDDivides the low double of the destination by the low double of the source; the upper half is kept.2
LFENCEWaits until all earlier instructions have completed locally before any later one starts, which also bars speculative execution.1
MASKMOVDQUStores the bytes of an XMM register whose mask byte in a second register has its top bit set to [RDI], non-temporally.1
MAXPDReturns the larger of each pair of packed doubles, or the source element if either is NaN or both are zero.2
MAXSDReturns the larger of the low doubles, or the source's if either is NaN or both are zero; the upper half is kept.2
MFENCEMakes all earlier loads and stores globally visible before any later load or store, a full memory barrier.1
MINPDReturns the smaller of each pair of packed doubles, or the source element if either is NaN or both are zero.2
MINSDReturns the smaller of the low doubles, or the source's if either is NaN or both are zero; the upper half is kept.2
MOVAPDMoves packed doubles between XMM registers and memory, which must be aligned to 16 bytes.4
MOVDMoves 32 bits between an MMX or XMM register and a general-purpose register or memory, zeroing the rest of a vector register.4
MOVDQ2QCopies the low quadword of an XMM register to an MMX register.1
MOVDQAMoves 128 bits of integer data between XMM registers and memory, which must be aligned to 16 bytes.4
MOVDQUMoves 128 bits of integer data between XMM registers and memory without an alignment requirement.4
MOVHPDLoads a double from memory into the high half of an XMM register, or stores the high double to memory.2
MOVLPDLoads a double from memory into the low half of an XMM register, or stores the low double to memory.2
MOVMSKPDCopies the sign bits of two packed doubles into the low bits of a general-purpose register.1
MOVNTDQStores an XMM register to 16-byte aligned memory with a non-temporal hint that avoids polluting the caches.1
MOVNTIStores a general-purpose register to memory with a non-temporal hint that avoids polluting the caches; SSE2.2
MOVNTPDStores packed doubles to 16-byte aligned memory with a non-temporal hint that avoids polluting the caches.1
MOVQMoves 64 bits between MMX or XMM registers, general-purpose registers and memory, zeroing the rest of an XMM destination.8
MOVQ2DQCopies an MMX register to the low quadword of an XMM register and zeroes the high quadword.1
MOVSDMoves the low double between XMM registers or to and from memory; a load zeroes the upper half, a register move keeps it.4
MOVUPDMoves packed doubles between XMM registers and memory without an alignment requirement.4
MULPDMultiplies the two packed doubles of the destination XMM register by those of the source.2
MULSDMultiplies the low double of the destination by the low double of the source; the upper half is kept.2
ORPDComputes the bitwise OR of two XMM operands, as packed doubles.2
PACKSSDWNarrows signed doublewords of two MMX or XMM operands to words with signed saturation.2
PACKSSWBNarrows signed words of two MMX or XMM operands to bytes with signed saturation.2
PACKUSWBNarrows signed words of two MMX or XMM operands to bytes with unsigned saturation.2
PADDBAdds packed bytes of MMX or XMM registers, wrapping around on overflow.2
PADDDAdds packed doublewords of MMX or XMM registers, wrapping around on overflow.2
PADDQAdds packed quadwords of MMX or XMM registers, wrapping around on overflow; SSE2.4
PADDSBAdds packed signed bytes of MMX or XMM registers with signed saturation.2
PADDSWAdds packed signed words of MMX or XMM registers with signed saturation.2
PADDUSBAdds packed unsigned bytes of MMX or XMM registers with unsigned saturation.2
PADDUSWAdds packed unsigned words of MMX or XMM registers with unsigned saturation.2
PADDWAdds packed words of MMX or XMM registers, wrapping around on overflow.2
PANDComputes the bitwise AND of two MMX or XMM operands.2
PANDNComputes the bitwise AND of the inverted destination with the source, in MMX or XMM registers.2
PAVGBComputes the rounded averages of packed unsigned bytes of MMX or XMM registers.2
PAVGWComputes the rounded averages of packed unsigned words of MMX or XMM registers.2
PCMPEQBCompares packed bytes of MMX or XMM registers for equality, into all-ones or all-zeros bytes.2
PCMPEQDCompares packed doublewords of MMX or XMM registers for equality, into all-ones or all-zeros elements.2
PCMPEQWCompares packed words of MMX or XMM registers for equality, into all-ones or all-zeros words.2
PCMPGTBTests packed signed bytes of MMX or XMM registers for greater than, into all-ones or all-zeros bytes.2
PCMPGTDTests packed signed doublewords of MMX or XMM registers for greater than, into all-ones or all-zeros elements.2
PCMPGTWTests packed signed words of MMX or XMM registers for greater than, into all-ones or all-zeros words.2
PEXTRWCopies the word an immediate selects from an MMX or XMM register to a general-purpose register, or to memory (SSE4.1).1
PINSRWInserts a word from a general-purpose register or memory into an MMX or XMM register at the position an immediate gives.2
PMADDWDMultiplies packed signed words of MMX or XMM registers and adds adjacent products into doublewords.2
PMAXSWReturns the larger of each pair of signed words of MMX or XMM registers.2
PMAXUBReturns the larger of each pair of unsigned bytes of MMX or XMM registers.2
PMINSWReturns the smaller of each pair of signed words of MMX or XMM registers.2
PMINUBReturns the smaller of each pair of unsigned bytes of MMX or XMM registers.2
PMOVMSKBCopies the top bit of each byte of an MMX or XMM register into the low bits of a general-purpose register.1
PMULHUWMultiplies packed unsigned words of MMX or XMM registers and keeps the high 16 bits of each product.2
PMULHWMultiplies packed signed words of MMX or XMM registers and keeps the high 16 bits of each product.2
PMULLWMultiplies packed words of MMX or XMM registers and keeps the low 16 bits of each product.2
PMULUDQMultiplies the unsigned low doubleword of each quadword of MMX or XMM registers into 64-bit products; SSE2.4
PORComputes the bitwise OR of two MMX or XMM operands.2
PSADBWSums the absolute differences of unsigned bytes over each group of eight, into one 16-bit sum per quadword.2
PSHUFDRearranges the four doublewords of an XMM operand as an immediate selects.2
PSHUFHWRearranges the upper four words of an XMM operand as an immediate selects, copying the lower four.2
PSHUFLWRearranges the lower four words of an XMM operand as an immediate selects, copying the upper four.2
PSLLDShifts packed doublewords of an MMX or XMM register left by a count from a register, memory or an immediate.3
PSLLDQShifts an XMM register left by the number of bytes an immediate gives, filling with zeros.1
PSLLQShifts packed quadwords of an MMX or XMM register left by a count from a register, memory or an immediate.3
PSLLWShifts packed words of an MMX or XMM register left by a count from a register, memory or an immediate.3
PSRADShifts packed doublewords of an MMX or XMM register right arithmetically by a count from a register, memory or an immediate.3
PSRAWShifts packed words of an MMX or XMM register right arithmetically by a count from a register, memory or an immediate.3
PSRLDShifts packed doublewords of an MMX or XMM register right logically by a count from a register, memory or an immediate.3
PSRLDQShifts an XMM register right by the number of bytes an immediate gives, filling with zeros.1
PSRLQShifts packed quadwords of an MMX or XMM register right logically by a count from a register, memory or an immediate.3
PSRLWShifts packed words of an MMX or XMM register right logically by a count from a register, memory or an immediate.3
PSUBBSubtracts packed bytes of MMX or XMM registers, wrapping around on overflow.2
PSUBDSubtracts packed doublewords of MMX or XMM registers, wrapping around on overflow.2
PSUBQSubtracts packed quadwords of MMX or XMM registers, wrapping around on overflow; SSE2.4
PSUBSBSubtracts packed signed bytes of MMX or XMM registers with signed saturation.2
PSUBSWSubtracts packed signed words of MMX or XMM registers with signed saturation.2
PSUBUSBSubtracts packed unsigned bytes of MMX or XMM registers with unsigned saturation.2
PSUBUSWSubtracts packed unsigned words of MMX or XMM registers with unsigned saturation.2
PSUBWSubtracts packed words of MMX or XMM registers, wrapping around on overflow.2
PUNPCKHBWInterleaves the high bytes of two MMX or XMM operands.2
PUNPCKHDQInterleaves the high doublewords of two MMX or XMM operands.2
PUNPCKHQDQInterleaves the high quadwords of two XMM operands.2
PUNPCKHWDInterleaves the high words of two MMX or XMM operands.2
PUNPCKLBWInterleaves the low bytes of two MMX or XMM operands.2
PUNPCKLDQInterleaves the low doublewords of two MMX or XMM operands.2
PUNPCKLQDQInterleaves the low quadwords of two XMM operands.2
PUNPCKLWDInterleaves the low words of two MMX or XMM operands.2
PXORComputes the bitwise XOR of two MMX or XMM operands; with the same register twice it zeroes it.2
SHUFPDPicks one double from each operand for the two result positions, as an immediate selects.2
SQRTPDComputes the square roots of two packed doubles.2
SQRTSDComputes the square root of the low double of the source into the low double of the destination; the upper half is kept.2
SUBPDSubtracts the two packed doubles of the source from those of the destination XMM register.2
SUBSDSubtracts the low double of the source from the low double of the destination; the upper half is kept.2
UCOMISDCompares the low doubles and sets ZF, PF and CF, clearing OF, SF and AF; only a signaling NaN raises an invalid exception.2
UNPCKHPDInterleaves the high doubles of two XMM operands.2
UNPCKLPDInterleaves the low doubles of two XMM operands.2
XORPDComputes the bitwise XOR of two XMM operands, as packed doubles; with the same register twice it zeroes it.2

CPUID and processors

XED splits SSE2 into 2 ISA sets. Software can use a form when the processor reports every CPUID bit of one alternative of the form's ISA set.

XED ISA sets of SSE2. Alternatives are separated by “or”; processors follow XED’s chip model, whose AMD processors end with Zen 2, and the CPU data of this site for Zen 3 to Zen 6.
ISA setCPUIDProcessors
SSE2

SSE2
CPUID.01H:EDX[26] SSE2

Every x86-64 processor in XED’s model and Zen 3 to Zen 6
SSE2MMX

SSE2 + MMX
CPUID.01H:EDX[26] SSE2
CPUID.01H:EDX[23] MMX

Every x86-64 processor in XED’s model and Zen 3 to Zen 6

Sources

  1. Intel XED v2026.08.23 (commit 0bcb6237345c): forms, encodings, ISA sets, CPUID bits and chip model.
  2. The CPU data of x86-64.net: Zen 3 to Zen 6, from GCC’s -march feature sets and AMD’s Processor Programming References, which the page of each processor cites.
  3. Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 2 (325383-093, September 2026)
  4. Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 1 (253665-093, September 2026)

The tables are derived from Intel XED, Copyright Intel Corporation, licensed under the Apache License 2.0; x86-64.net converted and reformatted them. The text is our own.