Instruções aritméticas

Instruções de operação aritmética do SSE.

ADDP(S|D) | Add Packed (Single|Double)-precision floating-point values

ADDPS xmm(n), xmm(n)
ADDPS xmm(n), float(4)


ADDPD xmm(n), xmm(n)
ADDPD xmm(n), double(2)

Soma 4 números float (ou 2 números double) de uma única vez no registrador destino com os quatro números float (ou 2 números double) do registrador/memória fonte. Exemplo:

#include <stdio.h>

void assembly(float *array);

int main(void)
{
  float array[4] = {5.0f, 5.0f, 5.0f, 5.0f};
  assembly(array);

  printf("Resultado: %f, %f, %f, %f\n", array[0], array[1], array[2], array[3]);
  return 0;
}

SUBP(S|D) | Subtract Packed (Single|Double)-precision floating-point values

Funciona da mesma forma que a instrução anterior porém faz uma operação de subtração nos valores.

ADDS(S|D) | Add Scalar (Single|Double)-precision floating-point value

ADDSS faz a adição do float contido no double word (4 bytes) menos significativo do registrador XMM. Já ADDSD faz a adição do double contido na quadword (8 bytes) menos significativa do registrador.

Conforme exemplo abaixo:

SUBS(S|D) | Subtract Scalar (Single|Double)-precision floating-point value

Funciona da mesma forma que a instrução anterior porém subtraindo os valores.

MULP(S|D) | Multiply Packed (Single|Double)-precision floating-point values

Funciona como ADDPS/ADDPD porém multiplicando os números ao invés de somá-los.

MULS(S|D) | Multiply Scalar (Single|Double)-precision floating-point value

Funciona como ADDSS/ADDSD porém multiplicando os números ao invés de somá-los.

DIVP(S|D) | Divide Packed (Single|Double)-precision floating-point values

Funciona como ADDPS/ADDPD porém dividindo os números ao invés de somá-los.

DIVS(S|D) | Divide Scalar (Single|Double)-precision floating-point value

Funciona como ADDSS/ADDSD porém dividindo os números ao invés de somá-los.

RCPPS | Compute Reciprocals of Packed Single-precision floating-point values

Calcula o valor aproximado do inverso multiplicativo dos floats no operando fonte (a direita) e armazena os valores no operando destino.

RCPSS | Compute Reciprocal of Scalar Single-precision floating-point value

Calcula o valor aproximado do inverso multiplicativo do float no operando fonte (a direita) e armazena o resultado na double word (4 bytes) menos significativa do operando destino.

SQRTP(S|D) | Compute square roots of Packed (Single|Double)-precision floating-point values

Calcula as raízes quadradas dos números floats/doubles no operando fonte e armazena os resultados no operando destino.

SQRTS(S|D) | Compute square root of Scalar (Single|Double)-precision floating-point value

Calcula a raiz quadrada do número escalar no operando fonte e armazena o resultado no float/double menos significativo do operando destino. Exemplo:

RSQRTPS | Compute Reciprocals of square roots of Packed Single-precision floating-point values

Calcula o inverso multiplicativo das raízes quadradas dos floats no operando fonte, armazenando os resultados no operando destino. Essa instrução é equivalente ao uso de SQRTPS seguido de RCPPS.

RSQRTSS | Compute Reciprocal of square root of Scalar Single-precision floating-point value

Calcula o inverso multiplicativo da raiz quadrada do número escalar no operando fonte e armazena o resultado no double word menos significativo do operando destino.

MAXP(S|D) | return maximum of Packed (Single|Double)-precision floating-point values

Compara cada um dos valores contidos nos dois operandos e retorna o maior valor entre os dois.

MAXS(S|D) | return maximum of Scalar (Single|Double)-precision floating-point value

Compara os dois valores escalares e armazena o maior deles no float/double menos significativo do operando destino.

MINP(S|D) | return minimum of Packed (Single|Double)-precision floating-point values

Funciona da mesma forma que MAXPS/MAXPD porém retornando o menor valor entre cada comparação.

MINS(S|D) | return minimum of Scalar (Single|Double)-precision floating-point value

Funciona da mesma forma que MAXSS/MAXSD porém retornando o menor valor entre os dois.

Last updated

Was this helpful?