如何使用SSE內在函數將16位8位整數除以4(或將它們向右移2)?使用SSE將8位整數除以4(或移位)
回答
不幸的是,沒有針對8位元素的SSE移位指令。如果元素是8位無符號的,那麼你可以使用16位移位並掩蓋不需要的高位,例如,
v = _mm_srli_epi16(v, 2);
v = _mm_and_si128(v, _mm_set1_epi8(0x3f));
對於8位簽署元素這是一個有點fiddlier,但還是可以的,雖然它可能只是更容易解壓縮到16位,做變化,然後打包回8位。
謝謝,剛剛通過編寫一個僞造epi8的宏來解決它:'''#define _mm_srli_epi8(mm,Imm)_mm_and_si128(_mm_set1_epi8(0xFF >> Imm),_mm_srli_epi32(mm,Imm))''' – miho
@miho:請注意,在此將其作爲宏而不是內聯函數進行編寫並沒有什麼好處。 –
@DietrichEpp:實際上,如果'_mm_srli_epi32'中的'Imm'不是一個常量(特別是在調試版本中),實際上有些編譯器會抱怨,儘管你應該可以使用當前/最新版本的gcc ,鐺,ICC。 –
- 1. 轉換8 16位SSE寄存器8位數據
- 2. 將4位8位無符號整數轉換爲32位浮點型
- 3. 將陣列項目移位4位置
- 4. PHP - 讀取8位整數
- 5. 使用左移位和按位或
- 6. 使用位移除10?
- 7. 在python中將16位int分成兩個8位整數
- 8. 使用整數將8位二進制轉換爲BCD
- 9. 尋找對於非即時移位值的sse 128位移位操作
- 10. 128位SSE計數器?
- 11. 移位N位整個字符數組
- 12. 使用__builtin_ia32_shufps將矢量移位32位?
- 13. 負整數的位移?
- 14. 移位和整數提升?
- 15. win32 - 如何將畫面捕捉爲8位或16位位圖?
- 16. 使用Emacs縮進(移位4)代碼
- 17. 如何將4個2位值合併爲1個8位值?
- 18. LinkitOne和8位電平移位器
- 19. 循環8位移位器,VHDL
- 20. 包裝4位整數在64位長 - java按位
- 21. 使用移位運算符除以任意數字
- 22. 使用連續移位的可能的4位組合
- 23. 使用Java或Python將8位(16調色板)PNG轉換爲4位(16色調色板)?
- 24. 水平最小值和SSE中無符號32位整數的位置
- 25. 讀取智能卡(8位或16位?)
- 26. 從C語言地址讀取8位或16位或32位
- 27. 如何在VB.NET中移位Ushort 16位整數中的位?
- 28. 將char的8位數轉換爲整數
- 29. 使用按位運算符將整數乘以5
- 30. Java ...如何製作4位整數
我認爲只是指定正確的-march或-mtune使它自動發生:https://godbolt.org/g/jxGyFd –
首先,該工具對於像StackOverflow這樣的Q&A頁面非常棒。我立即給它加書籤。而對於真正的答案內容,謝謝我看看程序集,如果編譯器自動執行某些情況下,我應該能夠從程序集中讀出它。 – miho
@RichardHodges我發現代碼相當令人失望,但Clang做得很好。 – harold