[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
スタックフレームを指すレジスタについて説明する。
STACK_POINTER_REGNUM
スタックポインタレジスタのレジスタ番号である。FIXED_REGISTERS
に
より固定レジスタとして指定されていなければならない。
大抵の機種では、このレジスタはハードウェアによって決められている。
FRAME_POINTER_REGNUM
フレームポインタレジスタのレジスタ番号である。フレームポインタは、 スタックフレーム中の自動変数を参照するのに使われる。 マシンによっては、このレジスタがハードウェアによって決められている場合が ある。ハードウェアによって決められていない場合は、好きなレジスタを フレームポインタとして使うことができる。
HARD_FRAME_POINTER_REGNUM
マシンによっては、フレームポインタと自動変数の開始オフセットとの
オフセットが、レジスタの確保が完了するまで分からない場合がある。
(例えば、セーブされたレジスタがこの二つの位置の間にあるような場合である。)
この種類のマシンでは、FRAME_POINTER_REGNUM
として
特別な固定したレジスタを定義し、オフセットが分かるまでは内部的に
これを使うようにする。そして、HARD_FRAME_POINTER_REGNUM
は、
フレームポインタとして実際に使われるハードレジスタ番号を定義する。
このマクロは次のような非常に希な場合にだけ定義するべきである。
その場合とは、フレームポインタと自動変数の間のオフセットが
レジスタ割当が完了するまで計算できないという場合である。
このマクロが定義されている場合は、ELIMINABLE_REGS
の定義で、
FRAME_POINTER_REGNUM
を消去して、
HARD_FRAME_POINTER_REGNUM
か STACK_POINTER_REGNUM
に
置き換える方法も示さなければならない。
FRAME_POINTER_REGNUM
と同じになる場合は、このマクロは
定義しないこと。
ARG_POINTER_REGNUM
引数ポインタレジスタのレジスタ番号である。このレジスタは、
関数の引数リストをアクセスするのに使われる。
機種によっては、フレームポインタレジスタと同じである。
また、機種によっては、ハードウェアによりどのレジスタかが決まっている場合も
あるし、引数ポインタレジスタとして任意のレジスタを自分で選択出来る場合もある。
引数レジスタがフレームポインタレジスタと同じではない場合は、
FIXED_REGISTERS
に従って、それに固定レジスタである印を付けるか、
それを消去可能になるように調整しなければならない。
(see section フレームポインタと引数ポインタの消去)
RETURN_ADDRESS_POINTER_REGNUM
戻りアドレスポインタレジスタのレジスタ番号。
これは、現在の関数の戻りアドレスをスタックからアクセスするのに使われる。
機種によっては、戻りアドレスが、フレームポインタやスタックポインタや
引数ポインタからの固定のオフセットにない場合がある。
このレジスタはスタック上の戻りアドレスを指すように定義でき、
ELIMINABLE_REGS
により、フレームポインタかスタックポインタに
変換される。
スタックから戻りアドレスを得る方法が他にあるのなら、 このマクロは定義しないこと。
STATIC_CHAIN_REGNUM
STATIC_CHAIN_INCOMING_REGNUM
関数の静的チェーンポインタを渡すのに使うレジスタの番号である。
レジスタ・ウィンドウが使われる場合は、呼び出された関数から見える
レジスタ番号は STATIC_CHAIN_INCOMING_REGNUM
である。
一方、呼びだし側関数から見えるレジスタ番号は STATIC_CHAIN_REGNUM
である。この二つのレジスタが同じなら、STATIC_CHAIN_INCOMING_REGNUM
は定義しなくて良い。
静的チェーンレジスタは固定レジスタである必要はない。
静的チェーンがメモリで渡されるなら、これらのマクロは定義すべきではない。 代わりに次の二つのマクロを定義すべきである。
STATIC_CHAIN
STATIC_CHAIN_INCOMING
静的チェーンがメモリで渡されるなら、これらのマクロは、それらがどこに
格納されるかを示す mem
式を与える RTX を提供する。
STATIC_CHAIN
と STATIC_CHAIN_INCOMING
は、
それぞれ、呼びだし側関数と呼び出された関数から見える位置を表す。
前者はスタックポインタからのオフセットの位置にあり、後者は
フレームポインタからのオフセット位置にあることが多い。
変数 stack_pointer_rtx
、frame_pointer_rtx
、
arg_pointer_rtx
が、これらのマクロの使用に先だって初期化されるので、
マクロを参照するのにはこちらの変数を使うべきである。
静的チェーンがレジスタで渡されるなら、先の二つのマクロを代わりに定義すべき である。
This document was generated
using texi2html 1.78.