]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/alpha/dsputil_alpha.c
fix -a^b which was interpreted as (-a)^b
[ffmpeg] / libavcodec / alpha / dsputil_alpha.c
index 108fc347642f2980eb55cd1756ba8dbe0275923e..c98d6f7ff8c3805f85ca4ab0fc3b0df6049055df 100644 (file)
@@ -2,24 +2,27 @@
  * Alpha optimized DSP utils
  * Copyright (c) 2002 Falk Hueffner <falk@debian.org>
  *
- * This library is free software; you can redistribute it and/or
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This library is distributed in the hope that it will be useful,
+ * FFmpeg is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
 #include "asm.h"
 #include "../dsputil.h"
 
+extern void simple_idct_axp(DCTELEM *block);
 extern void simple_idct_put_axp(uint8_t *dest, int line_size, DCTELEM *block);
 extern void simple_idct_add_axp(uint8_t *dest, int line_size, DCTELEM *block);
 
@@ -27,34 +30,32 @@ void put_pixels_axp_asm(uint8_t *block, const uint8_t *pixels,
                         int line_size, int h);
 void put_pixels_clamped_mvi_asm(const DCTELEM *block, uint8_t *pixels,
                                 int line_size);
-void add_pixels_clamped_mvi_asm(const DCTELEM *block, uint8_t *pixels, 
+void add_pixels_clamped_mvi_asm(const DCTELEM *block, uint8_t *pixels,
                                 int line_size);
 void (*put_pixels_clamped_axp_p)(const DCTELEM *block, uint8_t *pixels,
                                  int line_size);
-void (*add_pixels_clamped_axp_p)(const DCTELEM *block, uint8_t *pixels, 
+void (*add_pixels_clamped_axp_p)(const DCTELEM *block, uint8_t *pixels,
                                  int line_size);
 
 void get_pixels_mvi(DCTELEM *restrict block,
                     const uint8_t *restrict pixels, int line_size);
 void diff_pixels_mvi(DCTELEM *block, const uint8_t *s1, const uint8_t *s2,
                      int stride);
-int pix_abs8x8_mvi(uint8_t *pix1, uint8_t *pix2, int line_size);
+int pix_abs8x8_mvi(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h);
 int pix_abs16x16_mvi_asm(uint8_t *pix1, uint8_t *pix2, int line_size);
-int pix_abs16x16_x2_mvi(uint8_t *pix1, uint8_t *pix2, int line_size);
-int pix_abs16x16_y2_mvi(uint8_t *pix1, uint8_t *pix2, int line_size);
-int pix_abs16x16_xy2_mvi(uint8_t *pix1, uint8_t *pix2, int line_size);
+int pix_abs16x16_x2_mvi(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h);
+int pix_abs16x16_y2_mvi(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h);
+int pix_abs16x16_xy2_mvi(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h);
 
 #if 0
 /* These functions were the base for the optimized assembler routines,
    and remain here for documentation purposes.  */
-static void put_pixels_clamped_mvi(const DCTELEM *block, uint8_t *pixels, 
+static void put_pixels_clamped_mvi(const DCTELEM *block, uint8_t *pixels,
                                    int line_size)
 {
     int i = 8;
     uint64_t clampmask = zap(-1, 0xaa); /* 0x00ff00ff00ff00ff */
 
-    ASM_ACCEPT_MVI;
-
     do {
         uint64_t shorts0, shorts1;
 
@@ -73,7 +74,7 @@ static void put_pixels_clamped_mvi(const DCTELEM *block, uint8_t *pixels,
     } while (--i);
 }
 
-void add_pixels_clamped_mvi(const DCTELEM *block, uint8_t *pixels, 
+void add_pixels_clamped_mvi(const DCTELEM *block, uint8_t *pixels,
                             int line_size)
 {
     int h = 8;
@@ -83,8 +84,6 @@ void add_pixels_clamped_mvi(const DCTELEM *block, uint8_t *pixels,
     uint64_t signmask  = zap(-1, 0x33);
     signmask ^= signmask >> 1;  /* 0x8000800080008000 */
 
-    ASM_ACCEPT_MVI;
-
     do {
         uint64_t shorts0, pix0, signs0;
         uint64_t shorts1, pix1, signs1;
@@ -100,7 +99,7 @@ void add_pixels_clamped_mvi(const DCTELEM *block, uint8_t *pixels,
         shorts0 ^= signs0;
         /* Clamp. */
         shorts0 = maxsw4(shorts0, 0);
-        shorts0 = minsw4(shorts0, clampmask);   
+        shorts0 = minsw4(shorts0, clampmask);
 
         /* Next 4.  */
         pix1    = unpkbw(ldl(pixels + 4));
@@ -145,7 +144,7 @@ static inline uint64_t avg2_no_rnd(uint64_t a, uint64_t b)
 
 static inline uint64_t avg2(uint64_t a, uint64_t b)
 {
-    return (a | b) - (((a ^ b) & BYTE_VEC(0xfe)) >> 1);    
+    return (a | b) - (((a ^ b) & BYTE_VEC(0xfe)) >> 1);
 }
 
 #if 0
@@ -293,11 +292,6 @@ static int sad16x16_mvi(void *s, uint8_t *a, uint8_t *b, int stride)
     return pix_abs16x16_mvi_asm(a, b, stride);
 }
 
-static int sad8x8_mvi(void *s, uint8_t *a, uint8_t *b, int stride)
-{
-    return pix_abs8x8_mvi(a, b, stride);
-}
-
 void dsputil_init_alpha(DSPContext* c, AVCodecContext *avctx)
 {
     c->put_pixels_tab[0][0] = put_pixels16_axp_asm;
@@ -350,18 +344,19 @@ void dsputil_init_alpha(DSPContext* c, AVCodecContext *avctx)
         c->get_pixels       = get_pixels_mvi;
         c->diff_pixels      = diff_pixels_mvi;
         c->sad[0]           = sad16x16_mvi;
-        c->sad[1]           = sad8x8_mvi;
-        c->pix_abs8x8       = pix_abs8x8_mvi;
-        c->pix_abs16x16     = pix_abs16x16_mvi_asm;
-        c->pix_abs16x16_x2  = pix_abs16x16_x2_mvi;
-        c->pix_abs16x16_y2  = pix_abs16x16_y2_mvi;
-        c->pix_abs16x16_xy2 = pix_abs16x16_xy2_mvi;
+        c->sad[1]           = pix_abs8x8_mvi;
+//        c->pix_abs[0][0]    = pix_abs16x16_mvi_asm; //FIXME function arguments for the asm must be fixed
+        c->pix_abs[0][0]    = sad16x16_mvi;
+        c->pix_abs[1][0]    = pix_abs8x8_mvi;
+        c->pix_abs[0][1]    = pix_abs16x16_x2_mvi;
+        c->pix_abs[0][2]    = pix_abs16x16_y2_mvi;
+        c->pix_abs[0][3]    = pix_abs16x16_xy2_mvi;
     }
 
     put_pixels_clamped_axp_p = c->put_pixels_clamped;
     add_pixels_clamped_axp_p = c->add_pixels_clamped;
-    
+
     c->idct_put = simple_idct_put_axp;
     c->idct_add = simple_idct_add_axp;
-    c->idct_idct = simple_idct_axp;
+    c->idct = simple_idct_axp;
 }