Solaris 64 ビット 開発ガイド

コードモデル

コンパイラには、性能の向上や、64 ビット SPARC プログラムでのコードサイズを小さくするなど、さまざまな目的に合わせた各種のコードモデルがあります。コードモデルは以下の要素で決定します。

次の表は、64 ビット SPARC プログラムで使用できる各種コードモデルを示したものです。

表 6–1 コードモデルの説明

コードモデル 

位置決め方法 

コードサイズ 

位置  

外部オブジェクト参照モデル 

abs32

絶対 

2G バイト未満 

下部 (アドレス空間の下位 32 ビット) 

なし 

abs44

絶対 

2G バイト未満 

中央 (アドレス空間の下位 44 ビット) 

なし 

abs64

絶対 

2G バイト未満 

任意 

なし 

pic

位置に依存しないコード 

2G バイト未満 

任意 

スモール (1024 以下の外部オブジェクト) 

pic

位置に依存しないコード 

2G バイト未満 

任意 

ラージ (2**29 以下の外部オブジェクト)  

スモールコードモデルを使用すると、命令シーケンスを短くできる場合があります。絶対コード内で静的データ参照を行うのに必要な命令の数は、abs32 コードモデルの場合が最も少なく、abs64 が最も多く、abs44 がその中間になります。同様に、pic コードモデルは、PIC コードモデルよりも少ない命令で静的データ参照を行います。その結果、コードモデルが小さいほどコードサイズも小さくなり、ラージコードモデルのような、より完全な機能性を必要としないプログラムの性能が向上します。

使用するコードモデルを指定するには、-xcode=<model> コンパイラオプションを使用する必要があります。現在、コンパイラは 64 ビットオブジェクトに対し、デフォルトで abs64 モデルを使用します。コードは、abs44 コードモデルの使用により最適化できます。より少ない命令を使用して、現在の UltraSPARC プラットフォームがサポートする 44 ビットのアドレス空間を利用できます。

コードモデルについては、SPARC V9 ABI およびコンパイラのマニュアルを参照してください。


注 –

abs32 コードモデルでコンパイルしたプログラムは、-M /usr/lib/ld/sparcv9/map.below4G オプションを使用して、4G バイトよりも下方にリンクする必要があります。