2011-08-01 6 views
2

私は、次のコマンドを使用して試してみた:私のintに何が問題なのですか?

__m128i b = _mm_set_epi32 (y, y, x, x); 

yとxはint型です。 http://msdn.microsoft.com/en-us/library/019beekt.aspx:私はそれぞれ32ビットの4つの整数(私は、彼らがここで言うことだと思うようにBを意図した[2]

符号なし__int64:私はbが型であることがわかりデバッガを実行

私のコードで何が絡んでいるのか分かりますか?

おかげ

+0

what lang?正しくタグしてください – JonH

+0

あなたはどの言語を使用していますか?タグを使用して質問に答えてください – Mark

+1

'_mm_set_epi32'は無関係です。 'b'の型は、' __m128i'がtypedefされるものであれば何でも構いません。 '_mm_set_epi32'は' b'の型を変更することはできませんので、 'b'の型が期待どおりでなければ' _mm_set_epi32'を見ないでください。 – delnan

答えて

3

私はここでの問題が表示されない - 128ビットの整数は、2つの64ビット整数で表現され、SSEの最大のネイティブ型外であるCPUが処理できる64ビットのIntelを登録します。

デバッガでは、typedefedまたはmacro'd型ではなく、「実際」の型が表示される可能性があります。

+1

私は参照してください。ありがとうございました! –

+1

'__m128i'が配列​​型のtypedef-nameだった場合、配列は代入可能/コピー初期化可能ではないので、上記のコードはコンパイルされません。 '__m128i'はおそらくtypedef-nameではなく、32ビット整数の4倍を表し、' unsigned __int64 [2] 'としてデバッガに表示されるようなインプリメンテーション固有の型です。デバッガのバグフィーチャであり、 '__m128i'の真の性質とはほとんど関係がありません。 – AnT

0

Typedefsはエイリアスです。オッズは良好です。デバッガは、__m128iのエイリアス化された値を表示しています。 Cでは、新しい型を定義する唯一の実際の方法はstructキーワードを使用することです。他のすべてのテクニック(typedefなど)は、それらの等価物で置き換えられる型エイリアスにつながります。

あなたが想定していたものと違った表示をしている以外の問題はありますか?

関連する問題