最適化(-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:
最適化されたコードのデバッグ方法