Intel 8087のFSCALE命令、単純に見えて140超のマイクロ命令を要する複雑さ

Microcode in Intel's 8087 floating-point chip: the scale instruction

Intel 8087のFSCALE命令、単純に見えて140超のマイクロ命令を要する複雑さ

Intel 8087浮動小数点コプロセッサのFSCALE命令をマイクロコードレベルで解析。2のべき乗によるスケーリングは一見単純だが、実際には140以上のマイクロ命令と3段階のサブルーチンコールを駆使し、ゼロやNaN、無限大などの特殊ケースを処理している。Opcode Collectiveによるリバースエンジニアリングの一環として、シフタや加算器、指数変換器など8087の興味深い回路と隠れた機能を明らかにする。

FSCALEは単純でほとんど自明な命令だと思っていた。ネタバレ:単純ではない。FSCALEは140以上のマイクロ命令と3段階のサブルーチンコールを使い、多くの特殊ケースを処理している。
  1. garganzol

    8087による数学演算の100倍の速度向上は過大評価ではない。当時、数学に依存するアプリにとってその差は凄まじかった。私は80286マシンでこれを直接体験したが、計算結果が3秒対300秒だった。

    8087命令セットの優れた特徴の一つは、コードストリーム内でx86命令と交互に配置できるため、2つのプロセッサチップに同時にアクセスして並列動作させられることだ。この組み合わせは、ハードウェア支援によるコード並列化の可能性を秘めた、真の非対称マルチプロセッサシステムを形成する。思慮深い命令スケジューリングを用いれば、8087が実行する浮動小数点演算は、通常の整数x86コードと並行して動作する。

  2. cogman10

    x87は本当に奇妙なアーキテクチャだ。科学計算機用のチップを設計するのと同じ方法で設計された。まあ、HPのRPN電卓にはほぼ完璧に適合する。

    しかし、コンパイラがターゲットにするには、あまりにも苦痛だ。他のほとんどすべてのCPUの動作方法とは大きく異なる。CPUとコンパイラの両方が、可能な限りx87を避け、代わりに通常のSIMD(SSE/AVX)を使いたがるのには理由がある。

    また、あの恣意的な「ああ、レジスタは80ビット幅だ」というのも、「その数字はどこから来たんだ?」という奇妙さの一つだ。

  3. kens

    8087に関する質問について、著者です...

  4. finn888

    単純なスケール命令から140のマイクロ命令への飛躍は、特殊ケースの仕組みをずっと具体的にしてくれる。

この日のほかの記事

2026-09-12