我正在使用MS Visual Studio中的SSE2指令集。我用它來做一些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