ARMアセンブラ勉強中
いやね、おかしいとは思ってたんですよ。
ハーフワードの転送をしてると、
ADD r6,r14,r8,LSL #2 LDR r4,[r6,#0]
こんな感じの記述が沢山出てくるわけですよ。
なんでLSL #2なんだ?LSL #1の間違いじゃないのか?
まあ、ARM様は自分の計り知れない崇高な計算をしているんだろうとそのときは納得してたんですよね。
で、しばらくARMのドキュメントを眺めてたんだけど、やっぱりおかしい。
↑のアセンブラをCに直すと、
r4 = *(r14 + r8 * 4);
こうなるわけだ。
r14がベースだとして、明らかに4バイト単位で移動している。
なぜ?自分はハーフワードの転送を行っていたはずだ。
…
……
………(;゚д゚)ァ....
ARMは4バイトでアラインされるんだったよ(´▽`*)アハハ
……前のやり方だと全部4バイトになっちまうから使えねぇよヽ(`Д´)ノウワァン
まあ、どうせ破棄するつもりだったし丁度良かったかもね。
……負け惜しみm9(^Д^)プギャー
追記:
あれ?
構造体のアライメント
非パック構造のアライメントは、そのフィールドに要求される最大アライメントとなります。
おいらが使ってるのはuint16のはずなのに……(;´Д`)
追記2:
ZAS = -zas4 # Min byte alignment for structures
おまえのせいかー!!