/proc/cpuinfoのサポートフラグについて。

■/proc/cpuinfoのサポートフラグについて。
 パッと説明が出てこないかな。。。ということで。。。
 ※「有効」とは限らない点に注意。

$ sudo apt-get install -y linux-headers-`uname -r`

■項目数の一致
$ grep flags /proc/cpuinfo | \
  sed s/"\t\| \|\:\|flags"/"\n"/g | \
  grep -v "^\$" | \
  wc -l
39

$ grep flags /proc/cpuinfo | \
  sed s/"\t\| \|\:\|flags"/"\n"/g | \
  grep -v "^\$" | \
  sed s/"sse2"/"XMM3"/ | \
  sed s/"sse"/"XMM"/ | \
  sed s/"pni"/"XMM2"/ | \
  sed s/"clflush"/"CLFLUSH_MONITOR"/ | \
  tr [a-z] [A-Z] | \
  for list in `xargs`;do \
    find /usr/src/linux-headers-* -type f -name "cpufeature.h" -print | \
    grep "^#define .*FEATURE_${list}" `xargs` | \
    sed s/^/"${list},"/g | \
    sed s/"\(.*\)\,#define .*_FEATURE_\(.*\).*\/\* \(.*\) \*\/"/"\"\1\",\"\3\",\"\2\""/g | \
    sed s/"\t"/" "/g | \
    sed s/" *("/"\",\"("/g | \
    sed s/" \"\$"/"\""/g | \
    grep -v "cpu_has_" | \
    grep ",.*\"${list}\"," || echo "Not Found ${list}"
  done | \
  sort -u
  wc -l
39

■検索。

$ grep flags /proc/cpuinfo | \
  sed s/"\t\| \|\:\|flags"/"\n"/g | \
  grep -v "^\$" | \
  sed s/"sse2"/"XMM3"/ | \
  sed s/"sse"/"XMM"/ | \
  sed s/"pni"/"XMM2"/ | \
  sed s/"clflush"/"CLFLUSH_MONITOR"/ | \
  tr [a-z] [A-Z] | \
  for list in `xargs`;do \
    find /usr/src/linux-headers-* -type f -name "cpufeature.h" -print | \
    grep "^#define .*FEATURE_${list}" `xargs` | \
    sed s/^/"${list},"/g | \
    sed s/"\(.*\)\,#define .*_FEATURE_\(.*\).*\/\* \(.*\) \*\/"/"\"\1\",\"\3\",\"\2\""/g | \
    sed s/"\t"/" "/g | \
    sed s/" *("/"\",\"("/g | \
    sed s/" \"\$"/"\""/g | \
    grep -v "cpu_has_" | \
    grep ",.*\"${list}\"," || echo "Not Found ${list}"
  done | \
  sort -u
"3DNOW","3DNow!","3DNOW","(1*32+31)"
"3DNOWEXT","AMD 3DNow! extensions","3DNOWEXT","(1*32+30)"
"APIC","Onboard APIC","APIC","(0*32+ 9)"
"CLFLUSH_MONITOR",""" clflush reqd with monitor","CLFLUSH_MONITOR","(3*32+25)"
"CMOV","CMOV instructions","CMOV","(0*32+15)"
"CR8_LEGACY","CR8 in 32-bit mode","CR8_LEGACY","(6*32+ 4)"
"CX16","CMPXCHG16B","CX16","(4*32+13)"
"CX8","CMPXCHG8 instruction","CX8","(0*32+ 8)"
"DE","Debugging Extensions","DE","(0*32+ 2)"
"EXTAPIC","Extended APIC space","EXTAPIC","(6*32+ 3)"
"EXTD_APICID","has extended APICID","(8 bits)","EXTD_APICID","(3*32+26)"
"FPU","Onboard FPU","FPU","(0*32+ 0)"
"FXSR","FXSAVE/FXRSTOR, CR4.OSFXSR","FXSR","(0*32+24)"
"FXSR_OPT","FXSAVE/FXRSTOR optimizations","FXSR_OPT","(1*32+25)"
"LAHF_LM","LAHF/SAHF in long mode","LAHF_LM","(6*32+ 0)"
"LM","Long Mode","(x86-64)","LM","(1*32+29)"
"MCA","Machine Check Architecture","MCA","(0*32+14)"
"MCE","Machine Check Exception","MCE","(0*32+ 7)"
"MMX","Multimedia Extensions","MMX","(0*32+23)"
"MMXEXT","AMD MMX extensions","MMXEXT","(1*32+22)"
"MSR","Model-Specific Registers","MSR","(0*32+ 5)"
"MTRR","Memory Type Range Registers","MTRR","(0*32+12)"
"NX","Execute Disable","NX","(1*32+20)"
"PAE","Physical Address Extensions","PAE","(0*32+ 6)"
"PAT","Page Attribute Table","PAT","(0*32+16)"
"PGE","Page Global Enable","PGE","(0*32+13)"
"PSE","Page Size Extensions","PSE","(0*32+ 3)"
"PSE36","36-bit PSEs","PSE36","(0*32+17)"
"RDTSCP","RDTSCP","RDTSCP","(1*32+27)"
"REP_GOOD","rep microcode works well","REP_GOOD","(3*32+16)"
"SEP","SYSENTER/SYSEXIT","SEP","(0*32+11)"
"SVM","Secure virtual machine","SVM","(6*32+ 2)"
"SYSCALL","SYSCALL/SYSRET","SYSCALL","(1*32+11)"
"TSC","Time Stamp Counter","TSC","(0*32+ 4)"
"UP","smp kernel running on up","UP","(3*32+ 9)"
"VME","Virtual Mode Extensions","VME","(0*32+ 1)"
"XMM",""sse"","XMM","(0*32+25)"
"XMM2",""sse2"","XMM2","(0*32+26)"
"XMM3",""pni" SSE-3","XMM3","(4*32+ 0)"