AMD Turion64
d:id:youandi:20060728#p3
Turion64なLinux上でせかせかCPUID判定のコードを書いていて、SSE3の判定が有効になるのでアレ?と思っていたら正式対応していた。
[MYCOM] AMDが「Turion 64」を正式発表 - 90nm SOIでSSE3にも対応し25Wと35Wを用意
http://journal.mycom.co.jp/news/2005/03/10/008.html
あまり意識しないで購入していたな。因みになぜアレ?となったかというと、
$ cat /proc/cpuid
とした際のflagsに「sse3」が無かったから。Pen4 3.4GHz(Prescot)上のKnoppix5.0.1で確認しても同じだったので、そういうもんなんだろう。
作ってみた確認コード。g++ 3.3.4, 3.4.5, 4.0.2では確認しているがVC++は未確認。バグっているのでそのまま流用すると多分痛い目に合います。
int nECX = 0; int nEDX = 0; #if defined(_MSC_VER) __asm { mov eax,0x00000001; cpuid; mov nEDX,edx; mov nECX,ecx; } #elif defined(__GNUC__) __asm__ __volatile__ ( " movl $0x00000001,%%eax \n\t" " cpuid " : "=c" (nECX), "=d" (nEDX) ); #endif if ( nEDX & (1 << 23) ) { fprintf( stdout, "with MMX\n" ); } if ( nEDX & (1 << 25) ) { fprintf( stdout, "with SSE\n" ); } if ( nEDX & (1 << 26) ) { fprintf( stdout, "with SSE2\n" ); } if ( nECX & (1 << 0) ) { fprintf( stdout, "with SSE3\n" ); } if ( nECX & (1 << 9) ) { fprintf( stdout, "with SSE4\n" ); }
3DNow!関連
int nEDX = 0; #if defined(_MSC_VER) __asm { mov eax,0x80000001; cpuid; mov nEDX,edx; } #elif defined(__GNUC__) __asm__ __volatile__ ( " movl $0x80000001,%%eax \n\t" " cpuid " : "=d" (nEDX) ); #endif if ( nEDX & (1 << 31) ) { fprintf( stdout, "with 3DNow!\n" ); } if ( nEDX & (1 << 30) ) { fprintf( stdout, "with Enhanced 3DNow!\n" ); }