2013-10-26 63 views
2

我有一個128位的變量,裏面填充了4個獨立的整數。 [1,2,3,4]。我想向右移動,所以我可以得到[2,3,4,0]。什麼是最快的方式來做到這一點。在__m128上正確移位32位的最快方法(Intel Intrinsics)

我當前的代碼:

__m128 v1; 
v1 = (__m128)_mm_srli_si128( _mm_castps_si128(v1) , 4); 

這成功地轉移了位,但我試圖去的速度和緩存優化(又名變量最少越好)。無論如何改善這個代碼,以避免投擲和__m128i?

謝謝

+0

你可能沒有意識到這一點,但當前的方法只需要1個寄存器。但是,您將會轉換int <->轉移延遲。 – Mysticial

回答

1

別擔心。 __m128__m128i是解釋XMM寄存器內容的兩種不同方式,因此在編譯中演員陣容消失。我的編譯器(鐺在Mac OS 10.9)編譯整個事情到一個單一的指令,因爲它代表:

psrldq $0x4, %xmm0 
相關問題