ループの展開は特に内側のループが有効です。ループの展開によりプログラムサイズは増大するので、プログラムサイズを犠牲にしても実行速度を向上させたい場合に適用してください。
【使用例】
配列a[]を初期化します。
改善前ソースコード
extern int a[100];
void func()
{
int I;
for( i = 0 ; i < 100 ; i++ ){
a[i] = 0;
}
}
|
改善前アセンブリ展開コード
_func:
MOV.L #00000064H,R4
MOV.L #_a,R5
MOV.L #00000000H,R3
L11:
MOV.L R3,[R5+]
SUB #01H,R4
BNE L11
L12:
RTS
|
改善後ソースコード
extern int a[100];
void func()
{
int I;
for( i = 0 ; i < 100 ; i+=2 )
{
a[i] = 0;
a[i+1] = 0;
}
}
|
改善後アセンブリ展開コード
_func:
MOV.L #00000032H,R4
MOV.L #_a,R5
L11:
MOV.L #00000000H,[R5]
MOV.L #00000000H,04H[R5]
ADD #08H,R5
SUB #01H,R4
BNE L11
L12:
RTS
|