Voltar à lista
Assembly x86-64Instruções

Ponto flutuante e SIMD

xmm/ymm, movss, addsd, cvtsi2sd…

Instruções

Operações de ponto flutuante e vetoriais usam os registradores xmm (128 bits), ymm (256) e zmm (512). O sufixo indica a largura e a contagem: ss = single scalar, sd = double scalar, ps = packed single, pd = packed double.

InstruçãoOperandosDescrição
movss / movsdxmm, xmm/mMove um float (ss) ou double (sd) escalar.
movaps / movupsxmm, xmm/mMove 4 floats empacotados — alinhado (aps) ou não-alinhado (ups).
addss / addsdxmm, xmm/mSoma escalar de float / double.
mulps / mulpdxmm, xmm/mMultiplica 4 floats / 2 doubles em paralelo (SIMD).
divsd / sqrtsdxmm, xmm/mDivide / extrai a raiz quadrada de um double escalar.
cvtsi2sdxmm, r/mConverte inteiro para double.
cvttsd2sir, xmm/mConverte double para inteiro (truncando).
comisd / ucomisdxmm, xmm/mCompara doubles e ajusta o RFLAGS (para jae/jb etc.).
xorpsxmm, xmmxorps xmm, xmm zera o registrador vetorial.
somar dois doubles
; soma 1.5 + 2.0 em ponto flutuante de dupla precisão
    movsd   xmm0, [rel a]       ; xmm0 = 1.5
    movsd   xmm1, [rel b]       ; xmm1 = 2.0
    addsd   xmm0, xmm1          ; xmm0 = 3.5
    ; na System V, um double é retornado em xmm0