gccにゃオプション

  • ffixed-reg

regで指定される名前のレジスタを、固定的な役割を持つレジスタとして取り扱います。生成されたコードは(おそらくスタック・ポインタ、フレーム・ポインタ、あるいは、それ以外の固定的な役割を持つレジスタとして以外には)そのレジスタを決して参照するべきではありません。 regはレジスタの名前でなければなりません。受け付けられるレジスタ名はマシン固有であり、マシン記述マクロ・ファイルの中のREGISTER_NAMESマクロに定義されています。 このフラグには否定形式はありません。というのは、このフラグは3つの選択肢(11)の中から選んで指定するものだからです。

  • fcall-used-reg

regで指定される名前のレジスタを、関数呼び出しにより内容の破壊される割り当て可能なレジスタとして取り扱います。このレジスタは、関数呼び出しにまたがって存続することのないテンポラリ・オブジェクトや通常変数用として割り当てることができます。このオプションを指定してコンパイルされた関数は、レジスタregの待避、復元を行いません。 フレーム・ポインタやスタック・ポインタを指定してこのフラグを使うことは誤りです。これら以外にも、マシンの実行モデルにおいて広く知られている固定的な役割を持つレジスタを指定してこのフラグを使うと、悲惨な結果がもたらされることになります。 このフラグには否定形式はありません。というのは、このフラグは3つの選択肢(12)の中から選んで指定するものだからです。

  • fcall-saved-reg

regで指定される名前のレジスタを、関数により待避される割り当て可能なレジスタとして取り扱います。このレジスタは、関数呼び出しにまたがって存続するテンポラリ・オブジェクトや通常変数に対しても割り当てることができます。このオプションを指定してコンパイルされた関数は、レジスタregを使う場合には、それを待避、復元します。 フレーム・ポインタやスタック・ポインタを指定してこのフラグを使うことは誤りです。これら以外にも、マシンの実行モデルにおいて広く知られている固定的な役割を持つレジスタを指定してこのフラグを使うと、悲惨な結果がもたらされることになります。 関数の戻り値を入れる可能性のあるレジスタに対してこのフラグを使うと、また異なる種類の悲惨な結果がもたらされることになります。 このフラグには否定形式はありません。というのは、このフラグは3つの選択肢(13)の中から選んで指定するものだからです。