高bit対応について
はじめに
- OSECPU-VMでは、整数演算において32bitまでしか指定できません。命令フォーマット的にはもちろん上限はないのですが、OSECPU-VMにはそこまでをサポートする義務がないのです。つまりそういうアプリがあっても、実行できるかどうかは分からない、OSECPU-VMではそれを保証しない、というわけです。
- これが第三世代OSASKだと話は違ってきて、最低でも256bitまではサポートします。第三世代OSASKはOSECPU-VMと同じ命令フォーマットです。
- この切り分けはなぜかといえば、OSECPU-VMの最大の主眼は高bit演算への対応ではなくて、セキュリティだからです。二兎を追っては一兎も得ないかもしれません。32bitくらいあれば大抵の用途は大丈夫でしょう。移植もしやすいでしょう。そういう切り分けです。
- ということで以下の議論は、OSECPU-VMだけを考えるのなら気にしなくていい話です。
- ちなみにrev2からサポートされた浮動小数点レジスタについても、OSECPU-VMが仕様としてサポートするのは32bitの単精度までです。64bitの倍精度はサポートしてなくてもOSECPU-VMを名乗ることに問題はありません。
- まあ浮動小数点サポートがばっさり削られていても、「整数演算のみのOSECPU-VMです」っていってしまえばそれでOKなのでありますが。
仕組み
- かりに整数演算を256bitまでサポートするOSECPU-VMがあったとします。その場合、内部実装はどうあるべきでしょうか。
- 僕が想定しているのは、256bitのデータをまともに持つことです。32bitのマシンで実現するのなら、intを8個つなげて一つのレジスタとして扱います。
- それぞれの演算命令にはbitというフィールドがついています。ですからこれより上位のbitについては計算を省略して構いません。256bitのレジスタを用意したけど、下位32bitしか使わないのなら、上位224bitについては何も操作しなくていいのです。ゴミデータが入っているかもしれませんが、どうせ参照されないので心配はいりません(参照しようとするとセキュリティ保護でエラーになります、これはmallocしたけど初期化されていない変数へのアクセスと同じことでセキュリティエラーなのです)。
こめんと欄