apedsp: move to llauddsp
[ffmpeg.git] / libavcodec / ppc / dsputil_ppc.c
index 2d80446..cbb1cfb 100644 (file)
@@ -51,8 +51,7 @@
  */
 static void clear_blocks_dcbz32_ppc(int16_t *blocks)
 {
-    register int misal = ((unsigned long) blocks & 0x00000010);
-    register int i = 0;
+    register int misal = (unsigned long) blocks & 0x00000010, i = 0;
 
     if (misal) {
         ((unsigned long *) blocks)[0] = 0L;
@@ -74,11 +73,10 @@ static void clear_blocks_dcbz32_ppc(int16_t *blocks)
 
 /* Same as above, when dcbzl clears a whole 128 bytes cache line
  * i.e. the PPC970 AKA G5. */
-#if HAVE_DCBZL
 static void clear_blocks_dcbz128_ppc(int16_t *blocks)
 {
-    register int misal = ((unsigned long) blocks & 0x0000007f);
-    register int i = 0;
+#if HAVE_DCBZL
+    register int misal = (unsigned long) blocks & 0x0000007f, i = 0;
 
     if (misal) {
         /* We could probably also optimize this case,
@@ -89,31 +87,27 @@ static void clear_blocks_dcbz128_ppc(int16_t *blocks)
         for (; i < sizeof(int16_t) * 6 * 64; i += 128)
             __asm__ volatile ("dcbzl %0,%1" :: "b" (blocks), "r" (i) : "memory");
     }
-}
 #else
-static void clear_blocks_dcbz128_ppc(int16_t *blocks)
-{
     memset(blocks, 0, sizeof(int16_t) * 6 * 64);
-}
 #endif
+}
 
-#if HAVE_DCBZL
 /* Check dcbz report how many bytes are set to 0 by dcbz. */
 /* update 24/06/2003: Replace dcbz by dcbzl to get the intended effect
  * (Apple "fixed" dcbz). Unfortunately this cannot be used unless the
  * assembler knows about dcbzl ... */
 static long check_dcbzl_effect(void)
 {
+    long count = 0;
+#if HAVE_DCBZL
     register char *fakedata = av_malloc(1024);
     register char *fakedata_middle;
-    register long zero = 0;
-    register long i = 0;
-    long count = 0;
+    register long zero = 0, i = 0;
 
     if (!fakedata)
         return 0L;
 
-    fakedata_middle = (fakedata + 512);
+    fakedata_middle = fakedata + 512;
 
     memset(fakedata, 0xFF, 1024);
 
@@ -126,21 +120,15 @@ static long check_dcbzl_effect(void)
             count++;
 
     av_free(fakedata);
+#endif
 
     return count;
 }
-#else
-static long check_dcbzl_effect(void)
-{
-    return 0;
-}
-#endif
 
-av_cold void ff_dsputil_init_ppc(DSPContext *c, AVCodecContext *avctx)
+av_cold void ff_dsputil_init_ppc(DSPContext *c, AVCodecContext *avctx,
+                                 unsigned high_bit_depth)
 {
-    const int high_bit_depth = avctx->bits_per_raw_sample > 8;
     int mm_flags = av_get_cpu_flags();
-
     // common optimizations whether AltiVec is available or not
     if (!high_bit_depth) {
         switch (check_dcbzl_effect()) {
@@ -156,25 +144,25 @@ av_cold void ff_dsputil_init_ppc(DSPContext *c, AVCodecContext *avctx)
     }
 
     if (PPC_ALTIVEC(mm_flags)) {
-        ff_dsputil_init_altivec(c, avctx);
+        ff_dsputil_init_altivec(c, avctx, high_bit_depth);
         ff_int_init_altivec(c, avctx);
         c->gmc1 = ff_gmc1_altivec;
 
+        if (!high_bit_depth) {
 #if CONFIG_ENCODERS
-        if (avctx->bits_per_raw_sample <= 8 &&
-            (avctx->dct_algo == FF_DCT_AUTO ||
-             avctx->dct_algo == FF_DCT_ALTIVEC)) {
-            c->fdct = ff_fdct_altivec;
-        }
+            if (avctx->dct_algo == FF_DCT_AUTO ||
+                avctx->dct_algo == FF_DCT_ALTIVEC) {
+                c->fdct = ff_fdct_altivec;
+            }
 #endif //CONFIG_ENCODERS
-
-        if (avctx->lowres == 0 && avctx->bits_per_raw_sample <= 8) {
+          if (avctx->lowres == 0) {
             if ((avctx->idct_algo == FF_IDCT_AUTO) ||
                 (avctx->idct_algo == FF_IDCT_ALTIVEC)) {
                 c->idct_put              = ff_idct_put_altivec;
                 c->idct_add              = ff_idct_add_altivec;
                 c->idct_permutation_type = FF_TRANSPOSE_IDCT_PERM;
             }
+          }
         }
     }
 }