Арифметика чисел с плавающей точкой в SSE

Последнее обновление: 02.07.2023

Для выполнения арифметических действий над числами с плавающей точкой расширения SSE предоставляет ряд инструкций:

  • addss и addsd: сложение

  • subss и subsd: вычитание

  • mulss и mulsd: умножение

  • divss и divsd: деление

  • minss и minsd: вычисляют минимальное значение двух операндов, сохраняя минимальное значение в первом операнде.

  • maxss и maxsd: вычисляют максимальное значение двух операндов, сохраняя минимальное значение в первом операнде.

  • sqrtss и sqrtsd: вычисляют квадратный корень второго операнда и сохраняют результат в первый операнд

  • rcpss и rcpsd: вычисляют обратное значение второго операнда, сохраняя результат в первый операнд

  • rsqrtss и rsqrtsd: вычисляют обратное значение квадратного корня второго операнда, сохраняя результат в первый операнд

addss xmmn, xmmn
addss xmmn, mem32
addsd xmmn, xmmn
addsd xmmn, mem64

subss xmmn, xmmn
subss xmmn, mem32
subsd xmmn, xmmn
subsd xmmn, mem64

mulss xmmn, xmmn
mulss xmmn, mem32
mulsd xmmn, xmmn
mulsd xmmn, mem64

divss xmmn, xmmn
divss xmmn, mem32
divsd xmmn, xmmn
divsd xmmn, mem64

minss xmmn, xmmn
minss xmmn, mem32
minsd xmmn, xmmn
minsd xmmn, mem64

maxss xmmn, xmmn
maxss xmmn, mem32
maxsd xmmn, xmmn
maxsd xmmn, mem64

sqrtss xmmn, xmmn
sqrtss xmmn, mem32
sqrtsd xmmn, xmmn
sqrtsd xmmn, mem64

rcpss xmmn, xmmn
rcpss xmmn, mem32

rsqrtss xmmn, xmmn
rsqrtss xmmn, mem32

Первый операнд всегда должен быть регистром XMM. Например, сложим два числа:

.data
    double1 real8 3.4
    double2 real8 6.6
.code
main proc        
    movsd xmm0, double1     ; помещаем в xmm0 число double1
    movsd xmm1, double2     ; помещаем в xmm1 число double2
    addsd xmm0, xmm1        ; XMM0 - XMM0 + XMM1
    cvtsd2si rax, xmm0      ; из xmm0 преобразуем в целое число и помещаем в rax
    ret
main endp
end
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850