A.7.5 分岐

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