ARM
alignment

Armのunaligned accessについて

More than 1 year has passed since last update.

How does the ARM Compiler support unaligned accesses?のメモ。


unaligned accessとは

ロード・ストア命令において、データサイズでアラインメントされていないアドレスにアクセスすること。

e.g. アドレス0x0002からのロングワード(4バイト)アクセス(LDR/STR)など。

C言語でpackedの構造体メンバにアクセスする場合などに起こりうる。


unaligned accessを行うとどうなるか


ARMv5以前

データアボート例外発生。


ARMv6以降

ハードウェアでunalinged accessをサポート(設定でON/OFF)。


ハードウェアではどう扱っているか

unalinged accessが発生した場合、インタフェースのバス幅(64bit or 128bit)分まとめて読み込み、必要な部分のみ処理することにより対応。処理が増える分、当然aligned accessより遅くなる。

また、Device memoryに設定されているバス(通常、ペリフェラルが繋がる(FPGA含む))には当てはまらない(例外発生)。