Chapter Eleven The MMX Instruction Set

Chapter Eleven
The MMX Instruction Set
さだ
11.1 Chapter Overview
• MMX
– マルチメディアアプリケーション用に追加され
た57命令
– 今ではほとんどのCPUが対応している
– 現在アセンブラプログラマが活躍できる数少
ない分野
11.2 Determining if a CPU Supports
the MMX Instruction Set
• CPU
• MMX対応のと、MMX非対応の
アプリケーションを両方用意する
– ソフトウェア工学的には楽
• アプリケーション実行中に、アル
ゴリズムを切り替える
– CPUがMMX対応かどうかを、
CPUIDを取得して判断する
– もし23ビット目がONであれば
MMXに対応している
11.3 The MMX Programming
Environment
• MMX対応になって追加されたもの
– Eight MMX registers (MM0..MM7).
– Four MMX data types (packed bytes, packed
words, packed double words, and quad word).
– 57 MMX Instructions.
11.3.1 The MMX Registers
• レジスタ
– MM0 ~ MM7、64ビットで8つ、
データ専用
• FPUレジスタにオーバレイして
いる
– FPU命令と同時に使用できない
– FPUレジスタを退避するのはコス
トが大きい
– EMMS (Exit MMX Machine
State) 命令を実行するのは50ク
ロックもかかる
– FPUとMMXを頻繁に切り替える
のはよくない!
• なぜ、こんな仕様に?
– 従来のOSを変更する必要がないため
– コンテキストスイッチ時に、OSはMMXレジスタをFPU
レジスタだと思って保存してくれる
– Intelとしてはナイスアイディアだったらしい
• とはいえ、OSもすぐに進化してMMXをサポート
– 結局、上記のメリットは短期間しかなかった
– 今となっては、FPUとMMXを同時に利用できないデメ
リットのほうが大きい
11.3.2 The MMX Data Types
• 64ビットのレジスタを2,4,8の
Packed Bytesに分けて利用
– 一応、そのまま分けずに利用
できるが、general ではない
• Packed Bytes に並列に命令
を実行可能
– SIMD (Single Instruction
Multiple Data)
11.4 The Purpose of the MMX
Instruction Set
• SIMD
– 音楽や映像など、大きなデータに対して計算
するような用途に向いている
– MMXは何でも計算速度を向上させるわけで
はない
11.5 Saturation Arithmetic and
Wraparound Mode
• Wraparound Mode
– 桁溢れが切り捨て
– 音の増幅などで効果的
– 例:FF + 02 = 101 ⇒ 01
• Saturation Mode
– 値が丸められる
– 画像の光度増などで効果的
– 例:FF + 02 ⇒ FF
11.6 MMX Instruction Operands
• MMX命令の基本形
– mmxInstr( source, dest );
• Destはほぼ全てMMXレジスタ
– mmxInstr( mmi, mmi ); // i=0..7
– mmxInstr( mem, mmi ); // i=0..7