Mercurial > libavcodec.hg
diff 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 |
line wrap: on
line diff
--- a/ppc/dsputil_ppc.c Thu Jul 03 23:29:00 2003 +0000 +++ b/ppc/dsputil_ppc.c Fri Jul 04 09:39:05 2003 +0000 @@ -61,7 +61,8 @@ "clear_blocks_dcbz128_ppc" }; #ifdef POWERPC_PERF_USE_PMC -unsigned long long perfdata_miss[powerpc_perf_total][powerpc_data_total]; +unsigned long long perfdata_pmc2[powerpc_perf_total][powerpc_data_total]; +unsigned long long perfdata_pmc3[powerpc_perf_total][powerpc_data_total]; #endif #include <stdio.h> #endif @@ -86,14 +87,22 @@ (double)perfdata[i][powerpc_data_num], perfdata[i][powerpc_data_num]); #ifdef POWERPC_PERF_USE_PMC - if (perfdata_miss[i][powerpc_data_num] != (unsigned long long)0) + if (perfdata_pmc2[i][powerpc_data_num] != (unsigned long long)0) fprintf(stderr, " Function \"%s\" (pmc2):\n\tmin: %llu\n\tmax: %llu\n\tavg: %1.2lf (%llu)\n", perfname[i], - perfdata_miss[i][powerpc_data_min], - perfdata_miss[i][powerpc_data_max], - (double)perfdata_miss[i][powerpc_data_sum] / - (double)perfdata_miss[i][powerpc_data_num], - perfdata_miss[i][powerpc_data_num]); + perfdata_pmc2[i][powerpc_data_min], + perfdata_pmc2[i][powerpc_data_max], + (double)perfdata_pmc2[i][powerpc_data_sum] / + (double)perfdata_pmc2[i][powerpc_data_num], + perfdata_pmc2[i][powerpc_data_num]); + if (perfdata_pmc3[i][powerpc_data_num] != (unsigned long long)0) + fprintf(stderr, " Function \"%s\" (pmc3):\n\tmin: %llu\n\tmax: %llu\n\tavg: %1.2lf (%llu)\n", + perfname[i], + perfdata_pmc3[i][powerpc_data_min], + perfdata_pmc3[i][powerpc_data_max], + (double)perfdata_pmc3[i][powerpc_data_sum] / + (double)perfdata_pmc3[i][powerpc_data_num], + perfdata_pmc3[i][powerpc_data_num]); #endif } } @@ -139,7 +148,7 @@ i += 16; } for ( ; i < sizeof(DCTELEM)*6*64 ; i += 32) { - asm volatile("dcbz %0,%1" : : "r" (i), "r" (blocks) : "memory"); + asm volatile("dcbz %0,%1" : : "b" (blocks), "r" (i) : "memory"); } if (misal) { ((unsigned long*)blocks)[188] = 0L; @@ -172,7 +181,7 @@ } else for ( ; i < sizeof(DCTELEM)*6*64 ; i += 128) { - asm volatile("dcbzl %0,%1" : : "r" (i), "r" (blocks) : "memory"); + asm volatile("dcbzl %0,%1" : : "b" (blocks), "r" (i) : "memory"); } #else memset(blocks, 0, sizeof(DCTELEM)*6*64); @@ -209,7 +218,9 @@ memset(fakedata, 0xFF, 1024); - asm volatile("dcbzl %0, %1" : : "r" (fakedata_middle), "r" (zero)); + /* below the constraint "b" seems to mean "Address base register" + in gcc-3.3 / RS/6000 speaks. seems to avoid using r0, so.... */ + asm volatile("dcbzl %0, %1" : : "b" (fakedata_middle), "r" (zero)); for (i = 0; i < 1024 ; i ++) { @@ -300,10 +311,14 @@ perfdata[i][powerpc_data_sum] = 0x0000000000000000; perfdata[i][powerpc_data_num] = 0x0000000000000000; #ifdef POWERPC_PERF_USE_PMC - perfdata_miss[i][powerpc_data_min] = 0xFFFFFFFFFFFFFFFF; - perfdata_miss[i][powerpc_data_max] = 0x0000000000000000; - perfdata_miss[i][powerpc_data_sum] = 0x0000000000000000; - perfdata_miss[i][powerpc_data_num] = 0x0000000000000000; + perfdata_pmc2[i][powerpc_data_min] = 0xFFFFFFFFFFFFFFFF; + perfdata_pmc2[i][powerpc_data_max] = 0x0000000000000000; + perfdata_pmc2[i][powerpc_data_sum] = 0x0000000000000000; + perfdata_pmc2[i][powerpc_data_num] = 0x0000000000000000; + perfdata_pmc3[i][powerpc_data_min] = 0xFFFFFFFFFFFFFFFF; + perfdata_pmc3[i][powerpc_data_max] = 0x0000000000000000; + perfdata_pmc3[i][powerpc_data_sum] = 0x0000000000000000; + perfdata_pmc3[i][powerpc_data_num] = 0x0000000000000000; #endif /* POWERPC_PERF_USE_PMC */ } }