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