アセンブラ関数からC言語関数を呼び出すときの注意点について説明します。
CC-RHは「スタック・ポインタ(SP)が,常にスタック・フレームの最下位アドレスを指している」ことを想定したコードを出力します。そのため,アセンブラ関数からC言語関数へ分岐する前に,スタック領域中の未使用領域の上位アドレスを指すようにSPを設定してください。これは下位アドレスの方向にスタック・フレームが取られるためです。
CC-RHはC言語関数呼び出しの前後において,レジスタ変数用レジスタの値は保持しますが,作業用レジスタの値は保持しません。そのため,保持しなくてはならない値を作業用レジスタに割り当てたままにしないでください。
レジスタ変数用レジスタ,作業用レジスタは,レジスタ・モードにより異なります。
CC-RHは「関数の戻り先アドレスは“リンク・ポインタlp(r31)”に格納される」ことを想定したコードを生成します。C言語関数へ分岐するとき,lpに関数の戻り先アドレスを格納する必要あります。