2016-10-04 10 views
0

イントリンシックから始めて、私の無知を露呈させるものを打つだけです。ここで私が見ているものの人工バージョン(VS2015)です:インテル®インテリジェント・パック・コマンドの誤解

__m128i test; 

//test.m128i_u16[0] = 127; 
//test.m128i_u16[1] = 128; 
//test.m128i_u16[2] = 129; 
//test.m128i_u16[3] = 130; 
//test.m128i_u16[4] = 131; 
//test.m128i_u16[5] = 132; 
//test.m128i_u16[6] = 133; 
//test.m128i_u16[7] = 134; 

test.m128i_u16[0] = 50; 
test.m128i_u16[1] = 70; 
test.m128i_u16[2] = 90; 
test.m128i_u16[3] = 110; 
test.m128i_u16[4] = 50; 
test.m128i_u16[5] = 70; 
test.m128i_u16[6] = 90; 
test.m128i_u16[7] = 110; 

__m128i result = _mm_packus_epi16 (test, test); 

だから最後のコマンド「変換から16ビット整数を詰め、bは、符号なし飽和を使用して8ビット整数をパックするためには、結果を保存しますin dst "と表示されます。 示すように、私が実行している場合、私は私が期待するものを手に入れる:私は(コメント値セットを使用)上記の入力を交換するならば、私は整数飽和結果になりそうだものを手に入れる、

-  m128i_i8 char[16] 
     [0] 50  char 
     [1] 70  char 
     [2] 90  chara 
     [3] 110  char 
     [4] 50  char 
     [5] 70  char 
     [6] 90  char 
     [7] 110  char 
     [8] 50  char 
     [9] 70  char 
     [10] 90  char 
     [11] 110 char 
     [12] 50  char 
     [13] 70  char 
     [14] 90  char 
     [15] 110 char 

が、: -

m128i_i8  char[16] 
     [0]  127  char 
     [1]  -128 char 
     [2]  -127 char 
     [3]  -126 char 
     [4]  -125 char 
     [5]  -124 char 
     [6]  -123 char 
     [7]  -122 char 
     [8]  127  char 
     [9]  -128 char 
     [10] -127 char 
     [11] -126 char 
     [12] -125 char 
     [13] -124 char 
     [14] -123 char 
     [15] -122 char 

私はここで何が欠けていますか?解釈、間違ったコマンド?

+2

対応する入力と出力が並んでいる(水平または垂直)テーブルを作成すると、あなたの質問はもっと短くて読みやすくなります。 –

答えて

1

符号なしの彩度を行ったにもかかわらず、int8_tではなく、uint8_tの要素を保持しているように結果ベクトルを表示しているようです。 127を超えるすべての値は負の数として表示されます。

0xFFに飽和したものはすべて-1として出力されます。 (0に飽和したものは0として出力されますが、あなたのint16_t入力のどれもが負ではありません)。

また、PACKUSWBは、の入力を明確にしなかった場合には、署名付きとして扱います。