Everything
A.6.1 データの構造

関連するデータを同一関数の中で何度も参照している場合、構造体を用いると相対アクセスを利用したコードが生成され易くなり、効率向上が期待できます。また、引数として渡す場合も効率が向上します。相対アクセスにはアクセス範囲に制限があるため、頻繁にアクセスするデータは構造体の先頭に集めると効果的です。

データを構造化すると、データの表現を変更するようなチューニングが容易になります。

【使用例】

変数a, b, c に数値を代入します。

改善前ソースコード

 int a, b, c;
 void func()
 {
        a = 1;
        b = 2;
        c = 3;
}

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

_ func:
        MOV.L #_a,R4
        MOV.L #00000001H,[R4]
        MOV.L #_b,R4
        MOV.L #00000002H,[R4]
        MOV.L #_c,R4
        MOV.L #00000003H,[R4]
        RTS

改善後ソースコード

struct s{
        int a;
        int b;
        int c;
} s1;
void func()
{
        register struct s *p=&s1;
        p->a = 1;
        p->b = 2;
        p->c = 3;
}

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

_func:
       MOV.L #_s1,R5
       MOV.L #00000001H,[R5]
       MOV.L #00000002H,04H[R5]
       MOV.L #00000003H,08H[R5]
       RTS