2012-02-17 3 views
4

VS2010 CRT 라이브러리의 일부 기능을 약간 수정 한 버전을 만들려고합니다. 모두 명령 세트 아키텍처를 보유하고있는 전역 변수에 액세스하려는 부분을 제외하고는 모두 잘 작동합니다. 버전 (ISA) :x64에 __asm이없는 SSE 버전을 얻으십시오.

if (__isa_available > __ISA_AVAILABLE_SSE2) 
{ 
    // ... 
} 
else if (__isa_available == __ISA_AVAILABLE_SSE2) 
{ 
    // ... 
} 

값이 보유해야 내가 어셈블리 파일에

__ISA_AVAILABLE_X86 equ 0 
__ISA_AVAILABLE_SSE2 equ 1 
__ISA_AVAILABLE_SSE42 equ 2 
__ISA_AVAILABLE_AVX equ 3 

방법 및 __isa_available이 값은 어디에도 찾을 수 없다 할당이 (내가 발견을 시도했습니다 내 모든 디렉토리의 파일 ...)

MSDN은 지침 집합을 결정하는 예제 인 CPUID을 참조합니다. 그 문제는 __asm 블록을 사용하고 내 x64 빌드에서 허용되지 않는 문제입니다.

__isa_available에 올바른 값을 빠르게 할당하는 방법을 아는 사람이 있습니까? 역시 같은 웹 사이트에

__cpuid in intrin.h

광범위한 코드 샘플은 다음과 같습니다

답변

3

Microsoft는 인라인 어셈블리 지원을 중단하기로 결정했습니다. 그러나 그들은 새로운 형식을 도입했습니다. CPUID에 대한 자세한 정보는 새 형식 here (예를 들어)에서 찾을 수 있습니다.

인라인 어셈블리보다 intrinsics의 장점은 추가 코드없이 x86 및 x64와 호환되며 사용하기가 쉽다는 것입니다.

+0

정말 환상적입니다. – demorge

1

VC++은 인라인 ASM없이 CPUID를 사용할 수있는 고유 있습니다.