Natural Optimizer がアクティブ化されると、このセクションで説明するオプションを設定して、チェックを指定できます。
最適化されるステートメントを指定するためにオプションを使用することはできません。
このドキュメントでは、次のトピックについて説明します。
以下の表は、NOC オプションのリストおよび説明です。 デフォルト値には下線が引かれています。これは、オプションが存在しない場合に想定される値です。
1 つの NOC オプションはカッコまたは一重引用符で囲まれた文字列で構成され(Natural OPTIONS
ステートメント内を除く)、複数のオプションはコンマで区切られます。 一部のオプションには値がありますが、一部のオプションはオプション文字列内に存在するだけで環境を変更できます。
以下のルールが適用されます。
オプションの節は角カッコ [ ] で囲まれています。
選択肢は波カッコ { } で囲まれています。
各選択肢は縦棒 "|" で区切られています。
これらの選択肢から 1 つのみ指定できます。
ON
は Y
(Yes)と同じです。
OFF
は N
(No)と同じです。
(該当する場合に)オプションの節 ON
または OFF
、または等価の値を使用しないで指定されたオプションは、ON
に設定されたと解釈されます。 例えば、OVFLW
は OVFLW=ON
と同じです。
オプション OFF
を除き、指定されたオプションによって最適化は(ON
が指定されたのと同じように)オンに切り替わり、デフォルト値が適用されます。 例えば、INDEX
は ON,INDEX
と同じです。
オプション | 説明 |
---|---|
ABEND |
コンパイル中に Natural Optimizer Compiler が ABEND オプションを検出したときに、Natural Optimizer Compiler によって Natural を直ちに異常終了させるコードが生成されるようにします。 このオプションは単独で使用する必要があり、そうでない場合は無視されます。 他のパラメータはこのオプションによって変更またはリセットされません。
このオプションはデバッグに役立ちます。
|
CACHE[={ON| OFF |Y|N}] |
変数のキャッシュをオンまたはオフに切り替えます。 「パフォーマンスの考慮事項」セクションの「変数のキャッシュ」も参照してください。 |
CPU= /370 |
対象となるアーキテクチャを指定します。 /370 オプションは IBM および Siemens に有効です。 |
DIGTCHCK[={ON| OFF |Y|N}] |
同じ型および精度の別の変数に移動するときに、パック型およびアンパック型の数値フィールド(フォーマット P および N)の桁をチェックするかどうかを指定します。 例えば、DIGTCHCK が ON で、アンパック型の数値変数(フォーマット N)に X'FA' などの無効な桁が含まれている場合、同じ精度の別のアンパック型の数値変数に移動すると S0C7 (または NAT0954 )エラーが発生します。 DIGTCHCK が OFF の場合は、エラーは発生しませんが、生成されるコードは高速になります。
|
ERRDUMP[={ON| OFF |Y|N}] |
コンパイルフェーズでエラー条件が検出された場合に NOC がアベンドするかどうかを指定します。 これは、Natural Optimizer Compiler 自体のデバッグに役立ちます。 |
INDEX[={ON| OFF |Y|N}] |
最適化されたコードで配列の添字について範囲外の値がチェックされるかどうかを指定します。 下記の「警告」も参照してください。 |
INDX[={ON| OFF |Y|N}] |
最適化されたコードで配列の添字について範囲外の値がチェックされるかどうかを指定します。
さらに、 |
IO[={ON| OFF|Y|N}] |
予約済み(将来的に使用される予定)です。 |
LOOPS[={ON| OFF |Y|N}] |
互換性保持の目的でのみ提供されています。 有効ではありません。 |
MIX[={ON| OFF |Y|N}] |
互換性保持の目的でのみ提供されています。 有効ではありません。 |
NODBG [={ON| OFF|Y|N}] |
「パフォーマンスの考慮事項」セクションの「 |
NOSGNTR[={ON| OFF |Y|N}] |
パック型数値のみに適用されます。
|
ON |
最適化をオンに切り替えます。 追加のオプションを指定しない場合、各オプションに定義されているデフォルト値が有効です。 下記の「警告」で示すように、このために意図しない結果が発生する場合があります。特に、オプション INDEX、INDX、OVFLW 、および RANGE に該当します。
|
OFF |
最適化をオフに切り替えます。 |
OPTLEV={ 2|3} |
最適化レベルを指定します。プログラムを通過するパスの数とほぼ同じです。
|
OVFLW[={ON| OFF |Y|N}] |
算術演算または割り当てでのオーバーフローのチェックが、最適化されたコードに含まれるかどうかを指定します。
下記の「警告」も参照してください。 |
PGEN[={ON| OFF |Y|N}] |
最適化されたコードの逆アセンブリが出力されるかどうかを指定します。 このオプションによって、他のすべてのトレースオプションも有効になります。
下記の「PGEN オプション」も参照してください。 |
RANGE[={ON| OFF |Y|N}] |
配列の操作で範囲チェックが実行されるかどうかを指定します。 これにより、配列の範囲は、すべてのオペランドの対応する次元の要素数と同じになります。
下記の「警告」も参照してください。 |
SIGNCHCK[={ ON|OFF|Y|N}] |
パック型またはアンパック型数値乗算器での乗算の結果で、負のゼロがチェックされるかどうかを指定します。 ゼロに負の数を乗算した場合、MP 機械命令によって負のゼロの結果が生成されます。 SIGNCHCK がオンの場合、この負のゼロは正のゼロに変換されます。 負のゼロのチェックは、パック型またはアンパック型数値乗算器でのすべての乗算に対して実行されます。
|
TRENTRY |
Software AG での内部使用のためのみ。 このパラメータの設定は変更しないでください。 |
ZD [={ ON|OFF|Y|N}] |
除数のゼロがチェックされるかどうかを指定します。 このオプションを指定した場合、コードが挿入され、プログラムは Natural の ZD プロファイルパラメータに従って動作します。つまり、Natural エラー NAT1302 が発行されるか、結果はゼロです。 このオプションを指定しない場合、除数がゼロの場合は Natural エラー NAT0954 が発生します。
Natural の『パラメータリファレンス』ドキュメントの「ZD - ゼロ割り算のチェック」も参照してください。 |
注意:INDEX 、INDX 、OVFLW 、および RANGE について:値 OFF および N の適用に注意してください。 オーバーフローのチェックまたは配列の添字のチェックを抑制すると、不正なプログラムによって、予期しない結果、ストレージ破損、異常終了が発生する場合があります。 下記の「INDEX および OVFLW の例」も参照してください。 INDEX および OVFLW の影響について説明しています。 |
以下に参考情報を示します。
DEFINE DATA LOCAL ... 1 P1 (P1/9) ... 1 P3 (P3/9) ... 1 I (I4) 1 J (I4) 1 K (I4) 1 L (I4) END-DEFINE ... P1(I:J) := P3(K:L) ... END
INDX=ON
または INDEX=ON
が設定されると、I
、J
、K
、および L
が P1
および P3
それぞれに対して定義された範囲内にあることを確認するコードが生成されます。
INDX=ON
または RANGE=ON
が設定されると、I:J
および K:L
が同じ長さの範囲を示すことを確認するコードが生成されます。
OVFLW=ON
が設定されると、P3
の値が対応する P1
変数に適合することを確認するコードが生成されます。
例:ここでは、値 100
でオーバーフローが発生します。
エラー状況の例:
P3
のオカレンスの 1 つに値 100
が含まれており、OVFLW=OFF
が設定されている場合、対応する P1
のオカレンスに割り当てられる値はゼロになります。 添字変数 I
がゼロまたは 9
よりも大きく、INDX=OFF
が設定されている場合、配列 P1
に属していないストレージエリアが破損します。 これらのオプション(OVFLW
および INDX
)が ON
に設定されている場合は、標準の Natural ランタイムでの場合と同じように Natural エラーが発生します。
上記で指定されている NOC オプションでは、追加コードが生成されます。 ただし、これはデバッグが困難なエラーを防ぐなど、チェックによってもたらされる利点によって十分に相殺されます。 検出されないエラーによって予期しない結果が発生することがあります。
コード生成が最小になり、最適なパフォーマンスが得られるように、以下の設定を使用します。
OPT='NODBG,NOSGNTR,SIGNCHCK=OFF,ZD=OFF'
ただし、この設定は、完全にデバッグされたプログラミングオブジェクトに対してのみ使用してください。「警告」も参照してください。
PGEN
オプションを指定すると、Natural Optimizer Compiler によって、生成されたコードおよび内部 Natural 構造が出力されます。 したがって、バグ修正、パフォーマンスの確認、サポートの問題などのために、コードおよび構造を調べることができます。
PGEN
オプションで生成された結果を解釈するには、IBM の /370 アセンブラを理解している必要があります。
このオプションは、担当地域の Software AG のサポートを受けて使用することをお勧めします。
以下に参考情報を示します。
PGEN
機能を使用するには、Optimizer Compiler をアクティブ化するときに PGEN
オプションを設定します。
バッファはメモリ内に保持されるため、ユーザースレッドがトレース情報を保持するのに十分な大きさにならない可能性があります。 この場合は、例えば、プログラムのトレースが必要な部分に対してのみ PGEN
をオンに設定してみます。
OPTIONS MCG=(PGEN=ON,TRGPT=ON) または OPTIONS MCG=+PGEN,TRGPT |
トレースをオンにします。GPT エントリのトレースが含まれます。 |
OPTIONS MCG=(PGEN=OFF) または OPTIONS MCG=-PGEN |
トレースをオフにします。 |
さまざまなオプションが出力の内容に影響します。 基本的な PGEN
オプションによって、Natural ソース行および対応するコードの逆アセンブリのフォーマットされたリストが生成され、NOCSHOW
ユーティリティによる抽出のためにメモリ内に保持されます。下記の「PGEN オプションの出力」で説明します。
TRSTMT
、TRGPT
、TRMPT
、および TRVDT
オプションによって、各行に関連付けられた内部データ構造の 16 進ダンプが出力されます。
TRBASES
および TRCACHE
オプションによって、ベースレジスタおよびキャッシュ変数に関する情報が出力されます。
以下の表では、PGEN=ON
の場合のオプションについて説明します。 使用される構文については、上記の「オプションのリスト」の説明を参照してください。
オプション | 説明 |
---|---|
LPP={5|..| 55 |..|255} |
トレース出力のページごとの行数。TREXT=ON の場合にのみ使用されます。
|
NOsrcE[={ON| OFF |Y|N}] |
NOsrcE=OFF の場合、Natural ソースステートメントが出力に含まれます。
|
TRACELEV={ 0 |..|255} |
トレースレベルを指定します。 この 1 バイト値の各ビットによって、トレースするバッファタイプが指定されます。これらのビットは、TRxxx オプションを使用して設定することもできます。
|
TRBASES[={ON| OFF |Y|N}] |
ベースレジスタ割り当てがトレースされるかどうかを指定します。 |
TRCACHE[={ON| OFF|Y|N}] |
CACHE エントリがトレースされるかどうかを指定します。
|
TREXT[={ON| OFF |Y|N}] |
TREXT=ON の場合、以下で説明するように、トレースはユーザー出口 NOCPRINT に送られます。
|
TRGPT[={ON| OFF |Y|N}] |
GPT エントリがトレースされるかどうかを指定します。
|
TRMPT[=ON| OFF |Y|N}] |
MPT エントリがトレースされるかどうかを指定します。
|
TRSTMT[={ON| OFF |Y|N}] |
STMT エントリがトレースされるかどうかを指定します。
|
TRVDT[={ON| OFF |Y|N}] |
VDT エントリがトレースされるかどうかを指定します。
|
以下の例も参照してください。
Natural Optimizer Compiler では、PGEN
の出力を以下の 2 つの場所に送ることができます。
このバッファの内容は、CHECK
、CAT
、STOW
、または RUN
コマンドが実行されるたびに上書きされます。 システムユーティリティ NOCSHOW
が用意されており、このバッファの内容を表示、検索、または印刷できます。
NOCSHOW ユーティリティを呼び出すには
Natural Optimizer Compiler がアクティブなときに、ダイレクトコマンド NOCSHOW
を CHECK
、STOW
、CAT
、または RUN
の後に入力します。
以下の PF キーを画面で使用できます。
キー | 機能 |
---|---|
PF2 | 出力の先頭に位置付けます。 |
PF4 | 1 行前に位置付けます。 |
PF5 | 1 行後に位置付けます。 |
PF6 | Natural プリンタサポート No.1 に印刷します。 |
PF7 | 1 ページ前に位置付けます。 |
PF8 | 1 ページ後に位置付けます。 |
PF10 | テキスト文字列をスキャンします。 |
PF11 | スキャンを繰り返します。 |
TREXT=ON
が指定された場合、Natural Optimizer Compiler によって、すべての出力行はトレースバッファに追加されるのではなく、ユーザー出口 NOCPRINT
に渡されます。
NOCPRINT
は、通常の OS レジスタ規則に従って呼び出されます。 レジスタ 1 は、81 バイトの印刷行のアドレスを含むフルワードをポイントします。行の位置 1 に ANSI 改行制御文字があります。 レジスタ 13 は、18*4 バイトのエリアをポイントします。このエリアはセーブエリアとして使用できます。
レジスタ 14 にはリターンアドレスが含まれ、レジスタ 15 には NOCPRINT
のエントリアドレスが含まれます。
ユーザー出口 NOCPRINT
は、上記のレジスタ規則をサポートする任意の言語で書き込むことができます。 Natural Optimizer Compiler ニュークリアスに加え、Natural ニュークリアスにリンクする必要があります。
このセクションでは、PGEN
オプションで作成された出力を解釈する方法について説明します。
PGEN
出力の先頭に、ソース行の一部とは思われない逆アセンブルされた行があります。 これらは、最適化されていないコードから最適化されているコードへ制御が渡るときに常に実行される前処理を構成する命令です。 永続的なベースレジスタがロードされ、前処理の正しいポイントに制御が渡されます。
下記の「サンプルセクション A」を参照してください。
複数のソース行がコードなしで出力される場合があります。 これは、Natural コンパイラによって、複数行にまたがる場合があるステートメントのオブジェクト内の単一の行番号が出力されるためです。 下記の「サンプルセクション B」を参照してください。
NODBG=OFF
(デフォルト)が指定されている場合、各 Natural ステートメントの開始時に一連の命令が生成されます。
BALR R9,R11 DC X'....'
この一連の命令によって、(エラーがある場合に)行番号が設定され、TEST
モードが ON
に切り替えられているかどうかがチェックされます。 この一連の命令がないと、NOC でコンパイルされているステートメントの Natural デバッガによるデバッグはできません。 下記の「サンプルセクション C」を参照してください。
逆アセンブルされた行の間に改行がある場合があります。 この改行は、内部ステートメントの区切りを示しています。 これは、単一の Natural ステートメントによって複数の内部(中間コード)ステートメントが生成される場合があるために発生します。
000000 5880 D354 L R8,RTADR+4 000004 5870 D370 L R7,RTADR+32 000008 4810 6006 LH R1,6(,R6) 00000C 1F60 SLR R6,R0 00000E 47F1 A000 BC 15,0(R1,R10)
0010 OPTIONS MCG=(PGEN=ON,TRGPT=ON) 0020 DEFINE DATA LOCAL 0030 1 I(I4) 0040 1 P(P7.2) 0050 1 T(P7.2) 0060 END-DEFINE 0070 * 0080 SETTIME 0090 * 000012 45E0 B040 BAL R14,RETH 000016 0036 DC X'0036' 0100 FOR I=1 TO 100000
000018 059B BALR R9,R11 00001A 003E DC X'003E' 00001C D203 7000 833B MVC I,#VAR033B 000022 059B BALR R9,R11 000024 004C DC X'004C' 000026 47F0 A040 BC 15,64(,R10) 00002A 059B BALR R9,R11 00002C 005A DC X'005A' 00002E BFFF 8343 ICM R15,15,#VAR0343 000032 BF0F 7000 ICM R0,15,I 000036 1A0F AR R0,R15 000038 BE0F 7000 STCM R0,15,I 00003C 059B BALR R9,R11 00003E 006C DC X'006C' 000040 BFFF 833F ICM R15,15,#VAR033F 000044 BF0F 7000 ICM R0,15,I 000048 190F CR R0,R15 00004A 4720 A066 BC 2,102(,R10) 0110 ADD 1.00 TO P 00004E 059B BALR R9,R11 000050 0082 DC X'0082' 000052 FA41 7004 8347 AP P,#VAR0347 000058 DC00 7008 B488 TR P+4(1),PSGNTR 0120 END-FOR 0130 * 00005E 059B BALR R9,R11 000060 0094 DC X'0094' 000062 47F0 A02A BC 15,42(,R10) 0140 T:=*TIMD(0080) 000066 059B BALR R9,R11 000068 009C DC X'009C' 00006A 45E0 B0D8 BAL R14,SYSFUNC 00006E 0330 B881 DC X'0330B881' 000072 F246 7009 8330 PACK T,#VAR0330 000078 F040 7009 0002 SRP T,2,0 00007E DC00 700D B488 TR T+4(1),PSGNTR 0150 T:=T / 10 0160 * 000084 059B BALR R9,R11 000086 00AE DC X'00AE' 000088 F864 D100 7009 ZAP OP1(7),T 00008E F811 D130 8349 ZAP WORK2(2),#VAR0349 000094 45E0 B104 BAL R14,ZDCHECK 000098 F240 7009 B355 PACK T,ZEROZ 00009E 47F0 E01C BC 15,28(,R14) 0000A2 FD61 D100 8349 DP OP1(7),#VAR0349 0000A8 D204 7009 D100 MVC T,OP1 0000AE DC00 700D B488 TR T+4(1),PSGNTR 0170 DISPLAY 'ELAPSED TIME (S)' T 0000B4 45E0 B040 BAL R14,RETH 0000B8 00C0 DC X'00C0' 0180 END
グローバルパラメータ ZD
は、NOC コンパイラの動作に影響します。 上記の「オプションのリスト」で説明されている ZD
オプションの説明を参照してください。
COMPOPT
パラメータ PSIGNF
(Natural の『システムコマンド』ドキュメントのシステムコマンド COMPOPT
も参照)は、正のパック 10 進数の符号を ON
の場合は F、OFF
の場合は C にすることによって、動作に影響します。 このパラメータは、NOSGNTR=OFF
が指定された場合に適用されます。
パック型データ(フォーマット P)については、以下の図を参照してください。
NOSGNTR=OFF |
および | PSIGNF=ON |
すべての符号は F に正規化されます(デフォルト)。 |
NOSGNTR=OFF |
および | PSIGNF=OFF |
すべての符号は C に正規化されます。 |
NOSGNTR=ON |
すべての符号は最後の操作で生成されたままです。 |
数値データ(フォーマット N)の場合、NOSGNTR
および PSIGNF
の設定に関係なく、符号は常に F に正規化されます。