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

17.5.6 レジスタの使用法を調整する古いマクロ

以下の機能はあまりちゃんとは動いていない。 これらが存在するのは、80386 の 80387 コプロセッサ向けのコードを正しく 生成するのに必要とされるからである。 これはもはやマシン記述では使われておらず、将来のバージョンでは削除 される可能性がある。なので使わないように。

OVERLAPPING_REGNO_P (regno)

定義されていれば、C の式である。この式は、ハードレジスタ番号 regno がオーバーラップレジスタなら、ゼロでない値となる。 これは、あるハードレジスタが異なる番号のハードレジスタとオーバーラップ しているということを意味する。(このオーバーラップは望ましくないことだが、 これがないとサポートできないようなマシンをサポートすることができる。) このマクロは、お互いにオーバーラップしている全てのレジスタについて ゼロでない値を返さなければならない。GNU CC は、オーバーラップレジスタを ある限られた方法でしか使うことができない。基本ブロック内の 割当に使うことができ、再ロードで落とされてしまう可能性がある。 それで全てである。

このマクロが定義されていないと、お互いにオーバーラップする ハードレジスタはないということになる。それが普通だ。

INSN_CLOBBERS_REGNO_P (insn, regno)

定義されていれば、C の式である。この式の値は、 insn insn が、ハードレジスタ番号 regno の内容を 未知の力により破壊されてしまう効果を持っている場合は ゼロでない値にすべきである。 「未知の力」とはこの場合、その insn の RTL 式はそのような効果を 記述していないということである。

このマクロが定義されていないと、未知の力でレジスタの内容を 破壊する insn は存在しないということを意味する。 それが普通の状況である。その他のものがすべて同じなら、 RTL 式を見ればその全ての動作がわかるというのが最も良いのである。


This document was generated using texi2html 1.78.