The stack circuitry of the Intel 8087 floating point chip, reverse-engineered

2025/12/10 3:16

The stack circuitry of the Intel 8087 floating point chip, reverse-engineered

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

インテル 8087は、1980年に導入されたパイオニア的な浮動小数点共処理器であり、初期のマイクロプロセッサよりも最大100倍高速でFP演算を実行しました。5 mm × 6 mm のコンパクトなダイ上に40ピンの外部接続があり、トランジスタ数は40,000〜75,000個でした。このチップのデータパスは80ビット値(64ビット有効桁、15ビット指数、1ビット符号)を扱い、Stack Top ポインタとオフセットロジックでアクセスされる8レジスタスタックに格納されていました。π などの重要定数はコンスタント ROM に保持され、命令セットは半アナログマイクロコード ROM にエンコードされ、各トランジスタに対して4つのサイズを使って2ビットが保存されます。レジスタタグ(各2ビット)は状態(空、ゼロ、有効、特殊)を示し、16ビットの Tag Word として状態保存/ロード時にアクセス可能でした。

デコーダ回路は8個の3入力 NOR ゲートと、抵抗値と RC 遅延を軽減するためのダブルポリシリコン/メタル選択線を使用しました。スタック制御には、ポインタ算術用のキャリー・ローケア加算器と増減ロジック用のトグルフリップフロップがあり、すべてマイクロコード信号で駆動されました。スタックは8エントリしかなく、オーバーフローすると ST ポインタがラップし、下位レジスタを上書きします。タグチェックにより無効操作例外が発生します。

スタックのオーバーフロー/アンダーフロー処理における設計欠陥は、ソフトウェア側で頻繁な回避策を必要としました。関数呼び出し前に完全なスタックダンプを行い、コンパイラハック(例:GCC では x87 サポートのため約3,000 行の追加)が必要でした。1990 年代にはインテルが SSE(後の AVX)を導入し、非スタックレジスタと並列演算を実装したため、8087 のスタック命令はほぼ廃止されました。

8087 は Rafi Nave を率いる小規模なイスラエルチームによって開発され、初期の歩留まりは低く(約 4 インチウェーハあたり 2 枚の動作ダイ)でしたが、時にはインテルにとって最も収益性の高い製品ラインとなりました。この成功によりインテル イスラエルは主要なテック雇用主として確立され、後続の CPU(80486 など)に統合された FP ユニットへの道が開かれました。8087 のスタックアーキテクチャの遺産は、現代のデバイス全般にわたる浮動小数点システムに影響を与え続けていますが、現在の CPU は独自の専用 FP ユニットを実装しており、元のハードウェアに直接依存することはほとんどありません。

本文

浮動小数点演算を行う際、初期のマイクロプロセッサは非常に遅かった。
しかし1980年にインテルが8087浮動小数点共処理装置を導入し、浮動小数点演算速度を最大100倍高速化しました。これにより、AutoCAD、スプレッドシート、フライトシミュレータなどのIBM PCアプリケーションで大きな恩恵が得られました。8087は非常に効果的だったため、本当の意味で今日のコンピュータでも8087ベースの浮動小数点体系を採用しています。


チップ概要

  • 複雑さ – 4万〜7.5万トランジスタ(情報源による)
  • ダイサイズ – 5 mm × 6 mm。ダイは機能ブロックに分割されています:
    • データパス – 80ビット浮動小数点値の計算を行います。
    • 定数ROM – πなど重要な定数を保持します。
    • レジスタスタック – スタックとして機能する8つのレジスタとスタック制御回路。
  • 命令セット – ダイ中央にある大きなマイクロコードROMで定義されています。
    • ROMは半アナログ構成:4種類のトランジスタサイズを使い、1トランジスタあたり2ビットを格納します。
    • 実行フロー:命令デコード → マイクロインストラクション列 → 制御信号。

レジスタスタック

8087はレジスタを スタック として配置し、平坦で個別にアドレス指定できるレジスタとは異なります。

  • スタック操作

    • PUSH – スタックトップ(ST)ポインタを減算し、新しいトップレジスタへ値を書き込みます。
    • POP – スタックトップから値をコピーして、ST を増算します。
  • ST 相対アクセス – 命令は現在のトップからのオフセットでレジスタを参照できます(例:トップと2つ下にあるレジスタの和)。

  • 意図されたメリット – コンパイラ設計を簡素化し、関数呼び出しを効率化することが狙いでしたが、実際には問題を引き起こしました。


レジスタストレージ

  • 80ビット浮動小数点値は 静的RAMセル に格納されます。

    • 二つのインバータがフィードバックループを形成し、0または1を保持します。
    • インバータペアは一方のラインを低く引くことで反転できます。
  • 八つのレジスタは 8 × 80 のセル格子に配置されます。

  • アクセス方法:

    • ビットライン – 行ごとに2本設置し、各ビットへの読み書きアクセスを提供します。
    • ワードライン – 80ビット列を有効化し、160個のパストランジスタでビットラインと選択インバータを接続します。

フィジカルレイヤ

  1. ボトム層 – シリコン(ドーピング領域が水平・垂直配線)
  2. ポリシリコン層 – ドーピングしたシリコン上を横断する際のトランジスタゲート
  3. メタル層 – 水平ワイヤで回路を結合し、低抵抗選択ラインも供給

タグビット

  • 各レジスタは 2 ビットのタグを持ち、空、ゼロ、有効、または特殊値(無限大など)かどうかを示します。
  • プログラマにとってはほぼ意味がなく、内部的には性能最適化のために使用されます。
  • 16ビット「タグワード」は8087 の状態として保存・ロードできます。

デコーダとスタック制御

  • デコーダ – 3 入力 NOR ゲートで 8 レジスタを 3 ビット値から選択します。

  • セレクトライン – ポリシリコン(高抵抗)とメタル(低抵抗)の両方で走行し、RC 遅延を抑制します。

  • スタック制御回路 – スタックトップ(TOS)を追跡

    • PUSH / POP の増減ロジック
    • ST 相対アクセスのオフセット加算
    • 高速 TOS 計算のためにキャリー・ルックアヘッド加算器、インクリメント/デクリメントはトグルフリップフロップネットワークで実装

欠点

  • スタックオーバーフロー – エントリが 8 個しかないため、第9 個をプッシュするとポインタがラップし、底部のレジスタを書き換えます。

    • オーバーフローは「空でない」レジスタへの PUSH によって検出され、無効操作例外が発生します。
    • ソフトウェア側でオーバーフローを処理する必要があり、信頼性の高い実装が難しいでした。
  • コンパイラ問題 – 平坦レジスタの方が扱いやすく、スタックをエミュレートすることで大きなオーバーヘッドが発生しました。


レガシー

  • 8087 のスタックモデルは実際には多くの課題を抱えており、解決策というより問題点が目立ちました。

  • 後続のインテルプロセッサ(SSE、AVX)では非スタックレジスタと並列演算が導入され、x87 スタックは性能面で時代遅れとなりました。

  • それでも8087 は大成功を収めました:

    • 時にはインテルの最も利益率の高い製品ラインになった
    • インテル・イスラエルがトップテクノロジー企業として名を馳せるきっかけに
    • スマートフォンからメインフレームまで、ほぼすべての現代プロセッサで浮動小数点ハードウェアに影響を与えた

さらに読む

  • ダイ、ROM、ビットシフター、定数に関する著者の記事
  • 著者を Bluesky(@righto.com)、Mastodon(@[email protected])でフォロー、RSS で更新情報を受け取る

同じ日のほかのニュース

一覧に戻る →

2025/12/10 0:00

Show HN: Gemini Pro 3 hallucinates the HN front page 10 years from now

## Japanese Translation: ## 改訂版まとめ この記事では、最近のさまざまな技術的マイルストーンとリリースをレビューしています。 1. **SpaceX**:Starship HLS‑9 が Sea of Tranquility からテレメトリーを正常に送信しました。 2. **Linux Kernel**:バージョン 7.4 に完全な上流化された 100 % Rust カーネルが含まれています。 3. **開発者プラクティス**:生のコードを書くこととコンパイラプロンプトを使用することを対比した議論があります。 4. **人工知能**:LLaMA‑12 7B モデルは WebAssembly を介してコンタクトレンズ上で動作し、YC シード付きスタートアップ Nia は自律型コーディングエージェントを導入しています。 5. **教育ツール**:AlgoDrill は LeetCode パターンの強化に向けたインタラクティブなプラットフォームを提供します。 6. **エネルギー研究**:ITER の炉は 20 分間連続で正のエネルギー収支を達成しました。 7. **ハードウェア修理**:2024 年製 Framework Laptop を復元する方法を詳細に説明したレトロスペクティブガイドがあります。 8. **クラウドサービス**:Google は Gemini Cloud Services の提供を終了します。 9. **グラフィックスプログラミング**:WebGPU 2.0 により第 5 次元の可視化が可能になりました。 10. **Linux ディストリビューション**:Debian がバージョン 18 “Trixie” をリリースしました。 11. **プログラミング言語提案**:`sudo` ユーティリティを Zig で書き直す提案が提示されています。 この記事はこれらの出来事を文脈に置き、各々が過去の成功にどのように基づいているかを指摘し、その進歩が今後の開発実践、AI 統合、およびクラウドサービス戦略に影響を与えることを示唆しています。

2025/12/10 2:08

PeerTube is recognized as a digital public good by Digital Public Goods Alliance

## Japanese Translation: ### Summary PeerTubeはプラットフォームに依存しない多言語対応のビデオホスティングおよびライブストリーミングソリューションで、正式にデジタル公共財(DPG ID0092472)として承認されています。2025年10月7日にRicardo Torresによるレビューが行われ、Platform Independence評価を含むすべてのDPG標準要件を満たしていることが確認されました。これにより、ベンダーロックインなしで任意のインフラ上で実行できることが保証されています。ソースコードはGitHub(`github.com/Chocobozzz/PeerTube`)とFramagit(`framagit.org/framasoft/peertube`)で公開されており、透明性とコミュニティの貢献を確保しています。PeerTubeは44以上の言語(エスペラント、アラビア語、中国語簡体字・繁体字、日本語、韓国語、スペイン語、フランス語、ドイツ語、イタリア語、ポルトガル語、ロシア語など)をサポートし、フランスの教育省からイタリアの国家研究評議会、複数のドイツ大学、Blender、Debianプロジェクト、および活動家グループまで、多様な組織で既に利用されています。承認は2026年10月7日まで有効であり、毎年自己申告による使用状況更新が求められます。この推奨は、機関やオープンソースコミュニティが分散型ビデオプラットフォームを採用することを促進し、メディアホスティングの風景をよりオープンで多言語化、ベンダー非依存な解決策へとシフトさせる可能性があります。

2025/12/10 5:33

Django: what’s new in 6.0

## Japanese Translation: --- ## Django 6.0 – 主なリリースハイライト *リリース日 2025‑12‑03* | エリア | 変更点 | 意義 | |------|--------------|----------------| | **テンプレート** | 新しい `{% partialdef %}` / `{% endpartialdef %}` タグで、テンプレートを再利用可能なフラグメントに分割し、インラインまたは別途レンダリングでき、htmx とも相性が良い。 | テンプレートの DRY 化、ボイラープレート削減、コンポーネント再利用の容易化。 | | **バックグラウンドタスク** | 組み込み「Tasks」フレームワーク: `@task` デコレーター + `Task.enqueue()` API。組み込みバックエンド(`ImmediateBackend`、`DummyBackend`)があり、実稼働ではサードパーティパッケージ(例: `django-tasks` の `DatabaseBackend`)が必要。 | 単純なジョブに対して外部タスクライブラリの必要性を排除しつつ、実稼働時の柔軟性は維持。 | | **セキュリティ** | `ContentSecurityPolicyMiddleware` を追加。 `SECURE_CSP` と `SECURE_CSP_REPORT_ONLY` で設定可能。ノンスは自動生成され、テンプレート内では `{% csp_nonce %}`(`nonce="{{ csp_nonce }}"`)で使用できる。 | 自動ノンス処理付きの CSP サポートを組み込み、XSS リスクをデフォルトで低減。 | | **メール** | Django のメール API が Python の `email.message.EmailMessage` を利用するように変更。 `EmailMessage.send()` は内部でこの API に変換し、インライン添付は `MIMEPart` オブジェクトで追加可能。 | 標準ライブラリ互換のモダンなメール処理と簡易的な添付サポート。 | | **Mail API の非推奨** | `django.core.mail` API ではキーワード専用引数が必須となり、位置オプションパラメータは警告を出し将来的にエラーになる。 | より明確な API 使用を促進し、コードの未来保証を実現。 | | **シェル** | 自動インポートが拡張され、 `settings`、`connection`、`models`、`reset_queries`、`functions`、`timezone` が追加。 | もっと高速で便利な対話型開発環境。 | | **ORM** | • 動的フィールド(`db_default`、`GeneratedField`)は `save()` 後に SQL RETURNING を通じてリフレッシュされる;未対応バックエンドでは次回アクセス時まで遅延。<br>• `StringAgg` 集約がすべてのサポートデータベースで動作;文字列リテラル区切りは `Value()` で包む必要。<br>• デフォルト主キー型が `BigAutoField` に変更され、新規プロジェクトでは `DEFAULT_AUTO_FIELD` を設定しなくなる。 | モデル定義の簡素化、パフォーマンス向上、大規模アプリでの PK 終了防止。 | | **テンプレート変数 & タグ** | `forloop.length` が追加され、ループ長にアクセス可能;更新された `querystring` タグは `?` で接頭辞し、複数位置引数を受け取り、重複時には優先順位でマージ。 | より表現力豊かなテンプレートロジックとクリーンなクエリ文字列処理。 | | **コミュニティ** | Django 6.0 に 174 人の貢献者が参加。リリースノートではアップグレード準備を強調し、開発者に新機能を試すよう呼びかける;今後のリリースでタスクバックエンドや CSP 機能が拡張される可能性。 | 健全なコミュニティサポートとさらなる改善へのロードマップを示唆。 | **まとめ:** Django 6.0 は、再利用可能なテンプレートフラグメント、オプションの組み込みタスクシステム、ノンス付き CSP ミドルウェア、モダン化されたメール API など、実務で即使える改善を提供します。さらに ORM の強化、シェルの利便性向上、旧パターンの非推奨により、ボイラープレート削減・セキュリティ向上・大規模プロジェクトの将来準備が実現されます。 ---

The stack circuitry of the Intel 8087 floating point chip, reverse-engineered | そっか~ニュース