gccマニュアルから:
void TARGET_ASM_FUNCTION_PROLOGUE (FILE *file, HOST_WIDE_INT size)
プロローグは、スタックフレームの設定、フレームポインタレジスタの初期化、保存する必要のあるレジスタの保存、およびsize
ローカル変数用の追加のストレージバイトの割り当てを担当します。file
アセンブラコードを出力するstdioストリームです。
「レジスタウィンドウ」を備えたマシンでは、関数呼び出しによって保持されることになっている場合でも、関数エントリコードはウィンドウにあるレジスタをスタックに保存しません。代わりに、関数で呼び出しに使用されていないレジスタが使用されている場合は、レジスタスタックを「プッシュ」するための適切な手順を実行します。
関数にフレームポインタがある場合とない場合があるマシンでは、関数エントリコードはそれに応じて変更する必要があります。フレームポインタが必要な場合は設定する必要があり、そうでない場合は設定しないでください。フレームポインタが必要かどうかを判断するために、マクロは変数を参照できますframe_pointer_needed
。変数の値は1
、フレームポインターを必要とする関数の実行時になります。
void TARGET_ASM_FUNCTION_EPILOGUE (FILE *file, HOST_WIDE_INT size)
定義されている場合、関数を終了するためのアセンブラーコードを出力する関数。エピローグは、関数が呼び出されたときに保存されたレジスタとスタックポインタをそれらの値に復元し、呼び出し元に制御を戻す役割を果たします。このマクロはマクロと同じ引数を取り、TARGET_ASM_FUNCTION_PROLOGUE
復元するレジスタは同じ方法で決定さregs_ever_live
れます。CALL_USED_REGISTERS
SSE (Streaming SIMD Extensions)
128ビットCPUレジスタのコレクションです。これらのレジスタには、4つの32ビットスカラーをパックできます。その後、4つの要素のそれぞれに対して同時に操作を実行できます。対照的に、同じことを行うには、通常のアセンブリで4回以上の操作が必要になる場合があります。