Mercurial > libavcodec.hg
comparison ppc/dsputil_ppc.c @ 1340:09b8fe0f0139 libavcodec
PPC fixes & clean-up patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
author | michaelni |
---|---|
date | Fri, 04 Jul 2003 09:39:05 +0000 |
parents | 80c46c310a91 |
children | e8ff4783f188 |
comparison
equal
deleted
inserted
replaced
1339:338a2f6e6402 | 1340:09b8fe0f0139 |
---|---|
59 "put_no_rnd_pixels16_xy2_altivec", | 59 "put_no_rnd_pixels16_xy2_altivec", |
60 "clear_blocks_dcbz32_ppc", | 60 "clear_blocks_dcbz32_ppc", |
61 "clear_blocks_dcbz128_ppc" | 61 "clear_blocks_dcbz128_ppc" |
62 }; | 62 }; |
63 #ifdef POWERPC_PERF_USE_PMC | 63 #ifdef POWERPC_PERF_USE_PMC |
64 unsigned long long perfdata_miss[powerpc_perf_total][powerpc_data_total]; | 64 unsigned long long perfdata_pmc2[powerpc_perf_total][powerpc_data_total]; |
65 unsigned long long perfdata_pmc3[powerpc_perf_total][powerpc_data_total]; | |
65 #endif | 66 #endif |
66 #include <stdio.h> | 67 #include <stdio.h> |
67 #endif | 68 #endif |
68 | 69 |
69 #ifdef POWERPC_TBL_PERFORMANCE_REPORT | 70 #ifdef POWERPC_TBL_PERFORMANCE_REPORT |
84 perfdata[i][powerpc_data_max], | 85 perfdata[i][powerpc_data_max], |
85 (double)perfdata[i][powerpc_data_sum] / | 86 (double)perfdata[i][powerpc_data_sum] / |
86 (double)perfdata[i][powerpc_data_num], | 87 (double)perfdata[i][powerpc_data_num], |
87 perfdata[i][powerpc_data_num]); | 88 perfdata[i][powerpc_data_num]); |
88 #ifdef POWERPC_PERF_USE_PMC | 89 #ifdef POWERPC_PERF_USE_PMC |
89 if (perfdata_miss[i][powerpc_data_num] != (unsigned long long)0) | 90 if (perfdata_pmc2[i][powerpc_data_num] != (unsigned long long)0) |
90 fprintf(stderr, " Function \"%s\" (pmc2):\n\tmin: %llu\n\tmax: %llu\n\tavg: %1.2lf (%llu)\n", | 91 fprintf(stderr, " Function \"%s\" (pmc2):\n\tmin: %llu\n\tmax: %llu\n\tavg: %1.2lf (%llu)\n", |
91 perfname[i], | 92 perfname[i], |
92 perfdata_miss[i][powerpc_data_min], | 93 perfdata_pmc2[i][powerpc_data_min], |
93 perfdata_miss[i][powerpc_data_max], | 94 perfdata_pmc2[i][powerpc_data_max], |
94 (double)perfdata_miss[i][powerpc_data_sum] / | 95 (double)perfdata_pmc2[i][powerpc_data_sum] / |
95 (double)perfdata_miss[i][powerpc_data_num], | 96 (double)perfdata_pmc2[i][powerpc_data_num], |
96 perfdata_miss[i][powerpc_data_num]); | 97 perfdata_pmc2[i][powerpc_data_num]); |
98 if (perfdata_pmc3[i][powerpc_data_num] != (unsigned long long)0) | |
99 fprintf(stderr, " Function \"%s\" (pmc3):\n\tmin: %llu\n\tmax: %llu\n\tavg: %1.2lf (%llu)\n", | |
100 perfname[i], | |
101 perfdata_pmc3[i][powerpc_data_min], | |
102 perfdata_pmc3[i][powerpc_data_max], | |
103 (double)perfdata_pmc3[i][powerpc_data_sum] / | |
104 (double)perfdata_pmc3[i][powerpc_data_num], | |
105 perfdata_pmc3[i][powerpc_data_num]); | |
97 #endif | 106 #endif |
98 } | 107 } |
99 } | 108 } |
100 #endif /* POWERPC_TBL_PERFORMANCE_REPORT */ | 109 #endif /* POWERPC_TBL_PERFORMANCE_REPORT */ |
101 | 110 |
137 ((unsigned long*)blocks)[2] = 0L; | 146 ((unsigned long*)blocks)[2] = 0L; |
138 ((unsigned long*)blocks)[3] = 0L; | 147 ((unsigned long*)blocks)[3] = 0L; |
139 i += 16; | 148 i += 16; |
140 } | 149 } |
141 for ( ; i < sizeof(DCTELEM)*6*64 ; i += 32) { | 150 for ( ; i < sizeof(DCTELEM)*6*64 ; i += 32) { |
142 asm volatile("dcbz %0,%1" : : "r" (i), "r" (blocks) : "memory"); | 151 asm volatile("dcbz %0,%1" : : "b" (blocks), "r" (i) : "memory"); |
143 } | 152 } |
144 if (misal) { | 153 if (misal) { |
145 ((unsigned long*)blocks)[188] = 0L; | 154 ((unsigned long*)blocks)[188] = 0L; |
146 ((unsigned long*)blocks)[189] = 0L; | 155 ((unsigned long*)blocks)[189] = 0L; |
147 ((unsigned long*)blocks)[190] = 0L; | 156 ((unsigned long*)blocks)[190] = 0L; |
170 // aren't available yet (2003-06-26) | 179 // aren't available yet (2003-06-26) |
171 memset(blocks, 0, sizeof(DCTELEM)*6*64); | 180 memset(blocks, 0, sizeof(DCTELEM)*6*64); |
172 } | 181 } |
173 else | 182 else |
174 for ( ; i < sizeof(DCTELEM)*6*64 ; i += 128) { | 183 for ( ; i < sizeof(DCTELEM)*6*64 ; i += 128) { |
175 asm volatile("dcbzl %0,%1" : : "r" (i), "r" (blocks) : "memory"); | 184 asm volatile("dcbzl %0,%1" : : "b" (blocks), "r" (i) : "memory"); |
176 } | 185 } |
177 #else | 186 #else |
178 memset(blocks, 0, sizeof(DCTELEM)*6*64); | 187 memset(blocks, 0, sizeof(DCTELEM)*6*64); |
179 #endif | 188 #endif |
180 POWERPC_TBL_STOP_COUNT(powerpc_clear_blocks_dcbz128, 1); | 189 POWERPC_TBL_STOP_COUNT(powerpc_clear_blocks_dcbz128, 1); |
207 | 216 |
208 fakedata_middle = (fakedata + 512); | 217 fakedata_middle = (fakedata + 512); |
209 | 218 |
210 memset(fakedata, 0xFF, 1024); | 219 memset(fakedata, 0xFF, 1024); |
211 | 220 |
212 asm volatile("dcbzl %0, %1" : : "r" (fakedata_middle), "r" (zero)); | 221 /* below the constraint "b" seems to mean "Address base register" |
222 in gcc-3.3 / RS/6000 speaks. seems to avoid using r0, so.... */ | |
223 asm volatile("dcbzl %0, %1" : : "b" (fakedata_middle), "r" (zero)); | |
213 | 224 |
214 for (i = 0; i < 1024 ; i ++) | 225 for (i = 0; i < 1024 ; i ++) |
215 { | 226 { |
216 if (fakedata[i] == (char)0) | 227 if (fakedata[i] == (char)0) |
217 count++; | 228 count++; |
298 perfdata[i][powerpc_data_min] = 0xFFFFFFFFFFFFFFFF; | 309 perfdata[i][powerpc_data_min] = 0xFFFFFFFFFFFFFFFF; |
299 perfdata[i][powerpc_data_max] = 0x0000000000000000; | 310 perfdata[i][powerpc_data_max] = 0x0000000000000000; |
300 perfdata[i][powerpc_data_sum] = 0x0000000000000000; | 311 perfdata[i][powerpc_data_sum] = 0x0000000000000000; |
301 perfdata[i][powerpc_data_num] = 0x0000000000000000; | 312 perfdata[i][powerpc_data_num] = 0x0000000000000000; |
302 #ifdef POWERPC_PERF_USE_PMC | 313 #ifdef POWERPC_PERF_USE_PMC |
303 perfdata_miss[i][powerpc_data_min] = 0xFFFFFFFFFFFFFFFF; | 314 perfdata_pmc2[i][powerpc_data_min] = 0xFFFFFFFFFFFFFFFF; |
304 perfdata_miss[i][powerpc_data_max] = 0x0000000000000000; | 315 perfdata_pmc2[i][powerpc_data_max] = 0x0000000000000000; |
305 perfdata_miss[i][powerpc_data_sum] = 0x0000000000000000; | 316 perfdata_pmc2[i][powerpc_data_sum] = 0x0000000000000000; |
306 perfdata_miss[i][powerpc_data_num] = 0x0000000000000000; | 317 perfdata_pmc2[i][powerpc_data_num] = 0x0000000000000000; |
318 perfdata_pmc3[i][powerpc_data_min] = 0xFFFFFFFFFFFFFFFF; | |
319 perfdata_pmc3[i][powerpc_data_max] = 0x0000000000000000; | |
320 perfdata_pmc3[i][powerpc_data_sum] = 0x0000000000000000; | |
321 perfdata_pmc3[i][powerpc_data_num] = 0x0000000000000000; | |
307 #endif /* POWERPC_PERF_USE_PMC */ | 322 #endif /* POWERPC_PERF_USE_PMC */ |
308 } | 323 } |
309 } | 324 } |
310 #endif /* POWERPC_TBL_PERFORMANCE_REPORT */ | 325 #endif /* POWERPC_TBL_PERFORMANCE_REPORT */ |
311 } else | 326 } else |