[VC6] 检查MMX和SSE系列指令集的支持级别(最高SSE4.2)
来源:互联网 发布:软件编程计时计数器 编辑:程序博客网 时间:2024/05/17 01:34
参考文献——
《Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2 (2A, 2B & 2C): Instruction Set Reference, A-Z》. December 2011.http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.html
《Intel® Processor Identification and the CPUID Instruction》. January 2011. http://developer.intel.com/content/www/us/en/processors/processor-identification-cpuid-instruction-note.html
《AMD64 Architecture Programmer's Manual Volume 3: General Purpose and System Instructions》. December 2011.http://support.amd.com/us/Processor_TechDocs/24594_APM_v3.pdf
《AMD CPUID Specification》. September 2010. http://support.amd.com/us/Embedded_TechDocs/25481.pdf
http://en.wikipedia.org/wiki/CPUID
运行效果——
代码如下——
// SSE系列指令集的支持级别. simd_sse_level 函数的返回值。#define SIMD_SSE_NONE0// 不支持#define SIMD_SSE_11// SSE#define SIMD_SSE_22// SSE2#define SIMD_SSE_33// SSE3#define SIMD_SSE_3S4// SSSE3#define SIMD_SSE_415// SSE4.1#define SIMD_SSE_426// SSE4.2const char*simd_sse_names[] = {"None","SSE","SSE2","SSE3","SSSE3","SSE4.1","SSE4.2",};// 是否支持MMX指令集BOOLsimd_mmx(){const DWORDBIT_DX_MMX = 0x00800000;// bit 23DWORDv_edx;// check processor support__try {_asm {mov eax, 1cpuidmov v_edx, edx}}__except (EXCEPTION_EXECUTE_HANDLER){return FALSE;}if ( v_edx & BIT_DX_MMX ){// check OS support__try {_asm{pxor mm0, mm0// executing any MMX instructionemms}return TRUE;}__except (EXCEPTION_EXECUTE_HANDLER){}}return FALSE;}// 检测SSE系列指令集的支持级别intsimd_sse_level(){const DWORDBIT_D_SSE = 0x02000000;// bit 25const DWORDBIT_D_SSE2 = 0x04000000;// bit 26const DWORDBIT_C_SSE3 = 0x00000001;// bit 0const DWORDBIT_C_SSSE3 = 0x00000100;// bit 9const DWORDBIT_C_SSE41 = 0x00080000;// bit 19const DWORDBIT_C_SSE42 = 0x00100000;// bit 20BYTErt = SIMD_SSE_NONE;// resultDWORDv_edx;DWORDv_ecx;// check processor support__try {_asm {mov eax, 1cpuidmov v_edx, edxmov v_ecx, ecx}}__except (EXCEPTION_EXECUTE_HANDLER){return SIMD_SSE_NONE;}if ( v_edx & BIT_D_SSE ){rt = SIMD_SSE_1;if ( v_edx & BIT_D_SSE2 ){rt = SIMD_SSE_2;if ( v_ecx & BIT_C_SSE3 ){rt = SIMD_SSE_3;if ( v_ecx & BIT_C_SSSE3 ){rt = SIMD_SSE_3S;if ( v_ecx & BIT_C_SSE41 ){rt = SIMD_SSE_41;if ( v_ecx & BIT_C_SSE42 ){rt = SIMD_SSE_42;}}}}}}// check OS support__try {_asm{xorps xmm0, xmm0// executing any SSE instruction}}__except (EXCEPTION_EXECUTE_HANDLER){return SIMD_SSE_NONE;}return rt;}int main(int argc, char* argv[]){int i;BOOLbmmx = simd_mmx();intnsse = simd_sse_level();printf("MMX: %d\n", bmmx);printf("SSE: %d\n", nsse);for(i=1; i<sizeof(simd_sse_names); ++i){if (nsse>=i)printf("\t%s\n", simd_sse_names[i]);}// waitgetch();printf("\n");return 0;}
- [VC6] 检查MMX和SSE系列指令集的支持级别(最高SSE4.2)
- 指令集的进步——MMX和SSE
- MMX 和SSE指令集的区别是什么
- MMX和SSE的运用
- MMX和SSE的运用
- 检查CPU是否支持MMX指令的代码
- 关于GCC下使用内建的多媒体指令集(MMX、SSE)函数
- 检测CPU指令集支持级别(SSE、AVX、AVX2、F16C、FMA、FMA4、XOP)
- SSE4.1指令集系列之一
- MMX和SSE
- 在视频格式转换中使用MMX和SSE指令集提高性能
- 在视频格式转换中使用MMX和SSE指令集提高性能
- 在视频格式转换中使用MMX和SSE指令集提高性能
- 在视频格式转换中使用MMX和SSE指令集提高性能
- 关于在使用Visual C++中使用MMX、SSE指令集的问题
- [x86]SIMD指令集发展历程表(MMX、SSE、AVX等)
- [x86]SIMD指令集发展历程表(MMX、SSE、AVX等)
- [x86]SIMD指令集发展历程表(MMX、SSE、AVX等)
- tomcat免安装版的配置
- ie浏览器IE浏览器Firefox火狐浏览器兼容性拙见
- 火狐与IE浏览器之间的一些差别收集
- 省选之后
- 算法啊算法
- [VC6] 检查MMX和SSE系列指令集的支持级别(最高SSE4.2)
- 分享Ubuntu下一些很棒的软件(一)
- 1425: sort hash表排序
- win7下telnet不能使用
- Qwt 5.2.1的安装与配置步骤总结
- 【菜鸟】用telnet在命令行下发简单的电子邮件
- 架构,框架,模式,构件,组件,中间件
- c# DllImport 错误处理的不足及解决办法
- 分享20佳极具创意的网站导航菜单设计案例