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含む))には当てはまらない(例外発生)。