2161650_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2161650_ja-JP

2161650_ja-JP

ループや一時変数のいくつかのカウンターに CPU レジスタを使用するようにコンパイラに指示しますか?

RAM/スタックを使用せずに、ループまたは変数の一部のカウンターに CPU レジスタを使用するようにコンパイラに指示するにはどうすればよいですか?

Re: Order the compiler use CPU Registers for some counters of loops or temp variables?

こんにちは、

最新のコンパイラ (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"
 
または、キーワードを確実に登録します。これは、i をレジスタに格納する必要があることをコンパイラに示します。
for (レジスタint i = 0; i < N; i++) {
// ループロジック
}

また、コンパイラの最適化と設定を確認したり、積極的なレジスタ割り当てやループ展開を実行したりすることもCANます。

以前は単純にアセンブリ コードを使用するのが一般的でした。最大限に最適化されており、指示されたとおりの動作をしました。

よろしくお願いいたします。

ピーター

Tags (1)
No ratings
Version history
Last update:
‎11-21-2025 07:01 AM
Updated by: