else if文のように上から順に比較をする場合、場合分けが増えると末端のケースの実行速度は低下します。頻繁に分岐するケースは先頭近くに配置してください。
【使用例】
引数の値によりリターン値を変えます。
改善前ソースコード
int func(int a)
{
if (a==1)
a = 2;
else if (a==2)
a = 4;
else if (a==3)
a = 0;
else
a = 0;
return(a);
}
|
改善前アセンブリ展開コード
_func:
CMP #01H,R1
BEQ L11
L12:
CMP #02H,R1
BNE L14
L13:
MOV.L #00000004H,R1
RTS
L14:
CMP #03,R1
BNE L17
L16:
MOV.L #00000008H,R1
RTS
L17:
MOV.L #00000000H,R1
RTS
L11:
MOV.L #00000002H,R1
RTS
|
改善後ソースコード
int func(int a)
{
if (a==3)
a = 8;
else if (a==2)
a = 4;
else if (a==1)
a = 2;
else
a = 0;
return (a);
}
|
改善後アセンブリ展開コード
_func:
CMP #03H,R1
BEQ L11
L12:
CMP #02H,R1
BNE L14
L13:
MOV.L #00000004H,R1
RTS
L14:
CMP #01H,R1
BNE L17
L16:
MOV.L #00000002H,R1
RTS
L17:
MOV.L #00000000H,R1
RTS
L11:
MOV.L #00000008H,R1
RTS
|