Skip to content

VM Design

skyrabbit edited this page May 6, 2020 · 1 revision

fetch

命令を取り出す処理をfetchという. 一般にVMにおいてfetchの回数は少なければ少ないほど速い. つまり同じ処理をするために必要な命令の数を減らすべきである。

RISC vs CISC

RISCでは同じような命令を統合し、固定長の命令を使うことが多い
CISCでは同じような命令を区別し、可変長の命令を使うことが多い
スタックマシンではPUSHやPOPのようなより一般的な命令が必然的に多いので、性質上RISCはスタックマシンとCISCはレジスタマシンと相性がいいようである.
CISCの特徴である、複数の命令と同等の機能を持つ特殊な命令を作る命令融合や、型などの属性ごとに特化した命令は、fetch回数を減らしVMの高速化に向く、と思いRCWTではCISCを目指すことにしたが、シンプルさを重視して固定長命令を選択した. 可変長命令については検討中である. スタックマシンで1 byteの命令を使うとき32 bit alignmentに適合せず、fetchのコストが大きくなる可能性がある.またその場合、即値を格納することが事実上不可能であり、別にフェッチする必要がありコストはさらに大きくなりうる.

メモリ

Stack Machine vs Register Machine

スタックマシンにおける任意の二項演算binはレジスタマシンにおける以下の処理と同等である

POP  r1
POP  r2
BIN  r3 r1 r2
PUSH r3

レジスタマシンでは一般に2つまたは3つのレジスタを指定するが、スタックマシンではレジスタを指定しないので、命令長が短くてすみメモリを節約できる.しかし、RCWTでは組み込みを視野に入れていないので、fetchでの考察も合わせて、レジスタマシンとして設計している.

最適化

3番地コードは最適化を得意としており、コンパイラでよく使われる中間表現だが、レジスタマシンと相性が良い. また、3つのoperandを指定することはCISCらしいように思う.

Clone this wiki locally