私の質問は非常に似ています: GCC: 一部のレジスタの使用を禁止する
ただし、C 関数で使用するレジスタの数を制限したいと考えています。言い換えれば、インライン アセンブリ内ではなく C 関数レベルで適用される、クロバー レジスタと同じようにディレクティブを使用できるようにしたいと考えています。また、各関数には使用するレジスタのセットが異なる場合があるため、万能のソリューションにはなりません。
私が考えた2つの可能な解決策は次のとおりです。
- すべてアセンブラで行います。本当に私の問題の解決策ではありません...
- GCC でレジスタを条件付きで使用するための何らかのディレクティブを使用して、各関数を個別にコンパイルします。各関数を個別にコンパイルすると、多くの潜在的な最適化が失われ、コードが事実上判読不能になります。
私はこれをすべて C でやろうとしているので、プリコンパイラが何らかの形でここで役立つ方法はありますか? 意図した目標を達成する方法はありますか?