0
我想使用SSE2指令進行一些優化的代碼。目前,我有它寫成內聯彙編,就像這樣:如何在MS Visual Studio中使用SSE內在函數?
...
__m128 zero = {0};
__asm {
...
LINE_LOOP_1:
MOVQ xmm0, QWORD PTR [eax] ; no problem
PUNPCKLBW xmm0, zero ; PROBLEM IS HERE
...
LOOP LINE_LOOP_1
}
它非常好,但我想用內部函數,這樣它會更容易改變重寫(我稍微不同的版本計算,我想優化)。
但是,我找不出要使用哪些內在函數。我找到的任何文檔列出了大約一半的SSE2指令,看起來好像另一半不能用作內部函數! MS似乎不大可能在一半的時間內實施SSE。
那麼,我可以使用哪些內在函數來生成指令,例如PUNPCKLBW
指令?
我使用MS Visual Studio 2005.
P.S.有些MSDN documentation建議使用_mm_unpacklo_pi8
,但它不工作:
#include "xmmintrin.h"
int main()
{
__m128 x = {0}, y = {0};
x = _mm_unpacklo_pi8(x, y);
}
這給出了一個編譯錯誤:
error C2664: '_m_punpcklbw' : cannot convert parameter 1 from '_m128' to '_m64'