Rational Developer for System z
Enterprise PL/I for z/OS, Version 3.8, コンパイラーおよびランタイム 移行ガイド

代入元と代入先の重複

P->Z = Q->Z; という代入について見てみましょう。ここで、Z は CHAR(6) BASED です。

OPT(0) を使用した場合、従来のコンパイラーは、代入元をまず 6 バイト の一時変数に代入してから、この一時変数を代入先に代入します。

ただし OPT(2) を使用した場合、従来のコンパイラーは、1 つの MVC を使用 してこの代入を実行します。

代入元と代入先が重複している場合は、これらの異なるインプリメンテーション方法により異 なる結果が得られます。

新しいコンパイラーでは、DEFAULT コンパイラー・オプションの OVERLAP サ ブオプションにより、次のようにこの動作が制御されます。

例えば SUBSTR(A,4,6) = SUBSTR(A,3,6); という代入について 、A = 'abcdefghijklm' である場合は、次のように処理されます。

したがって、最小限の作業で最大限の互換性を得るには、コンパイラー・オプ ション DFT(OVERLAP) を指定するとよいでしょう。

ただしこのオプションを指定した場合、コンパイラーは、代入元と代入先が 重複しないことが分かっている状況では低速なコードを生成するとともに、 他のいくつかの最適化処理を省略します。 代入元と代入先が重複しないようにコードを変更してから DFT(NOOVERLAP) を 使用することをお勧めします。

例えば次の代入は、

   SUBSTR(A,4,6) = SUBSTR(A,3,6);

次の代入に置き換えることができます。

   temp_Char6 = SUBSTR(A,3,6);
   SUBSTR(A,4,6) = temp_Char6;

Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)