Mercurial > libavcodec.hg
comparison i386/cputest.c @ 3279:647a677c00a4 libavcodec
Remove unused and unsupported Cyrix's "Extended MMX",
Add SSE3 support.
Patch by Zuxy Meng < zuxy POIS meng AH gmail POIS com >
Original thread:
04/26/06 13:13:
[Ffmpeg-devel] [PATCH] Bug fix, SSE3 support in i386/cputest.c and dsputil.h
author | gpoirier |
---|---|
date | Fri, 28 Apr 2006 07:46:13 +0000 |
parents | bfabfdf9ce55 |
children | c537a97eec66 |
comparison
equal
deleted
inserted
replaced
3278:93110d5554ab | 3279:647a677c00a4 |
---|---|
62 rval |= MM_MMX; | 62 rval |= MM_MMX; |
63 if (std_caps & (1<<25)) | 63 if (std_caps & (1<<25)) |
64 rval |= MM_MMXEXT | MM_SSE; | 64 rval |= MM_MMXEXT | MM_SSE; |
65 if (std_caps & (1<<26)) | 65 if (std_caps & (1<<26)) |
66 rval |= MM_SSE2; | 66 rval |= MM_SSE2; |
67 if (ecx & 1) | |
68 rval |= MM_SSE3; | |
67 } | 69 } |
68 | 70 |
69 cpuid(0x80000000, max_ext_level, ebx, ecx, edx); | 71 cpuid(0x80000000, max_ext_level, ebx, ecx, edx); |
70 | 72 |
71 if(max_ext_level >= 0x80000001){ | 73 if(max_ext_level >= 0x80000001){ |
74 rval |= MM_3DNOW; | 76 rval |= MM_3DNOW; |
75 if (ext_caps & (1<<30)) | 77 if (ext_caps & (1<<30)) |
76 rval |= MM_3DNOWEXT; | 78 rval |= MM_3DNOWEXT; |
77 if (ext_caps & (1<<23)) | 79 if (ext_caps & (1<<23)) |
78 rval |= MM_MMX; | 80 rval |= MM_MMX; |
81 if (ext_caps & (1<<22)) | |
82 rval |= MM_MMXEXT; | |
79 } | 83 } |
80 | 84 |
81 cpuid(0, eax, ebx, ecx, edx); | |
82 if ( ebx == 0x68747541 && | |
83 edx == 0x69746e65 && | |
84 ecx == 0x444d4163) { | |
85 /* AMD */ | |
86 if(ext_caps & (1<<22)) | |
87 rval |= MM_MMXEXT; | |
88 } else if (ebx == 0x746e6543 && | |
89 edx == 0x48727561 && | |
90 ecx == 0x736c7561) { /* "CentaurHauls" */ | |
91 /* VIA C3 */ | |
92 if(ext_caps & (1<<24)) | |
93 rval |= MM_MMXEXT; | |
94 } else if (ebx == 0x69727943 && | |
95 edx == 0x736e4978 && | |
96 ecx == 0x64616574) { | |
97 /* Cyrix Section */ | |
98 /* See if extended CPUID level 80000001 is supported */ | |
99 /* The value of CPUID/80000001 for the 6x86MX is undefined | |
100 according to the Cyrix CPU Detection Guide (Preliminary | |
101 Rev. 1.01 table 1), so we'll check the value of eax for | |
102 CPUID/0 to see if standard CPUID level 2 is supported. | |
103 According to the table, the only CPU which supports level | |
104 2 is also the only one which supports extended CPUID levels. | |
105 */ | |
106 if (eax < 2) | |
107 return rval; | |
108 if (ext_caps & (1<<24)) | |
109 rval |= MM_MMXEXT; | |
110 } | |
111 #if 0 | 85 #if 0 |
112 av_log(NULL, AV_LOG_DEBUG, "%s%s%s%s%s%s\n", | 86 av_log(NULL, AV_LOG_DEBUG, "%s%s%s%s%s%s\n", |
113 (rval&MM_MMX) ? "MMX ":"", | 87 (rval&MM_MMX) ? "MMX ":"", |
114 (rval&MM_MMXEXT) ? "MMX2 ":"", | 88 (rval&MM_MMXEXT) ? "MMX2 ":"", |
115 (rval&MM_SSE) ? "SSE ":"", | 89 (rval&MM_SSE) ? "SSE ":"", |