• 検索結果がありません。

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.