| 日本-日本語 | 
      
  | 
  
      
  | 
  
| 
 | 
     
OpenVMS マニュアル | 
    
  
  | 
    
     
HP OpenVMS MACRO コンパイラ 
 | 
    
    
  
| 目次 | 索引 | 
OpenVMS Alpha システムでは, /OPTIMIZE=ALL を指定すると VAXREGS が有効になり,モジュール中のすべてのルーチンのすべてのレジスタの使用が正しく宣言されていないと,正しくないコードが生成されます。
| オプション | 説明 | 
|---|---|
| GRANULARITY | VAX の書き込みの細分性の規則を維持する。 /PRESERVE=GRANULARITY を指定すると,コンパイラは,バイト,ワード,またはアラインされていないロングワードの書き込みを実行する VAX 命令に対して生成するコードの中で, Alpha の Load-locked 命令シーケンスと Store-conditional 命令シーケンス,または Itanium の compare-exchange (cmpxchg) 命令を使用する。 | 
| ATOMICITY | VAX の変更操作の不可分性を維持する。 /PRESERVE=ATOMICITY を指定すると,コンパイラは,変更オペランドを伴う VAX 命令に対して生成するコードの中で, Alpha の Load-locked 命令シーケンスおよび Store-conditional 命令シーケンス,または Itanium の compare-exchange (cmpxchg) 命令を使用する。 | 
/PRESERVE と /PRESERVE=(GRANULARITY,ATOMICITY) は同じです。細分性と不可分性の維持がどちらも有効になり,細分性と不可分性の両方の保証が必要な VAX コーディング構造が見つかると,細分性よりも不可分性が優先されます。
VAX の細分性と不可分性の保証が必要な VAX MACRO コードのセクションがある場合は,モジュール全体に対してこれらの保証を適用するようにコンパイラに指示する必要はありません。代わりに,.PRESERVE 指示文と .NOPRESERVE 指示文を使用し ( 付録 B を参照) ,これらのセクションだけに保証を適用することができます。コンパイラは,モジュール全体に対して膨らんだコードを生成する必要がないため,これらの指示文によってコードが最適化されます。
/PRESERVE=ATOMICITY を指定すると,ユニプロセシング・システムだけでなく,マルチプロセシング・システムでも不可分性が保証されます。
/PRESERVE 修飾子があるときには,/RETRY_COUNT 修飾子を指定することで,細分性または不可分性が保証された更新を,コンパイラが生成するコードで何度リトライするかを制御できます。
![]()  |   警告 /PRESERVE=ATOMICITY を有効にすると,アラインされていないデータ参照はすべて回復不可能な予約オペランド・フォルトになります。 第 2.11.5 項 を参照してください。また,/PRESERVE=GRANULARITY を有効にすると,アラインされていると想定されたアドレスに対するアラインされていないワード参照は,回復不可能な予約オペランド・フォルトになります。  | 
/RETRY_COUNT 修飾子がない場合,コンパイラは無限にこれらの操作をリトライするコードを生成します。
以下の機能を 1 つ以上指定することができます。
| オプション | 説明 | 
|---|---|
| CONDITIONALS | .IF 指示文と .ENDC MACRO 指示文に関連付けられた満たされない条件付きコードをリスト出力する。 | 
| CALLS | マクロ呼び出しと繰り返し範囲の展開をリスト出力する。 | 
| DEFINITIONS | マクロ定義をリスト出力する。 | 
| EXPANSIONS | マクロ展開をリスト出力する。 | 
| BINARY | マクロ呼び出しの展開によって生成されるバイナリ・コードをリスト出力する。 | 
デフォルトでは,コンパイラはベース・ポインタとして使用されるレジスタ中のアドレス (FP ベースのポインタや SP ベースのポインタを除く) は,ルーチンの入口でロングワードにアラインされているものと想定し, BYTE,WORD,および LONG のデータをそれに応じてロードするコードを生成します。その結果,想定が正しくないと,実行時にアラインメント・フォルトが発生し,性能に大きな影響が出ます。 /UNALIGNED を指定すると,コンパイラは,ポインタがアラインされていないものと想定してコードを生成します。このコードはかなり大きくなりますが,アラインメント・フォルトを処理するよりも効率が良くなります。
![]()  |   注意 コンパイラはクォドワード・レジスタのアラインメントを追跡しません。クォドワードのメモリ参照 (VAX の MOVQ 命令など) では,レジスタ追跡コードによってアドレスがロングワードにアラインされていない可能性があることが分かっていないかぎり,コンパイラはベース・アドレスがクォドワードにアラインされていることを想定します。 OpenVMS Alpha および OpenVMS I64 のビルトインでのクォドワードの参照は,常にクォドワードにアラインされているものと想定されます。これらは必ず新しいコードにあるため,データは正しくアラインされているはずです。  | 
/UNALIGNED 修飾子は,通常,データがアラインされていないことが多いが,ソース中のデータ・アラインメントを訂正することでメリットが得られるほど高い性能を必要としないモジュールにのみ適しています。
| オプション | 説明 | 
|---|---|
| INFO | 情報レベルのメッセージをすべて有効にする。 | 
| NOINFO | 情報レベルのメッセージをすべて無効にする。 | 
| WARN | 情報レベルのメッセージと警告レベルのメッセージをすべて有効にする。 | 
| NOWARN | 情報レベルのメッセージと警告レベルのメッセージをすべて無効にする。 | 
| 目次 | 索引 | 
      
  | 
  ||||||||