__m64

読み:アンダースコア・アンダースコア・エムろくじゅうよん
外語:__m64 英語
品詞:名詞

x86プロセッサー用のC/C++で、MMX3DNow!を扱うための独自のデータ型(変数型)。

目次

MMXレジスターは、64ビット長のSIMD演算装置用レジスターである。

通常のintやlongなどと性質の異なるものであるため、このような独自の型が用意されたようである。

当然、MMXなどと無縁の環境に対する移植性はないものの、Microsoft WindowsPC UNIX(FreeBSDLinux等)では共通して使えるようである。

仕様

Windows

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

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を使うことになる。

用語の所属
データ型
関連する用語
MMX
__m128
__m256

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club