模式为_mm_cmpistrm SSE4.2内在

时间:2011-06-11 11:43:17

标签: 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

我想我理解位掩码是什么:如果两个字符串之间的那个位置的char不同,我将得到1位0..15。但是单位面具做了什么?

1 个答案:

答案 0 :(得分:3)

对于_SIDD_BIT_MASK,如果字符串相等,你将获得一个全1的掩码,如果它们不相等则全部为0;如果你正在做一个_SIDD_UBYTE_OPS那么你会得到16个(一个用于字符串中的每个字符)。

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