タイトルが少し不明確かもしれないので、ここに説明があります:
問題:
a = b + c * d;
私の実装では、これら2つの「指示」に解決されます
mul(c, d, temp)
add(b, temp, a)
私は現在、一時オブジェクトを使用して一時値を格納しています。これにより、一時値をRAMに格納し、必要なときに再度フェッチする必要があります。どちらも実際には必要ではなく、パフォーマンスが低下します。
私はVMをC++で実装しているので、私の質問は、一時的な値のメインメモリへの保存を回避し、実際のCPUレジスタに保持するための移植可能な方法があるかどうかです。
キーワードを使用していくつかのテストを行いましregister
たが、パフォーマンスが向上していないことから判断すると、コンパイラはそれを無視していると思います。
最後の手段として、プラットフォーム固有のアセンブリに進んでいきますが、この件についてはほとんど暗闇に包まれているため、これが唯一の可能な方法である場合は、適切な情報を歓迎します。私が示したこの例は基本的なものであり、多くの一時オブジェクトが必要になる状況に遭遇する可能性が高いことを私は理解しています。その場合、使用および使用するレジスタの量を決定する方法が必要です。残りのメモリストレージ...
おそらく、レジスタストレージを要求する方法があり、コンパイラがレジスタを「使い果たした」場合、一時的なものをスタックに自動的にプッシュしますか?私がアセンブリに精通している限り、あなたは特定のレジスタをその名前で「アドレス指定」しますが、コンパイラが潜在的なレジスタ使用の競合をどのように正確に処理するかはわかりません...