Расширения SSE/AVX предоставляют инструкции для паралелльных операций с плавающей точкой:
addps
: складывает 4 дорожки операндов с числами с плавающей точкой одинарной точности
addpd
: складывает 2 дорожки операндов с числами с плавающей точкой двойной точности
vaddps
: складывает 4 дорожки (128-битная версия) или 8 дорожек (256-битная версия) с числами с плавающей точкой одинарной точности
vaddpd
: складывает 2 дорожки (128-битная версия) или 4 дорожки (256-битная версия) с числами с плавающей точкой двойной точности
subps
: вычитает 4 дорожки операндов с числами с плавающей точкой одинарной точности
subpd
: вычитает 2 дорожки операндов с числами с плавающей точкой двойной точности
vsubps
: вычитает 4 дорожки (128-битная версия) или 8 дорожек (256-битная версия) с числами с плавающей точкой одинарной точности
vsubpd
: вычитает 2 дорожки (128-битная версия) или 4 дорожки (256-битная версия) с числами с плавающей точкой двойной точности
mulps
: перемножает 4 дорожки операндов с числами с плавающей точкой одинарной точности
mulpd
: перемножает 2 дорожки операндов с числами с плавающей точкой двойной точности
vmulps
: перемножает 4 дорожки (128-битная версия) или 8 дорожек (256-битная версия) с числами с плавающей точкой одинарной точности
vmulpd
: перемножает 2 дорожки (128-битная версия) или 4 дорожки (256-битная версия) с числами с плавающей точкой двойной точности
divps
: делит 4 дорожки операндов с числами с плавающей точкой одинарной точности
divpd
: делит 2 дорожки операндов с числами с плавающей точкой двойной точности
vdivps
: делит 4 дорожки (128-битная версия) или 8 дорожек (256-битная версия) с числами с плавающей точкой одинарной точности
vdivpd
: делит 2 дорожки (128-битная версия) или 4 дорожки (256-битная версия) с числами с плавающей точкой двойной точности
maxps
: вычисляет максимальное в каждой из 4 пар чисел с плавающей точкой одинарной точности
maxpd
: вычисляет максимальное в каждой из 2 пар чисел с плавающей точкой двойной точности
vmaxps
: вычисляет максимальное в каждой из 4 (для 128-битной версии) или 8 (для 256-битной версии) пар чисел с плавающей точкой одинарной точности
vmaxpd
: вычисляет максимальное в каждой из 2 (для 128-битной версии) или 4 (для 256-битной версии) пар чисел с плавающей точкой двойной точности
minps
: вычисляет минимальное в каждой из 4 пар чисел с плавающей точкой одинарной точности
minpd
: вычисляет минимальное в каждой из 2 пар чисел с плавающей точкой двойной точности
vminps
: вычисляет минимальное в каждой из 4 (для 128-битной версии) или 8 (для 256-битной версии) пар чисел с плавающей точкой одинарной точности
vminpd
: вычисляет минимальное в каждой из 2 (для 128-битной версии) или 4 (для 256-битной версии) пар чисел с плавающей точкой двойной точности
sqrtps
: вычисляет квадратный корень для каждого из 4 чисел с плавающей точкой одинарной точности
sqrtpd
: вычисляет квадратный корень для 2 чисел с плавающей точкой двойной точности
vsqrtps
: вычисляет квадратный корень для каждого из 4 (для 128-битной версии) или 8 (для 256-битной версии) чисел с плавающей точкой одинарной точности
vsqrtpd
: вычисляет квадратный корень для каждого из 2 (для 128-битной версии) или 4 (для 256-битной версии) чисел с плавающей точкой двойной точности
rsqrtps
: вычисляет приблизительно обратный квадратный корень для каждого из 4 чисел с плавающей точкой одинарной точности
vrsqrtps
: вычисляет приблизительно обратный квадратный корень для каждого из 4 (для 128-битной версии) или 8 (для 256-битной версии) чисел с плавающей точкой одинарной точности
Общий синтаксис инструкций на примере v(addps)
:
addps xmmdest, xmmsrc/mem128 vaddps xmmdest, xmmsrc1, xmmsrc2/mem128 vaddps ymmdest, ymmsrc1, ymmsrc2/mem256
Инструкции вычисления квадратного корня принимают один операнд:
sqrtps xmmdest, xmmsrc/mem128 vsqrtps xmmdest, xmmsrc/mem128 vsqrtps ymmdest, ymmsrc/mem256