何年前?

もういっちょテスト。懐かし(?)のSSE判定。
なんか、1回だけ使ったことあったな。

/*
  Distinguish an Expansion function.
*/

#include <stdio.h>

#define FLAG_MMX   0x00800000
#define FLAG_3DNOW 0x80000000
#define FLAG_SSE   0x02000000

#define HAS_MMX   1
#define HAS_3DNOW 2
#define HAS_SSE   3

void cpuid(int op, int *eax, int *ebx, int *ecx, int *edx)
{
  unsigned int dwAX, dwBX, dwCX, dwDX;
  _asm
  {
    mov eax,op
    cpuid
    mov dwAX,eax
    mov dwBX,ebx
    mov dwCX,ecx
    mov dwDX,edx
  }
  *eax = dwAX;
  *ebx = dwBX;
  *ecx = dwCX;
  *edx = dwDX;
}

int check_cpu(void)
{
  int c[5];
  /* check CPU has CPUID */
  cpuid(0, &c[1], &c[2], &c[3], &c[4]);
  if(c[1] < 1)
    return( 0 );
  /* check CPU has SSE */
  cpuid(1, &c[1], &c[2], &c[3], &c[4]);
  if((c[4] & FLAG_SSE) == FLAG_SSE)
    return( HAS_SSE );
  /* check CPU has 3DNow! */
  cpuid(0x80000001, &c[1], &c[2], &c[3], &c[4]);
  if((c[4] & FLAG_3DNOW) == FLAG_3DNOW)
    return( HAS_3DNOW );
  /* check CPU has MMX */
  cpuid(1, &c[1], &c[2], &c[3], &c[4]);
  if((c[4] & FLAG_MMX) == FLAG_MMX)
    return( HAS_MMX );
  return( 0 );
}

int main(void)
{
  int cpu_code;
  cpu_code = check_cpu();

  printf("MMX:\t1\n");
  printf("3DNOW:\t2\n");
  printf("SSE:\t3\n");
  printf("This Computer has function: %d\n", cpu_code);

  printf("\n[Press Enter]");
  getchar();

  return( cpu_code );
}

cppってか完全にcだけど。(↓もだけど)

しかしこのシンタックスハイライトは、すごいっちゅーか、便利すぎるな。
Terapadとかのテキスト装飾ルールに適応したい。というか、ローカルソフトとして欲しいかも。
ページで作ってからソース開くのでも良いんだけどAPIとしても欲しいところだね。(笑)

コレだけのために使う価値ありだな。