use*_*317 5 c++ x86 sse simd intrinsics
如何创建__m128i具有n最高有效位集的(在整个向量中)?我需要它来屏蔽与计算相关的缓冲区部分。如果可能,解决方案应该没有分支,但这似乎很难实现
我怎样才能做到这一点 ?
您可以使用此问题中的方法之一来生成掩码,并将 MS n字节设置为全部。当 n 不是 8 的倍数时,您只需要修复所有剩余的位。
我建议尝试这样的事情:
- init vector A = all (8 bit) elements to the residual mask of n % 8 bits
- init vector B = mask of n / 8 bytes using one of the above-mentioned methods
- init vector C = mask of (n + 7) / 8 bytes using one of the above-mentioned methods
- result = A | B & C
Run Code Online (Sandbox Code Playgroud)
例如,如果 n = 36:
A = f0 f0 f0 f0 f0 f0 f0 f0 f0 f0 f0 f0 f0 f0 f0 f0
B = ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00
C = ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00
==> ff ff ff ff f0 00 00 00 00 00 00 00 00 00 00 00
Run Code Online (Sandbox Code Playgroud)
根据需要,这将是无分支的,但它可能约为 10 条指令。可能有一种更有效的方法,但我需要更多考虑。
| 归档时间: |
|
| 查看次数: |
686 次 |
| 最近记录: |