2010-04-26 3 views
1

SSE2 내장 함수가있는 8x16 비트 벡터에 대한 전치 함수를 쓰고 있습니다. 그 함수 (8x8x16bit 크기의 행렬)에 대한 8 가지 인수가 있기 때문에 참조로 전달할 수는 없습니다. 컴파일러에 의해 최적화 될 것인가 (이 __m128i 객체는 스택 대신 레지스터로 전달 될 것인가)?인라인 함수를 참조하여 __m128i 객체를 전달하면 이러한 객체가 스택으로 이동됩니까?

코드 스 니펫 :

inline void transpose (__m128i &a0, __m128i &a1, __m128i &a2, __m128i &a3, 
         __m128i &a4, __m128i &a5, __m128i &a6, __m128i &a7) { 
    .... 
    } 

답변

2

스택에 푸시되지 않을 가능성이 있습니다. 함수가 인라인 인 경우 컴파일러는 실제로 호출자의 데이터를 호출 수신자에게 전달하는 대신 호출 된 함수에서 호출 수신자 함수로 작업 (코드)을 푸시합니다.

이제 인라인은 힌트이므로 컴파일러는 실제로 호출을 인라인하지 않기로 결정한 다음 Zan의 조언을 따르고 컴파일 된 코드의 모양을 실제로 확인해야합니다.

3

누가 말할 수 있습니까?

왜 컴파일을 해체하지 않습니까? 그것이 유일한 방법입니다.

0

이 제한 사항은 Windows 및 MSVC (++)에만 적용됩니다 (이에 따라 적절하게 질문을 표시해야 함).

나는 이것을 C++와 참조로 시도하지는 않았지만 MSVC와 포인터를 인라인과 함께 사용하면 컴파일러가 간접 참조를 최적화하는 것처럼 보입니다. 아마 C++ 레퍼런스에도 동일하게 적용될 것이지만 다른 포스터가 지적했듯이 생성 된 코드를 살펴 봐야한다.

+0

나는 MSVC를 사용하지 않고있다. –

+0

@ : 글라디올러스 : 그래, 괜찮은 컴파일러, 즉 gcc 나 인텔의 ICC를 사용하는 한 괜찮을 것이다. –

관련 문제