gpt4 book ai didi

x86 - 设置 AVX 寄存器(__m256i)中的各个位,需要 "random access"运算符

转载 作者:行者123 更新时间:2023-12-02 17:50:47 25 4
gpt4 key购买 nike

所以,我想设置 __m256i 寄存器的单个位。

比如说,我的 __m256i 包含:[ 1 0 1 0 | 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;
}

关于x86 - 设置 AVX 寄存器(__m256i)中的各个位,需要 "random access"运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39475525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com