SSE2 Instructions
103 x86 instructions in this extension - showing 100 per page, page 1 of 2 - click any row for encoding, pseudocode, and full documentation.
| Mnemonic | Syntax | Format | Summary |
|---|---|---|---|
| addpd | ADDPD xmm, xmm/m128 | SSE2 | Adds two 64-bit doubles. |
| addsd | ADDSD xmm, xmm/m64 | SSE2 | Adds the low 64-bit double. |
| andpd | ANDPD xmm, xmm/m128 | SSE2 | Bitwise AND of 128 bits. |
| clflush | CLFLUSH m8 | SSE2 | Flushes the cache line containing the operand from all caches. |
| cmpsd | CMPSD xmm1, xmm2/m64, imm8 | SSE2 | Compares low double-precision values and returns mask. |
| comisd | COMISD xmm1, xmm2/m64 | SSE2 | Compares low double and sets EFLAGS (Signaling NaN raises exception). |
| cvtdq2pd | CVTDQ2PD xmm1, xmm2/m64 | SSE2 | Converts two 32-bit integers to two 64-bit doubles. |
| cvtdq2ps | CVTDQ2PS xmm1, xmm2/m128 | SSE2 | Converts four 32-bit integers to floats. |
| cvtpd2dq | CVTPD2DQ xmm1, xmm2/m128 | SSE2 | Converts two doubles to two 32-bit integers (Rounded). |
| cvtpd2ps | CVTPD2PS xmm1, xmm2/m128 | SSE2 | Converts two doubles to two floats. |
| cvtps2dq | CVTPS2DQ xmm1, xmm2/m128 | SSE2 | Converts four floats to 32-bit integers (Rounded). |
| cvtps2pd | CVTPS2PD xmm1, xmm2/m64 | SSE2 | Converts lower two floats to doubles. |
| cvtsd2si | CVTSD2SI r32, xmm/m64 | SSE2 | Converts low double to integer (Rounded according to MXCSR). |
| cvtsd2ss | CVTSD2SS xmm, xmm/m64 | SSE2 | Converts double to float. |
| cvtsi2sd | CVTSI2SD xmm, r/m32 | SSE2 | Converts 32-bit int to double. |
| cvtss2sd | CVTSS2SD xmm, xmm/m32 | SSE2 | Converts float to double. |
| cvttpd2dq | CVTTPD2DQ xmm1, xmm2/m128 | SSE2 | Converts two doubles to two 32-bit integers (Truncated). |
| cvttps2dq | CVTTPS2DQ xmm1, xmm2/m128 | SSE2 | Converts four floats to 32-bit integers (Truncated). |
| cvttsd2si | CVTTSD2SI r32, xmm/m64 | SSE2 | Converts double to 32-bit int (Truncate). |
| divpd | DIVPD xmm, xmm/m128 | SSE2 | Divides two 64-bit doubles. |
| divsd | DIVSD xmm1, xmm2/m64 | SSE2 | Divides the low double-precision floating-point value. |
| lfence | LFENCE | SSE2 | Serializes load operations (Wait for prior loads to complete). |
| maskmovdqu | MASKMOVDQU xmm, xmm | SSE2 | Non-temporal store of selected bytes (masked). |
| maxsd | MAXSD xmm1, xmm2/m64 | SSE2 | Returns the maximum of two low double-precision values. |
| mfence | MFENCE | SSE2 | Serializes all load and store operations. |
| minsd | MINSD xmm1, xmm2/m64 | SSE2 | Returns the minimum of two low double-precision values. |
| movapd | MOVAPD xmm, xmm/m128 | SSE2 | Moves 128-bit packed double data (Must be 16-byte aligned). |
| movdqa | MOVDQA xmm, xmm/m128 | SSE2 | Moves 128-bit integer data (Aligned). |
| movdqu | MOVDQU xmm, xmm/m128 | SSE2 | Moves 128-bit integer data (Unaligned). |
| movmskpd | MOVMSKPD r32, xmm | SSE2 | Extracts sign bits from two doubles into low 2 bits of register. |
| movnti | MOVNTI m32, r32 | SSE2 | Stores integer register to memory bypassing cache. |
| movntpd | MOVNTPD m128, xmm | SSE2 | Stores double vectors directly to RAM, bypassing cache. |
| movq | MOVQ xmm, xmm/m64 | SSE2 | Moves 64 bits between XMM registers or memory. |
| movsd | MOVSD xmm1, xmm2/m64 | SSE2 | Moves a single double (low 64 bits) between XMM/Memory. |
| movupd | MOVUPD xmm, xmm/m128 | SSE2 | Moves 128-bit packed double data (Unaligned). |
| mulpd | MULPD xmm, xmm/m128 | SSE2 | Multiplies two 64-bit doubles. |
| mulsd | MULSD xmm1, xmm2/m64 | SSE2 | Multiplies the low double-precision floating-point value. |
| packssdw | PACKSSDW xmm, xmm/m128 | SSE2 | Converts doublewords to words with saturation. |
| packsswb | PACKSSWB xmm, xmm/m128 | SSE2 | Converts words to bytes with saturation. |
| packuswb | PACKUSWB xmm1, xmm2/m128 | SSE2 | Converts signed words to unsigned bytes with saturation. |
| paddb | PADDB xmm, xmm/m128 | SSE2 | Adds 16 bytes (Wraparound). |
| paddd | PADDD xmm, xmm/m128 | SSE2 | Adds 4 doublewords (Wraparound). |
| paddq | PADDQ xmm, xmm/m128 | SSE2 | Adds 2 quadwords (Wraparound). |
| paddsb | PADDSB xmm, xmm/m128 | SSE2 | Adds 16 signed bytes with saturation. |
| paddsw | PADDSW xmm1, xmm2/m128 | SSE2 | Adds 16-bit words with signed saturation. |
| paddusb | PADDUSB xmm, xmm/m128 | SSE2 | Adds 16 unsigned bytes with saturation. |
| paddusw | PADDUSW xmm1, xmm2/m128 | SSE2 | Adds 16-bit words with unsigned saturation. |
| paddw | PADDW xmm, xmm/m128 | SSE2 | Adds 8 words (Wraparound). |
| pand | PAND xmm, xmm/m128 | SSE2 | Bitwise AND of 128-bit integers. |
| pavgb | PAVGB xmm1, xmm2/m128 | SSE2 | Averages packed unsigned bytes (rounded up). |
| pavgw | PAVGW xmm1, xmm2/m128 | SSE2 | Averages packed unsigned words (rounded up). |
| pcmpeqb | PCMPEQB xmm, xmm/m128 | SSE2 | Compares bytes for equality (Result mask 0xFF or 0x00). |
| pcmpeqd | PCMPEQD xmm, xmm/m128 | SSE2 | Compares doublewords for equality. |
| pcmpeqw | PCMPEQW xmm, xmm/m128 | SSE2 | Compares words for equality. |
| pcmpgtb | PCMPGTB xmm1, xmm2/m128 | SSE2 | Compares bytes for greater than (signed). |
| pcmpgtd | PCMPGTD xmm1, xmm2/m128 | SSE2 | Compares doublewords for greater than (signed). |
| pcmpgtw | PCMPGTW xmm1, xmm2/m128 | SSE2 | Compares words for greater than (signed). |
| pmaddwd | PMADDWD xmm1, xmm2/m128 | SSE2 | Multiplies words, adds adjacent pairs to doublewords. |
| pmaxsw | PMAXSW xmm1, xmm2/m128 | SSE2 | Returns maximum of signed words. |
| pmaxub | PMAXUB xmm1, xmm2/m128 | SSE2 | Returns maximum of unsigned bytes. |
| pminsw | PMINSW xmm1, xmm2/m128 | SSE2 | Returns minimum of signed words. |
| pminub | PMINUB xmm1, xmm2/m128 | SSE2 | Returns minimum of unsigned bytes. |
| pmovmskb | PMOVMSKB r32, xmm | SSE2 | Creates a mask from the MSB of each byte in XMM. |
| pmulhuw | PMULHUW xmm1, xmm2/m128 | SSE2 | Multiplies unsigned words, keeps high 16 bits. |
| pmulhw | PMULHW xmm1, xmm2/m128 | SSE2 | Multiplies signed words, keeps high 16 bits. |
| pmullw | PMULLW xmm1, xmm2/m128 | SSE2 | Multiplies 16-bit words and stores low 16-bit result. |
| pmuludq | PMULUDQ xmm1, xmm2/m128 | SSE2 | Multiplies low 32-bits of each 64-bit chunk to 64-bit result. |
| por | POR xmm, xmm/m128 | SSE2 | Bitwise OR of 128-bit integers. |
| psadbw | PSADBW xmm1, xmm2/m128 | SSE2 | Computes absolute differences of bytes and sums them to words. |
| pshufd | PSHUFD xmm, xmm/m128, imm8 | SSE2 | Shuffles 32-bit integers. |
| pshufhw | PSHUFHW xmm1, xmm2/m128, imm8 | SSE2 | Shuffles the high 4 words of XMM. |
| pshuflw | PSHUFLW xmm1, xmm2/m128, imm8 | SSE2 | Shuffles the low 4 words of XMM. |
| pslld | PSLLD xmm, imm8 | SSE2 | Shifts doublewords left. |
| pslldq | PSLLDQ xmm1, imm8 | SSE2 | Shifts the entire 128-bit register left by bytes. |
| psllw | PSLLW xmm, imm8 | SSE2 | Shifts words left. |
| psrad | PSRAD xmm, imm8 | SSE2 | Shifts doublewords right arithmetic. |
| psraw | PSRAW xmm, imm8 | SSE2 | Shifts words right arithmetic (sign bit). |
| psrld | PSRLD xmm, imm8 | SSE2 | Shifts doublewords right logical. |
| psrldq | PSRLDQ xmm1, imm8 | SSE2 | Shifts the entire 128-bit register right by bytes. |
| psrlw | PSRLW xmm, imm8 | SSE2 | Shifts words right logical. |
| psubb | PSUBB xmm, xmm/m128 | SSE2 | Subtracts 16 bytes. |
| psubd | PSUBD xmm, xmm/m128 | SSE2 | Subtracts 4 doublewords. |
| psubq | PSUBQ xmm1, xmm2/m128 | SSE2 | Subtracts packed quadwords. |
| psubsw | PSUBSW xmm1, xmm2/m128 | SSE2 | Subtracts 16-bit words with signed saturation. |
| psubusw | PSUBUSW xmm1, xmm2/m128 | SSE2 | Subtracts 16-bit words with unsigned saturation. |
| psubw | PSUBW xmm, xmm/m128 | SSE2 | Subtracts 8 words. |
| punpckhbw | PUNPCKHBW xmm1, xmm2/m128 | SSE2 | Interleaves high bytes from two sources. |
| punpckhdq | PUNPCKHDQ xmm1, xmm2/m128 | SSE2 | Interleaves high doublewords. |
| punpckhqdq | PUNPCKHQDQ xmm1, xmm2/m128 | SSE2 | Interleaves high quadwords. |
| punpckhwd | PUNPCKHWD xmm1, xmm2/m128 | SSE2 | Interleaves high words. |
| punpcklbw | PUNPCKLBW xmm, xmm/m128 | SSE2 | Interleaves low bytes from two sources. |
| punpckldq | PUNPCKLDQ xmm, xmm/m128 | SSE2 | Interleaves low doublewords. |
| punpcklqdq | PUNPCKLQDQ xmm, xmm/m128 | SSE2 | Interleaves low quadwords. |
| punpcklwd | PUNPCKLWD xmm, xmm/m128 | SSE2 | Interleaves low words. |
| pxor | PXOR xmm, xmm/m128 | SSE2 | Bitwise XOR of 128-bit integers. |
| shufpd | SHUFPD xmm1, xmm2/m128, imm8 | SSE2 | Shuffles 64-bit doubles between two XMM registers. |
| sqrtpd | SQRTPD xmm, xmm/m128 | SSE2 | Computes square root of two 64-bit doubles. |
| sqrtsd | SQRTSD xmm1, xmm2/m64 | SSE2 | Computes square root of the low double. |
| subpd | SUBPD xmm, xmm/m128 | SSE2 | Subtracts two 64-bit doubles. |
| subsd | SUBSD xmm1, xmm2/m64 | SSE2 | Subtracts the low double-precision floating-point value. |