如何使用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. SSE除以整數
- 2. 將8位整數數組移動到32位數組程序
- 3. VHDL - 將std_logic_vector移位8位
- 4. 使用單個數字移位4位
- 5. 轉換8 16位SSE寄存器8位數據
- 6. 是0x0F的8位或4位值?
- 7. 將4位8位無符號整數轉換爲32位浮點型
- 8. 4位乘以8位彙編乘法
- 9. 將16位整數轉換爲8位整數?
- 10. 我怎樣提取16個8位__m128i值32×4位整數
- 11. 2個64位整數的SSE乘法
- 12. SSE整數除法?
- 13. Regext:十位數字的第4位不能是8或9
- 14. 將陣列項目移位4位置
- 15. 查找n位數的子序列數,可以被8整除
- 16. 帶字節數組和8位整數的模算法:8位=字節%8位
- 17. PHP - 讀取8位整數
- 18. Rails 4:將數據遷移的位置
- 19. 使用左移位和按位或
- 20. 連接4位整數
- 21. 使用位移除10?
- 22. 使用整數將8位二進制轉換爲BCD
- 23. 在python中將16位int分成兩個8位整數
- 24. 尋找對於非即時移位值的sse 128位移位操作
- 25. 轉換8位SSE寄存器,以16個短褲
- 26. 128位SSE計數器?
- 27. 移位N位整個字符數組
- 28. 分配4位至8位寄存器
- 29. 將4個SSE整數提取爲4個字符
- 30. 使用__builtin_ia32_shufps將矢量移位32位?
我認爲只是指定正確的-march或-mtune使它自動發生:https://godbolt.org/g/jxGyFd –
首先,該工具對於像StackOverflow這樣的Q&A頁面非常棒。我立即給它加書籤。而對於真正的答案內容,謝謝我看看程序集,如果編譯器自動執行某些情況下,我應該能夠從程序集中讀出它。 – miho
@RichardHodges我發現代碼相當令人失望,但Clang做得很好。 – harold