Mercurial > libavcodec.hg
view ppc/gcc_fixes.h @ 1708:dea5b2946999 libavcodec
interlaced motion estimation
interlaced mpeg2 encoding
P & B frames
rate distored interlaced mb decission
alternate scantable support
4mv encoding fixes (thats also why the regression tests change)
passing height to most dsp functions
interlaced mpeg4 encoding (no direct mode MBs yet)
various related cleanups
disabled old motion estimaton algorithms (log, full, ...) they will either be fixed or removed
author | michael |
---|---|
date | Tue, 30 Dec 2003 16:07:57 +0000 |
parents | fd48c92213ae |
children | b370288f004d |
line wrap: on
line source
/* * gcc fixes for altivec. * Used to workaround broken gcc (FSF gcc-3 pre gcc-3.3) * and to stay somewhat compatible with Darwin. */ #ifndef _GCC_FIXES_ #define _GCC_FIXES_ #ifdef HAVE_ALTIVEC_H #include <altivec.h> #endif #ifdef CONFIG_DARWIN #define AVV(x...) (x) #else #define AVV(x...) {x} #if (__GNUC__ * 100 + __GNUC_MINOR__ < 303) /* This code was provided to me by Bartosch Pixa * as a separate header file (broken_mergel.h). * thanks to lu_zero for the workaround. * * See this mail for more information: * http://gcc.gnu.org/ml/gcc/2003-04/msg00967.html */ static inline vector signed char ff_vmrglb (vector signed char const A, vector signed char const B) { static const vector unsigned char lowbyte = { 0x08, 0x18, 0x09, 0x19, 0x0a, 0x1a, 0x0b, 0x1b, 0x0c, 0x1c, 0x0d, 0x1d, 0x0e, 0x1e, 0x0f, 0x1f }; return vec_perm (A, B, lowbyte); } static inline vector signed short ff_vmrglh (vector signed short const A, vector signed short const B) { static const vector unsigned char lowhalf = { 0x08, 0x09, 0x18, 0x19, 0x0a, 0x0b, 0x1a, 0x1b, 0x0c, 0x0d, 0x1c, 0x1d, 0x0e, 0x0f, 0x1e, 0x1f }; return vec_perm (A, B, lowhalf); } static inline vector signed int ff_vmrglw (vector signed int const A, vector signed int const B) { static const vector unsigned char lowword = { 0x08, 0x09, 0x0a, 0x0b, 0x18, 0x19, 0x1a, 0x1b, 0x0c, 0x0d, 0x0e, 0x0f, 0x1c, 0x1d, 0x1e, 0x1f }; return vec_perm (A, B, lowword); } /*#define ff_vmrglb ff_vmrglb #define ff_vmrglh ff_vmrglh #define ff_vmrglw ff_vmrglw */ #undef vec_mergel #define vec_mergel(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ ((vector signed char) ff_vmrglb ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) ff_vmrglb ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed short) ff_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) ff_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ ((vector float) ff_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ ((vector signed int) ff_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) ff_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \ __altivec_link_error_invalid_argument ()))))))) #endif #endif /* CONFIG_DARWIN */ #endif /* _GCC_FIXES_ */