Calcula a média da soma de todos os valores dos dois operandos somados. PAVGB calcula a média somando 16 bytes em cada operando, enquanto PAVGW soma 8 words em cada um.
Copia uma das 8 words contidas no registrador XMM e armazena no registrador de propósito geral de 32 ou 64 bits. O valor é movido para os 16 bits menos significativos do registrador e todos os outros bits são zerados. Também é possível armazenar a word diretamente na memória principal.
O operando imediato é um valor entre 0 e 7 que indica o índice da word no registrador XMM. Apenas os 3 bits menos significativos do valor são considerados, os demais são ignorados.
Copia uma word dos 16 bits menos significativos do registrador de propósito geral no segundo operando e armazena em uma das words no registrador XMM. Também é possível ler a word da memória principal.
Assim como no caso do PEXTRW o operando imediato serve para identificar o índice da word no registrador XMM.
PMAXUB/PMAXUW | Maximum of packed unsigined (byte|word) of integers
PMAXUB xmm(n), xmm(n)
PMAXUB xmm(n), ubyte(16)
PMAXUW xmm(n), xmm(n) ; Adicionado no SSE4
PMAXUW xmm(n), uword(8) ; Adicionado no SSE4
Compara os bytes/words não-sinalizados dos dois operandos packed e armazena o maior deles em cada uma das comparações no operando destino (o primeiro).
PMINUB/PMINUW | Minimum of packed unsigned (byte|word) of integers
PMINUB xmm(n), xmm(n)
PMINUB xmm(n), ubyte(16)
PMINUW xmm(n), xmm(n) ; Adicionado no SSE4
PMINUW xmm(n), uword(8) ; Adicionado no SSE4
Faz o mesmo que a instrução anterior porém armazenando o menor número de cada comparação.
PMAXS(B|W|D) | Maximum of packed signed (byte|word|doubleword) integers
PMAXSB xmm(n), xmm(n) ; Adicionado no SSE4
PMAXSB xmm(n), byte(16) ; Adicionado no SSE4
PMAXSW xmm(n), xmm(n)
PMAXSW xmm(n), word(8)
PMAXSD xmm(n), xmm(n) ; Adicionado no SSE4
PMAXSD xmm(n), dword(4) ; Adicionado no SSE4
Faz o mesmo que PMAXUB/PMAXUW porém considerando o valor como sinalizado. Também há a instrução PMAXSD que compara quatro double words (4 bytes) empacotados.
PMINS(B|W) | Minimum of packed signed (byte|word) integers
PMINSB xmm(n), xmm(n) ; Adicionado no SSE4
PMINSB xmm(n), byte(16) ; Adicionado no SSE4
PMINSW xmm(n), xmm(n)
PMINSW xmm(n), word(8)
Faz o mesmo que PMAXSB/PMAXSW porém retornando o menor valor de cada comparação.
PMOVMSKB | Move byte mask
PMOVMSKB reg32/64, xmm(n)
Armazena nos 16 bits menos significativos do registrador de propósito geral cada um dos bits mais significativos (MSB) de todos os bytes contidos no registrador XMM.
PMULHW/PMULHUW | Multiply packed (unsigned) word integers and store high result
Multiplica cada uma das words dos operandos onde o resultado temporário da multiplicação é de 32 bits de tamanho. Porém armazena no operando destino somente a word mais significativa do resultado da multiplicação.
PMULHW faz uma multiplicação sinalizada, enquanto PMULHUW faz uma multiplicação não-sinalizada.
PSADBW | Compute sum of absolute differences
PSADBW xmm(n), xmm(n)
PSADBW xmm(n), ubyte(16)
Calcula a diferença absoluta dos bytes dos dois operandos e armazena a soma de todas as diferenças.
A diferença dos 8 bytes menos significativos é somada e armazenada na word menos significativa do operando destino. Já a diferença dos 8 bytes mais significativos é somada e armazenada na quinta word (índice 4, bits [79:64]) do operando destino. Todas as outras words do registrador XMM são zeradas.
Move dois quadwords (8 bytes) entre registradores XMM ou de/para memória RAM. O endereço na memória precisa estar alinhado a 16 se não uma exceção #GP será disparada.
Faz o mesmo que a instrução anterior porém o alinhamento da memória não é necessário, porém essa instrução é menos performática caso acesse um endereço desalinhado.
Multiplica o primeiro (índice 0) e o terceiro (índice 2) doublewords dos operandos e armazena o resultado como quadwords no operando destino. O resultado da multiplicação entre os primeiros doublewords é armazenado no quadword menos signfiicativo do operando destino, enquanto a multiplicação entre os terceiros doublewords é armazenada no quadword mais significativo.
RDI é o primeiro ponteiro recebido como argumento e RSI o segundo.
PSLLDQ | Shift double quadword left logical
PSLLDQ xmm(n), imm8
Faz uma operação de logical shift left com os dois quadwords do registrador XMM. O número de vezes que o shift deve ser feito é especificado pelo operando imediato de 8 bits. Os bits menos significativos são zerados.
PSRLDQ | Shift double quadword right logical
PSRLDQ xmm(n), imm8
Faz o mesmo que a instrução anterior porém com um shift right. Os bits mais significativos são zerados.