Everything
A.7.4 テーブルの活用

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