VS编译64位C++程序,不支持嵌入式汇编可以使用intrinsic function一定程度上弥补这个缺陷.
下面是使用intrinsic函数判断cpu是不是支持SSE42的一个例子
bool isSupportSSE42()
{
const int BIT_C_SSE42 = 0x00100000; // bit 20
int CPUInfo[4] = {0};
//CPUInfo参数用于接收输出的eax, ebx, ecx, edx这四个寄存器.
//这个函数的具体参考资料
//https://msdn.microsoft.com/en-us/library/hskdteyh(v=vs.140).aspx
__cpuid(CPUInfo,1);
if ((CPUInfo[2] & BIT_C_SSE42) == 0)
{
return false;
}
//这里假设操作系统支持SSE42特性
return true;
}
查询CPU feature更完善的实现, 请参考下面的地址
https://docs.microsoft.com/en-us/cpp/intrinsics/cpuid-cpuidex?redirectedfrom=MSDN&view=vs-2019