関連するデータを同一関数の中で何度も参照している場合、構造体を用いると相対アクセスを利用したコードが生成され易くなり、効率向上が期待できます。また、引数として渡す場合も効率が向上します。相対アクセスにはアクセス範囲に制限があるため、頻繁にアクセスするデータは構造体の先頭に集めると効果的です。
データを構造化すると、データの表現を変更するようなチューニングが容易になります。
【使用例】
変数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
|