right|thumb|AMD 29000マイクロプロセッサ AMD Am29000(Am29000、Am29kあるいは29kとも)は、AMDの32ビットRISCマイクロプロセッサ製品、またそれから派生した製品群。以下本稿では製品群全体、または製品としてのAm29000につきAm29kという。
この製品群は、1980年代から1990年代にかけて、PostScriptインタプリタと組み合わせて多くのメーカーのレーザープリンターに搭載されるなどRISCチップ市場で最も人気を誇ったアドビが最初に提供したPostScriptインタプリタはAm29000向けに書かれた。。しかし、1995年、AMDはAm29kの開発チームをx86互換チップ開発に異動させ、Am29kシリーズは終焉を迎えた。Am29kの様々なアイデアや回路がAMD K5の開発に使われた。組込応用市場用にはAm80186から派生した186ファミリを投入した。
特長 レジスタ・ウィンドウ Am29kは、 の影響下にあるサン・マイクロシステムズのSPARCやIntel i960と同様、レジスタ・ウィンドウを採用している。これはプロシージャコールを劇的に高速化する技法である。基本的なアイデアは大きなレジスタセットをコールスタックのように使うものである。
元のバークレーの設計もSPARCもi960もレジスタウィンドウのサイズは固定であり性能上の問題を引き起こしていた。たとえば、SPARCではローカル変数をひとつも使用しないルーチンに対しても8本のローカルレジスタと8本の引数引渡しのレジスタが割り当てられウインドウを1面消費する。プロシージャコールが深くなるに伴い使用するウインドウ数が嵩んでウィンドウオーバーフローを引き起こし、性能悪化の原因となっている。この知見を生かし、29kではウィンドウサイズを可変にすることで効率を向上させた。レジスタ・ウィンドウ用に備えられた128本のレジスタにつき、ひとつのプロシージャでは例えば、2本のレジスタをウィンドウとして、ひとつをローカル変数として使い、もうひとつをリターンアドレス格納に使って4本のレジスタのみを消費する。レジスタ・ウインドウとは別に64本のグローバルレジスタも持っており、いずれのプロシージャからも常にアクセスできる。SPARCでは全体で8面程度SPARCのレジスタ・ウィンドウの深さは実装に依存するのレジスタ・ウィンドウを持ち、グローバル用に8本のレジスタを使っている。充分に高度なコンパイラを使うことで、このようなレジスタ構造に適したコードを生成し性能を向上させた。これに対し、Am29kはレジスタ・ウィンドウ・スタックをメモリにまで拡張している。プロシージャコールでレジスタセットを使い切ると自動的にメモリ上のスタックにレジスタを退避する。逆にプロシージャからのリターンでレジスタセットを使い切るとスタックから復帰する。このように、Am29kのレジスタはコールスタックのキャッシュのように機能したトランスピュータの実装などにもスタックトップキャッシュは観られるが、これらはレジスタとしてのアクセス性は提供しておらずフレームレジスタを通じスタックを常に意識する必要がある。
ステータスの格納 他の典型的なCPUでは条件分岐などの判断に供するステータスレジスタを持つが、Am29kはこれを持たず、多数の汎用レジスタのいずれでも条件判断に供することができ、その内容で分岐の可否を判断できる。
遅延実行とブランチターゲットキャッシュ Am29kも多くの初期のRISCと同じく遅延実行方式を採用した。また、ブランチターゲットキャッシュ(BTC)とよばれる512バイトのを持ち、これは過去に分岐先となったアドレスのインスタンスをキャッシュすることにより、分岐の際の性能を向上させた。ファミリの中でも、Am29005ではBTCは実装されず、Am29050では1024バイトに増量されていたAm29050 Microprocessor Datasheet 1994(英語)。
ハーバード・アーキテクチャ Am29kは、命令バスとデータバスを分離したハーバードアーキテクチャを採用した292xxマイクロコントローラファミリでは、命令とデータは同一バスに置かれた。。これは、有限のメモリ帯域を命令フェッチとデータアクセスで分離することで、資源の競合/レイテンシーの悪化を回避しスループットを向上する効果がある。同時に、自己書き換えコードが正しく機能しないなどの問題もあるが、Am29kの主要な応用である組込用途に於いては、自己書き換えコードは不可欠なテクニックではなく問題として顕在化されることは殆どなかった。
シリーズ マイクロプロセッサ Am29000 : MMU内蔵。FPUは別チップ (Am29027) Am29005 : ローコスト版(MMUなし、ブランチターゲットキャッシュなし) Am29030 : 4Kバイト命令キャッシュ内蔵 Am29035 : 8Kバイト命令キャッシュ内蔵 Am29040 : 8Kバイト命令キャッシュ内蔵、4Kバイトデータキャッシュ内蔵 Am29050 : FPU内蔵、1024バイトブランチターゲットキャッシュ内蔵、4エントリ物理アドレスキャッシュ内蔵 マイクロコントローラAMD - Embedded Products Available Literature(英語) Am29200 : 32ビットマイクロコントローラ Am29202 : ローコスト版(IEEE-1284 パラレルI/F内蔵) Am29205 : ローコスト版(16ビットバスインターフェース) Am29240 : 4Kバイト命令キャッシュ内蔵、4Kバイトデータキャッシュ内蔵 Am29243 : DRAM パリティ機能内蔵 Am29245 : ローコスト版、4Kバイト命令キャッシュ内蔵、
その後 Am29050の後継プロセッサは、スーパースカラ、アウト・オブ・オーダー実行、レジスタ・リネーミングなど、その後のマイクロプロセッサで設計・実装される機能が計画されていたEvaluating and Programming the 29K RISC Family Third Edition – DRAFT Mann 1995 20-32。これは最終的に製品にはならなかったが、x86互換プロセッサであるK5に受け継がれ、FPUはそのまま使われ、x86の命令はマイクロコードにより29000ファミリに似た命令に内部的に変換され実行された。
脚注
参考 ロードマップでわかる!当世プロセッサー事情 ― 第122回『CPU黒歴史 対Pentiumのために放棄されたAm29000』