gcc -m64 -O test.c -save-temps
を実行した後、私は気付いた: mov %edi, %edi
が生成されたアセンブリに表示されます。この指示は何かをしますか?それは%edi
をそれ自身に移し、効果的に何も達成しません。このアセンブリが生成される理由:
すべての最適化レベルでこのアセンブリが生成されますが、場合によっては配置が異なる場合があります。
さらなる状況を提供する必要がある場合は教えてください。この質問を投稿する時点で、私はさらなる文脈が必要だとは思わないが、私は間違っている可能性がある。手順の
コード:
subl $400, %edi
cmpl $20, %edi
ja .L4
mov %edi, %edi
jmp *.L11(,%rdi,8)
これは、switch文のためのジャンプテーブルを参照しています。
C出典:64ビットモードで
int main()
{
}
int thing(int x)
{
switch(x)
{
case 400:
return 1;
break;
case 404:
return 2;
break;
case 408:
return 3;
break;
case 412:
return 4;
break;
case 416:
return 5;
break;
case 420:
return 6;
break;
}
}
は、より高い最適化レベルを試してみてください? '-O2'ですか? – Mysticial
実際に、その命令の周りにもっとアセンブリを表示できますか? (アドレスを含む) – Mysticial
うーん...このスニペットのソースも表示できますか? – Mysticial