ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
デバイスドライバの記述 Oracle Solaris 10 8/11 Information Library (日本語) |
この節では、データ割り当て、バイト順序、レジスタウィンドウ、浮動小数点命令の可用性など、SPARC プロセッサ固有のいくつかのトピックについて説明します。x86 プロセッサ固有のトピックについては、「x86 プロセッサの問題」を参照してください。
注 - 浮動小数点演算はカーネルでサポートされていないため、ドライバでこの演算を実行しないでください。
すべての数量は、標準の C データ型を使用して、自然な境界に割り当てる必要があります。
short 整数は、16 ビットの境界に割り当てます。
int 整数は、32 ビットの境界に割り当てます。
long 整数は、SPARC システムでは 64 ビットの境界に割り当てます。データモデルについては、付録 C 64 ビットデバイスドライバの準備を参照してください。
long long 整数は、64 ビットの境界に割り当てます。
通常、割り当ての問題はコンパイラで処理されます。ただし、ドライバの作成者は、デバイスへのアクセスに適切なデータ型を使用する必要があるため、割り当てに注意を払う傾向があります。一般にデバイスレジスタにはポインタ参照によってアクセスするため、ドライバはデバイスへのアクセス時にポインタが適正に割り当てるようにする必要があります。
SPARC プロセッサによって生じるデータ割り当ての制限のため、C 構造体にも割り当ての要件があります。構造体の割り当て要件は、もっとも厳密に割り当てられた構造体コンポーネントによって生じます。たとえば、文字だけを含む構造体には割り当ての制限はありませんが、long long メンバーを含む構造体は、このメンバーが 64 ビットの境界で割り当てられることを保証するように構築する必要があります。
SPARC プロセッサでは、ビッグエンディアンのバイト順序を使用します。整数の最上位バイト (MSB) は、その整数の一番低いアドレスに格納されます。最下位バイトは、このプロセッサのワードの一番高いアドレスに格納されます。たとえば、バイト 63 は 64 ビットプロセッサの最下位バイトです。
SPARC プロセッサでは、レジスタウィンドウを使用します。各レジスタウィンドウは、8 個の インレジスタ、8 個の ローカルレジスタ、8 個の アウトレジスタ、および 8 個の グローバルレジスタで構成されています。アウトレジスタは、次のウィンドウのインレジスタになります。レジスタウィンドウの数は、プロセッサの実装によって 2 - 32 の範囲で変わります。
ドライバは通常 C で記述されるため、レジスタウィンドウが使用されていることは、通常、コンパイラによって隠されています。ただし、ドライバをデバッグするときには、レジスタウィンドウを使用する必要が生じる場合があります。
バージョン 7 の SPARC プロセッサには、乗算命令または除算命令はありません。乗算命令および除算命令は、ソフトウェアでエミュレートされます。ドライバはバージョン 7、バージョン 8、またはバージョン 9 のプロセッサで実行されることがあるため、負荷がかかる整数の乗算や除算は避けてください。代わりに、ビット単位の左シフトや右シフトを使用して、2 のべき乗で乗算や除算を行ってください。
『SPARC Architecture Manual, Version 9』には、SPARC CPU の詳細が記載されています。『SPARC Compliance Definition, Version 2.4』には、SPARC V9 のアプリケーションバイナリインタフェース (ABI) の詳細が記載されています。このマニュアルでは、32 ビット SPARC V8 ABI と 64 ビット SPARC V9 ABI. について説明しています。このドキュメントは、SPARC インターナショナル (http://www.sparc.com/japanese/index.html) から入手できます。