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

17.16.2 データの出力

この節ではデータの出力について説明する。

ASM_OUTPUT_LONG_DOUBLE (stream, value)
ASM_OUTPUT_DOUBLE (stream, value)
ASM_OUTPUT_FLOAT (stream, value)
ASM_OUTPUT_THREE_QUARTER_FLOAT (stream, value)
ASM_OUTPUT_SHORT_FLOAT (stream, value)
ASM_OUTPUT_BYTE_FLOAT (stream, value)

標準入出力ストリーム stream に、あるアセンブラ命令を 出力する C の文である。 このアセンブラ命令は、それぞれ TFmodeDFmodeSFmodeTQFmodeHFmodeQFmode の、値が value である浮動小数点定数をアセンブルする。 value は、REAL_VALUE_TYPE 型の C の式である。 REAL_VALUE_TO_TARGET_DOUBLE のようなマクロを使うと、 これらの定義を書く助けとなる。

ASM_OUTPUT_QUADRUPLE_INT (stream, exp)
ASM_OUTPUT_DOUBLE_INT (stream, exp)
ASM_OUTPUT_INT (stream, exp)
ASM_OUTPUT_SHORT (stream, exp)
ASM_OUTPUT_CHAR (stream, exp)

標準入出力ストリーム stream に、あるアセンブラ命令を 出力する C の文である。 このアセンブラ命令は、それぞれ 16、8、4、2、1 バイトの、 値が value である整数をアセンブルする。 exp は、定数値を表す RTL 式である。 ‘output_addr_const (stream, exp)’ を使って、 この値を一個のアセンブラ式として出力する。

UNITS_PER_WORD より大きなサイズについては、 マクロの動作が、各ワードについて一回づつ、UNITS_PER_WORD の 大きさに対応するマクロを繰り返し呼び出すのと同じであるなら、 このマクロを定義する必要はない。

ASM_OUTPUT_BYTE (stream, value)

値が value である一バイトをアセンブルするアセンブラ命令を 標準入出力ストリーム stream に出力するための C の文を定義する。

ASM_BYTE_OP

一バイトの定数列に使われる疑似命令を与える C の文字列定数。 このマクロが定義されていない場合、デフォルトは "byte" になる。

ASM_OUTPUT_ASCII (stream, ptr, len)

長さ len バイトの ptr で示される文字列定数を アセンブルするアセンブラ命令を、標準入出力ストリーム stream に 出力するための C の文を定義する。 ptr は、char * 型の C の式で、len は、int 型の C の式である。

アセンブラが、Berkeley Unix のアセンブラにあるような .ascii 疑似命令を備えているなら、このマクロは定義しないこと。

CONSTANT_POOL_BEFORE_FUNCTION

このマクロは一個の C の式として定義する。 この式は、GNU CC が、ある関数のコードの前にその関数の定数領域を 出力すべきであるなら ゼロでない値とすべきである。 定数領域を関数の後に出力すべきなら、ゼロにする。 このマクロを定義しない場合は、GNU CC は定数領域を関数の前に出力する。 これが普通である。

ASM_OUTPUT_POOL_PROLOGUE (file, funname, fundecl, size)

関数の定数領域の開始を定義するアセンブラ命令を出力するための C の文を定義する。 funname は、関数名を与える文字列である。 その関数の戻り値型が必須であり、その型は funcdecl から取得 することができる。size は、このマクロで定義される命令が 呼び出された直後に書き出される定数領域の大きさを、バイト単位で あらわしたものである。

定数領域の開始を知らせる必要がない普通の場合は、このマクロは 定義する必要はない。

ASM_OUTPUT_SPECIAL_POOL_ENTRY (file, x, mode, align, labelno, jumpto)

特別な取扱いが必要なら、定数プールに一個の定数を出力する C の文。セミコロンは付けても付けなくても良い。 (このマクロは、通常どおり出力可能なRTL 式については、何もする 必要はない。)

引数 file は、アセンブラコードの出力先の標準入出力ストリームである。 mode はマシンモード(この場合 x は、‘const_int’である) である。 align は、値 x に必要とされるアラインメントである。 これだけのアラインメントを強制するアセンブラ命令を出力すべきである。

引数 labelno は、このプールエントリのアドレスを表す 内部ラベルで使われる番号である。 このマクロの定義は、適切な場所にラベル定義を出力する責任がある。 以下にその方法を示す。

 
ASM_OUTPUT_INTERNAL_LABEL (file, "LC", labelno);

プールエントリを特別な方法で出力する場合は、 ラベル jumpto への goto で終えるべきである。 こうすることで、同じプールのエントリが、通常の方法で二回出力 されることを防ぐ。

することがなければ、このマクロを定義する必要はない。

CONSTANT_AFTER_FUNCTION_P (exp)

一個の C の式を定義するマクロ。 この式は、tree 型の定数 exp を、関数のコードの後に出力すべきなら、 ゼロでない値となる。 コンパイラは通常は全ての定数を関数の前に出力する。 それで良ければこのマクロを定義する必要はない。

ASM_OUTPUT_POOL_EPILOGUE (file, funname, fundecl, size)

一個の C の文であり、関数の定数プールの終りに置くアセンブラコマンドを 出力する。 funname は、関数名を与える文字列である。 関数の戻り値型が必要なら、fundecl から得ることができる。 size は、GNU CC がこの呼び出しの直前に書き出す定数プールの 大きさをバイト単位で表したものである。

定数プールにエピローグが必要なければ、このマクロを定義する必要はない。 普通は定義する必要がない。

IS_ASM_LOGICAL_LINE_SEPARATOR (C)

一個の C の式を定義するマクロ。 この式は、C が、アセンブラにより論理的な行区切りとして 使われる場合には、ゼロでない値となる。

このマクロを定義しない場合は、デフォルトでは、 文字 ‘;’ だけが論理的な行区切りとして扱われる。

ASM_OPEN_PAREN
ASM_CLOSE_PAREN

これらのマクロは C の文字列定数として定義され、 算術式をグループ化するためのアセンブラの構文を記述する。 ほとんどのアセンブラでは以下の定義で正しい。

 
#define ASM_OPEN_PAREN "("
#define ASM_CLOSE_PAREN ")"

以下のマクロは ‘real.h’ で定義されており、 ASM_OUTPUT_DOUBLE やその仲間の定義を書くのに使われる。

REAL_VALUE_TO_TARGET_SINGLE (x, l)
REAL_VALUE_TO_TARGET_DOUBLE (x, l)
REAL_VALUE_TO_TARGET_LONG_DOUBLE (x, l)

REAL_VALUE_TYPE 型の x を、ターゲットの浮動小数点表現に 変換し、そのビットパターンをアドレスが l にある、long int 型の 配列に格納する。 出力される配列の用素数は、対象のターゲット浮動小数点データ型の大きさにより 決まる。ビットパターンの 32 ビットずつが、long int 型の配列の 各要素に入る。 各要素は、たとえ long int がホストマシンの 32 ビットより 広くても、変換結果のうちの 32 ビットを保持する。

配列の要素値は、fprintf を使って、ターゲット機種のメモリに 現れる順序で出力できるようになっている。

REAL_VALUE_TO_DECIMAL (x, format, string)

このマクロは、REAL_VALUE_TYPE 型の x を、 10進数に変換し、それを文字列として string に格納する。 string としては、結果を保持するのに充分長いスペースのメモリブロック のアドレスを渡さなければならない。

引数 format は、出力文字列をどのように整形するかを知らせる printf と同じ指定である。


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

This document was generated using texi2html 1.78.