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 ":"",