Skip to content

Instantly share code, notes, and snippets.

@AnthonyDS
Last active January 26, 2023 03:29
Show Gist options
  • Save AnthonyDS/6b0022e5a82e48dc4e043cfed1fc9a32 to your computer and use it in GitHub Desktop.
Save AnthonyDS/6b0022e5a82e48dc4e043cfed1fc9a32 to your computer and use it in GitHub Desktop.
//
// url: https://ru.wikipedia.org/wiki/SSE
// url: https://docs.oracle.com/cd/E36784_01/html/E36859/epmoa.html#scrolltoc
//
__declspec(align(16)) float a[4] = { 300.0, 4.0, 4.0, 12.0 };
__declspec(align(16)) float b[4] = { 1.5, 2, 1, 2 };
__asm {
movups xmm0, a; // поместить 4 переменные с плавающей точкой из a в регистр xmm0
movups xmm1, b; // поместить 4 переменные с плавающей точкой из b в регистр xmm1
mulps xmm0, xmm1; // перемножить пакеты плавающих точек: xmm0 = xmm0 * xmm1
; // xmm00 = xmm10 * xmm00
; // xmm01 = xmm11 * xmm01
; // xmm02 = xmm12 * xmm02
; // xmm03 = xmm13 * xmm03
movups a, xmm0; // выгрузить результаты из регистра xmm0 по адресам a
};
// Вывод результата
for (int i = 0; i < sizeof(*a); i++) {
std::cout << *(a + i) << "\n";
}
@AnthonyDS
Copy link
Author

AnthonyDS commented Oct 25, 2021

Для AVX инструкций: vmovups, vmulps

Предупреждение C6262
Функция использует "65592" байт в стеке: это превышает значение /analyze:stacksize"16384". Попробуйте переместить некоторые данные в кучу.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment