[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17.7.9 呼び出し側退避レジスタの割り当て

もし有効になっているなら、GNU CC は、関数呼び出しの前後でレジスタをセーブ することができる。 これにより、呼び出し時破壊レジスタを関数呼び出しにまたがって生存 しなければならない変数を保持するのに使えるようになる。

DEFAULT_CALLER_SAVES

ターゲット機種で関数呼び出しがどのレジスタも保存しないのであれば、 このマクロを定義する。言い換えると、CALL_USED_REGISTERS が 全てのレジスタで 1 の場合である。 このマクロは、定義されていれば、デフォルトで全ての最適化レベルで ‘-fcaller-saves’ を有効にする。 最適化レベル 2 以上では、デフォルトで ‘-fcaller-saves’ が 有効になっているので、このオプションを指定しても効果がない。

CALLER_SAVE_PROFITABLE (refs, calls)

C の式。この式は、疑似レジスタを呼び出し時破壊レジスタに置き、 各関数呼び出しの前後でセーブ/リストアすることを考える価値があるかどうか を決定する。その価値がある場合は式の値は 1 とし、ない場合は 0 と すべきである。

このマクロを定義しない場合のデフォルトは 4 * calls < refs であり、 ほとんどの機種で適切なものである。

HARD_REGNO_CALLER_SAVE_MODE (regno, nregs)

一個の C の式。疑似レジスタ nregs を呼出し時破壊ハードレジスタ regno にセーブするのに必要とされるモードを指定する。 regno が呼出し側セーブに向いていなければ、VOIDmode を 返さなければならない。ほとんどの機種ではこのマクロを定義する必要はない。 GCC が最小の適切なモードを選ぶからである。


This document was generated using texi2html 1.78.