gcc の最適化オプションをいじっていると、次の行が見つかりました。
int bla(int moo) {
return moo * 384;
}
は次のように翻訳されます。
0: 8d 04 7f lea (%rdi,%rdi,2),%eax
3: c1 e0 07 shl $0x7,%eax
6: c3 retq
シフトは2 ^ 7の乗算を表すことを理解しています。そして、最初の行は 3 の乗算でなければなりません。
だから私は「lea」の行に完全に困惑しています。lea はアドレスをロードするはずではありませんか?