100 likes | 223 Views
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 非対応のアプリケーションを両方用意する ソフトウェア工学的には楽 アプリケーション実行中に、アルゴリズムを切り替える
E N D
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