코드 : VS2012가 컴파일 기본 설정에MSVC가 왜 그런 사소한 일에 SSE2 명령을 사용합니까?
double Ret_Value=0;
가 :
101102AC fldz
101102AE lea eax,[Ret_Value]
101102B1 push eax
101102B2 fstp qword ptr [Ret_Value]
편집 : SSE2 프로젝트 설정에서 비활성화 된 경우
10112128 xorps xmm0,xmm0
1011212E movsd mmword ptr [Ret_Value],xmm0
이가로 컴파일 내가 아니다 push
과 lea
이이 초기화와 관련되어 있는지 확인하십시오. 그 이후에 완료된 내용 일 수도 있습니다. 단지 해체하면이 C++ 용으로 표시됩니다. 코드 네.
SSE2가 상당히 좋습니까? 그것을 제외하고 2 명령 짧은 무엇입니까? 어떤 종류의 최적화가 여기에서 수행됩니까?
발견 방법 : SSE2를 지원하지 않는 이전 프로세서에서 앱이 실패하기 시작했습니다.
간단한 코드 크기 최적화라고 생각합니다. 더 짧은 코드는보다 캐시 친화적이며 더 빠릅니다. 또한 스택을 사용하지 않으면 몇 가지 메모리 액세스가 저장됩니다. – rodrigo
가운데 2 개의 명령어가 수행해야하는 작업을 잘 모릅니다. 'Ret_Value' 만 0으로 설정하면'fldz; fstp [Ret_Value]'. – Jester
@Jester : 아마도 스택의 'eax'가 필요할 것이므로 아마도 파이프 라인 재배치 (intermix floating 및 non-floating 명령어) 일 것입니다. 함수 호출이나 그와 비슷한 것으로 추측합니다. – rodrigo