После выполнения 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)
Это ссылка на таблицу переходов дляоператор переключения.
C Источник:
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;
}
}