Я пытаюсь найти эффективный способ загрузки поплавков постоянной времени компиляции в регистры SSE (2/3). Я пробовал делать простой код, например,
const __m128 x = { 1.0f, 2.0f, 3.0f, 4.0f }; 
но который генерирует 4 команды movss из памяти!
movss       xmm0,dword ptr [[email protected] (14048E534h)] 
movss       xmm1,dword ptr [[email protected] (14048E530h)] 
movaps      xmm6,xmm12 
shufps      xmm6,xmm12,0C6h 
movss       dword ptr [rsp],xmm0 
movss       xmm0,dword ptr [[email protected] (14048E52Ch)] 
movss       dword ptr [rsp+4],xmm1 
movss       xmm1,dword ptr [[email protected] (14048E528h)] 
которые загружают скаляры в и из памяти... (?!?!)
Выполнение этого, хотя..
float Align(16) myfloat4[4] = { 1.0f, 2.0f, 3.0f, 4.0f, }; // out in global scope
генерирует.
movaps      xmm5,xmmword ptr [::myarray4 (140512050h)]
В идеале было бы неплохо, если бы у меня были константы, то это было бы способом не касаться памяти и просто делать это с помощью непосредственных инструкций стиля (например, константы, скомпилированные в самой инструкции).
Спасибо
