是否有任何SSE2指令以相反順序從int
緩衝區加載128位int
向量寄存器?SSE2指令以相反的順序加載整數
7
A
回答
10
這是很容易在正常負荷後逆轉32個int
元素:
__m128i v = _mm_load_si128(buff); // MOVDQA
v = _mm_shuffle_epi32(v, _MM_SHUFFLE(0, 1, 2, 3)); // PSHUFD - mask = 00 01 10 11 = 0x1b
你可以做同樣的事情爲16個short
元素,但它需要更多的指令:
__m128i v = _mm_load_si128(buff); // MOVDQA
v = _mm_shuffle_epi32(v, _MM_SHUFFLE(0, 1, 2, 3)); // PSHUFD - mask = 00 01 10 11 = 0x1b
v = _mm_shufflelo_epi16(v, _MM_SHUFFLE(2, 3, 0, 1)); // PSHUFLW - mask = 10 11 00 01 = 0xb1
v = _mm_shufflehi_epi16(v, _MM_SHUFFLE(2, 3, 0, 1)); // PSHUFHW - mask = 10 11 00 01 = 0xb1
請注意,如果SSSE3可用,則可以使用_mm_shuffle_epi8
(PSHUFB
)更少的指令執行此操作:
const __m128i vm = _mm_setr_epi8(14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1);
// initialise vector mask for use with PSHUFB
// NB: do this once, outside any processing loop
...
__m128i v = _mm_load_si128(buff); // MOVDQA
v = _mm_shuffle_epi8(v, vm); // PSHUFB
-2
相關問題
- 1. Angular指令加載順序。
- 2. Angularjs:指令加載順序
- 3. 以相反的順序
- 4. 以相反的順序
- 5. unpickle以相反的順序
- 6. 以相反的順序
- 7. TemplateBeginRepeat以相反的順序
- 8. Plist以相反的順序
- 9. 以相反順序添加製表符?
- 10. 遞歸 - 以相反順序的數字
- 11. IKImageBrowser以相反的順序加載文件?
- 12. 避免以相反的順序打印整數
- 13. php數組以相反順序排列
- 14. 指針操作導致printf以相反順序打印參數?
- 15. 指令的參數順序
- 16. 以相反順序的正整數的遞歸函數數字C++
- 17. C++使用指針以相反的順序顯示句子
- 18. Bison/Flex以相反的順序處理令牌
- 19. 以相反的順序打印arraylist
- 20. 如何以相反的順序
- 21. 以相反的順序從mysql_fetch_assoc()
- 22. 菜單以相反的順序出現
- 23. 顯示以相反的順序
- 24. `叉()`兒子以相反的順序
- 25. WPF UniformGrid以相反的順序
- 26. 在highchart如何以相反的順序
- 27. 通過迭代以相反的順序
- 28. 函數指針和DLL加載順序
- 29. 與JSON相比,以相反的順序獲取數據
- 30. 在Rails路由中以相反順序指定slu 012
感謝Paul.Your邏輯工作正常。但我不明白第二個參數「0x1B」的用法。這是一種面具嗎?另一個疑問是......短褲可以做同樣的手術嗎? – Andy
我已經添加了第二個加載和倒轉短褲的例子。英特爾文檔涵蓋了該面罩,但我已添加註釋以說明其構造方式。 –
P.S.我強烈建議下載[Intel Intrinsics Guide](英特爾內部指南)(http://software.intel.com/zh-cn/articles/intel-intrinsics-guide) - 一個非常有用的WIN/Mac OS X/Linux工具,它記錄所有SSE/AVX指令和內部函數非常容易訪問。 –