2

_mm_cmpistrmSSE4.2組み込みの「モード」フラグを設定する方法を理解しようとしています。_mm_lddqu_si128を使用して__m128iタイプにロードしている通常のC文字列(char *)があります。通常の文字列比較で符号なしバイトを使用する予定でした。

    _SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_EACH

しかし、ユニットとビットマスクの設定について混乱しています。GCC4.3.2のsmmintrin.hのマクロは次のとおりです。

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

私はビットマスクが何であるかを理解していると思います。その位置の文字が2つの文字列間で異なる場合、ビット0..15で1を取得します。しかし、ユニットマスクは何をしますか?

4

1 に答える 1

3

_SIDD_BIT_MASKの場合、文字列が等しい場合はすべて1、等しくない場合はすべて0のマスクを取得します。_SIDD_UBYTE_OPSを実行している場合は、16ビットが返されます(文字列の各文字に1つ)。

ただし、_SIDD_UNIT_MASKを使用すると、同じマスクを取得できますが、代わりに16バイトに消費されます。たとえば、文字列の最初の2文字の比較が真の場合、ビット0..15はすべて1になります。また、文字2などのビット16..31。

于 2011-06-11T12:33:59.477 に答える