Godson-3のqemu支援命令セット

Godson-3はx86の命令実行ユニットをMIPS命令で駆動するプロセサと要約できる。(他にreconfigurableなチップ間ネットワークなどx86 specificでない特徴もある)
MICRO誌の"Godson-3: A Scalable Multicore RISC Processor with x86 Emulation"にある。
評価は同じGodsonでMIPSバイナリとx86バイナリを比較することで行われ、EEMBCで9割程度の性能を達成している。もっとも、他のベンチマークは3割とか5割といった性能のものもあり、何より既存のx86MIPSとは比較していない。

EFlags生成とフラグベースのジャンプ

もっともわかりやすいx86機能はALUでのフラグ生成だろう。これはSETFLAGプレフィクスによって発動し、後続する演算命令の結果によって(ハードウェアで)EFlagsを更新する。
x86SUBとかx86JLEのような合成済の命令も提供する。

アドレッシングモードの追加

Godson-3はx86互換のAGUを持つため、x86にあるscaleアドレスに対応している。

境界チェックの強制

bound registerによる境界チェックを強制し、x86のセグメント方式に適応している。

FPUスタックとlong doubleのサポート

要するにx87が丸ごと含まれている。これは、一種のレジスタローテーションとして実現されている。
また、通常のdoubleとの変換命令も含む。

x86スタイルの乗算命令

MIPSは乗算専用レジスタを持つが、Godsonは汎用レジスタに対しても乗算の結果を格納できる。

バイト処理命令

RISCプロセサは通常ワード単位の処理以外を提供しないが、x86では部分レジスタとしてレジスタの下位8bitだけを更新したり、アラインされていないデータにアクセスできる。
Godson-3では、レジスタの任意のバイト位置を操作できる命令を追加している。

MMX, SSE, ...のサポート

これらも、直接的に対応するMIPS命令を含んでいる。
この手法はCrusoeでも利用されていると考えられている。

CAM命令

CAM(Content Addressable Memory)を直接サポートする命令を追加している。Godson-3のCAMは64エントリであり、専用の命令によってlookupできる。
記事では、CAM命令は間接命令の実装に利用されることになっている。つまり、qemuがバイナリ変換を行うと実際の実行コードのアドレスは不明になるが、そのアドレスの変換をCAM命令を使って行う。
CAMにはprocess-idフィールドがあるとされていて、もしかしたらコンテキストスイッチでの保存対象外としているかもしれない。

コード領域への書き込みのサポート

通常のRISCプロセサでは、コード領域への書き込みを行った後明示的にキャッシュをフラッシュする必要が有るが、Godson-3はコード領域への書き込みも常に一貫性を保つようにデザインされている。
qemuのようにバイナリを動的に生成するプログラムでは有利に働くかもしれない。

将来性

現在のx86プロセサも、内部RISC + x86の実行ユニットという構成であることを考えると、このような構成は現実解としては有効かもしれない。
しかし、実際のプロセサとしてみた場合どの程度現実的なのかはなんともいえない。Godson-3はHPCやその他高性能向けのアプリケーション方面に開発されたらしいが、ならばMIPSに特化して電力効率を狙う方が通常の感覚に思える。x86のための追加ハードウェアで数パーセントの損をしている。(さもなくば、Godson-3向けのGCCを作らなければならないし、実際問題としてx86のコードを実行してもMIPSのそれよりもパフォーマンスは出ていない。)