48 #error wrong platform - this source code file is for the GNU C compiler.
83 #define cpuid(index,eax,ebx,ecx,edx)\
85 ("mov %%"REG_b", %%"REG_S"\n\t"\
87 "xchg %%"REG_b", %%"REG_S\
88 : "=a" (eax), "=S" (ebx),\
89 "=c" (ecx), "=d" (edx)\
96 int eax, ebx, ecx, edx;
97 int max_std_level, max_ext_level, std_caps=0, ext_caps=0;
100 __asm__ __volatile__ (
109 "xor $0x200000, %0\n\t"
124 cpuid(0, max_std_level, ebx, ecx, edx);
126 if(max_std_level >= 1){
127 cpuid(1, eax, ebx, ecx, std_caps);
128 if (std_caps & (1<<23))
130 if (std_caps & (1<<25))
131 rval |= MM_MMXEXT | MM_SSE;
132 if (std_caps & (1<<26))
136 if (ecx & 0x00000200 )
138 if (ecx & 0x00080000 )
140 if (ecx & 0x00100000 )
144 cpuid(0x80000000, max_ext_level, ebx, ecx, edx);
146 if(max_ext_level >= 0x80000001){
147 cpuid(0x80000001, eax, ebx, ecx, ext_caps);
148 if (ext_caps & (1<<31))
150 if (ext_caps & (1<<30))
152 if (ext_caps & (1<<23))
156 cpuid(0, eax, ebx, ecx, edx);
157 if ( ebx == 0x68747541 &&
161 if(ext_caps & (1<<22))
163 }
else if (ebx == 0x746e6543 &&
167 if(ext_caps & (1<<24))
169 }
else if (ebx == 0x69727943 &&
183 if (ext_caps & (1<<24))
187 av_log(NULL, AV_LOG_DEBUG,
"%s%s%s%s%s%s\n",
188 (rval&MM_MMX) ?
"MMX ":
"",
189 (rval&MM_MMXEXT) ?
"MMX2 ":
"",
190 (rval&MM_SSE) ?
"SSE ":
"",
191 (rval&MM_SSE2) ?
"SSE2 ":
"",
192 (rval&MM_3DNOW) ?
"3DNow ":
"",
193 (rval&MM_3DNOWEXT) ?
"3DNowExt ":
"");