如何使用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