c - _mm_cmpistrm SSE4.2 内在模式

标签 c sse intrinsics

我正在尝试弄清楚如何为 _mm_cmpistrm SSE4.2 内在函数设置“模式”标志。我有一个常规 C 字符串 (char*),正在使用 _mm_lddqu_si128 将其加载到 __m128i 类型中。我将使用无符号字节进行常规字符串比较:

    _SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_EACH

但是我对单位和位掩码的设置感到困惑。以下是 GCC 4.3.2 中 smmintrin.h 中的宏:

    /* These macros specify the output selection in _mm_cmpXstrm ().  */
    #define _SIDD_BIT_MASK          0x00
    #define _SIDD_UNIT_MASK         0x40

我想我明白位掩码是什么:如果两个字符串之间该位置的字符不同,我将在位 0..15 中得到 1。但是单位掩码有什么作用呢?

最佳答案

对于 _SIDD_BIT_MASK,如果字符串相等,您将得到一个全 1 的掩码;如果字符串不相等,则全 0 ;如果您执行 _SIDD_UBYTE_OPS,那么您将返回 16 位(字符串中的每个字符对应一个)。

但是,使用 _SIDD_UNIT_MASK,您将获得相同的掩码,但会扩展为 16 个字节。例如,如果字符串中前两个字符的比较为真,则位 0..15 将全部为 1。位 16..31 表示字符二等。

关于c - _mm_cmpistrm SSE4.2 内在模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6315698/

相关文章:

C 函数刷新所有包含数组的缓存行

c - 在 C 中仅存储 __m128 变量的前 2 个 float

有人可以告诉我以下汇编代码有什么问题吗?出现段错误

c - 将 C 字符串插入链表时出现问题

c++ - 如何从函数返回数组

c - C文件中的头文件路径

simd - _mm_test_all_zeros 的 __m256i 版本

assembly - 使用手写汇编调用 native 代码

optimization - 改进 SSE (SSSE3) YUV 转 RGB 代码

c# - .NET Core 中 gamedev 的浮点确定性