(toppers-users 2529) コンフィギュレータのアライメント

takaya_kakizaki @ gmx.yamaha.com takaya_kakizaki @ gmx.yamaha.com
2006年 9月 13日 (水) 13:37:14 JST


柿崎です。

最近のMLでアライメントの話が出たので一言言わせてください。
コンフィギュレータが生成するスタティック配列は、
(mbfとかmpf,mplとかでバッファ領域をNULL指定すると生成される)

static VP __message_buffer_MBF_ID1[TCOUNT_VP(256)];

のような形で定義されるので、アライメントとしては
VP型の値が格納できるアライメントに整列されるのが普通です。
なので完全に処理系依存なんですよね。
(32bitのアドレス空間を持つプロセッサならVPは4バイトなので問題にならないの
ですが)

4バイトアライメントを保証したいなら

static VP __attribute__((aligned(4))) 
message_buffer_MBF_ID1[TCOUNT_VP(256)];

のような形でコンフィギュレータがコードを生成してくれるとよいのですが。
(でもこうするとgcc以外のコンパイラではどうするかという問題が残ります。)

さらに、FI4ではカーネルメモリを

UB _kernel_bufmgr_buffer[TSIZE_KERNEL_BUFFER];

と取るので、処理系によってはバスエラーが発生する可能性が
ぷんぷんするのですが。

せめて上と同じように

VP _kernel_bufmgr_buffer[TCOUNT_VP(TSIZE_KERNEL_BUFFER)];

とすべきではないでしょうか。

------------------------
柿崎 貴也
ヤマハ株式会社 サウンドネットワーク事業部
サウンドネット開発部
E-mail: kakizaki @ soundnet.yamaha.co.jp