2012-05-31 90 views
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'

回答

2

你必須使用_mm_unpacklo_epi8see here

epi postifix intrinsics用於SSE寄存器,pi用於MMX寄存器。

相關問題