Rev2の特徴
(0)
- このページは、rev1を知らない人にはあまり役立たないかも・・・。
(1)
- Fxxレジスタの導入:
- 浮動小数点レジスタが追加されました。F00~F3Fがあります。
- レジスタの使い方:
- レジスタの使い方が少し変わりました(osecpu112d以降)。
- R00~R27 : ローカル整数レジスタ(40本)
- R28~R2B : グローバル整数レジスタ・アプリ用(4本)
- R2C~R2F : グローバル整数レジスタ・システム用(4本)
- R30~R3B : テンポラリ整数レジスタ、引数・返値にも使います(12本)
- R3C~R3F : リザーブ(R3FはimmやCMPcc慣用句などで使う特別なレジスタ)
- P00 : ベースポインタ
- P01~P27 : ローカルポインタレジスタ(39本)
- P28~P2B : グローバルポインタレジスタ・アプリ用(4本)
- P2C~P2F : グローバルポインタレジスタ・システム用(4本)
- P30~P3B : テンポラリポインタレジスタ、引数・返値にも使います(12本)
- P3C~P3F : リザーブ(P3Fは分岐命令やヌルポインタなどに使う特別なレジスタ)
- F00~F27 : ローカル浮動小数点レジスタ(40本)
- F28~F2B : グローバル浮動小数点レジスタ・アプリ用(4本)
- F2C~F2F : グローバル浮動小数点レジスタ・システム用(4本)
- F30~F3B : テンポラリ浮動小数点レジスタ、引数・返値にも使います(12本)
- F3C~F3F : リザーブ
- [Q]どうしてローカルレジスタを増やしたのか?
- グローバルなレジスタはあまり使わないように思えたから(使わないというより、使うべきではないという意味)。
- 配列やオブジェクト以外のローカルな変数をすべてレジスタに割り付けることを目指すべきだと直感したから。もし40本で足りないようなら、それはその関数が複雑すぎることを意味しているのではないか。だったら複数の関数に分割するべきなのでは?
- ローカルレジスタを2Bまで拡大しても構いません。もしくは縮小しても構いません。それはアプリが勝手に決めていいことです。
- bitの導入
- これで整数レジスタが64ビットや256ビットになることにも対応できるし、逆に16ビットや8ビットにも対応できる。
- 詳しくはpage0082を参照。
- Enter/Leave命令:
- 保存する際にbitを指定しなければいけなくなりました(RxxとFxxについてそれぞれ指定します)。
- 保存するレジスタ数を指定できるようになりました。
- 整数レジスタは何個、ポインタレジスタは何個、浮動小数連手じスタは何個、というように指定します。
- まあrev1のころも指定はできたのですが、裏仕様的な扱いになっていました。
- 指定できるようになったのは、ローカルレジスタが増えたこともあります。無条件に全部保存していては大変なのです(メモリがもったいない)。
- なおデフォルトでは、RxxもPxxもFxxも16個だけ保存・復元します。
- osecpu113dあたりから使えるようになる予定です。
- フロントエンドコードの改良:
- rev1の時から驚異的な機能密度で定評がありましたが、昨年から検討中だったすべてのアイデアを盛り込んで、さらに進化しています。
- ヌルポインタ:
- ヌルポインタが導入されます。PCP(Pxx, P3F);でPxxにヌルポインタを代入できます。PCMPcc命令でP3Fと比較することで、ヌルポインタかどうかの判定もできます。
- 詳細は設計中です。
こめんと欄