thumb|right|150px|モトローラ 68881 FPU
MC68881(68881)は68020ないし68030用FPUである。コンピュータにこのチップを加えることはコンピュータのコストを実質的に押し上げることになるが、これにより浮動小数点数値演算を高速に処理できる。当時、このチップは科学演算、数学演算に対して大きな役割を果たした。
概要 68020と68030は単独の68881チップを使うという前提で設計された。この命令セットは予約済みの"F-line"命令を使った。16進数のFで始まっているすべての命令コードは、形式上は内部割込みを発生する「トラップ命令」である。通常トラップ命令はオペレーティングシステム (OS) を制御するのに用いられている。もし、FPUである68881がシステム上に存在したならば、MPUは内部割込みを発生するのではなく、FPUにより命令を実行する。FPUが無ければMPUは内部割込みを発生し、OSはそれをとらえて、例外処理で整数演算命令で作られたを呼び出すか、プログラムをエラーで中断する。
アーキテクチャ 68881には、8つの96ビット長データレジスタ96ビットパック10進数実数形式が演算可能である。があり、80ビット拡張精度形式など7種類の数値表現、すなわちIEEE浮動小数点標準「ANSI-IEEE 754-1985」として定義される単精度、倍精度、そして拡張倍精度などの浮動小数点数を扱う。68881は特に浮動小数点演算に特化しており、汎用CPUとして設計されていない。例えば、命令がアドレス計算を行うときは、68881の制御を行う前にメインCPUが計算する。
CPU/FPUのペアはこのように同時に実行できるように設計されている。CPUが68881の命令を受けると、CPUはFPUにその命令に必要なオペランドをすべて引き渡す。次にFPUはCPUをリリースし、CPUは次の命令を実行する。
MC68882
thumb|right|150px|モトローラ 68882 FPU MC68882 (68882) は68881の改良バージョンで、パイプラインの改善や高クロック化が行われている。命令セットは68881と同一であり、なおかつピン・コンパチブルとなっている。一方、FSAVE命令による退避情報が32バイト増加し(アイドル・フレーム、ビジー・フレーム共)、演算例外処理時のタイミング制約条件が厳しくなっている。アイドル・フレームは、68881の28バイトに対し68882が60バイト、ビジー・フレームは、68881の184バイトに対し68882が216バイトと増加しているため、FSAVE命令で退避されたスタック上の情報を参照する例外処理ハンドラ作成時、オフセット・アドレスに注意が必要となる。MC68882使用時は、同一例外によって例外処理ハンドラが繰り返し実行されてしまう事態を回避するため、例外処理ハンドラでFSAVE命令を実行するタイミング、FRESTORE命令を実行するタイミング、BIUフラグ(ビット31~0)のビット27 EXC_PENDビットを1にセットするタイミングなどが細かく指定されている。モトローラは、同じクロック速度で同じ命令を実行すると68881より40%以上速くなるとうたっていたが、 。
実装例 68881ないし68882FPUが搭載されたコンピュータとしては、サン・マイクロシステムズのSun-3、Apple ComputerのMacintosh IIや、コモドールのAmiga 3000などがある。Amigaのサードパーティーの中には、68000にメモリマップされた周辺機器として、68881および68882を使ったものもある。
なお後続ファミリのMC68040プロセッサは、FPUを内蔵したものとして開発された。68881のほとんどの命令と数値表現モードはハードウェアでサポートされていたが、一部サポートされないものもあった。これらはソフトウェアパッケージでエミュレーションを行うことでサポートした。
機能表 68881 155,000 トランジスタ 16MHz バージョン 160 KFLOPS 20MHz バージョン 192 KFLOPS 25MHz バージョン 240 KFLOPS
68882 176,000 トランジスタ 25MHz バージョン 264 KFLOPS 33MHz バージョン 352 KFLOPS 40MHz バージョン 422 KFLOPS 50MHz バージョン 528 KFLOPS
68040 25MHz FPU 3.500 MFLOPS 33MHz FPU 4.662 MFLOPS 40MHz FPU 5.600 MFLOPS
これらの表はcomp.sys.m68k FAQから引用したものである。68882の16MHzと20MHzについては製造はされたが、リストにはない。
脚注
注釈
参考文献
外部リンク Motorola MC68000 Family Programmer's Reference Manual comp.sys.m68k FAQ