_mm_cmpistrm sse4.2内因性のモード
-
26-10-2019 - |
質問
の「モード」フラグを設定する方法を見つけようとしています _mm_cmpistrm SSE4.2内因性。 _mm_lddqu_si128を使用して__m128iタイプにロードしている通常のc文字列(char*)があります。定期的な文字列比較で、署名されていないバイトを使用する予定でした。
_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が2つの文字列間で異なる場合、ビット0..15に1つを取得します。しかし、ユニットマスクは何をしますか?
解決
_sidd_bit_maskの場合、文字列が等しい場合はすべて1のマスクが得られ、不均等な場合はすべて0が取得されます。 _sidd_ubyte_opsを実行している場合は、16を取得します ビット 返された(文字列内の文字ごとに1つ)。
_sidd_unit_maskを使用すると、同じマスクが取得されますが、16に消費されます バイト 代わりは。たとえば、弦の最初の2つの文字の比較がtrueの場合、ビット0..15はすべて1になります。キャラクター2などのビット16..31
所属していません StackOverflow