1980年にIntelによって導入された8087・コプロセッサは、IBM PCおよびその他のシステム向けの浮動小数点演算を加速するために設計されました。現代のプロセッサはこれらの計算をネイティブに処理しますが、8087は、標準的な8086プロセッサと比較して基本的な算術演算において約100倍の性能向上を達成するために、専用回路とマイクロコードの高度な組み合わせに依存していました。このチップのアーキテクチャは、1,648個の命令を含むマイクロコードROMと、80ビットの値に対する計算を実行するデータパスに分かれています。

8087データパスの機能ブロックの拡大図。
8087のデータパスの詳細なビュー。算術演算に使用される機能ブロックを強調しています。www.righto.com

この図は、第1段落で説明されている80ビットの値に対する計算を実行するデータパスを示しています。

浮動小数点演算は、演算を行う前に数値のバイナリ・ポイントを整列させる必要があるため、整数の計算よりも大幅に複雑です。例えば加算では、指数が小さい方の数値の仮数部を、指数が一致するまで右側にシフトする必要があります。8087は、大規模なビットシフタと先頭ゼロ検出回路を通じてこれを促進します。この回路はゼロビットの数をカウントして、必要なシフト量を決定します。減算のプロセスも同様ですが、負の結果や、標準的な正規化を妨げる結果がゼロになるケースを処理するための追加のロジックが含まれています。

先頭ゼロビット検出用の回路図。
整列に必要なシフト量を決定するために、先頭ゼロビットを検出するために使用される専用回路。www.righto.com

この画像は、浮動小数点の加算および減算中にバイナリ・ポイントを整列させるために使用される先頭ゼロ検出回路を描写しています。

内部的に、8087は15ビットの指数と64ビットの仮数部を特徴とする80ビットの「一時的な実数(temporary real)」形式を使用します。チップは、それぞれがゼロ、有効、特殊、または空としてタグ付けされた8つの内部レジスタのスタックを使用してこれらの値を管理します。処理の中核は、実際の計算を実行する69ビットの整数加算器であり、マイクロコードはレジスタ間のデータフローを管理し、無限大などの特殊なケースを処理し、必要な正規化シフトを実行します。これらの複雑な整列および丸め工程を専用ハードウェアにオフロードすることで、8087はその時代において計算能力の巨大な飛躍を提供しました。

80ビットの一時的な実数形式と内部レジスタ構造の図。
8087は、15ビットの指数と64ビットの仮数部を持つ80ビットの一時的な実数形式を使用します。www.righto.com

この図は、第3段落で言及されている内部の80ビット一時的な実数形式とレジスタスタック構造を示しています。

基本算術演算の一般的なマイクロコードのフローチャート。
算術演算中のデータフローと正規化を管理するために使用されるマイクロコードのロジックを示すフローチャート。www.righto.com

このフローチャートは、データフローの管理や無限大などの特殊なケースの処理におけるマイクロコードの役割を表しています。