После выполнения 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;
}
}
Попробуйте более высокий уровень оптимизации? '-O2'? – Mysticial
На самом деле, можете ли вы показать больше сборки вокруг этой инструкции? (включая адреса) – Mysticial
Хм ... можете ли вы также показать источник этого фрагмента? – Mysticial