문제

하나의 128 비트 XMM 레지스터에 2 개의 X86 32 비트 레지스터를 저장하는 더 빠른 방법이 있습니까?

  movd  xmm0, edx
  movd  xmm1, eax
  pshufd xmm0, xmm0, $1
  por   xmm0, xmm1 

따라서 EAX가 0x12345678이고 EDX가 0x87654321 인 경우 XMM0의 결과는 0x8765432112345678이어야합니다.

감사

도움이 되었습니까?

해결책

SSE 4.1을 사용하면 사용할 수 있습니다 movd xmm0, eax / pinsrd xmm0, edx, 1 그리고 두 가지 지침으로하십시오.

구형 CPU의 경우 2 x를 사용할 수 있습니다 movd 그리고 punpckldq 총 3 개의 지침 :

movd xmm0, edx
movd xmm1, eax
punpckldq xmm0, xmm1

다른 팁

나는 MMX에 대해 많이 모르지만 아마도 당신은 packsSDW 명령을 원할 것입니다.

PacksSDW 명령은 소스 피연산자에서 두 개의 이중 단어를 가져 와서 대상 피연산자에서 두 개의 이중 단어를 가져 와서 포화를 통해 4 개의 서명 된 단어로 변환합니다. 명령어는이 네 단어를 함께 포장하고 결과를 대상 MMX 레지스터에 저장합니다.

(에서 http://webster.cs.ucr.edu/aoa/windows/html/themmxinstructionseta2.html)

편집 : 방금 SSE 레지스터라는 것을 깨달았습니다. 오, 음.

편집 : 이제 닥칠 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top