IA-32 インテル ®
5.2.6. x87 FPU 制御命令
x87 FPU制御命令は、x87 FPUレジスタ・スタックを操作し、x87 FPUステートのセーブとリストア
を行う。
FINCSTP Increment FPU register stack pointer FDECSTP Decrement FPU register stack pointer FFREE Free floating-point register
FINIT Initialize FPU after checking error conditions FNINIT Initialize FPU without checking error conditions
FCLEX Clear floating-point exception flags after checking for error conditions
FNCLEX Clear floating-point exception flags without checking for error conditions FSTCW Store FPU control word after checking error conditions
FNSTCW Store FPU control word without checking error conditions
FLDCW Load FPU control word
FSTENV Store FPU environment after checking error conditions FNSTENV Store FPU environment without checking error conditions
FLDENV Load FPU environment
FSAVE Save FPU state after checking error conditions FNSAVE Save FPU state without checking error conditions
FRSTOR Restore FPU state
FSTSW Store FPU status word after checking error conditions FNSTSW Store FPU status word without checking error conditions
WAIT/FWAIT Wait for FPU
FNOP FPU no operation
5 .3 . x87 F P U および S IM D ステートの管理
Pentium IIプロセッサ・ファミリで、2つのステート管理命令がIA-32アーキテクチャに追加された。
FXSAVE x87 FPUおよびSIMDステートをセーブする。
FXRSTOR x87 FPUおよびSIMDステートをリストアする。
最初は、これらの命令は、x87 FPU(およびMMXテクノロジ)レジスタだけを操作して、x87 FPU およびMMXテクノロジ・ステートの高速セーブとリストアを実行するものであった。Pentium IIIプ ロセッサ・ファミリでSSEが導入されると、これらの命令は、XMMレジスタとMXCSRレジスタの 状態のセーブとリストアも実行するように拡張された(これらの命令についての詳細は、10.5.節
「FXSAVE命令とFXRSTOR命令」を参照のこと)。
5 .4 . S IM D 命令
Pentium IIプロセッサおよびMMXテクノロジPentiumプロセッサ・ファミリから、IA-32プロセッサ がSIMD (Single Instruction, Multiple Data)操作を実行できるようにする3つの拡張命令がIA-32アーキ テクチャに導入された。3つの拡張命令は、MMXテクノロジ、SSE、およびSSE2である。それぞれ の拡張命令は、64ビットMMXテクノロジ・レジスタまたは128ビットXMMレジスタに格納される パックド整数またはパックド浮動小数点データ要素、あるいはその両方のSIMD演算を実行する命令 群で構成される。図5-1.は、3種類のSIMD拡張命令(MMXテクノロジ、SSE、およびSSE2)、各拡 張命令が操作するデータ型、およびMMXテクノロジおよびXMMレジスタ内への各データ型のパッ ク方法をまとめたものである。
MMXテクノロジは、Pentium IIプロセッサおよびMMXテクノロジPentiumプロセッサ・ファミリで
導入された。MMX命令は、MMXテクノロジ・レジスタ内のパックド・バイト、パックド・ワード、
またはパックド・ダブルワード整数のSIMD演算を実行する。これらの命令は、SIMD処理に適した 整数配列および整数データ・ストリームを操作するアプリケーションに効果的である。このような アプリケーションには、写真画像処理、マルチメディア、および通信アプリケーションがある。
SSEは、Pentium IIIプロセッサ・ファミリで導入された。SSEは、XMMレジスタ内のパックド単精 度浮動小数点値とMMXテクノロジ・レジスタ内のパックド整数を操作する。SSEのSIMD整数命令 は、MMXテクノロジ命令セットを拡張したものである。追加されたSSEにより、ステート管理、
キャッシュ制御、およびメモリ・アクセス順序操作を実行できる。SSEは、単精度浮動小数点デー タ要素の配列を操作するアプリケーションを対象としている。このようなアプリケーションには、
3Dジオメトリ、3Dレンダリング、およびビデオ・エンコーディング/デコーディング・アプリケー
ションがある。
図5-1. SIMD拡張命令、レジスタのレイアウト、およびデータ型 4 Packed Word Integers 8 Packed Byte Integers
2 Packed Doubleword Integers MMX Registers
XMM Registers
Quadword MMX Technology
Data Type Register Layout
SIMD Extension
SSE
SSE2
4 Packed Single-Precision Floating-Point Values
2 Packed Double-Precision Floating-Point Values
8 Packed Word Integers 16 Packed Byte Integers
4 Packed Doubleword 2 Quadword Integers Double Quadword Integers
2 Packed Doubleword Integers Quadword
XMM Registers MMX Registers
4 Packed Word Integers 8 Packed Byte Integers
2 Packed Doubleword Integers MMX Registers
Quadword SIMD拡張命令 レジスタのレイアウト データ型
MMXテクノロジ
MMXテクノロジ・レジスタ
8個のパックド・バイト整数 4個のパックド・ワード整数 2個のパックド・ダブルワード整数 クワッドワード
MMXテクノロジ・レジスタ
8個のパックド・バイト整数 4個のパックド・ワード整数 2個のパックド・ダブルワード整数 クワッドワード
XMMレジスタ
4個のパックド 単精度浮動小数点値 MMXテクノロジ・レジスタ
2個のパックド・ダブルワード整数 クワッドワード
2個のパックド
16個のパックド・バイト整数 8個のパックド・ワード整数 4個のパックド・ダブルワード整数 2個のクワッドワード整数 ダブル・クワッドワード
XMMレジスタ
倍精度浮動小数点値
SSE2は、Pentium 4プロセッサで導入された。SSE2は、XMMレジスタ内のパックド倍精度浮動小数 点値と、MMXテクノロジ・レジスタおよびXMMレジスタ内のパックド整数を操作する。SSE2の SIMD整数命令は、IA-32 SIMD演算を次の2点で拡張したものである。(1)新しい128ビットSIMD整 数演算を追加した。(2)MMXテクノロジとSSEで導入されたすべての64ビットSIMD整数演算を拡 張して、128ビットXMMレジスタ内のデータを操作できるようにした。また、SSE2には、新しい キャッシュ制御命令とメモリ・アクセス順序命令も追加された。SSE2は、3Dグラフィックスや科学 データ処理アプリケーションなど、倍精度浮動小数点データ要素の配列を操作するアプリケーショ ンを対象としている。SSE2は128ビット・レジスタ内のパックド整数を操作できるため、マルチメ ディアおよび通信アプリケーションのパフォーマンスも向上する。
MMXテクノロジ、SSE、およびSSE2を組み合わせて使用すれば、整数データ配列、浮動小数点デー タ配列、ストリーミング整数データ、およびストリーミング浮動小数点データに対して、さまざま なSIMD演算を実行できる。これらの操作を効果的に使用すれば、IA-32プロセッサ上で実行される アプリケーションのパフォーマンスが大きく向上する。
以下の各節では、IA-32アーキテクチャに導入された3種類のSIMD拡張命令(MMXテクノロジ、
SSE、およびSSE2)について簡単に説明する。
5 .5 . M M X
®命令
MMX命令は、MMXテクノロジ対応PentiumプロセッサとPentium IIプロセッサでIA-32アーキテク チャに導入されたSIMD命令である。MMX命令は、MMXテクノロジ・レジスタまたは汎用レジス タ内のメモリでパックド・バイト、パックド・ワード、パックド・ダブルワード、またはクワッド ワード整数オペランドを操作する(第9章「インテル® MMX®テクノロジによるプログラミング」を 参照)。
MMX命令は、MMXテクノロジをサポートするIA-32プロセッサ上でのみ実行できる。プロセッサ がMMX命令をサポートしているかどうかは、CPUID命令によって検出できる(『IA-32インテル® アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル、中巻』の第3章「命令セット・リ ファレンス」のCPUID命令の説明を参照)。
MMXテクノロジ・レジスタ内のパックド整数データを操作する、追加のSIMD命令が、SSEとSSE2
で導入された。
5.5.1. データ転送命令
データ転送命令は、MMXテクノロジ・レジスタ同士およびMMXテクノロジ・レジスタとメモリの 間で、ダブルワードおよびクワッドワード・オペランドを転送する。
MOVD Move doubleword.
MOVQ Move quadword.