S.H*_*S.H 4 x86 bit-manipulation simd intrinsics avx
所以,我想设置一个__m256i寄存器的单个位。
说,我的__m256icontains: [ 1 0 1 0 | 1 0 1 0 | ... | 1 0 1 0 ],我如何设置和取消设置第 n 位?
这是可以在向量内设置单个位的函数的实现:
#include <immintrin.h>
#include <assert.h>
void SetBit(__m256i & vector, size_t position, bool value)
{
assert(position <= 255);
uint8_t lut[32] = { 0 };
lut[position >> 3] = 1 << (position & 7);
__m256i mask = _mm256_loadu_si256((__m256i*)lut);
if (value)
vector = _mm256_or_si256(mask, vector);
else
vector = _mm256_andnot_si256(mask, vector);
}
int main(int argc, char* argv[])
{
__m256i a = _mm256_set1_epi8(-1);
SetBit(a, 54, false);
__m256i b = _mm256_set1_epi8(0);
SetBit(b, 54, true);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1836 次 |
| 最近记录: |