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
© Copyright 2024 ExpyDoc