Solaris 7 - 5/99 オンラインリリース情報

64 ビット Solaris

SPARC only: 64 ビットアセンブラ命令

SPARC システムにバンドルされているアセンブラは、32 ビットおよび 64 ビット SPARC アセンブラプログラムのアセンブルをサポートするように更新されました。サポートされる命令セットには、SPARC V8、SPARC V9、さらに、UltraSPARC 固有の Visual Instruction Set (VIS) 命令が含まれます。

SPARC only: 64 ビット Solaris のアセンブラに対するサポート

SPARC V9 ABI には、大域レジスタを有効に利用できるようにするための、大域レジスタの使用状況を検査する機構が含まれています。

この機構については、SPARC V9 ABI に記述されています。要約すると、ELF のレジスタ使用状況レコードが導入されています。プログラムを SPARC V9 ABI 準拠にするには、このレコードを使用して大域レジスタの使用状況を通知する必要があります。静的リンクまたは動的リンクの処理中にこのレコードが比較されて、リンク可能なオブジェクト間で大域レジスタが一貫して使用されているかどうかが検査されます。大域レジスタの使用に整合性がない場合は、リンク処理からエラーメッセージが出力されます。

上記の機構を実装するには、コンパイラが ELF のレジスタレコードを出力する必要があります。これは、SPARC V9 ABI に準拠したプログラムをコンパイルする時に、C コンパイラの場合は -Wc,-Qiselect-regsym=1 オプション、C++ コンパイラの場合は -Qoption cg -Qiselect-regsym=1 オプションを付けることによって、可能になります。 Solaris 2.5.1、Solaris 2.6、Solaris 7 に含まれているリンカーは、ELF のレジスタレコードを扱うことができます。これより前のリリースの Solaris では、ELF のレジスタレコードを扱うことができないので、エラーメッセージが出力されます。

SPARC アセンブラもリンク可能なオブジェクトを生成するので、SPARC アセンブラも ELF のレジスタレコードを出力できる必要があります。 .s 入力ファイル内で参照されている大域レジスタをどのように利用しようとしているかを、アセンブラが認識している必要があります。このためには、アセンブラの新しい疑似命令を導入する必要があります。コンパイラはたとえば -S オプションによってアセンブリ言語を出力し、このアセンブリ言語は後でアセンブラによってアセンブルされます。このため、コンパイラは、大域レジスタの使用状況を正しく示すことができるような新しい疑似命令を出力する必要があります。

新しい SPARC V9 の疑似命令:


.register %g {2 | 3 | 6 | 7}, {#scratch | symbol name }

この新しい疑似命令は、どのようなアーキテクチャ設定用の SPARC アセンブラでも使用できますが、V9 にのみ影響を与えます。このため、この新しい疑似命令を使用して V8 用と V9 用のアセンブリコードを書くことができます。SPARC V8 およびそれ以前の SPARC アーキテクチャのバージョン (Solaris 2.5.1 および Solaris 2.6) では、この疑似命令は受け付けられますが無視されます。

-xarch=v9 が指定されているときに、新しい疑似命令が扱っていない大域レジスタが使用されているということが SPARC アセンブラによって検出された場合は、SPARC アセンブラからエラーメッセージが出力されます。

-xarch=v9 が指定されているときに、同じ大域レジスタに対して異なる複数の疑似命令が指定されているということが SPARC アセンブラによって検出された場合は、SPARC アセンブラからエラーメッセージが出力されます。それ以の場合は、ユーザーが指定したとおりに SPARC アセンブラによって適切な ELF レジスタレコードが出力されます。つまり SPARC アセンブラは、指定された使用状況は正しいことを検証することがありますが、必ず検証するとは限りません。