セキュリティ フレームワークの一部として、GCC でコンパイルされたアプリケーション用のアセンブリ インストルメンター モジュールを作成しようとしています。モジュールのパフォーマンスを向上させるには、動的ジャンプ/動的関数呼び出しを可能な限り減らす必要があります。これらは、基本的に、何らかの動的ポインター (レジスターなど) を使用して、ジャンプを実行したり、関数を呼び出したりします。
現在の GCC コンパイラは、同じ関数 (コード内の特定のラベル) への複数の呼び出しがある場合は常に、ラベルをレジスタにロードし、関数を呼び出す必要があるたびにそのレジスタにジャンプします。もちろん、これは毎回同じラベルにジャンプするよりもはるかに高速なアプローチ (コードが小さく、クロック サイクルが少ない) ですが、前述したように、私のフレームワークでは非効率的です。私が避けたいことの例を示すために、コードスニペットを次に示します。
MOV #function_label, R10. #Copy the label to the R10 register
CALL R10
...
...
CALL R10
...
...
CALL R10
GCCに次のことをさせたいのですが:
CALL #label_function
...
...
CALL #label_function
...
...
CALL #label_function
MSP430 ファミリーのマイクロコントローラー用の GCC コンパイラーである mspgcc を実際に使用していることに注意してください。
(GCC コンパイラーの書き直し以外に) できることはあると思いますか? ご助力ありがとうございます