在AVX寄存器(__m256i)中设置单个位,需要“随机访问".操作员 [英] set individual bit in AVX register (__m256i), need "random access" operator
本文介绍了在AVX寄存器(__m256i)中设置单个位,需要“随机访问".操作员的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
因此,我想设置一个__m256i
寄存器的单个位.
So, I want to set an individual bit of a __m256i
register.
说,我的__m256i
包含:[ 1 0 1 0 | 1 0 1 0 | ... | 1 0 1 0 ]
,如何设置和取消设置第n位?
Say, my __m256i
contains: [ 1 0 1 0 | 1 0 1 0 | ... | 1 0 1 0 ]
, how do I set and unset the n-th bit?
推荐答案
这是功能的实现,可以在向量内设置单个位:
This is an implementation of function which can set individual bit inside a vector:
#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;
}
这篇关于在AVX寄存器(__m256i)中设置单个位,需要“随机访问".操作员的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文