ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
x86プロセッサー用のC/C++で、MMXや3DNow!を扱うための独自のデータ型(変数型)。
MMXレジスターは、64ビット長のSIMD演算装置用レジスターである。
通常のintやlongなどと性質の異なるものであるため、このような独自の型が用意されたようである。
当然、MMXなどと無縁の環境に対する移植性はないものの、Microsoft WindowsとPC UNIX(FreeBSDやLinux等)では共通して使えるようである。
Microsoft Visual Studio 2010の場合、mmintrin.hに、次のように定義がある。
typedef union __declspec(intrin_type) _CRT_ALIGN(8) __m64 { unsigned __int64 m64_u64; float m64_f32[2]; __int8 m64_i8[8]; __int16 m64_i16[4]; __int32 m64_i32[2]; __int64 m64_i64; unsigned __int8 m64_u8[8]; unsigned __int16 m64_u16[4]; unsigned __int32 m64_u32[2]; } __m64;
Cの標準機能のみで定義することができないため、Visual C/C++の独自拡張機能を用いて定義されているが、その実体はどうやらunionのようである。
FreeBSDの場合、mmintrin.hに、次のように定義がある。
typedef int __m64 __attribute__ ((__vector_size__ (8), __may_alias__));
Cの標準機能のみで定義することができないため、GCCの独自拡張機能を用いて定義されている。
__vector_size__は、バイト単位で変数のベクトル長を定義するものである。ここでは8バイト(つまり64ビット)である。型はintで定義されているので、各32ビット長、つまり4バイト2台のベクトルとして定義される。
__may_alias__は、この属性を持つ型のオブジェクトへのアクセスは、型に基づく別名解析の対象とされず、代わりにchar型と同様、他の種類のオブジェクトへの別名として定義される。
結果として__m64データ型は、8つの8ビット値、4つの16ビット値、2つの32ビット値、または1つの64ビット値を保持することができる。
__m64は、関数の戻り値やパラメーターとして利用できるが、他の一般的な算術式と共に使うことはできない。
処理系の実装に依存するが、この変数型を扱うための関数が用意されており、これを通してMMXを使うことになる。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます