检测CPU支持的指令SSE

  最近学习SSE指令集,SSE全称是stream SIMD Extentions(流SIMD扩展) ,SSE指令采用128位存储单元,可以放置4个浮点数,也就是说一条命令可以执行4次浮点数运算。SSE是为了更快地处理浮点数而开发的扩展指令集,因此该指令通常被用于几何运算方面,例如3D绘图应用软件、电脑游戏。对图形图像、多媒体感兴趣的,可以一起来研究研究。 
  下面先贴一段简单的检测程序,以后在找或者翻译两篇(e文比较烂 :~)

 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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章