A.6.4 ビットフィールドの割り付け

異なるビットフィールドのメンバを設定するためには、そのたびにビットフィールドを含むデータにアクセスしなければなりません。関連するビットフィールドを同じ構造体内にまとめて割り付けることによって、このアクセスを一度で済ますことができます。

【使用例】

同じ構造体に関連するビットフィールドを割り付けることによってサイズが改善する例を示します。

改善前ソースコード

struct str
{
         Int flag1:1;
}b1,b2,b3;
void func()
{
         b1.flag1 = 1;
         b2.flag1 = 1;
         b3.flag1 = 1;
}

改善前アセンブリ展開コード

_func:
       MOV.L #_b1,R5
       BSET #00H,[R5]
       MOV.L #_b2,R5
       BSET #00H,[R5]
       MOV.L #_b3,R5
       BSET #00H,[R5]
       RTS

改善後ソースコード

struct str
{
           int flag1:1;
           int flag2:1;
           int flag3:1;
}a1;
void func()
{
           a1.flag1 = 1;
           a1.flag2 = 1;
           a1.flag3 = 1;
}

改善後アセンブリ展開コード

__func:
        MOV.L #_a1,R4
        MOVU.B [R4],R5
        OR #07H,R5
        MOV.B R5,[R4]
        RTS