Я пробовал оптимизировать некоторый код, который у меня есть, используя встроенные функции sse от Microsoft. Одна из самых больших проблем при оптимизации моего кода - это LHS, возникающая всякий раз, когда я хочу использовать константу. Кажется, есть некоторая информация о генерации определенных констант ( здесь и здесь - раздел 13.4 ), но вся его сборка (чего я бы предпочел избежать).
Проблема в том, когда Я пытаюсь реализовать то же самое с встроенными функциями, msvc жалуется на несовместимые типы и т. Д. Кто-нибудь знает какие-либо эквивалентные трюки с использованием встроенных функций?
Пример - Генерировать {1.0,1.0,1.0,1.0}
//pcmpeqw xmm0,xmm0
__m128 t = _mm_cmpeq_epi16( t, t );
//pslld xmm0,25
_mm_slli_epi32(t, 25);
//psrld xmm0,2
return _mm_srli_epi32(t, 2);
Это генерирует кучу ошибки о несовместимом типе (__m128 vs _m128i). Я новичок в этом, так что почти уверен, что упускаю что-то очевидное. Может ли кто-нибудь помочь?
tldr - Как мне сгенерировать __m128 vec, заполненный постоянными числами с плавающей запятой одинарной точности, с помощью встроенных функций ms?
Спасибо за чтение :)