switch文の各caseの処理がほぼ同じ場合は、テーブルを使用できないか検討してください。
【使用方法】
変数iの値により変数chに代入する文字定数を変えます。
改善前ソースコード
char func(int i)
{
char ch;
switch (i) {
case 0:
ch = ‘a’; break;
case 1:
ch = ‘x’; break;
case 2:
ch = ‘b’; break;
}
return(ch);
}
|
改善前アセンブリ展開コード
_func:
CMP #00H,R1
BEQ L17
L16:
CMP #01H,R1
BEQ L19
CMP #02H,R1
BEQ L20
BRA L21
L12:
L17:
MOV.L #00000061H,R1
BRA L21
L13:
L19:
MOV.L #00000078H,R1
BRA L21
L14:
L20:
MOV.L #00000062H,R1
L11:
L21:
MOVU.B R1,R1
RTS
|
改善後ソースコード
char chbuf[] = { ‘a’ , ‘x’ , ‘b’ };
char func(int i)
{
return (chbuf[i]);
}
|
改善後アセンブリ展開コード
_f
MOV.L #_chbuf,R4
MOVU.B [R1,R4],R1
RTS
|