2011-08-01 6 views
2

나는 다음과 같은 명령을 사용하여 시도했다 :내 int에 문제가 있습니까?

__m128i b = _mm_set_epi32 (y, y, x, x); 

y를 x는 int 치의 있습니다. 내가 디버거를 실행

나는 B 형의 것을 참조 :

내가 B를위한 것 [2] 부호 __int64는 각각 32 비트 (내가 그 그들이 여기에 무슨 말을 생각 4 개 정수로 : http://msdn.microsoft.com/en-us/library/019beekt.aspx)

내 코드가 무엇인지 알 수 있습니까?

감사

+0

무엇 lang? 태그를 올바르게 입력하십시오 – JonH

+0

어떤 언어를 사용하고 있습니까? 태그를 사용하여 질문에 답변하십시오. – Mark

+1

'_mm_set_epi32'는 부적합합니다. 'b'의 타입은'__m128i'가 typedef 된 것이 무엇이든지입니다. '_mm_set_epi32'가하는 일이 무엇이든간에'b'의 타입을 바꿀 수 없으므로,'b'의 타입이 당신이 기대하는 것이 아닌 경우'_mm_set_epi32'를 보지 마십시오. – delnan

답변

3

내가하지 여기에 문제가 볼 - 128 비트 정수가 SSE의 외부 가장 큰 기본 유형이 64 비트 정수로 표현되는이 64 비트 인텔 CPU가 처리 할 수있는 등록 .

디버거가 typedefed 또는 macro'd 형식이 아닌 "실제"형식을 표시 할 가능성이 큽니다.

+1

나는 본다. 고맙습니다! –

+1

'__m128i'가 배열 타입의 typedef-name이라면, 배열은 할당 가능/copy-initializable이 아니기 때문에 위의 코드는 컴파일되지 않습니다. '__m128i'는 아마도 typedef-name이 아니라, 32 비트 정수의 4 배수를 나타내는 고유의 구현 특정 형이며, 디버거에서는'unsigned __int64 [2]'로만 표시됩니다. 이것은 디버거의 버그 기능 일 뿐이며'__m128i'의 본질과는 거의 관계가 없습니다. – AnT

0

Typedef는 별칭이며, 확률은 좋습니다. 디버거가 __m128i의 별칭을 표시합니다. C에서 새로운 타입을 정의하는 유일한 방법은 struct 키워드를 사용하는 것입니다. 다른 모든 기술 (typedef 등)은 해당 유형으로 대체 될 수있는 유형 별칭으로 연결됩니다.

사실이라고 가정 할 때 예상보다 다르게 표시되는 것 외에 다른 문제가 있습니까?