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ção | Operandos | Descrição |
|---|---|---|
| movss / movsd | xmm, xmm/m | Move um float (ss) ou double (sd) escalar. |
| movaps / movups | xmm, xmm/m | Move 4 floats empacotados — alinhado (aps) ou não-alinhado (ups). |
| addss / addsd | xmm, xmm/m | Soma escalar de float / double. |
| mulps / mulpd | xmm, xmm/m | Multiplica 4 floats / 2 doubles em paralelo (SIMD). |
| divsd / sqrtsd | xmm, xmm/m | Divide / extrai a raiz quadrada de um double escalar. |
| cvtsi2sd | xmm, r/m | Converte inteiro para double. |
| cvttsd2si | r, xmm/m | Converte double para inteiro (truncando). |
| comisd / ucomisd | xmm, xmm/m | Compara doubles e ajusta o RFLAGS (para jae/jb etc.). |
| xorps | xmm, xmm | xorps 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