gpt4 book ai didi

sse - 使用 AVX/AVX2/SSE __m128i 将所有负字节设置为 -128 (0x80) 并保留所有其他字节

转载 作者:行者123 更新时间:2023-12-05 08:38:32 30 4
gpt4 key购买 nike

基本上我想做的是获取一个 __m128i 寄存器并将每个负字节的值设置为 -128 (0x80) 并且不更改任何正值。

确切的是:

signed char __m128_as_char_arr[16] = {some data};
for(int i = 0; i < 16; i++) {
if (__m128_as_char_arr[i] < 0) { //alternative __m128_as_char_arr[i] & 0x80
__m128_as_char_arr[i] = 0x80;
}

}

我认为最好的方法是:

__m128i v = some data;
int mask = _mm_movemask_epi8(_mm_cmpgt_epi8(_mm_set1_epi8(0xff), v));

// use mask in some way to only set chars with 1s bit set

但我不知道 (1) 使用什么指令来仅设置与 mask 相关的字节以及 (2) 是否有更好的方法来做到这一点(要么没有掩码全部或更好的方法来生成掩码)。

最佳答案

您可以将值视为无符号并使用最小运算(_mm_min_epu8 ),例如

v = _mm_min_epu8(v, _mm_set1_epi8(128));

这不仅是一条廉价指令,而且适用于 SSE2 及更高版本。

关于sse - 使用 AVX/AVX2/SSE __m128i 将所有负字节设置为 -128 (0x80) 并保留所有其他字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62587929/

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