Instruções com inteiros 128-bit
PAVGB/PAVGW | Compute average of packed unsigned (byte|word) of integers
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.
PEXTRW | Extract word
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.
PINSRW | Insert word
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
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
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
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
Faz o mesmo que PMAXSB/PMAXSW porém retornando o menor valor de cada comparação.
PMOVMSKB | Move byte mask
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
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.
MOVDQA | Move aligned double quadword
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.
MOVDQU | Move unaligned double quadword
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.
PADD(B|W|D|Q) | Packed (byte|word|doubleword|quadword) add
Soma os bytes, words, double words ou quadwords dos operandos e armazena no operando destino.
PSUBQ | Packed quadword subtract
Faz o mesmo que a instrução PADDQ porém com uma operação de subtração.
PMULUDQ | Multiply packed unsigned doubleword integers
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.
Exemplo:
RDI é o primeiro ponteiro recebido como argumento e RSI o segundo.
PSLLDQ | Shift double quadword left logical
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
Faz o mesmo que a instrução anterior porém com um shift right. Os bits mais significativos são zerados.
Last updated