2

我试图弄清楚如何为_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。但是单位掩码有什么作用?

4

1 回答 1

3

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

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

于 2011-06-11T12:33:59.477 回答