2013-10-26 4 views
2

4 개의 정수로 채워진 128 비트 변수가 있습니다. [1,2,3,4]. 나는 교대하고 싶다. 그래서 나는 [2,3,4,0]을 얻을 수있다. 가장 빠른 방법은 무엇입니까?__m128 (Intel Intrinsics)에서 32 비트 오른쪽으로 이동하는 가장 빠른 방법

내 현재 코드 :

__m128 v1; 
v1 = (__m128)_mm_srli_si128( _mm_castps_si128(v1) , 4); 

이 비트를 이동에 성공,하지만 속도와 캐시 최적화 (가능한 한 일명 적은 변수)에 대한 이동하려합니다. 어쨌든 __m128i에서주고받는 것을 피하기 위해이 코드를 향상시킬 수 있습니까?

감사합니다.

+0

아마도이 방법을 모르지만 현재 방법에는 1 개의 레지스터 만 있으면됩니다. 그러나 int <-> fp 전송 대기 시간에 도달하게됩니다. – Mysticial

답변

1

걱정하지 마십시오. __m128__m128i은 XMM 레지스터의 내용을 해석하는 두 가지 다른 방법이므로 컴파일시에 캐스팅이 사라집니다. 내 컴파일러 (Mac OS 10.9의 clang)는 전체 내용을 하나의 명령어로 컴파일합니다.

psrldq $0x4, %xmm0