# マニュアルページ inline.1

## 名前

         inline - インライン手続き呼び出し展開プログラム

## 機能説明

         指定されたソースファイルのアセンブリ言語の呼び出し命令は、イ
         ンラインテンプレート (*.il) ファイルから取得した対応する手続
         き本体のコピーによって置き換えられます。

         インラインファイルは接尾語 .il を持ちます。

              例: % CC foo.il hello.c

         インライン化はコードジェネレータ (cg) により行われます。

## 使用例

         各インラインファイルには、次の形式の 1 つまたは複数のラベ ル
         付きアセンブリ言語テンプレートが含まれています。
              <インライン指令>
              <命令>
              .
              .
              .
              .end

         ここで、<命令> は、指定されたルーチンのインライン展開です。<
         インライン指令> は次の形式のコマンドです。

              .inline <識別子>, <引数サイズ>

         これは、<識別子>で指定したルーチンの引数のサイズの合計として
         の  <引数サイズ>バイトの引数を持つルーチンのコードのブロック
         を宣言します。指定されたルーチンの呼び出しは、インラインテン
         プレート内のコードで置き換えられます。

         注意事項:
         引数サイズの値は無視されますが、Sun WorkShop[tm] 5.0 以前 の
         コンパイラのバージョンと互換性を保つために引数が含まれる必要
         があります。

         複数のテンプレートが含まれていても構いません。一致するテンプ
         レートは最初のものだけが有効で、後は無視されます。重複したテ
         ンプレートを対応するハードウェアのパフォーマンスの降順に並べ
         て、最も効率のよいバージョンが選択されるようにすることができ
         ます。

      すべての Sun システム用のコーディング規則
         インラインテンプレートは、C 互換の手続き呼び出しを展開した形
         式でコーディングする必要があります。ただし、呼び出し命令は実
         行されないため、リターンアドレスが予期された場所にないことも
         あります。

         インラインテンプレートは、サンの標準のパラメータの渡し方およ
         びレジスタ使用法の規則に従う必要があります。したがって、これ
         らの規則に違反したルーチンを呼び出すことはできません。たとえ
         ば、 setjmp(3c) などのアセンブリルーチンは問題が発生する原因
         となります。

         下記のレジスタ以外のレジスタは、使用および設定できません。

         インラインテンプレート内の分岐命令は、インラインテンプレート
         内に定義した数値ラベル (1f、 2b など) にのみ制御を移すことが
         できます。それ以外に制御を移すことは許可されません。

         テンプレートには、 ret または retl 命令は必要ありません。 こ
         れらを含む必要もありません。

         Sun コンパイラで生成した命令コードおよびアドレッシングモード
         の み が、動作を保証されています。2 進コード化された命令はサ
         ポートされていません。

      SPARC システム用のコーディング規則
         引数はレジスタ %o0-%o5 と [%sp+0x5c] で始まるメモリー位置 に
         格 納して渡されます。 %sp は 64 ビット整列であることが保証さ
         れています。呼び出し命令が実行されることはないので、 %o7  の
         内容は未定義です。

         結果は、 %o0 または %f0/%f1 に格納して返されます。

         レジスタ %o0-%o5 および %f0-%f31 は一時レジスタとして使用 す
         ることができます。

         汎整数型および単精度浮動小数点型の引数は、32 ビットで整列 さ
         れています。

         倍精度浮動小数点型引数は、オフセットが 8 の倍数である場 合、
         64 ビットで整列されていることが保証されています。

         各制御移管命令 (分岐および呼び出し) は、直後に nop が必要 で
         す。

         呼び出し命令は、引数を渡すのに使用するレジスタ数を、呼び出さ
         れ た ルーチンに示すための付加 (最終) 引数を持つ必要がありま
         す。

         SPARC システムの場合は、展開された呼び出しの後に続く命令は、
         削除されるので注意してください。

      x86 システム用のコーディング規則
         引数はスタックに蓄積して渡されます。呼び出し命令は実行されて
         い ないので、最初の引数は (%esp)、2 つ目の引数は 4 (%esp) に
         格納されています。結果が 32 ビット以下の整数となる場 合 は、
         %eax  に 格 納 し て 返 さ れます。また64 ビット整数の結果は
         %edx:%eax に格納して返されます。浮動小数点の結果 は、 %st(0)
         に格納して返されます。

         コードでは、%eax、%ecx、および %edx のレジスタを使用します。
         その他のレジスタの値はすべて、保持する必要があります。浮動小
         数点スタックは、インライン展開テンプレートの先頭では空になっ
         て い ます。またインライン展開テンプレートの終わりでは、空に
         なっていなければなりません (ただし浮動小数点の戻り値は除きま
         す)。

## 使用例

         例として libm.il または vis.il をレビューしてください。コ ン
         パイラの lib/ ディレクトリ配下に、サポートされた各アーキテク
         チャに固有のこれらのライブラリのバージョンが見つかります。

## 警告

         inline は、上記のコーディング規則の違反については検査しま せ
         ん。

## 関連項目

         Rajat P. Garg および Ilya Sharapov によ る  "Techniques  for
         Optimizing  Applications: High Performance Computing" では、
         Fortran を使用して役に立つインラインテンプレートの説明が提供
         されます。第 8 章を参照してください。

         SPARC International Inc. に よ り  "The  SPARC  Architecture
         Manual  Version 9" が http://www.sparc.com/resource.htm で提
         供されます。付録 G を参照してください。