首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么检测CPU是否支持SSE指令集

2012-03-07 
如何检测CPU是否支持SSE指令集?如题,能给我现成的函数就最好了![解决办法]/**偶的破机器 :TRUE CPUID_STD_

如何检测CPU是否支持SSE指令集?
如题,能给我现成的函数就最好了!

[解决办法]
/**
偶的破机器 :
TRUE CPUID_STD_FPU
TRUE CPUID_STD_VME
TRUE CPUID_STD_DEBUGEXT
TRUE CPUID_STD_4MPAGE
TRUE CPUID_STD_MSR
FALSE CPUID_STD_PAE
TRUE CPUID_STD_MCHKXCP
TRUE CPUID_STD_CMPXCHG8B
TRUE CPUID_STD_SYSENTER
TRUE CPUID_STD_MTRR
TRUE CPUID_STD_GPE
TRUE CPUID_STD_MCHKARCH
TRUE CPUID_STD_CMOV
TRUE CPUID_STD_PAT
FALSE CPUID_STD_PSE36
TRUE CPUID_STD_MMX
TRUE CPUID_STD_FXSAVE
TRUE CPUID_STD_SSE
**/

#include <stdio.h>

#define CPUID_STD_FPU 0x00000001
#define CPUID_STD_VME 0x00000002
#define CPUID_STD_DEBUGEXT 0x00000004
#define CPUID_STD_4MPAGE 0x00000008
#define CPUID_STD_TSC 0x00000010
#define CPUID_STD_MSR 0x00000020
#define CPUID_STD_PAE 0x00000040
#define CPUID_STD_MCHKXCP 0x00000080
#define CPUID_STD_CMPXCHG8B 0x00000100
#define CPUID_STD_APIC 0x00000200
#define CPUID_STD_SYSENTER 0x00000800
#define CPUID_STD_MTRR 0x00001000
#define CPUID_STD_GPE 0x00002000
#define CPUID_STD_MCHKARCH 0x00004000
#define CPUID_STD_CMOV 0x00008000
#define CPUID_STD_PAT 0x00010000
#define CPUID_STD_PSE36 0x00020000
#define CPUID_STD_MMX 0x00800000
#define CPUID_STD_FXSAVE 0x01000000
#define CPUID_STD_SSE 0x02000000

int main()
{
const char *__msg__[2] = { "FALSE " , "TRUE " };

int R0 , R1 , R2 , R3 ;

#define _CPUID( id , R0 , R1 , R2 , R3 ) \
__asm mov eax , id \
__asm cpuid \
__asm mov R0 , eax \
__asm mov R1 , ebx \
__asm mov R2 , ecx \
__asm mov R3 , edx

_CPUID( 1 , R0 , R1 , R2 , R3 );

#define TESTBIT( __mask__ ) printf( "%s %s\n " , __msg__ [ 0 != (R3 & __mask__ )] , # __mask__ )
TESTBIT( CPUID_STD_FPU );
TESTBIT( CPUID_STD_VME );
TESTBIT( CPUID_STD_DEBUGEXT );
TESTBIT( CPUID_STD_4MPAGE );
TESTBIT( CPUID_STD_MSR );
TESTBIT( CPUID_STD_PAE );
TESTBIT( CPUID_STD_MCHKXCP );
TESTBIT( CPUID_STD_CMPXCHG8B );
TESTBIT( CPUID_STD_SYSENTER );
TESTBIT( CPUID_STD_MTRR );
TESTBIT( CPUID_STD_GPE );
TESTBIT( CPUID_STD_MCHKARCH );
TESTBIT( CPUID_STD_CMOV );
TESTBIT( CPUID_STD_PAT );
TESTBIT( CPUID_STD_PSE36 );
TESTBIT( CPUID_STD_MMX );
TESTBIT( CPUID_STD_FXSAVE );
TESTBIT( CPUID_STD_SSE );


return 0;
}

热点排行