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

17.16.8 ディスパッチテーブルの出力

この節ではディスパッチテーブルについて説明する。

ASM_OUTPUT_ADDR_DIFF_ELT (stream, body, value, rel)

この定義は一個の C の文とし、標準入出力ストリーム stream に、 二つのラベルの差を生成するアセンブラの疑似命令を出力するようにする。 valuerel は二つの内部ラベルの数である。 これらのラベルの定義は、ASM_OUTPUT_INTERNAL_LABEL を使って 出力され、それらはここで同じように出力されなければならない。 例えば、以下のようにする。

 
fprintf (stream, "\t.word L%d-L%d\n",
         value, rel)

ディスパッチテーブル中のアドレスが、テーブル自身のアドレスに対して 相対的な機種では、このマクロを提供しなければならない。 これが定義されている、GNU CC は PIC を生成する時にも、全ての 機種でこのマクロを使用する。 bodyADDR_DIFF_VEC 本体である。モードとフラグが読めるように 提供されている。

ASM_OUTPUT_ADDR_VEC_ELT (stream, value)

ディスパッチテーブル中のアドレスが絶対アドレスである機種では このマクロを提供すべきである。

この定義は一個の C の文とし、標準入出力ストリーム stream に ラベルに対する参照を生成するアセンブラの疑似命令を出力するようにする。 value は、内部ラベルの数であり、内部ラベルの定義は ASM_OUTPUT_INTERNAL_LABEL で出力される。 例えば、以下のようになる。

 
fprintf (stream, "\t.word L%d\n", value)
ASM_OUTPUT_CASE_LABEL (stream, prefix, num, table)

ジャンプテーブルの前のラベルを特別な方法で出力する必要がある 場合はこれを定義する。 引数のうち最初の三つは ASM_OUTPUT_INTERNAL_LABEL のものと 同じである。四番目の引数は、ラベルに続くジャンプテーブル (addr_vecaddr_diff_vec を含む jump_insn)である。

この機能は、System V で、このテーブルについての swbeg 文を 出力するのに使われている。

このマクロが定義されていない場合は、これらのラベルは ASM_OUTPUT_INTERNAL_LABEL で出力される。

ASM_OUTPUT_CASE_END (stream, num, table)

ジャンプテーブルの最後に何か特別なものを出力しなければならない 時はこれを定義する。 この定義は一個の C の文とし、テーブル用のアセンブラコードが書かれた後に 実行されるようにすべきである。 適切なコードを標準入出力ストリーム stream に書き出すべきである。 引数 table は、ジャンプテーブルの insn であり、 num は先行ラベルのラベル番号である。

このマクロが定義されていない場合は、ジャンプテーブルの最後には何も 特別なものは出力されない。


This document was generated using texi2html 1.78.