ARM、Bfinなどのさまざまなターゲットで一連の操作を実行しようとしています...しかし、Cで単純なコードを記述し、操作ごとにコンパイルするたびに、2回のロードと不要な1回のストアが発生しますすべての操作に。
ldr r2, [fp, #-24]
ldr r3, [fp, #-28]
add r3, r2, r3
str r3, [fp, #-20]
ldr r2, [fp, #-36]
ldr r3, [fp, #-40]
add r3, r2, r3
str r3, [fp, #-32]
ldr r2, [fp, #-44]
ldr r3, [fp, #-48]
add r3, r2, r3
str r3, [fp, #-20]
ldr r3, [fp, #-16]
add r3, r3, #1
str r3, [fp, #-16]
最適化オプションをオンにする-O1
と、結果を計算して出力に保存するだけです。
subl $24, %esp
movl $4, 4(%esp)
movl $.LC0, (%esp)
とにかく、同じ変数を何度もフェッチせずに操作を行うことができますか? 試してみましgcc -fgcse-lm
た-fgcse-sm
が、うまくいきませんでした。