• 検索結果がありません。

インターリスト・ユーティリティをオプティマイザと組み合わせて使用 する方法

最適化(-On オプション)と -os および -ss オプションを指定してコンパイルすると、

インターリスト・ユーティリティの出力を制御できます。

❏ -os オプションを使用すると、コンパイラのコメントがアセンブリ・ソース文に 差し込まれます。

❏ -ss オプションと -os オプションを一緒に指定すると、コンパイラのコメントと元

の C/C++ ソースがアセンブリ・コードに差し込まれます。

最適化の際に -os オプションを指定した場合、インターリスト機能は 1つの独立した パスとして実行されません。その代わり、コンパイラはコード内にコメントを挿入 し、そのコメントにはコンパイラがどのようにコードの再配置と最適化を実行した かが示されます。これらのコメントは、アセンブリ言語ファイルの中に ;** で始ま るコメントとして出力されます。C/C++ ソース・コードは、-ss オプションと組み合 わせて指定した場合以外は差し込まれません。

インターリスト機能は C/C++ の文の境界にまたがった一部の最適化を不可能にする ので、最適化後のコードに影響を及ぼす場合があります。最適化は、通常のソース の差し込みを不可能にします。これは、コンパイラが広範囲にわたってプログラム の再配置を行うからです。したがって、-os オプションを指定した場合、コンパイラ は再構築後の C/C++ の文を書き込みます。

例 3-1 に、最適化(-O2)と -os オプションを指定してコンパイルした関数を示しま

す。アセンブリ・ファイルの中で、アセンブリ・コードにコンパイラのコメントが 差し込まれています。

例 3-1. -O2 および -os オプションを指定してコンパイルされた C コード (a) C ソース

int copy (char *str, const char *s, int n) {

int i;

インターリスト・ユーティリティをオプティマイザと組み合わせて使用する方法

例 3-1. -O2 および -os オプションを指定してコンパイルした C コード(続き)

(b) コンパイラ出力

-ss オプションおよび -os オプションを最適化と組み合わせて指定すると、コンパイ ラはコメントを差し込み、アセンブラの前にインターリスト機能が実行されること により、元の C/C++ ソースがアセンブリ・ファイルにマージされます。

例 3-2 に、最適化(-O2)と -os オプションを指定してコンパイルした 例 3-1 を示し ます。アセンブリ・ファイルの中で、アセンブリ・コードにコンパイラのコメント と C ソースが差し込まれています。

;***************************************************************

;* FNAME: _copy FR SIZE: 0 *

;* *

;* FUNCTION ENVIRONMENT *

;* *

;* FUNCTION PROPERTIES *

;* 0 Parameter, 0 Auto, 0 SOE *

;***************************************************************

_copy:

;*** 6 --- if ( n <= 0 ) goto g4;

CMPB AL,#0 ; |6|

B L2,LEQ ; |6|

; branch occurs ; |6|

;*** --- #pragma MUST_ITERATE(1, 4294967295, 1) :*** --- L$1 = n-1;

ADDB AL,#-1 MOVZ AR6,AL L1:

;*** ---g3:

;*** 7 --- *str++ = *s++;

;*** 7 --- if ( (--L$1) != (-1) ) goto g3;

MOV AL,*XAR5++ ; |7|

MOV *XAR4++,AL ; |7|

BANZ ; branch occurs ; |7|

;*** ---g4:

;*** --- return;

L2:

LRETR

; return occurs

インターリスト・ユーティリティをオプティマイザと組み合わせて使用する方法

例 3-2. -O2、-os、および -ss オプションを指定してコンパイルされた C コード

;---; 2 | int copy (char *str, const char *s, int n)

;---;***************************************************************

;* FNAME: _copy FR SIZE: 0 *

;* *

;* FUNCTION ENVIRONMENT *

;* *

;* FUNCTION PROPERTIES *

;* 0 Parameter, 0 Auto, 0 SOE *

;***************************************************************

_copy:

;* AR4 assigned to _str

;* AR5 assigned to _s

;* AL assigned to _n

;* AL assigned to _n

;* AR5 assigned to _s

;* AR4 assigned to _str

;* AR6 assigned to L$1

;*** 6 --- if ( n <= 0 ) goto g4;

;---; 4 | int i;---;

;---; 6 | for (i = 0;---; i <---; n;---; i++)

CMPB AL,#0 ; |6|

B L2,LEQ ; |6|

; branch occurs ; |6|

;*** --- #pragma MUST_ITERATE(1, 4294967295, 1) :*** --- L$1 = n-1;

ADDB AL,#-1 MOVZ AR6,AL NOP

L1:

最適化されたコードのデバッグ方法