-alias


コンパイル・オプション / 最適化オプション

[指定形式]

-alias = { noansi | ansi }

 

-

省略時解釈

alias=noansiです。optimize=maxの場合はalias=ansiとなります。

[詳細説明]

-

ポインタ指示先の型を考慮した最適化を実施するかどうかを選択します。

-

alias=ansiを指定した場合、ANSI規格に基づき、ポインタ指示先の型を考慮した最適化を行います。一般には、alias=noansi を指定した場合よりもオブジェクト性能が向上しますが、alias=ansi と alias=noansiとで実行結果が異なる場合があります。

-

alias=noansiを指定した場合はV.1.00と同様で、ANSI規格に基づくポインタ指示先の型を考慮した最適化を行いません。

[例]

long x;
long n;
void func(short * ps)
{
    n = 1;
    *ps = 2;
    x = n;
}

-

<alias=noansi 指定時>
*ps = 2; によって、n の値が書き換わる可能性があるとみなし(A)で n の値を再ロードします。

_func:
     MOV.L      #_n,R4
     MOV.L      #1,[R4]    ;  n = 1;
     MOV.W      #2,[R1]    ;  *ps = 2;
     MOV.L      [R4],R5    ; (A) n を再ロードする
     MOV.L      #_x,R4
     MOV.L      R5,[R4]
     RTS

-

<alias=ansi 指定時>
*ps と n は型が異なるため、*ps = 2; ではnの値は変化しないと判断し、(B) で、n = 1 で代入に使用した値を再利用します(もし*ps = 2; によって n の値が書き換わる場合、結果は変わります)。

_func:
    MOV.L       #_n,R4
    MOV.L       #1,[R4]    ;  n = 1;
    MOV.W       #2,[R1]    ;  *ps = 2;
    MOV.L       #_x,R4
    MOV.L       #1,[R4]    ; (B) n = 1 で代入に使用した値を再利用する
    RTS

[備考]

-

optimize=0 または optimize=1 が有効な場合にaliasオプションを選択すると、alias=ansiの選択は無視され、常にalias=noansiが選択されたものとしてコード生成します。