Я работаю с набором инструкций SSE2 в MS Visual Studio. Я использую его для выполнения некоторых расчетов с 16-разрядными данными.Как эффективно определить 128-битную константу?
Предположим, что у меня есть 8 значений, загруженных в регистр SSE. Я хочу добавить константу (например, 42
) ко всем из них. Вот как я хотел бы, чтобы мой код выглядел.
__m128i values; // 8 values, 16 bits each
const __m128i my_const_42 = ???; // What should i write here?
values = _mm_add_epi16(values, my_const_2); // Add 42 to the 8 values
Теперь, как я могу определить константу? Следующие два способа работают, но один неэффективен, а другой уродлив.
my_const_42 = _mm_set_epi16(42, 42, 42, 42, 42, 42, 42, 42)
- компилятор генерирует 8 команд "построить" константаmy_const_42 = {42, 0, 42, 0, 42, 0, 42, 0, 42, 0, 42, 0, 42, 0, 42, 0}
- трудно понять, что происходит; изменение42
, например.-42
не является тривиальным
Есть ли способ выразить 128-битную константу удобнее?
Возможно, использование макроса для второго метода в порядке – valdo