RAM/スタックを使用せずに、ループまたは変数の一部のカウンターに CPU レジスタを使用するようにコンパイラに指示するにはどうすればよいですか?
こんにちは、
最新のコンパイラ (GCC や Green Hills など MPC57xx に使用されるものを含む) は、レジスタの使用を自動的に最適化します。標準の C/C++ 構文を使用して変数をレジスタに強制することはできません。レジスタ キーワードもヒントに過ぎず、レジスタの負荷が高い場合や、変数がレジスタ内にあることでメリットがない場合には、コンパイラはそれを無視することがあります。
インラインアセンブリを使用する:
これにより、レジスタの使用を直接制御できますが、移植性と保守性が犠牲になります。
アセンブリ揮発性(
「li r3, 0\n\t」 // 即値をレジスタ r3 にロードする
"ループ:\n\t"
「r3, r3, 1 を追加\n\t」
「cmpwi r3, 1000\n\t」
"bltループ\n\t"
for (レジスタint i = 0; i < N; i++) {
// ループロジック
}
また、コンパイラの最適化と設定を確認したり、積極的なレジスタ割り当てやループ展開を実行したりすることもCANます。
以前は単純にアセンブリ コードを使用するのが一般的でした。最大限に最適化されており、指示されたとおりの動作をしました。
よろしくお願いいたします。
ピーター