最近学习SSE指令集,SSE全称是stream SIMD Extentions(流SIMD扩展) ,SSE指令采用128位存储单元,可以放置4个浮点数,也就是说一条命令可以执行4此浮点数运算。
下面是一段简单的检测程序
const DWORD _SSE_FEATURE_BIT = 0x02000000 //sse标识位
const DWORD _SSE2_FEATURE_BIT = 0x04000000; //sse2标识位
bool _IsFeature(DWORD dwRequestFeature)
{
// 通过设置eax积存器为1,然后调用cpuid即可从edx获得标识
DWORD dwFeature = 0;
__try
{
_asm
{
mov eax,1
cpuid
mov dwFeature,edx
}
}
__except ( EXCEPTION_EXECUTE_HANDLER)
{
return false;
}
if ((dwRequestFeature == _SSE_FEATURE_BIT ) &&(dwFeature & _SSE_FEATURE_BIT ))
{
__try {
__asm {
xorps xmm0, xmm0 //一条SSE指令
}
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
return (0);
}
return(true);
}
else if ((dwRequestFeature == _SSE2_FEATURE_BIT) &&(dwFeature & _SSE2_FEATURE_BIT))
{
__try
{
__asm {
xorpd xmm0, xmm0
}
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
return (0);
}
return(true);
}
return false;
}