2014-09-01 39 views
3

假設我有一個128寄存器,它包含一些浮點數[x1,x2,x3,x4],另一個保存[y1,y2,y3,y4]。 獲得像[x1,y1,x2,y2]這樣的東西的最好方法是什麼?在AVX/SSE中,將寄存器與任意車道選擇相結合的最快/最好的方法是什麼?

我想我可以多次移動寄存器,使用臨時對象,然後在多個步驟中合併它們,但是我想知道是否缺少一些方便的指令可以讓我的生活更輕鬆。我認爲這是一件很平常的事情,所以我想知道這裏最好的做法是什麼。

謝謝!

回答

3

在這種特殊情況下,你可以用一條指令做:

z = _mm_unpacklo_epi32(x, y); 

_mm_unpacklo_xxx/_mm_unpackhi_xxx可以爲各種數據重組操作非常有用。對於更一般的情況,還有_mm_shuffle_xxx說明。

+0

很酷!我稍後再說。一般來說,這是我應該檢查任意車道選擇的指示家族嗎?任何其他這樣的方便提示?謝謝! – bitwise 2014-09-01 17:23:32

+0

當然 - 請參閱答案更新。 – 2014-09-01 17:26:54

相關問題