Commit 746e6074 authored by Christophe Massiot's avatar Christophe Massiot

Altivec IDCT and motion compensation, courtesy of Michel Lespinasse for

mpeg2dec (untested).
parent b0ef1133
......@@ -74,7 +74,6 @@ LIB_GGI = @LIB_GGI@
LIB_GLIDE = @LIB_GLIDE@
LIB_GNOME = @LIB_GNOME@
LIB_GTK = @LIB_GTK@
LIB_ALTIVEC = @LIB_ALTIVEC@
LIB_LIBDVDCSS = @LIB_LIBDVDCSS@
LIB_KDE = @LIB_KDE@
LIB_MACOSX = @LIB_MACOSX@
......@@ -237,7 +236,7 @@ endif
# Optimizations for PowerPC
ifneq (,$(findstring powerpc,$(ARCH)))
CFLAGS += -mmultiple -mhard-float -mstring
CFLAGS += -mmultiple -mhard-float -mstring -Wa,-m7400
endif
# Optimizations for Sparc
......
......@@ -1910,16 +1910,71 @@ else
fi
done
for ac_func in memalign
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1917: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1922 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif
; return 0; }
EOF
if { (eval echo configure:1945: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
else
echo "$ac_t""no" 1>&6
fi
done
for ac_func in sigrelse
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1918: checking for $ac_func" >&5
echo "configure:1973: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1923 "configure"
#line 1978 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
......@@ -1942,7 +1997,7 @@ $ac_func();
; return 0; }
EOF
if { (eval echo configure:1946: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2001: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
......@@ -1969,12 +2024,12 @@ done
NEED_GETOPT=0
echo $ac_n "checking for getopt_long""... $ac_c" 1>&6
echo "configure:1973: checking for getopt_long" >&5
echo "configure:2028: checking for getopt_long" >&5
if eval "test \"`echo '$''{'ac_cv_func_getopt_long'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1978 "configure"
#line 2033 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char getopt_long(); below. */
......@@ -1997,7 +2052,7 @@ getopt_long();
; return 0; }
EOF
if { (eval echo configure:2001: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2056: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_getopt_long=yes"
else
......@@ -2019,7 +2074,7 @@ else
echo "$ac_t""no" 1>&6
# FreeBSD has a gnugetopt library for this:
echo $ac_n "checking for getopt_long in -lgnugetopt""... $ac_c" 1>&6
echo "configure:2023: checking for getopt_long in -lgnugetopt" >&5
echo "configure:2078: checking for getopt_long in -lgnugetopt" >&5
ac_lib_var=`echo gnugetopt'_'getopt_long | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
......@@ -2027,7 +2082,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lgnugetopt $LIBS"
cat > conftest.$ac_ext <<EOF
#line 2031 "configure"
#line 2086 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
......@@ -2038,7 +2093,7 @@ int main() {
getopt_long()
; return 0; }
EOF
if { (eval echo configure:2042: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2097: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
......@@ -2069,17 +2124,17 @@ for ac_hdr in unistd.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:2073: checking for $ac_hdr" >&5
echo "configure:2128: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2078 "configure"
#line 2133 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:2083: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:2138: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -2108,12 +2163,12 @@ done
for ac_func in getpagesize
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:2112: checking for $ac_func" >&5
echo "configure:2167: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2117 "configure"
#line 2172 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
......@@ -2136,7 +2191,7 @@ $ac_func();
; return 0; }
EOF
if { (eval echo configure:2140: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2195: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
......@@ -2161,7 +2216,7 @@ fi
done
echo $ac_n "checking for working mmap""... $ac_c" 1>&6
echo "configure:2165: checking for working mmap" >&5
echo "configure:2220: checking for working mmap" >&5
if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
......@@ -2169,7 +2224,7 @@ else
ac_cv_func_mmap_fixed_mapped=no
else
cat > conftest.$ac_ext <<EOF
#line 2173 "configure"
#line 2228 "configure"
#include "confdefs.h"
/* Thanks to Mike Haertel and Jim Avera for this test.
......@@ -2312,7 +2367,7 @@ main()
}
EOF
if { (eval echo configure:2316: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
if { (eval echo configure:2371: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_mmap_fixed_mapped=yes
else
......@@ -2335,12 +2390,12 @@ EOF
fi
echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
echo "configure:2339: checking return type of signal handlers" >&5
echo "configure:2394: checking return type of signal handlers" >&5
if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2344 "configure"
#line 2399 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <signal.h>
......@@ -2357,7 +2412,7 @@ int main() {
int i;
; return 0; }
EOF
if { (eval echo configure:2361: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:2416: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_type_signal=void
else
......@@ -2376,7 +2431,7 @@ EOF
echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
echo "configure:2380: checking for dlopen in -ldl" >&5
echo "configure:2435: checking for dlopen in -ldl" >&5
ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
......@@ -2384,7 +2439,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-ldl $LIBS"
cat > conftest.$ac_ext <<EOF
#line 2388 "configure"
#line 2443 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
......@@ -2395,7 +2450,7 @@ int main() {
dlopen()
; return 0; }
EOF
if { (eval echo configure:2399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2454: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
......@@ -2416,7 +2471,7 @@ else
fi
echo $ac_n "checking for pow in -lm""... $ac_c" 1>&6
echo "configure:2420: checking for pow in -lm" >&5
echo "configure:2475: checking for pow in -lm" >&5
ac_lib_var=`echo m'_'pow | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
......@@ -2424,7 +2479,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lm $LIBS"
cat > conftest.$ac_ext <<EOF
#line 2428 "configure"
#line 2483 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
......@@ -2435,7 +2490,7 @@ int main() {
pow()
; return 0; }
EOF
if { (eval echo configure:2439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2494: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
......@@ -2459,7 +2514,7 @@ fi
THREAD_LIB=error
if test "x${THREAD_LIB}" = xerror; then
echo $ac_n "checking for pthread_attr_init in -lpthread""... $ac_c" 1>&6
echo "configure:2463: checking for pthread_attr_init in -lpthread" >&5
echo "configure:2518: checking for pthread_attr_init in -lpthread" >&5
ac_lib_var=`echo pthread'_'pthread_attr_init | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
......@@ -2467,7 +2522,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lpthread $LIBS"
cat > conftest.$ac_ext <<EOF
#line 2471 "configure"
#line 2526 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
......@@ -2478,7 +2533,7 @@ int main() {
pthread_attr_init()
; return 0; }
EOF
if { (eval echo configure:2482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2537: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
......@@ -2501,7 +2556,7 @@ fi
fi
if test "x${THREAD_LIB}" = xerror; then
echo $ac_n "checking for pthread_attr_init in -lpthreads""... $ac_c" 1>&6
echo "configure:2505: checking for pthread_attr_init in -lpthreads" >&5
echo "configure:2560: checking for pthread_attr_init in -lpthreads" >&5
ac_lib_var=`echo pthreads'_'pthread_attr_init | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
......@@ -2509,7 +2564,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lpthreads $LIBS"
cat > conftest.$ac_ext <<EOF
#line 2513 "configure"
#line 2568 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
......@@ -2520,7 +2575,7 @@ int main() {
pthread_attr_init()
; return 0; }
EOF
if { (eval echo configure:2524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
......@@ -2543,7 +2598,7 @@ fi
fi
if test "x${THREAD_LIB}" = xerror; then
echo $ac_n "checking for pthread_attr_init in -lc_r""... $ac_c" 1>&6
echo "configure:2547: checking for pthread_attr_init in -lc_r" >&5
echo "configure:2602: checking for pthread_attr_init in -lc_r" >&5
ac_lib_var=`echo c_r'_'pthread_attr_init | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
......@@ -2551,7 +2606,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lc_r $LIBS"
cat > conftest.$ac_ext <<EOF
#line 2555 "configure"
#line 2610 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
......@@ -2562,7 +2617,7 @@ int main() {
pthread_attr_init()
; return 0; }
EOF
if { (eval echo configure:2566: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2621: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
......@@ -2585,12 +2640,12 @@ fi
fi
if test "x${THREAD_LIB}" = xerror; then
echo $ac_n "checking for pthread_attr_init""... $ac_c" 1>&6
echo "configure:2589: checking for pthread_attr_init" >&5
echo "configure:2644: checking for pthread_attr_init" >&5
if eval "test \"`echo '$''{'ac_cv_func_pthread_attr_init'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2594 "configure"
#line 2649 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char pthread_attr_init(); below. */
......@@ -2613,7 +2668,7 @@ pthread_attr_init();
; return 0; }
EOF
if { (eval echo configure:2617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2672: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_pthread_attr_init=yes"
else
......@@ -2636,7 +2691,7 @@ fi
fi
echo $ac_n "checking for cthread_fork in -lthreads""... $ac_c" 1>&6
echo "configure:2640: checking for cthread_fork in -lthreads" >&5
echo "configure:2695: checking for cthread_fork in -lthreads" >&5
ac_lib_var=`echo threads'_'cthread_fork | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
......@@ -2644,7 +2699,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lthreads $LIBS"
cat > conftest.$ac_ext <<EOF
#line 2648 "configure"
#line 2703 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
......@@ -2655,7 +2710,7 @@ int main() {
cthread_fork()
; return 0; }
EOF
if { (eval echo configure:2659: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:2714: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
......@@ -2677,7 +2732,7 @@ fi
cat > conftest.$ac_ext <<EOF
#line 2681 "configure"
#line 2736 "configure"
#include "confdefs.h"
#include <pthread.h>
EOF
......@@ -2693,7 +2748,7 @@ fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
#line 2697 "configure"
#line 2752 "configure"
#include "confdefs.h"
#include <strings.h>
EOF
......@@ -2713,17 +2768,17 @@ for ac_hdr in stddef.h getopt.h strings.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:2717: checking for $ac_hdr" >&5
echo "configure:2772: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2722 "configure"
#line 2777 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:2727: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:2782: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -2753,17 +2808,17 @@ for ac_hdr in sys/sockio.h fcntl.h sys/time.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:2757: checking for $ac_hdr" >&5
echo "configure:2812: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2762 "configure"
#line 2817 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:2767: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:2822: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -2793,17 +2848,17 @@ for ac_hdr in sys/soundcard.h machine/soundcard.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:2797: checking for $ac_hdr" >&5
echo "configure:2852: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2802 "configure"
#line 2857 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:2807: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:2862: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -2833,17 +2888,17 @@ for ac_hdr in dlfcn.h image.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:2837: checking for $ac_hdr" >&5
echo "configure:2892: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2842 "configure"
#line 2897 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:2847: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:2902: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -2873,17 +2928,17 @@ for ac_hdr in arpa/inet.h net/if.h netinet/in.h sys/socket.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:2877: checking for $ac_hdr" >&5
echo "configure:2932: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2882 "configure"
#line 2937 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:2887: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:2942: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -2913,17 +2968,17 @@ for ac_hdr in machine/param.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:2917: checking for $ac_hdr" >&5
echo "configure:2972: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2922 "configure"
#line 2977 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:2927: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:2982: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -2954,17 +3009,17 @@ for ac_hdr in cthreads.h pthread.h kernel/scheduler.h kernel/OS.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:2958: checking for $ac_hdr" >&5
echo "configure:3013: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2963 "configure"
#line 3018 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:2968: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:3023: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -2993,9 +3048,9 @@ done
CFLAGS="${save_CFLAGS} -Wall -Werror"
echo $ac_n "checking for ntohl in sys/param.h""... $ac_c" 1>&6
echo "configure:2997: checking for ntohl in sys/param.h" >&5
echo "configure:3052: checking for ntohl in sys/param.h" >&5
cat > conftest.$ac_ext <<EOF
#line 2999 "configure"
#line 3054 "configure"
#include "confdefs.h"
#include <sys/param.h>
void foo() { int meuh; ntohl(meuh); }
......@@ -3003,7 +3058,7 @@ int main() {
; return 0; }
EOF
if { (eval echo configure:3007: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:3062: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define NTOHL_IN_SYS_PARAM_H 1
......@@ -3020,16 +3075,16 @@ rm -f conftest*
CFLAGS="${save_CFLAGS} -finline-limit-20000"
echo $ac_n "checking if \$CC accepts -finline-limit""... $ac_c" 1>&6
echo "configure:3024: checking if \$CC accepts -finline-limit" >&5
echo "configure:3079: checking if \$CC accepts -finline-limit" >&5
cat > conftest.$ac_ext <<EOF
#line 3026 "configure"
#line 3081 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
if { (eval echo configure:3033: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:3088: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
save_CFLAGS="${save_CFLAGS} -finline-limit-20000"; echo "$ac_t""yes" 1>&6
else
......@@ -3042,16 +3097,16 @@ rm -f conftest*
CFLAGS="${save_CFLAGS} -bundle -undefined suppress"
echo $ac_n "checking if \$CC accepts -bundle -undefined suppress""... $ac_c" 1>&6
echo "configure:3046: checking if \$CC accepts -bundle -undefined suppress" >&5
echo "configure:3101: checking if \$CC accepts -bundle -undefined suppress" >&5
cat > conftest.$ac_ext <<EOF
#line 3048 "configure"
#line 3103 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
if { (eval echo configure:3055: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:3110: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
PLCFLAGS="${PLCFLAGS} -bundle -undefined suppress"; echo "$ac_t""yes" 1>&6
else
......@@ -3064,16 +3119,16 @@ rm -f conftest*
CFLAGS="${save_CFLAGS} -shared"
echo $ac_n "checking if \$CC accepts -shared""... $ac_c" 1>&6
echo "configure:3068: checking if \$CC accepts -shared" >&5
echo "configure:3123: checking if \$CC accepts -shared" >&5
cat > conftest.$ac_ext <<EOF
#line 3070 "configure"
#line 3125 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
if { (eval echo configure:3077: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:3132: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
PLCFLAGS="${PLCFLAGS} -shared"; echo "$ac_t""yes" 1>&6
else
......@@ -3088,16 +3143,16 @@ if test x"${SOFLAGS}" = x; then
try_SOFLAGS="-Wl,-soname -Wl,"
LDFLAGS="${save_LDFLAGS} ${try_SOFLAGS}foo.so.0"
echo $ac_n "checking if linker accepts ${try_SOFLAGS}foo.so.0""... $ac_c" 1>&6
echo "configure:3092: checking if linker accepts ${try_SOFLAGS}foo.so.0" >&5
echo "configure:3147: checking if linker accepts ${try_SOFLAGS}foo.so.0" >&5
cat > conftest.$ac_ext <<EOF
#line 3094 "configure"
#line 3149 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
if { (eval echo configure:3101: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:3156: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
SOFLAGS="${try_SOFLAGS}"; echo "$ac_t""yes" 1>&6
else
......@@ -3113,16 +3168,16 @@ if test x"${SOFLAGS}" = x; then
try_SOFLAGS="-Wl,-h -Wl,"
LDFLAGS="${save_LDFLAGS} ${try_SOFLAGS}foo.so.0"
echo $ac_n "checking if linker accepts ${try_SOFLAGS}foo.so.0""... $ac_c" 1>&6
echo "configure:3117: checking if linker accepts ${try_SOFLAGS}foo.so.0" >&5
echo "configure:3172: checking if linker accepts ${try_SOFLAGS}foo.so.0" >&5
cat > conftest.$ac_ext <<EOF
#line 3119 "configure"
#line 3174 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
if { (eval echo configure:3126: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:3181: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
SOFLAGS="${try_SOFLAGS}"; echo "$ac_t""yes" 1>&6
else
......@@ -3138,9 +3193,9 @@ CFLAGS="${save_CFLAGS}"
LDFLAGS="${save_LDFLAGS}"
echo $ac_n "checking for boolean_t in sys/types.h""... $ac_c" 1>&6
echo "configure:3142: checking for boolean_t in sys/types.h" >&5
echo "configure:3197: checking for boolean_t in sys/types.h" >&5
cat > conftest.$ac_ext <<EOF
#line 3144 "configure"
#line 3199 "configure"
#include "confdefs.h"
#include <sys/types.h>
void quux() { boolean_t foo; }
......@@ -3148,7 +3203,7 @@ int main() {
; return 0; }
EOF
if { (eval echo configure:3152: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:3207: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define BOOLEAN_T_IN_SYS_TYPES_H 1
......@@ -3163,9 +3218,9 @@ else
fi
rm -f conftest*
echo $ac_n "checking for boolean_t in pthread.h""... $ac_c" 1>&6
echo "configure:3167: checking for boolean_t in pthread.h" >&5
echo "configure:3222: checking for boolean_t in pthread.h" >&5
cat > conftest.$ac_ext <<EOF
#line 3169 "configure"
#line 3224 "configure"
#include "confdefs.h"
#include <pthread.h>
void quux() { boolean_t foo; }
......@@ -3173,7 +3228,7 @@ int main() {
; return 0; }
EOF
if { (eval echo configure:3177: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:3232: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define BOOLEAN_T_IN_PTHREAD_H 1
......@@ -3188,9 +3243,9 @@ else
fi
rm -f conftest*
echo $ac_n "checking for boolean_t in cthreads.h""... $ac_c" 1>&6
echo "configure:3192: checking for boolean_t in cthreads.h" >&5
echo "configure:3247: checking for boolean_t in cthreads.h" >&5
cat > conftest.$ac_ext <<EOF
#line 3194 "configure"
#line 3249 "configure"
#include "confdefs.h"
#include <cthreads.h>
void quux() { boolean_t foo; }
......@@ -3198,7 +3253,7 @@ int main() {
; return 0; }
EOF
if { (eval echo configure:3202: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:3257: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define BOOLEAN_T_IN_CTHREADS_H 1
......@@ -3214,12 +3269,12 @@ fi
rm -f conftest*
echo $ac_n "checking for working const""... $ac_c" 1>&6
echo "configure:3218: checking for working const" >&5
echo "configure:3273: checking for working const" >&5
if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3223 "configure"
#line 3278 "configure"
#include "confdefs.h"
int main() {
......@@ -3268,7 +3323,7 @@ ccp = (char const *const *) p;
; return 0; }
EOF
if { (eval echo configure:3272: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:3327: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_const=yes
else
......@@ -3289,12 +3344,12 @@ EOF
fi
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
echo "configure:3293: checking for ANSI C header files" >&5
echo "configure:3348: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3298 "configure"
#line 3353 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
......@@ -3302,7 +3357,7 @@ else
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:3306: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:3361: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -3319,7 +3374,7 @@ rm -f conftest*
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
#line 3323 "configure"
#line 3378 "configure"
#include "confdefs.h"
#include <string.h>
EOF
......@@ -3337,7 +3392,7 @@ fi
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
#line 3341 "configure"
#line 3396 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
......@@ -3358,7 +3413,7 @@ if test "$cross_compiling" = yes; then
:
else
cat > conftest.$ac_ext <<EOF
#line 3362 "configure"
#line 3417 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
......@@ -3369,7 +3424,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
exit (0); }
EOF
if { (eval echo configure:3373: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
if { (eval echo configure:3428: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
......@@ -3393,12 +3448,12 @@ EOF
fi
echo $ac_n "checking for size_t""... $ac_c" 1>&6
echo "configure:3397: checking for size_t" >&5
echo "configure:3452: checking for size_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3402 "configure"
#line 3457 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
......@@ -3426,12 +3481,12 @@ EOF
fi
echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
echo "configure:3430: checking whether time.h and sys/time.h may both be included" >&5
echo "configure:3485: checking whether time.h and sys/time.h may both be included" >&5
if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3435 "configure"
#line 3490 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/time.h>
......@@ -3440,7 +3495,7 @@ int main() {
struct tm *tp;
; return 0; }
EOF
if { (eval echo configure:3444: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:3499: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_header_time=yes
else
......@@ -3462,21 +3517,21 @@ fi
echo $ac_n "checking __attribute__ ((aligned ())) support""... $ac_c" 1>&6
echo "configure:3466: checking __attribute__ ((aligned ())) support" >&5
echo "configure:3521: checking __attribute__ ((aligned ())) support" >&5
if eval "test \"`echo '$''{'ac_cv_c_attribute_aligned'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_c_attribute_aligned=0
for ac_cv_c_attr_align_try in 2 4 8 16 32 64; do
cat > conftest.$ac_ext <<EOF
#line 3473 "configure"
#line 3528 "configure"
#include "confdefs.h"
int main() {
static char c __attribute__ ((aligned($ac_cv_c_attr_align_try))) = 0; return c;
; return 0; }
EOF
if { (eval echo configure:3480: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:3535: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_attribute_aligned=$ac_cv_c_attr_align_try
else
......@@ -3509,19 +3564,19 @@ SSE_MODULES="imdctsse downmixsse"
ALTIVEC_MODULES="idctaltivec motionaltivec"
echo $ac_n "checking if \$CC groks MMX inline assembly""... $ac_c" 1>&6
echo "configure:3513: checking if \$CC groks MMX inline assembly" >&5
echo "configure:3568: checking if \$CC groks MMX inline assembly" >&5
if eval "test \"`echo '$''{'ac_cv_mmx_inline'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3518 "configure"
#line 3573 "configure"
#include "confdefs.h"
void quux(){void *p;asm("packuswb %%mm1,%%mm2"::"r"(p));}
int main() {
; return 0; }
EOF
if { (eval echo configure:3525: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:3580: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_mmx_inline=yes
else
......@@ -3539,19 +3594,19 @@ if test x"$ac_cv_mmx_inline" != x"no"; then
fi
echo $ac_n "checking if \$CC groks MMX EXT inline assembly""... $ac_c" 1>&6
echo "configure:3543: checking if \$CC groks MMX EXT inline assembly" >&5
echo "configure:3598: checking if \$CC groks MMX EXT inline assembly" >&5
if eval "test \"`echo '$''{'ac_cv_mmxext_inline'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3548 "configure"
#line 3603 "configure"
#include "confdefs.h"
void quux(){void *p;asm("maskmovq %%mm1,%%mm2"::"r"(p));}
int main() {
; return 0; }
EOF
if { (eval echo configure:3555: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:3610: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_mmxext_inline=yes
else
......@@ -3569,19 +3624,19 @@ if test x"$ac_cv_mmxext_inline" != x"no"; then
fi
echo $ac_n "checking if \$CC groks 3D Now! inline assembly""... $ac_c" 1>&6
echo "configure:3573: checking if \$CC groks 3D Now! inline assembly" >&5
echo "configure:3628: checking if \$CC groks 3D Now! inline assembly" >&5
if eval "test \"`echo '$''{'ac_cv_3dnow_inline'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3578 "configure"
#line 3633 "configure"
#include "confdefs.h"
void quux(){void *p;asm("pfadd %%mm1,%%mm2"::"r"(p));}
int main() {
; return 0; }
EOF
if { (eval echo configure:3585: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:3640: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_3dnow_inline=yes
else
......@@ -3599,19 +3654,19 @@ if test x"$ac_cv_3dnow_inline" != x"no"; then
fi
echo $ac_n "checking if \$CC groks SSE inline assembly""... $ac_c" 1>&6
echo "configure:3603: checking if \$CC groks SSE inline assembly" >&5
echo "configure:3658: checking if \$CC groks SSE inline assembly" >&5
if eval "test \"`echo '$''{'ac_cv_sse_inline'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3608 "configure"
#line 3663 "configure"
#include "confdefs.h"
void quux(){void *p;asm("xorps %%xmm1,%%xmm2"::"r"(p));}
int main() {
; return 0; }
EOF
if { (eval echo configure:3615: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:3670: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_sse_inline=yes
else
......@@ -3629,19 +3684,19 @@ if test x"$ac_cv_sse_inline" != x"no"; then
fi
echo $ac_n "checking if \$CC groks Altivec inline assembly""... $ac_c" 1>&6
echo "configure:3633: checking if \$CC groks Altivec inline assembly" >&5
echo "configure:3688: checking if \$CC groks Altivec inline assembly" >&5
if eval "test \"`echo '$''{'ac_cv_altivec_inline'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3638 "configure"
#line 3693 "configure"
#include "confdefs.h"
void quux(){asm("mtspr 256,%0"::"r"(-1));}
int main() {
; return 0; }
EOF
if { (eval echo configure:3645: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:3700: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_altivec_inline=yes
else
......@@ -3665,17 +3720,17 @@ for ac_hdr in winioctl.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:3669: checking for $ac_hdr" >&5
echo "configure:3724: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3674 "configure"
#line 3729 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:3679: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:3734: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -3708,17 +3763,17 @@ for ac_hdr in sys/ioctl.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:3712: checking for $ac_hdr" >&5
echo "configure:3767: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3717 "configure"
#line 3772 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:3722: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:3777: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -3744,17 +3799,17 @@ EOF
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:3748: checking for $ac_hdr" >&5
echo "configure:3803: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3753 "configure"
#line 3808 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:3758: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:3813: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -3783,7 +3838,7 @@ done
BSD_DVD_STRUCT=0
LINUX_DVD_STRUCT=0
cat > conftest.$ac_ext <<EOF
#line 3787 "configure"
#line 3842 "configure"
#include "confdefs.h"
#include <sys/dvdio.h>
EOF
......@@ -3801,7 +3856,7 @@ fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
#line 3805 "configure"
#line 3860 "configure"
#include "confdefs.h"
#include <sys/cdio.h>
EOF
......@@ -3819,7 +3874,7 @@ fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
#line 3823 "configure"
#line 3878 "configure"
#include "confdefs.h"
#include <linux/cdrom.h>
EOF
......@@ -3838,7 +3893,7 @@ rm -f conftest*
NEED_BSDI_LIBDVD=0
cat > conftest.$ac_ext <<EOF
#line 3842 "configure"
#line 3897 "configure"
#include "confdefs.h"
#include <dvd.h>
EOF
......@@ -3860,17 +3915,17 @@ else
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:3864: checking for $ac_hdr" >&5
echo "configure:3919: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3869 "configure"
#line 3924 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:3874: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:3929: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -3910,17 +3965,17 @@ rm -f conftest*
ac_safe=`echo "sys/scsi/scsi_types.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for sys/scsi/scsi_types.h""... $ac_c" 1>&6
echo "configure:3914: checking for sys/scsi/scsi_types.h" >&5
echo "configure:3969: checking for sys/scsi/scsi_types.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3919 "configure"
#line 3974 "configure"
#include "confdefs.h"
#include <sys/scsi/scsi_types.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:3924: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:3979: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -3939,17 +3994,17 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
ac_safe=`echo "sys/scsi/impl/uscsi.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for sys/scsi/impl/uscsi.h""... $ac_c" 1>&6
echo "configure:3943: checking for sys/scsi/impl/uscsi.h" >&5
echo "configure:3998: checking for sys/scsi/impl/uscsi.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3948 "configure"
#line 4003 "configure"
#include "confdefs.h"
#include <sys/scsi/impl/uscsi.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:3953: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:4008: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -4103,7 +4158,7 @@ if test "${enable_pth+set}" = set; then
enableval="$enable_pth"
if test x$enableval = xyes; then
echo $ac_n "checking for pth_init in -lpth""... $ac_c" 1>&6
echo "configure:4107: checking for pth_init in -lpth" >&5
echo "configure:4162: checking for pth_init in -lpth" >&5
ac_lib_var=`echo pth'_'pth_init | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
......@@ -4111,7 +4166,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lpth $LIBS"
cat > conftest.$ac_ext <<EOF
#line 4115 "configure"
#line 4170 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
......@@ -4122,7 +4177,7 @@ int main() {
pth_init()
; return 0; }
EOF
if { (eval echo configure:4126: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:4181: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
......@@ -4150,7 +4205,7 @@ else
fi
cat > conftest.$ac_ext <<EOF
#line 4154 "configure"
#line 4209 "configure"
#include "confdefs.h"
#include <pth.h>
EOF
......@@ -4314,7 +4369,7 @@ if test "${enable_esd+set}" = set; then
# Extract the first word of "esd-config", so it can be a program name with args.
set dummy esd-config; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:4318: checking for $ac_word" >&5
echo "configure:4373: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_ESD_CONFIG'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
......@@ -4382,17 +4437,17 @@ else
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:4386: checking for $ac_hdr" >&5
echo "configure:4441: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 4391 "configure"
#line 4446 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:4396: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:4451: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -4438,17 +4493,17 @@ fi
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:4442: checking for $ac_hdr" >&5
echo "configure:4497: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 4447 "configure"
#line 4502 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:4452: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:4507: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -4526,7 +4581,7 @@ fi
# Extract the first word of "sdl12-config", so it can be a program name with args.
set dummy sdl12-config; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:4530: checking for $ac_word" >&5
echo "configure:4585: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_SDL12_CONFIG'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
......@@ -4566,7 +4621,7 @@ fi
# Extract the first word of "sdl11-config", so it can be a program name with args.
set dummy sdl11-config; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:4570: checking for $ac_word" >&5
echo "configure:4625: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_SDL11_CONFIG'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
......@@ -4607,7 +4662,7 @@ fi
# Extract the first word of "sdl-config", so it can be a program name with args.
set dummy sdl-config; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:4611: checking for $ac_word" >&5
echo "configure:4666: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_SDL_CONFIG'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
......@@ -4653,17 +4708,17 @@ fi
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:4657: checking for $ac_hdr" >&5
echo "configure:4712: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 4662 "configure"
#line 4717 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:4667: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:4722: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -4726,17 +4781,17 @@ if test "${with_directx+set}" = set; then
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:4730: checking for $ac_hdr" >&5
echo "configure:4785: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 4735 "configure"
#line 4790 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:4740: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:4795: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -4775,17 +4830,17 @@ fi
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:4779: checking for $ac_hdr" >&5
echo "configure:4834: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 4784 "configure"
#line 4839 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:4789: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:4844: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -4882,7 +4937,7 @@ if test "${enable_gnome+set}" = set; then
# Extract the first word of "gnome-config", so it can be a program name with args.
set dummy gnome-config; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:4886: checking for $ac_word" >&5
echo "configure:4941: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_GNOME_CONFIG'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
......@@ -4927,17 +4982,17 @@ fi
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:4931: checking for $ac_hdr" >&5
echo "configure:4986: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 4936 "configure"
#line 4991 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:4941: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:4996: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -4987,7 +5042,7 @@ then
# Extract the first word of "gtk-config", so it can be a program name with args.
set dummy gtk-config; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:4991: checking for $ac_word" >&5
echo "configure:5046: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_GTK_CONFIG'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
......@@ -5032,17 +5087,17 @@ fi
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:5036: checking for $ac_hdr" >&5
echo "configure:5091: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5041 "configure"
#line 5096 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:5046: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:5101: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -5093,17 +5148,17 @@ if test x$enable_x11 != xno; then
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:5097: checking for $ac_hdr" >&5
echo "configure:5152: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5102 "configure"
#line 5157 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:5107: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:5162: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -5155,17 +5210,17 @@ if test x$enable_xvideo != xno; then
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:5159: checking for $ac_hdr" >&5
echo "configure:5214: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5164 "configure"
#line 5219 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:5169: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:5224: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -5205,17 +5260,17 @@ if test "${enable_alsa+set}" = set; then
then
ac_safe=`echo "sys/asoundlib.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for sys/asoundlib.h""... $ac_c" 1>&6
echo "configure:5209: checking for sys/asoundlib.h" >&5
echo "configure:5264: checking for sys/asoundlib.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 5214 "configure"
#line 5269 "configure"
#include "confdefs.h"
#include <sys/asoundlib.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:5219: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:5274: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
......@@ -5232,7 +5287,7 @@ fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
echo $ac_n "checking for main in -lasound""... $ac_c" 1>&6
echo "configure:5236: checking for main in -lasound" >&5
echo "configure:5291: checking for main in -lasound" >&5
ac_lib_var=`echo asound'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
......@@ -5240,14 +5295,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lasound $LIBS"
cat > conftest.$ac_ext <<EOF
#line 5244 "configure"
#line 5299 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
if { (eval echo configure:5251: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:5306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
......
......@@ -56,6 +56,7 @@ AC_CHECK_FUNC(inet_aton,,[
])
AC_CHECK_FUNCS(vasprintf)
AC_CHECK_FUNCS(swab)
AC_CHECK_FUNCS(memalign)
AC_CHECK_FUNCS(sigrelse)
......@@ -619,14 +620,12 @@ AC_ARG_ENABLE(macosx,
LIB_MACOSX="-framework CoreAudio -framework Carbon -framework AGL"
LIB_TS="${LIB_TS} -framework AGL -framework Carbon"
LIB_SDL="${LIB_SDL} -framework AGL -framework Carbon"
LIB_ALTIVEC="-framework vecLib"
fi],
[AC_CHECK_HEADERS(Carbon/Carbon.h,
BUILTINS="${BUILTINS} macosx"
LIB_MACOSX="-framework CoreAudio -framework Carbon -framework AGL"
LIB_TS="${LIB_TS} -framework AGL -framework Carbon"
LIB_SDL="${LIB_SDL} -framework AGL -framework Carbon"
LIB_ALTIVEC="-framework vecLib"
)])
dnl
......@@ -959,7 +958,6 @@ AC_SUBST(LIB_GGI)
AC_SUBST(LIB_GLIDE)
AC_SUBST(LIB_GNOME)
AC_SUBST(LIB_GTK)
AC_SUBST(LIB_ALTIVEC)
AC_SUBST(LIB_LIBDVDCSS)
AC_SUBST(LIB_KDE)
AC_SUBST(LIB_MACOSX)
......
......@@ -3,7 +3,7 @@
* Collection of useful common types and macros definitions
*****************************************************************************
* Copyright (C) 1998, 1999, 2000 VideoLAN
* $Id: common.h,v 1.39 2001/08/22 17:21:45 massiot Exp $
* $Id: common.h,v 1.40 2001/09/25 11:46:13 massiot Exp $
*
* Authors: Samuel Hocevar <sam@via.ecp.fr>
* Vincent Seguin <seguin@via.ecp.fr>
......@@ -199,6 +199,15 @@ struct pgrm_descriptor_s;
# define ATTR_ALIGN(align)
#endif
/* Alignment of critical dynamic data structure */
#ifdef HAVE_MEMALIGN
/* Some systems have memalign() but no declaration for it */
void * memalign( size_t align, size_t size );
#else
/* Assume malloc alignment is sufficient */
# define memalign(align,size) malloc(size)
#endif
/* win32, cl and icl support */
#if defined( _MSC_VER )
# define __attribute__(x)
......
......@@ -28,6 +28,9 @@
/* Define if you have the gettimeofday function. */
#undef HAVE_GETTIMEOFDAY
/* Define if you have the memalign function. */
#undef HAVE_MEMALIGN
/* Define if you have the putenv function. */
#undef HAVE_PUTENV
......@@ -94,6 +97,9 @@
/* Define if you have the <getopt.h> header file. */
#undef HAVE_GETOPT_H
/* Define if you have the <gnome.h> header file. */
#undef HAVE_GNOME_H
/* Define if you have the <gtk/gtk.h> header file. */
#undef HAVE_GTK_GTK_H
......
......@@ -2,7 +2,7 @@
* vdec_ext-plugins.h : structures from the video decoder exported to plug-ins
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
* $Id: vdec_ext-plugins.h,v 1.4 2001/09/05 16:07:49 massiot Exp $
* $Id: vdec_ext-plugins.h,v 1.5 2001/09/25 11:46:13 massiot Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
......@@ -27,7 +27,8 @@
*****************************************************************************/
typedef struct idct_inner_s
{
dctelem_t pi_block[64]; /* block */
/* Should be kept aligned ! */
dctelem_t * pi_block; /* block */
void ( * pf_idct ) ( dctelem_t *, yuv_data_t *, int,
void *, int );
/* sparse IDCT or not, add or copy ? */
......
......@@ -12,17 +12,15 @@ PLUGIN_IDCTCLASSIC = idctclassic.o
PLUGIN_IDCTMMX = idctmmx.o
PLUGIN_IDCTMMXEXT = idctmmxext.o
PLUGIN_IDCTALTIVEC = idctaltivec.o
PLUGIN_IDCTALTIVECASM = idctaltivecasm.o
BUILTIN_IDCT = $(PLUGIN_IDCT:%.o=BUILTIN_IDCT_%.o)
BUILTIN_IDCTCLASSIC = $(PLUGIN_IDCTCLASSIC:%.o=BUILTIN_IDCTCLASSIC_%.o)
BUILTIN_IDCTMMX = $(PLUGIN_IDCTMMX:%.o=BUILTIN_IDCTMMX_%.o)
BUILTIN_IDCTMMXEXT = $(PLUGIN_IDCTMMXEXT:%.o=BUILTIN_IDCTMMXEXT_%.o)
BUILTIN_IDCTALTIVEC = $(PLUGIN_IDCTALTIVEC:%.o=BUILTIN_IDCTALTIVEC_%.o)
BUILTIN_IDCTALTIVECASM = $(PLUGIN_IDCTALTIVECASM:%.o=BUILTIN_IDCTALTIVEC_%.o)
PLUGIN_C = $(PLUGIN_IDCT) $(PLUGIN_IDCTCLASSIC) $(PLUGIN_IDCTMMX) $(PLUGIN_IDCTMMXEXT)
ALL_OBJ = $(PLUGIN_C) $(PLUGIN_IDCTALTIVEC) $(BUILTIN_IDCT) $(BUILTIN_IDCTCLASSIC) $(BUILTIN_IDCTMMX) $(BUILTIN_IDCTMMXEXT) $(BUILTIN_IDCTALTIVEC)
PLUGIN_C = $(PLUGIN_IDCT) $(PLUGIN_IDCTCLASSIC) $(PLUGIN_IDCTMMX) $(PLUGIN_IDCTMMXEXT) $(PLUGIN_IDCTALTIVEC)
ALL_OBJ = $(PLUGIN_C) $(BUILTIN_IDCT) $(BUILTIN_IDCTCLASSIC) $(BUILTIN_IDCTMMX) $(BUILTIN_IDCTMMXEXT) $(BUILTIN_IDCTALTIVEC)
#
# Virtual targets
......@@ -30,13 +28,6 @@ ALL_OBJ = $(PLUGIN_C) $(PLUGIN_IDCTALTIVEC) $(BUILTIN_IDCT) $(BUILTIN_IDCTCLASSI
include ../../Makefile.modules
$(PLUGIN_IDCTALTIVEC): %.o: .dep/%.d
$(PLUGIN_IDCTALTIVEC): %.o: %.c
$(CC) $(CFLAGS) -DPLUGIN $(PCFLAGS) -faltivec -c -o $@ $<
$(PLUGIN_IDCTALTIVECASM): %.o: %.S
$(CC) $(CFLAGS) -DPLUGIN $(PCFLAGS) -faltivec -c -o $@ $<
$(BUILTIN_IDCT): BUILTIN_IDCT_%.o: .dep/%.d
$(BUILTIN_IDCT): BUILTIN_IDCT_%.o: %.c
$(CC) $(CFLAGS) -DBUILTIN -DMODULE_NAME=idct -c -o $@ $<
......@@ -55,10 +46,7 @@ $(BUILTIN_IDCTMMXEXT): BUILTIN_IDCTMMXEXT_%.o: %.c
$(BUILTIN_IDCTALTIVEC): BUILTIN_IDCTALTIVEC_%.o: .dep/%.d
$(BUILTIN_IDCTALTIVEC): BUILTIN_IDCTALTIVEC_%.o: %.c
$(CC) $(CFLAGS) -DBUILTIN -DMODULE_NAME=idctaltivec -faltivec -c -o $@ $<
$(BUILTIN_IDCTALTIVECASM): BUILTIN_IDCTALTIVEC_%.o: %.S
$(CC) $(CFLAGS) -DBUILTIN -DMODULE_NAME=idctaltivec -faltivec -c -o $@ $<
$(CC) $(CFLAGS) -DBUILTIN -DMODULE_NAME=idctaltivec -c -o $@ $<
#
# Real targets
......@@ -92,10 +80,10 @@ $(BUILTIN_IDCTALTIVECASM): BUILTIN_IDCTALTIVEC_%.o: %.S
ar r $@ $^
$(RANLIB) $@
../idctaltivec.so: $(PLUGIN_IDCTALTIVEC) $(PLUGIN_IDCTALTIVECASM)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_ALTIVEC)
../idctaltivec.so: $(PLUGIN_IDCTALTIVEC)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
../idctaltivec.a: $(BUILTIN_IDCTALTIVEC) $(BUILTIN_IDCTALTIVECASM)
../idctaltivec.a: $(BUILTIN_IDCTALTIVEC)
ar r $@ $^
$(RANLIB) $@
......@@ -2,7 +2,7 @@
* idctaltivec.c : Altivec IDCT module
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
* $Id: idctaltivec.c,v 1.14 2001/09/11 22:22:31 massiot Exp $
* $Id: idctaltivec.c,v 1.15 2001/09/25 11:46:14 massiot Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
......@@ -21,6 +21,8 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
#ifndef __ALTIVEC__
#define MODULE_NAME idctaltivec
#include "modules_inner.h"
......@@ -31,6 +33,7 @@
#include <stdlib.h>
#include <string.h>
#include <inttypes.h>
#include "config.h"
#include "common.h"
......@@ -47,8 +50,6 @@
* Local prototypes.
*****************************************************************************/
static void idct_getfunctions( function_list_t * p_function_list );
void idct_block_copy_altivec( dctelem_t *, yuv_data_t *, int, void *, int );
void idct_block_add_altivec( dctelem_t *, yuv_data_t *, int, void *, int );
/*****************************************************************************
* Build configuration tree.
......@@ -93,16 +94,647 @@ static int idct_Probe( probedata_t *p_data )
}
/*****************************************************************************
* Placeholders for unused functions
* NormScan : This IDCT uses reordered coeffs, so we patch the scan table
*****************************************************************************/
static void NormScan( u8 ppi_scan[2][64] )
{
int i, j;
for( i = 0; i < 64; i++ )
{
j = ppi_scan[0][i];
ppi_scan[0][i] = (j & 0x38) | ((j & 6) >> 1) | ((j & 1) << 2);
j = ppi_scan[1][i];
ppi_scan[1][i] = (j & 0x38) | ((j & 6) >> 1) | ((j & 1) << 2);
}
}
/*****************************************************************************
* Placeholders for unused functions
*****************************************************************************/
static void InitIDCT( void ** pp_idct_data )
{
}
/*****************************************************************************
* IDCT in Altivec
*****************************************************************************/
static int16_t constants[5][8] ATTR_ALIGN(16) = {
{23170, 13573, 6518, 21895, -23170, -21895, 32, 31},
{16384, 22725, 21407, 19266, 16384, 19266, 21407, 22725},
{22725, 31521, 29692, 26722, 22725, 26722, 29692, 31521},
{21407, 29692, 27969, 25172, 21407, 25172, 27969, 29692},
{19266, 26722, 25172, 22654, 19266, 22654, 25172, 26722}
};
/*
* The asm code is generated with:
*
* gcc-2.95 -fvec -D__ALTIVEC__ -O9 -fomit-frame-pointer -mregnames -S
* idct_altivec.c
*
* awk '{args=""; len=split ($2, arg, ",");
* for (i=1; i<=len; i++) { a=arg[i]; if (i<len) a=a",";
* args = args sprintf ("%-6s", a) }
* printf ("\t\"\t%-16s%-24s\\n\"\n", $1, args) }' idct_altivec.s |
* unexpand -a
*
* I then do some simple trimming on the function prolog/trailers
*/
void idct_block_copy_altivec (int16_t * block, uint8_t * dest, int stride)
{
asm (" \n"
"# stwu %r1, -128(%r1) \n"
"# mflr %r0 \n"
"# stw %r0, 132(%r1) \n"
"# addi %r0, %r1, 128 \n"
"# bl _savev25 \n"
" addi %r9, %r3, 112 \n"
" vspltish %v25, 4 \n"
" vxor %v13, %v13, %v13 \n"
" lis %r10, constants@ha \n"
" lvx %v1, 0, %r9 \n"
" la %r10, constants@l(%r10) \n"
" lvx %v5, 0, %r3 \n"
" addi %r9, %r3, 16 \n"
" lvx %v8, 0, %r10 \n"
" addi %r11, %r10, 32 \n"
" lvx %v12, 0, %r9 \n"
" lvx %v6, 0, %r11 \n"
" addi %r8, %r3, 48 \n"
" vslh %v1, %v1, %v25 \n"
" addi %r9, %r3, 80 \n"
" lvx %v11, 0, %r8 \n"
" vslh %v5, %v5, %v25 \n"
" lvx %v0, 0, %r9 \n"
" addi %r11, %r10, 64 \n"
" vsplth %v3, %v8, 2 \n"
" lvx %v7, 0, %r11 \n"
" addi %r9, %r3, 96 \n"
" vslh %v12, %v12, %v25 \n"
" vmhraddshs %v27, %v1, %v6, %v13 \n"
" addi %r8, %r3, 32 \n"
" vsplth %v2, %v8, 5 \n"
" lvx %v1, 0, %r9 \n"
" vslh %v11, %v11, %v25 \n"
" addi %r3, %r3, 64 \n"
" lvx %v9, 0, %r8 \n"
" addi %r9, %r10, 48 \n"
" vslh %v0, %v0, %v25 \n"
" lvx %v4, 0, %r9 \n"
" vmhraddshs %v31, %v12, %v6, %v13 \n"
" addi %r10, %r10, 16 \n"
" vmhraddshs %v30, %v0, %v7, %v13 \n"
" lvx %v10, 0, %r3 \n"
" vsplth %v19, %v8, 3 \n"
" vmhraddshs %v15, %v11, %v7, %v13 \n"
" lvx %v12, 0, %r10 \n"
" vsplth %v6, %v8, 4 \n"
" vslh %v1, %v1, %v25 \n"
" vsplth %v11, %v8, 1 \n"
" li %r9, 4 \n"
" vslh %v9, %v9, %v25 \n"
" vsplth %v7, %v8, 0 \n"
" vmhraddshs %v18, %v1, %v4, %v13 \n"
" vspltw %v8, %v8, 3 \n"
" vsubshs %v0, %v13, %v27 \n"
" vmhraddshs %v1, %v9, %v4, %v13 \n"
" vmhraddshs %v17, %v3, %v31, %v0 \n"
" vmhraddshs %v4, %v2, %v15, %v30 \n"
" vslh %v10, %v10, %v25 \n"
" vmhraddshs %v9, %v5, %v12, %v13 \n"
" vspltish %v25, 6 \n"
" vmhraddshs %v5, %v10, %v12, %v13 \n"
" vmhraddshs %v28, %v19, %v30, %v15 \n"
" vmhraddshs %v27, %v3, %v27, %v31 \n"
" vsubshs %v0, %v13, %v18 \n"
" vmhraddshs %v18, %v11, %v18, %v1 \n"
" vaddshs %v30, %v17, %v4 \n"
" vmhraddshs %v12, %v11, %v1, %v0 \n"
" vsubshs %v4, %v17, %v4 \n"
" vaddshs %v10, %v9, %v5 \n"
" vsubshs %v17, %v27, %v28 \n"
" vaddshs %v27, %v27, %v28 \n"
" vsubshs %v1, %v9, %v5 \n"
" vaddshs %v28, %v10, %v18 \n"
" vsubshs %v18, %v10, %v18 \n"
" vaddshs %v10, %v1, %v12 \n"
" vsubshs %v1, %v1, %v12 \n"
" vsubshs %v12, %v17, %v4 \n"
" vaddshs %v4, %v17, %v4 \n"
" vmhraddshs %v5, %v7, %v12, %v1 \n"
" vmhraddshs %v26, %v6, %v4, %v10 \n"
" vmhraddshs %v29, %v6, %v12, %v1 \n"
" vmhraddshs %v14, %v7, %v4, %v10 \n"
" vsubshs %v12, %v18, %v30 \n"
" vaddshs %v9, %v28, %v27 \n"
" vaddshs %v16, %v18, %v30 \n"
" vsubshs %v10, %v28, %v27 \n"
" vmrglh %v31, %v9, %v12 \n"
" vmrglh %v30, %v5, %v26 \n"
" vmrglh %v15, %v14, %v29 \n"
" vmrghh %v5, %v5, %v26 \n"
" vmrglh %v27, %v16, %v10 \n"
" vmrghh %v9, %v9, %v12 \n"
" vmrghh %v18, %v16, %v10 \n"
" vmrghh %v1, %v14, %v29 \n"
" vmrglh %v14, %v9, %v5 \n"
" vmrglh %v16, %v31, %v30 \n"
" vmrglh %v10, %v15, %v27 \n"
" vmrghh %v9, %v9, %v5 \n"
" vmrghh %v26, %v15, %v27 \n"
" vmrglh %v27, %v16, %v10 \n"
" vmrghh %v12, %v1, %v18 \n"
" vmrglh %v29, %v1, %v18 \n"
" vsubshs %v0, %v13, %v27 \n"
" vmrghh %v5, %v31, %v30 \n"
" vmrglh %v31, %v9, %v12 \n"
" vmrglh %v30, %v5, %v26 \n"
" vmrglh %v15, %v14, %v29 \n"
" vmhraddshs %v17, %v3, %v31, %v0 \n"
" vmrghh %v18, %v16, %v10 \n"
" vmhraddshs %v27, %v3, %v27, %v31 \n"
" vmhraddshs %v4, %v2, %v15, %v30 \n"
" vmrghh %v1, %v14, %v29 \n"
" vmhraddshs %v28, %v19, %v30, %v15 \n"
" vmrghh %v0, %v9, %v12 \n"
" vsubshs %v13, %v13, %v18 \n"
" vmrghh %v5, %v5, %v26 \n"
" vmhraddshs %v18, %v11, %v18, %v1 \n"
" vaddshs %v9, %v0, %v8 \n"
" vaddshs %v30, %v17, %v4 \n"
" vmhraddshs %v12, %v11, %v1, %v13 \n"
" vsubshs %v4, %v17, %v4 \n"
" vaddshs %v10, %v9, %v5 \n"
" vsubshs %v17, %v27, %v28 \n"
" vaddshs %v27, %v27, %v28 \n"
" vsubshs %v1, %v9, %v5 \n"
" vaddshs %v28, %v10, %v18 \n"
" vsubshs %v18, %v10, %v18 \n"
" vaddshs %v10, %v1, %v12 \n"
" vsubshs %v1, %v1, %v12 \n"
" vsubshs %v12, %v17, %v4 \n"
" vaddshs %v4, %v17, %v4 \n"
" vaddshs %v9, %v28, %v27 \n"
" vmhraddshs %v14, %v7, %v4, %v10 \n"
" vsrah %v9, %v9, %v25 \n"
" vmhraddshs %v5, %v7, %v12, %v1 \n"
" vpkshus %v0, %v9, %v9 \n"
" vmhraddshs %v29, %v6, %v12, %v1 \n"
" stvewx %v0, 0, %r4 \n"
" vaddshs %v16, %v18, %v30 \n"
" vsrah %v31, %v14, %v25 \n"
" stvewx %v0, %r9, %r4 \n"
" add %r4, %r4, %r5 \n"
" vsrah %v15, %v16, %v25 \n"
" vpkshus %v0, %v31, %v31 \n"
" vsrah %v1, %v5, %v25 \n"
" stvewx %v0, 0, %r4 \n"
" vsubshs %v12, %v18, %v30 \n"
" stvewx %v0, %r9, %r4 \n"
" vmhraddshs %v26, %v6, %v4, %v10 \n"
" vpkshus %v0, %v1, %v1 \n"
" add %r4, %r4, %r5 \n"
" vsrah %v5, %v12, %v25 \n"
" stvewx %v0, 0, %r4 \n"
" vsrah %v30, %v29, %v25 \n"
" stvewx %v0, %r9, %r4 \n"
" vsubshs %v10, %v28, %v27 \n"
" vpkshus %v0, %v15, %v15 \n"
" add %r4, %r4, %r5 \n"
" stvewx %v0, 0, %r4 \n"
" vsrah %v18, %v26, %v25 \n"
" stvewx %v0, %r9, %r4 \n"
" vsrah %v27, %v10, %v25 \n"
" vpkshus %v0, %v5, %v5 \n"
" add %r4, %r4, %r5 \n"
" stvewx %v0, 0, %r4 \n"
" stvewx %v0, %r9, %r4 \n"
" vpkshus %v0, %v30, %v30 \n"
" add %r4, %r4, %r5 \n"
" stvewx %v0, 0, %r4 \n"
" stvewx %v0, %r9, %r4 \n"
" vpkshus %v0, %v18, %v18 \n"
" add %r4, %r4, %r5 \n"
" stvewx %v0, 0, %r4 \n"
" stvewx %v0, %r9, %r4 \n"
" add %r4, %r4, %r5 \n"
" vpkshus %v0, %v27, %v27 \n"
" stvewx %v0, 0, %r4 \n"
" stvewx %v0, %r9, %r4 \n"
"# addi %r0, %r1, 128 \n"
"# bl _restv25 \n"
"# lwz %r0, 132(%r1) \n"
"# mtlr %r0 \n"
"# la %r1, 128(%r1) \n"
);
}
void idct_block_add_altivec (int16_t * block, uint8_t * dest, int stride)
{
asm (" \n"
"# stwu %r1, -192(%r1) \n"
"# mflr %r0 \n"
"# stw %r0, 196(%r1) \n"
"# addi %r0, %r1, 192 \n"
"# bl _savev21 \n"
" addi %r9, %r3, 112 \n"
" vspltish %v21, 4 \n"
" vxor %v1, %v1, %v1 \n"
" lvx %v13, 0, %r9 \n"
" lis %r10, constants@ha \n"
" vspltisw %v3, -1 \n"
" la %r10, constants@l(%r10) \n"
" lvx %v5, 0, %r3 \n"
" addi %r9, %r3, 16 \n"
" lvx %v8, 0, %r10 \n"
" lvx %v12, 0, %r9 \n"
" addi %r11, %r10, 32 \n"
" lvx %v6, 0, %r11 \n"
" addi %r8, %r3, 48 \n"
" vslh %v13, %v13, %v21 \n"
" addi %r9, %r3, 80 \n"
" lvx %v11, 0, %r8 \n"
" vslh %v5, %v5, %v21 \n"
" lvx %v0, 0, %r9 \n"
" addi %r11, %r10, 64 \n"
" vsplth %v2, %v8, 2 \n"
" lvx %v7, 0, %r11 \n"
" vslh %v12, %v12, %v21 \n"
" addi %r9, %r3, 96 \n"
" vmhraddshs %v24, %v13, %v6, %v1 \n"
" addi %r8, %r3, 32 \n"
" vsplth %v17, %v8, 5 \n"
" lvx %v13, 0, %r9 \n"
" vslh %v11, %v11, %v21 \n"
" addi %r3, %r3, 64 \n"
" lvx %v10, 0, %r8 \n"
" vslh %v0, %v0, %v21 \n"
" addi %r9, %r10, 48 \n"
" vmhraddshs %v31, %v12, %v6, %v1 \n"
" lvx %v4, 0, %r9 \n"
" addi %r10, %r10, 16 \n"
" vmhraddshs %v26, %v0, %v7, %v1 \n"
" lvx %v9, 0, %r3 \n"
" vsplth %v16, %v8, 3 \n"
" vmhraddshs %v22, %v11, %v7, %v1 \n"
" lvx %v6, 0, %r10 \n"
" lvsl %v19, 0, %r4 \n"
" vsubshs %v12, %v1, %v24 \n"
" lvsl %v0, %r5, %r4 \n"
" vsplth %v11, %v8, 1 \n"
" vslh %v10, %v10, %v21 \n"
" vmrghb %v19, %v3, %v19 \n"
" lvx %v15, 0, %r4 \n"
" vslh %v13, %v13, %v21 \n"
" vmrghb %v3, %v3, %v0 \n"
" li %r9, 4 \n"
" vmhraddshs %v14, %v2, %v31, %v12 \n"
" vsplth %v7, %v8, 0 \n"
" vmhraddshs %v23, %v13, %v4, %v1 \n"
" vsplth %v18, %v8, 4 \n"
" vmhraddshs %v27, %v10, %v4, %v1 \n"
" vspltw %v8, %v8, 3 \n"
" vmhraddshs %v12, %v17, %v22, %v26 \n"
" vperm %v15, %v15, %v1, %v19 \n"
" vslh %v9, %v9, %v21 \n"
" vmhraddshs %v10, %v5, %v6, %v1 \n"
" vspltish %v21, 6 \n"
" vmhraddshs %v30, %v9, %v6, %v1 \n"
" vmhraddshs %v26, %v16, %v26, %v22 \n"
" vmhraddshs %v24, %v2, %v24, %v31 \n"
" vmhraddshs %v31, %v11, %v23, %v27 \n"
" vsubshs %v0, %v1, %v23 \n"
" vaddshs %v23, %v14, %v12 \n"
" vmhraddshs %v9, %v11, %v27, %v0 \n"
" vsubshs %v12, %v14, %v12 \n"
" vaddshs %v6, %v10, %v30 \n"
" vsubshs %v14, %v24, %v26 \n"
" vaddshs %v24, %v24, %v26 \n"
" vsubshs %v13, %v10, %v30 \n"
" vaddshs %v26, %v6, %v31 \n"
" vsubshs %v31, %v6, %v31 \n"
" vaddshs %v6, %v13, %v9 \n"
" vsubshs %v13, %v13, %v9 \n"
" vsubshs %v9, %v14, %v12 \n"
" vaddshs %v12, %v14, %v12 \n"
" vmhraddshs %v30, %v7, %v9, %v13 \n"
" vmhraddshs %v25, %v18, %v12, %v6 \n"
" vmhraddshs %v28, %v18, %v9, %v13 \n"
" vmhraddshs %v29, %v7, %v12, %v6 \n"
" vaddshs %v10, %v26, %v24 \n"
" vsubshs %v5, %v31, %v23 \n"
" vsubshs %v13, %v26, %v24 \n"
" vaddshs %v4, %v31, %v23 \n"
" vmrglh %v26, %v30, %v25 \n"
" vmrglh %v31, %v10, %v5 \n"
" vmrglh %v22, %v29, %v28 \n"
" vmrghh %v30, %v30, %v25 \n"
" vmrglh %v24, %v4, %v13 \n"
" vmrghh %v10, %v10, %v5 \n"
" vmrghh %v23, %v4, %v13 \n"
" vmrghh %v27, %v29, %v28 \n"
" vmrglh %v29, %v10, %v30 \n"
" vmrglh %v4, %v31, %v26 \n"
" vmrglh %v13, %v22, %v24 \n"
" vmrghh %v10, %v10, %v30 \n"
" vmrghh %v25, %v22, %v24 \n"
" vmrglh %v24, %v4, %v13 \n"
" vmrghh %v5, %v27, %v23 \n"
" vmrglh %v28, %v27, %v23 \n"
" vsubshs %v0, %v1, %v24 \n"
" vmrghh %v30, %v31, %v26 \n"
" vmrglh %v31, %v10, %v5 \n"
" vmrglh %v26, %v30, %v25 \n"
" vmrglh %v22, %v29, %v28 \n"
" vmhraddshs %v14, %v2, %v31, %v0 \n"
" vmrghh %v23, %v4, %v13 \n"
" vmhraddshs %v24, %v2, %v24, %v31 \n"
" vmhraddshs %v12, %v17, %v22, %v26 \n"
" vmrghh %v27, %v29, %v28 \n"
" vmhraddshs %v26, %v16, %v26, %v22 \n"
" vmrghh %v0, %v10, %v5 \n"
" vmhraddshs %v31, %v11, %v23, %v27 \n"
" vmrghh %v30, %v30, %v25 \n"
" vsubshs %v13, %v1, %v23 \n"
" vaddshs %v10, %v0, %v8 \n"
" vaddshs %v23, %v14, %v12 \n"
" vsubshs %v12, %v14, %v12 \n"
" vaddshs %v6, %v10, %v30 \n"
" vsubshs %v14, %v24, %v26 \n"
" vmhraddshs %v9, %v11, %v27, %v13 \n"
" vaddshs %v24, %v24, %v26 \n"
" vaddshs %v26, %v6, %v31 \n"
" vsubshs %v13, %v10, %v30 \n"
" vaddshs %v10, %v26, %v24 \n"
" vsubshs %v31, %v6, %v31 \n"
" vaddshs %v6, %v13, %v9 \n"
" vsrah %v10, %v10, %v21 \n"
" vsubshs %v13, %v13, %v9 \n"
" vaddshs %v0, %v15, %v10 \n"
" vsubshs %v9, %v14, %v12 \n"
" vaddshs %v12, %v14, %v12 \n"
" vpkshus %v15, %v0, %v0 \n"
" stvewx %v15, 0, %r4 \n"
" vaddshs %v4, %v31, %v23 \n"
" vmhraddshs %v29, %v7, %v12, %v6 \n"
" stvewx %v15, %r9, %r4 \n"
" add %r4, %r4, %r5 \n"
" vsubshs %v5, %v31, %v23 \n"
" lvx %v15, 0, %r4 \n"
" vmhraddshs %v30, %v7, %v9, %v13 \n"
" vsrah %v22, %v4, %v21 \n"
" vperm %v15, %v15, %v1, %v3 \n"
" vmhraddshs %v28, %v18, %v9, %v13 \n"
" vsrah %v31, %v29, %v21 \n"
" vsubshs %v13, %v26, %v24 \n"
" vaddshs %v0, %v15, %v31 \n"
" vsrah %v27, %v30, %v21 \n"
" vpkshus %v15, %v0, %v0 \n"
" vsrah %v30, %v5, %v21 \n"
" stvewx %v15, 0, %r4 \n"
" vsrah %v26, %v28, %v21 \n"
" stvewx %v15, %r9, %r4 \n"
" vmhraddshs %v25, %v18, %v12, %v6 \n"
" add %r4, %r4, %r5 \n"
" vsrah %v24, %v13, %v21 \n"
" lvx %v15, 0, %r4 \n"
" vperm %v15, %v15, %v1, %v19 \n"
" vsrah %v23, %v25, %v21 \n"
" vaddshs %v0, %v15, %v27 \n"
" vpkshus %v15, %v0, %v0 \n"
" stvewx %v15, 0, %r4 \n"
" stvewx %v15, %r9, %r4 \n"
" add %r4, %r4, %r5 \n"
" lvx %v15, 0, %r4 \n"
" vperm %v15, %v15, %v1, %v3 \n"
" vaddshs %v0, %v15, %v22 \n"
" vpkshus %v15, %v0, %v0 \n"
" stvewx %v15, 0, %r4 \n"
" stvewx %v15, %r9, %r4 \n"
" add %r4, %r4, %r5 \n"
" lvx %v15, 0, %r4 \n"
" vperm %v15, %v15, %v1, %v19 \n"
" vaddshs %v0, %v15, %v30 \n"
" vpkshus %v15, %v0, %v0 \n"
" stvewx %v15, 0, %r4 \n"
" stvewx %v15, %r9, %r4 \n"
" add %r4, %r4, %r5 \n"
" lvx %v15, 0, %r4 \n"
" vperm %v15, %v15, %v1, %v3 \n"
" vaddshs %v0, %v15, %v26 \n"
" vpkshus %v15, %v0, %v0 \n"
" stvewx %v15, 0, %r4 \n"
" stvewx %v15, %r9, %r4 \n"
" add %r4, %r4, %r5 \n"
" lvx %v15, 0, %r4 \n"
" vperm %v15, %v15, %v1, %v19 \n"
" vaddshs %v0, %v15, %v23 \n"
" vpkshus %v15, %v0, %v0 \n"
" stvewx %v15, 0, %r4 \n"
" stvewx %v15, %r9, %r4 \n"
" add %r4, %r4, %r5 \n"
" lvx %v15, 0, %r4 \n"
" vperm %v15, %v15, %v1, %v3 \n"
" vaddshs %v0, %v15, %v24 \n"
" vpkshus %v15, %v0, %v0 \n"
" stvewx %v15, 0, %r4 \n"
" stvewx %v15, %r9, %r4 \n"
"# addi %r0, %r1, 192 \n"
"# bl _restv21 \n"
"# lwz %r0, 196(%r1) \n"
"# mtlr %r0 \n"
"# la %r1, 192(%r1) \n"
);
}
#else /* __ALTIVEC__ */
#define vector_s16_t vector signed short
#define vector_u16_t vector unsigned short
#define vector_s8_t vector signed char
#define vector_u8_t vector unsigned char
#define vector_s32_t vector signed int
#define vector_u32_t vector unsigned int
#define IDCT_HALF \
/* 1st stage */ \
t1 = vec_mradds (a1, vx7, vx1 ); \
t8 = vec_mradds (a1, vx1, vec_subs (zero, vx7)); \
t7 = vec_mradds (a2, vx5, vx3); \
t3 = vec_mradds (ma2, vx3, vx5); \
\
/* 2nd stage */ \
t5 = vec_adds (vx0, vx4); \
t0 = vec_subs (vx0, vx4); \
t2 = vec_mradds (a0, vx6, vx2); \
t4 = vec_mradds (a0, vx2, vec_subs (zero,vx6)); \
t6 = vec_adds (t8, t3); \
t3 = vec_subs (t8, t3); \
t8 = vec_subs (t1, t7); \
t1 = vec_adds (t1, t7); \
\
/* 3rd stage */ \
t7 = vec_adds (t5, t2); \
t2 = vec_subs (t5, t2); \
t5 = vec_adds (t0, t4); \
t0 = vec_subs (t0, t4); \
t4 = vec_subs (t8, t3); \
t3 = vec_adds (t8, t3); \
\
/* 4th stage */ \
vy0 = vec_adds (t7, t1); \
vy7 = vec_subs (t7, t1); \
vy1 = vec_mradds (c4, t3, t5); \
vy6 = vec_mradds (mc4, t3, t5); \
vy2 = vec_mradds (c4, t4, t0); \
vy5 = vec_mradds (mc4, t4, t0); \
vy3 = vec_adds (t2, t6); \
vy4 = vec_subs (t2, t6);
#define IDCT \
vector_s16_t vx0, vx1, vx2, vx3, vx4, vx5, vx6, vx7; \
vector_s16_t vy0, vy1, vy2, vy3, vy4, vy5, vy6, vy7; \
vector_s16_t a0, a1, a2, ma2, c4, mc4, zero, bias; \
vector_s16_t t0, t1, t2, t3, t4, t5, t6, t7, t8; \
vector_u16_t shift; \
\
c4 = vec_splat (constants[0], 0); \
a0 = vec_splat (constants[0], 1); \
a1 = vec_splat (constants[0], 2); \
a2 = vec_splat (constants[0], 3); \
mc4 = vec_splat (constants[0], 4); \
ma2 = vec_splat (constants[0], 5); \
bias = (vector_s16_t)vec_splat ((vector_s32_t)constants[0], 3); \
\
zero = vec_splat_s16 (0); \
shift = vec_splat_u16 (4); \
\
vx0 = vec_mradds (vec_sl (block[0], shift), constants[1], zero); \
vx1 = vec_mradds (vec_sl (block[1], shift), constants[2], zero); \
vx2 = vec_mradds (vec_sl (block[2], shift), constants[3], zero); \
vx3 = vec_mradds (vec_sl (block[3], shift), constants[4], zero); \
vx4 = vec_mradds (vec_sl (block[4], shift), constants[1], zero); \
vx5 = vec_mradds (vec_sl (block[5], shift), constants[4], zero); \
vx6 = vec_mradds (vec_sl (block[6], shift), constants[3], zero); \
vx7 = vec_mradds (vec_sl (block[7], shift), constants[2], zero); \
\
IDCT_HALF \
\
vx0 = vec_mergeh (vy0, vy4); \
vx1 = vec_mergel (vy0, vy4); \
vx2 = vec_mergeh (vy1, vy5); \
vx3 = vec_mergel (vy1, vy5); \
vx4 = vec_mergeh (vy2, vy6); \
vx5 = vec_mergel (vy2, vy6); \
vx6 = vec_mergeh (vy3, vy7); \
vx7 = vec_mergel (vy3, vy7); \
\
vy0 = vec_mergeh (vx0, vx4); \
vy1 = vec_mergel (vx0, vx4); \
vy2 = vec_mergeh (vx1, vx5); \
vy3 = vec_mergel (vx1, vx5); \
vy4 = vec_mergeh (vx2, vx6); \
vy5 = vec_mergel (vx2, vx6); \
vy6 = vec_mergeh (vx3, vx7); \
vy7 = vec_mergel (vx3, vx7); \
\
vx0 = vec_adds (vec_mergeh (vy0, vy4), bias); \
vx1 = vec_mergel (vy0, vy4); \
vx2 = vec_mergeh (vy1, vy5); \
vx3 = vec_mergel (vy1, vy5); \
vx4 = vec_mergeh (vy2, vy6); \
vx5 = vec_mergel (vy2, vy6); \
vx6 = vec_mergeh (vy3, vy7); \
vx7 = vec_mergel (vy3, vy7); \
\
IDCT_HALF \
\
shift = vec_splat_u16 (6); \
vx0 = vec_sra (vy0, shift); \
vx1 = vec_sra (vy1, shift); \
vx2 = vec_sra (vy2, shift); \
vx3 = vec_sra (vy3, shift); \
vx4 = vec_sra (vy4, shift); \
vx5 = vec_sra (vy5, shift); \
vx6 = vec_sra (vy6, shift); \
vx7 = vec_sra (vy7, shift);
static vector_s16_t constants[5] = {
(vector_s16_t)(23170, 13573, 6518, 21895, -23170, -21895, 32, 31),
(vector_s16_t)(16384, 22725, 21407, 19266, 16384, 19266, 21407, 22725),
(vector_s16_t)(22725, 31521, 29692, 26722, 22725, 26722, 29692, 31521),
(vector_s16_t)(21407, 29692, 27969, 25172, 21407, 25172, 27969, 29692),
(vector_s16_t)(19266, 26722, 25172, 22654, 19266, 22654, 25172, 26722)
};
void idct_block_copy_altivec (vector_s16_t * block, unsigned char * dest,
int stride)
{
vector_u8_t tmp;
IDCT
#define COPY(dest,src) \
tmp = vec_packsu (src, src); \
vec_ste ((vector_u32_t)tmp, 0, (unsigned int *)dest); \
vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
COPY (dest, vx0) dest += stride;
COPY (dest, vx1) dest += stride;
COPY (dest, vx2) dest += stride;
COPY (dest, vx3) dest += stride;
COPY (dest, vx4) dest += stride;
COPY (dest, vx5) dest += stride;
COPY (dest, vx6) dest += stride;
COPY (dest, vx7)
}
void idct_block_add_altivec (vector_s16_t * block, unsigned char * dest,
int stride)
{
vector_u8_t tmp;
vector_s16_t tmp2, tmp3;
vector_u8_t perm0;
vector_u8_t perm1;
vector_u8_t p0, p1, p;
IDCT
p0 = vec_lvsl (0, dest);
p1 = vec_lvsl (stride, dest);
p = vec_splat_u8 (-1);
perm0 = vec_mergeh (p, p0);
perm1 = vec_mergeh (p, p1);
#define ADD(dest,src,perm) \
/* *(uint64_t *)&tmp = *(uint64_t *)dest; */ \
tmp = vec_ld (0, dest); \
tmp2 = (vector_s16_t)vec_perm (tmp, (vector_u8_t)zero, perm); \
tmp3 = vec_adds (tmp2, src); \
tmp = vec_packsu (tmp3, tmp3); \
vec_ste ((vector_u32_t)tmp, 0, (unsigned int *)dest); \
vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
ADD (dest, vx0, perm0) dest += stride;
ADD (dest, vx1, perm1) dest += stride;
ADD (dest, vx2, perm0) dest += stride;
ADD (dest, vx3, perm1) dest += stride;
ADD (dest, vx4, perm0) dest += stride;
ADD (dest, vx5, perm1) dest += stride;
ADD (dest, vx6, perm0) dest += stride;
ADD (dest, vx7, perm1)
}
#endif /* __ALTIVEC__ */
#ifndef __ALTIVEC__
/*****************************************************************************
* Functions exported as capabilities. They are declared as static so that
......@@ -122,3 +754,4 @@ static void idct_getfunctions( function_list_t * p_function_list )
#undef F
}
#endif /* __ALTIVEC__ */
#*****************************************************************************
# idctaltivec.S : Altivec IDCT code
#*****************************************************************************
# Copyright (C) 1999, 2001 VideoLAN
# $Id: idctaltivecasm.S,v 1.1 2001/09/05 16:20:23 massiot Exp $
#
# Author: Paul Mackerras <paulus@linuxcare.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
#*****************************************************************************/
.data
.align 4
wvec: .long 0x3f0a8bd4
.long 0x3e8d42af
.long 0x3f3504f3
.long 0x3f968317
.long 0x3f8e39da
.long 0x3fd4db31
.long 0x3ec7c5c2
.long 0x3ffb14be
.long 0x3f43ef15
.long 0x3fec835e
.long 0
.long 0
d: .long 0,0,0,0
.text
.globl idct_block_copy_altivec
idct_block_copy_altivec:
li 6,0
b idct_asm_altivec
.global idct_block_add_altivec
idct_block_add_altivec:
li 6,1
.globl idct_asm_altivec
idct_asm_altivec:
lvx 22,0,3 # ih = *(vector signed short *)(p);
addi 3,3,16 # p += 8;
vupkhsh 20,22 # i0 = vec_unpackh(ih);
vupklsh 21,22 # i1 = vec_unpackl(ih);
vcfsx 0,20,3 # x00 = vec_ctf(i0, 3);
vcfsx 10,21,3 # x01 = vec_ctf(i1, 3);
lvx 22,0,3 # ih = *(vector signed short *)(p);
addi 3,3,16 # p += 8;
vupkhsh 20,22 # i0 = vec_unpackh(ih);
vupklsh 21,22 # i1 = vec_unpackl(ih);
vcfsx 1,20,3 # x10 = vec_ctf(i0, 3);
vcfsx 11,21,3 # x11 = vec_ctf(i1, 3);
lvx 22,0,3 # ih = *(vector signed short *)(p);
addi 3,3,16 # p += 8;
vupkhsh 20,22 # i0 = vec_unpackh(ih);
vupklsh 21,22 # i1 = vec_unpackl(ih);
vcfsx 2,20,3 # x20 = vec_ctf(i0, 3);
vcfsx 12,21,3 # x21 = vec_ctf(i1, 3);
lvx 22,0,3 # ih = *(vector signed short *)(p);
addi 3,3,16 # p += 8;
vupkhsh 20,22 # i0 = vec_unpackh(ih);
vupklsh 21,22 # i1 = vec_unpackl(ih);
vcfsx 3,20,3 # x30 = vec_ctf(i0, 3);
vcfsx 13,21,3 # x31 = vec_ctf(i1, 3);
lvx 22,0,3 # ih = *(vector signed short *)(p);
addi 3,3,16 # p += 8;
vupkhsh 20,22 # i0 = vec_unpackh(ih);
vupklsh 21,22 # i1 = vec_unpackl(ih);
vcfsx 4,20,3 # x40 = vec_ctf(i0, 3);
vcfsx 14,21,3 # x41 = vec_ctf(i1, 3);
lvx 22,0,3 # ih = *(vector signed short *)(p);
addi 3,3,16 # p += 8;
vupkhsh 20,22 # i0 = vec_unpackh(ih);
vupklsh 21,22 # i1 = vec_unpackl(ih);
vcfsx 5,20,3 # x50 = vec_ctf(i0, 3);
vcfsx 15,21,3 # x51 = vec_ctf(i1, 3);
lvx 22,0,3 # ih = *(vector signed short *)(p);
addi 3,3,16 # p += 8;
vupkhsh 20,22 # i0 = vec_unpackh(ih);
vupklsh 21,22 # i1 = vec_unpackl(ih);
vcfsx 6,20,3 # x60 = vec_ctf(i0, 3);
vcfsx 16,21,3 # x61 = vec_ctf(i1, 3);
lvx 22,0,3 # ih = *(vector signed short *)(p);
vupkhsh 20,22 # i0 = vec_unpackh(ih);
vupklsh 21,22 # i1 = vec_unpackl(ih);
vcfsx 7,20,3 # x70 = vec_ctf(i0, 3);
vcfsx 17,21,3 # x71 = vec_ctf(i1, 3);
vmrghw 8,0,2 # x80 = vec_mergeh(x00, x20);
vmrghw 9,1,3 # x90 = vec_mergeh(x10, x30);
vmrglw 18,0,2 # x81 = vec_mergel(x00, x20);
vmrglw 19,1,3 # x91 = vec_mergel(x10, x30);
vmrghw 0,8,9 # x00 = vec_mergeh(x80, x90);
vmrglw 1,8,9 # x10 = vec_mergel(x80, x90);
vmrghw 2,18,19 # x20 = vec_mergeh(x81, x91);
vmrglw 3,18,19 # x30 = vec_mergel(x81, x91);
vmrghw 8,10,12 # x80 = vec_mergeh(x01, x21);
vmrghw 9,11,13 # x90 = vec_mergeh(x11, x31);
vmrglw 18,10,12 # x81 = vec_mergel(x01, x21);
vmrglw 19,11,13 # x91 = vec_mergel(x11, x31);
vmrghw 20,4,6 # y80 = vec_mergeh(x40, x60);
vmrghw 22,5,7 # y90 = vec_mergeh(x50, x70);
vmrglw 21,4,6 # y81 = vec_mergel(x40, x60);
vmrglw 23,5,7 # y91 = vec_mergel(x50, x70);
vmrghw 4,8,9 # x40 = vec_mergeh(x80, x90);
vmrglw 5,8,9 # x50 = vec_mergel(x80, x90);
vmrghw 6,18,19 # x60 = vec_mergeh(x81, x91);
vmrglw 7,18,19 # x70 = vec_mergel(x81, x91);
vmrghw 10,20,22 # x01 = vec_mergeh(y80, y90);
vmrglw 11,20,22 # x11 = vec_mergel(y80, y90);
vmrghw 12,21,23 # x21 = vec_mergeh(y81, y91);
vmrglw 13,21,23 # x31 = vec_mergel(y81, y91);
vmrghw 20,14,16 # y80 = vec_mergeh(x41, x61);
vmrghw 22,15,17 # y90 = vec_mergeh(x51, x71);
vmrglw 21,14,16 # y81 = vec_mergel(x41, x61);
vmrglw 23,15,17 # y91 = vec_mergel(x51, x71);
vmrghw 14,20,22 # x41 = vec_mergeh(y80, y90);
vmrglw 15,20,22 # x51 = vec_mergel(y80, y90);
vmrghw 16,21,23 # x61 = vec_mergeh(y81, y91);
vmrglw 17,21,23 # x71 = vec_mergel(y81, y91);
lis 7,wvec@ha
addi 7,7,wvec@l
addi 8,7,16
addi 9,7,32
lvx 28,0,7 # *(vector float *)wvec2;
lvx 29,0,8 # *(vector float *)wvec3;
lvx 30,0,9 # *(vector float *)wvec4;
vspltw 20,28,3 # W3 = vec_splat(wvec2, 3);
vspltw 21,28,1 # W7 = vec_splat(wvec2, 1);
vspltw 22,29,0 # W1_W7 = vec_splat(wvec3, 0);
vspltw 23,29,1 # W1pW7 = vec_splat(wvec3, 1);
vspltw 24,29,2 # W3_W5 = vec_splat(wvec3, 2);
vspltw 25,29,3 # W3pW5 = vec_splat(wvec3, 3);
vspltisw 31,0 # z = (vector float)(0);
# /* first stage */
vaddfp 26,1,7
vmaddfp 8,21,26,31 # x80 = vec_madd(W7, vec_add(x10, x70), z);
vaddfp 27,11,17
vmaddfp 18,21,27,31 # x81 = vec_madd(W7, vec_add(x11, x71), z);
vmaddfp 1,22,1,8 # x10 = vec_madd(W1_W7, x10, x80);
vmaddfp 11,22,11,18 # x11 = vec_madd(W1_W7, x11, x81);
vnmsubfp 7,23,7,8 # x70 = vec_nmsub(W1pW7, x70, x80);
vnmsubfp 17,23,17,18 # x71 = vec_nmsub(W1pW7, x71, x81);
vaddfp 26,5,3
vmaddfp 8,20,26,31 # x80 = vec_madd(W3, vec_add(x50, x30), z);
vaddfp 27,15,13
vmaddfp 18,20,27,31 # x81 = vec_madd(W3, vec_add(x51, x31), z);
vnmsubfp 5,24,5,8 # x50 = vec_nmsub(W3_W5, x50, x80);
vnmsubfp 15,24,15,18 # x51 = vec_nmsub(W3_W5, x51, x81);
vnmsubfp 3,25,3,8 # x30 = vec_nmsub(W3pW5, x30, x80);
vnmsubfp 13,25,13,18 # x31 = vec_nmsub(W3pW5, x31, x81);
vspltw 20,28,0 # W6 = vec_splat(wvec2, 0);
vspltw 21,30,0 # W2_W6 = vec_splat(wvec4, 0);
vspltw 22,30,1 # W2pW6 = vec_splat(wvec4, 1);
vspltw 23,28,2 # SQRT0_5 = vec_splat(wvec2, 2);
# /* second stage */
vaddfp 8,0,4 # x80 = vec_add(x00, x40);
vaddfp 18,10,14 # x81 = vec_add(x01, x41);
vsubfp 0,0,4 # x00 = vec_sub(x00, x40);
vsubfp 10,10,14 # x01 = vec_sub(x01, x41);
vaddfp 26,2,6
vmaddfp 4,20,26,31 # x40 = vec_madd(W6, vec_add(x20, x60), z);
vaddfp 27,12,16
vmaddfp 14,20,27,31 # x41 = vec_madd(W6, vec_add(x21, x61), z);
vnmsubfp 6,22,6,4 # x60 = vec_nmsub(W2pW6, x60, x40);
vnmsubfp 16,22,16,14 # x61 = vec_nmsub(W2pW6, x61, x41);
vmaddfp 2,21,2,4 # x20 = vec_madd(W2_W6, x20, x40);
vmaddfp 12,21,12,14 # x21 = vec_madd(W2_W6, x21, x41);
vaddfp 4,1,5 # x40 = vec_add(x10, x50);
vaddfp 14,11,15 # x41 = vec_add(x11, x51);
vsubfp 1,1,5 # x10 = vec_sub(x10, x50);
vsubfp 11,11,15 # x11 = vec_sub(x11, x51);
vaddfp 5,7,3 # x50 = vec_add(x70, x30);
vaddfp 15,17,13 # x51 = vec_add(x71, x31);
vsubfp 7,7,3 # x70 = vec_sub(x70, x30);
vsubfp 17,17,13 # x71 = vec_sub(x71, x31);
# /* third stage */
vaddfp 3,8,2 # x30 = vec_add(x80, x20);
vaddfp 13,18,12 # x31 = vec_add(x81, x21);
vsubfp 8,8,2 # x80 = vec_sub(x80, x20);
vsubfp 18,18,12 # x81 = vec_sub(x81, x21);
vaddfp 2,0,6 # x20 = vec_add(x00, x60);
vaddfp 12,10,16 # x21 = vec_add(x01, x61);
vsubfp 0,0,6 # x00 = vec_sub(x00, x60);
vsubfp 10,10,16 # x01 = vec_sub(x01, x61);
vaddfp 24,1,7
vmaddfp 6,23,24,31 # x60 = vec_madd(SQRT0_5, vec_add(x10, x70), z);
vaddfp 25,11,17
vmaddfp 16,23,25,31 # x61 = vec_madd(SQRT0_5, vec_add(x11, x71), z);
vsubfp 26,1,7
vmaddfp 1,23,26,31 # x10 = vec_madd(SQRT0_5, vec_sub(x10, x70), z);
vsubfp 27,11,17
vmaddfp 11,23,27,31 # x11 = vec_madd(SQRT0_5, vec_sub(x11, x71), z);
# /* fourth stage */
vsubfp 7,3,4 # x70 = vec_sub(x30, x40);
vsubfp 17,13,14 # x71 = vec_sub(x31, x41);
vaddfp 9,3,4 # x90 = vec_add(x30, x40);
vaddfp 19,13,14 # x91 = vec_add(x31, x41);
vaddfp 3,8,5 # x30 = vec_add(x80, x50);
vaddfp 13,18,15 # x31 = vec_add(x81, x51);
vsubfp 4,8,5 # x40 = vec_sub(x80, x50);
vsubfp 14,18,15 # x41 = vec_sub(x81, x51);
vsubfp 5,0,1 # x50 = vec_sub(x00, x10);
vsubfp 15,10,11 # x51 = vec_sub(x01, x11);
vaddfp 8,0,1 # x80 = vec_add(x00, x10);
vaddfp 18,10,11 # x81 = vec_add(x01, x11);
vaddfp 1,2,6 # x10 = vec_add(x20, x60);
vaddfp 11,12,16 # x11 = vec_add(x21, x61);
vsubfp 6,2,6 # x60 = vec_sub(x20, x60);
vsubfp 16,12,16 # x61 = vec_sub(x21, x61);
# /* x0* is now in x9*, x2* is in x8* */
vmrghw 20,9,8 # y80 = vec_mergeh(x90, x80);
vmrghw 22,1,3 # y90 = vec_mergeh(x10, x30);
vmrglw 21,9,8 # y81 = vec_mergel(x90, x80);
vmrglw 23,1,3 # y91 = vec_mergel(x10, x30);
vmrghw 0,20,22 # x00 = vec_mergeh(y80, y90);
vmrglw 1,20,22 # x10 = vec_mergel(y80, y90);
vmrghw 2,21,23 # x20 = vec_mergeh(y81, y91);
vmrglw 3,21,23 # x30 = vec_mergel(y81, y91);
vmrghw 8,19,18 # x80 = vec_mergeh(x91, x81);
vmrghw 9,11,13 # x90 = vec_mergeh(x11, x31);
vmrglw 18,19,18 # x81 = vec_mergel(x91, x81);
vmrglw 19,11,13 # x91 = vec_mergel(x11, x31);
vmrghw 20,4,6 # y80 = vec_mergeh(x40, x60);
vmrghw 22,5,7 # y90 = vec_mergeh(x50, x70);
vmrglw 21,4,6 # y81 = vec_mergel(x40, x60);
vmrglw 23,5,7 # y91 = vec_mergel(x50, x70);
vmrghw 4,8,9 # x40 = vec_mergeh(x80, x90);
vmrglw 5,8,9 # x50 = vec_mergel(x80, x90);
vmrghw 6,18,19 # x60 = vec_mergeh(x81, x91);
vmrglw 7,18,19 # x70 = vec_mergel(x81, x91);
vmrghw 10,20,22 # x01 = vec_mergeh(y80, y90);
vmrglw 11,20,22 # x11 = vec_mergel(y80, y90);
vmrghw 12,21,23 # x21 = vec_mergeh(y81, y91);
vmrglw 13,21,23 # x31 = vec_mergel(y81, y91);
vmrghw 20,14,16 # y80 = vec_mergeh(x41, x61);
vmrghw 22,15,17 # y90 = vec_mergeh(x51, x71);
vmrglw 21,14,16 # y81 = vec_mergel(x41, x61);
vmrglw 23,15,17 # y91 = vec_mergel(x51, x71);
vmrghw 14,20,22 # x41 = vec_mergeh(y80, y90);
vmrglw 15,20,22 # x51 = vec_mergel(y80, y90);
vmrghw 16,21,23 # x61 = vec_mergeh(y81, y91);
vmrglw 17,21,23 # x71 = vec_mergel(y81, y91);
vspltw 20,28,3 # W3 = vec_splat(wvec2, 3);
vspltw 21,28,1 # W7 = vec_splat(wvec2, 1);
vspltw 22,29,0 # W1_W7 = vec_splat(wvec3, 0);
vspltw 23,29,1 # W1pW7 = vec_splat(wvec3, 1);
vspltw 24,29,2 # W3_W5 = vec_splat(wvec3, 2);
vspltw 25,29,3 # W3pW5 = vec_splat(wvec3, 3);
# /* first stage */
vaddfp 26,1,7
vmaddfp 8,21,26,31 # x80 = vec_madd(W7, vec_add(x10, x70), z);
vaddfp 27,11,17
vmaddfp 18,21,27,31 # x81 = vec_madd(W7, vec_add(x11, x71), z);
vmaddfp 1,22,1,8 # x10 = vec_madd(W1_W7, x10, x80);
vmaddfp 11,22,11,18 # x11 = vec_madd(W1_W7, x11, x81);
vnmsubfp 7,23,7,8 # x70 = vec_nmsub(W1pW7, x70, x80);
vnmsubfp 17,23,17,18 # x71 = vec_nmsub(W1pW7, x71, x81);
vaddfp 26,5,3
vmaddfp 8,20,26,31 # x80 = vec_madd(W3, vec_add(x50, x30), z);
vaddfp 27,15,13
vmaddfp 18,20,27,31 # x81 = vec_madd(W3, vec_add(x51, x31), z);
vnmsubfp 5,24,5,8 # x50 = vec_nmsub(W3_W5, x50, x80);
vnmsubfp 15,24,15,18 # x51 = vec_nmsub(W3_W5, x51, x81);
vnmsubfp 3,25,3,8 # x30 = vec_nmsub(W3pW5, x30, x80);
vnmsubfp 13,25,13,18 # x31 = vec_nmsub(W3pW5, x31, x81);
vspltw 20,28,0 # W6 = vec_splat(wvec2, 0);
vspltw 21,30,0 # W2_W6 = vec_splat(wvec4, 0);
vspltw 22,30,1 # W2pW6 = vec_splat(wvec4, 1);
vspltw 23,28,2 # SQRT0_5 = vec_splat(wvec2, 2);
# /* second stage */
vaddfp 8,0,4 # x80 = vec_add(x00, x40);
vaddfp 18,10,14 # x81 = vec_add(x01, x41);
vsubfp 0,0,4 # x00 = vec_sub(x00, x40);
vsubfp 10,10,14 # x01 = vec_sub(x01, x41);
vaddfp 26,2,6
vmaddfp 4,20,26,31 # x40 = vec_madd(W6, vec_add(x20, x60), z);
vaddfp 27,12,16
vmaddfp 14,20,27,31 # x41 = vec_madd(W6, vec_add(x21, x61), z);
vnmsubfp 6,22,6,4 # x60 = vec_nmsub(W2pW6, x60, x40);
vnmsubfp 16,22,16,14 # x61 = vec_nmsub(W2pW6, x61, x41);
vmaddfp 2,21,2,4 # x20 = vec_madd(W2_W6, x20, x40);
vmaddfp 12,21,12,14 # x21 = vec_madd(W2_W6, x21, x41);
vaddfp 4,1,5 # x40 = vec_add(x10, x50);
vaddfp 14,11,15 # x41 = vec_add(x11, x51);
vsubfp 1,1,5 # x10 = vec_sub(x10, x50);
vsubfp 11,11,15 # x11 = vec_sub(x11, x51);
vaddfp 5,7,3 # x50 = vec_add(x70, x30);
vaddfp 15,17,13 # x51 = vec_add(x71, x31);
vsubfp 7,7,3 # x70 = vec_sub(x70, x30);
vsubfp 17,17,13 # x71 = vec_sub(x71, x31);
# /* third stage */
vaddfp 3,8,2 # x30 = vec_add(x80, x20);
vaddfp 13,18,12 # x31 = vec_add(x81, x21);
vsubfp 8,8,2 # x80 = vec_sub(x80, x20);
vsubfp 18,18,12 # x81 = vec_sub(x81, x21);
vaddfp 2,0,6 # x20 = vec_add(x00, x60);
vaddfp 12,10,16 # x21 = vec_add(x01, x61);
vsubfp 0,0,6 # x00 = vec_sub(x00, x60);
vsubfp 10,10,16 # x01 = vec_sub(x01, x61);
vaddfp 24,1,7
vmaddfp 6,23,24,31 # x60 = vec_madd(SQRT0_5, vec_add(x10, x70), z);
vaddfp 25,11,17
vmaddfp 16,23,25,31 # x61 = vec_madd(SQRT0_5, vec_add(x11, x71), z);
vsubfp 26,1,7
vmaddfp 1,23,26,31 # x10 = vec_madd(SQRT0_5, vec_sub(x10, x70), z);
vsubfp 27,11,17
vmaddfp 11,23,27,31 # x11 = vec_madd(SQRT0_5, vec_sub(x11, x71), z);
# /* fourth stage */
vsubfp 7,3,4 # x70 = vec_sub(x30, x40);
vsubfp 17,13,14 # x71 = vec_sub(x31, x41);
vaddfp 9,3,4 # x90 = vec_add(x30, x40);
vaddfp 19,13,14 # x91 = vec_add(x31, x41);
vaddfp 3,8,5 # x30 = vec_add(x80, x50);
vaddfp 13,18,15 # x31 = vec_add(x81, x51);
vsubfp 4,8,5 # x40 = vec_sub(x80, x50);
vsubfp 14,18,15 # x41 = vec_sub(x81, x51);
vsubfp 5,0,1 # x50 = vec_sub(x00, x10);
vsubfp 15,10,11 # x51 = vec_sub(x01, x11);
vaddfp 8,0,1 # x80 = vec_add(x00, x10);
vaddfp 18,10,11 # x81 = vec_add(x01, x11);
vaddfp 1,2,6 # x10 = vec_add(x20, x60);
vaddfp 11,12,16 # x11 = vec_add(x21, x61);
vsubfp 6,2,6 # x60 = vec_sub(x20, x60);
vsubfp 16,12,16 # x61 = vec_sub(x21, x61);
# /* x0* is now in x9*, x2* is in x8* */
cmpwi 6,0
lis 6,d@ha
addi 6,6,d@l
vctsxs 20,9,0 # i0 = vec_cts(x90, 0);
vctsxs 21,19,0 # i1 = vec_cts(x91, 0);
vpkswss 22,20,21 # ih = vec_packs(i0, i1);
beq 1f # if (accum) {
lfd 0,0(4)
stfd 0,0(6) # *(long long *)&d = *(long long *)dest;
lvx 24,0,6
vmrghb 23,31,24 # dh = (vector signed short) vec_mergeh(zb, d);
vaddshs 22,23,22 # ih = vec_adds(dh, ih);
1: # }
vpkshus 24,22,31
stvx 24,0,6 # d = vec_packsu(ih, zh);
lfd 0,0(6)
stfd 0,0(4) # *(long long *)dest = *(long long *)&d;
add 4,4,5 # dest += stride;
vctsxs 20,1,0 # i0 = vec_cts(x10, 0);
vctsxs 21,11,0 # i1 = vec_cts(x11, 0);
vpkswss 22,20,21 # ih = vec_packs(i0, i1);
beq 1f # if (accum) {
lfd 0,0(4)
stfd 0,0(6) # *(long long *)&d = *(long long *)dest;
lvx 24,0,6
vmrghb 23,31,24 # dh = (vector signed short) vec_mergeh(zb, d);
vaddshs 22,23,22 # ih = vec_adds(dh, ih);
1: # }
vpkshus 24,22,31
stvx 24,0,6 # d = vec_packsu(ih, zh);
lfd 0,0(6)
stfd 0,0(4) # *(long long *)dest = *(long long *)&d;
add 4,4,5 # dest += stride;
vctsxs 20,8,0 # i0 = vec_cts(x80, 0);
vctsxs 21,18,0 # i1 = vec_cts(x81, 0);
vpkswss 22,20,21 # ih = vec_packs(i0, i1);
beq 1f # if (accum) {
lfd 0,0(4)
stfd 0,0(6) # *(long long *)&d = *(long long *)dest;
lvx 24,0,6
vmrghb 23,31,24 # dh = (vector signed short) vec_mergeh(zb, d);
vaddshs 22,23,22 # ih = vec_adds(dh, ih);
1: # }
vpkshus 24,22,31
stvx 24,0,6 # d = vec_packsu(ih, zh);
lfd 0,0(6)
stfd 0,0(4) # *(long long *)dest = *(long long *)&d;
add 4,4,5 # dest += stride;
vctsxs 20,3,0 # i0 = vec_cts(x30, 0);
vctsxs 21,13,0 # i1 = vec_cts(x31, 0);
vpkswss 22,20,21 # ih = vec_packs(i0, i1);
beq 1f # if (accum) {
lfd 0,0(4)
stfd 0,0(6) # *(long long *)&d = *(long long *)dest;
lvx 24,0,6
vmrghb 23,31,24 # dh = (vector signed short) vec_mergeh(zb, d);
vaddshs 22,23,22 # ih = vec_adds(dh, ih);
1: # }
vpkshus 24,22,31
stvx 24,0,6 # d = vec_packsu(ih, zh);
lfd 0,0(6)
stfd 0,0(4) # *(long long *)dest = *(long long *)&d;
add 4,4,5 # dest += stride;
vctsxs 20,4,0 # i0 = vec_cts(x40, 0);
vctsxs 21,14,0 # i1 = vec_cts(x41, 0);
vpkswss 22,20,21 # ih = vec_packs(i0, i1);
beq 1f # if (accum) {
lfd 0,0(4)
stfd 0,0(6) # *(long long *)&d = *(long long *)dest;
lvx 24,0,6
vmrghb 23,31,24 # dh = (vector signed short) vec_mergeh(zb, d);
vaddshs 22,23,22 # ih = vec_adds(dh, ih);
1: # }
vpkshus 24,22,31
stvx 24,0,6 # d = vec_packsu(ih, zh);
lfd 0,0(6)
stfd 0,0(4) # *(long long *)dest = *(long long *)&d;
add 4,4,5 # dest += stride;
vctsxs 20,5,0 # i0 = vec_cts(x50, 0);
vctsxs 21,15,0 # i1 = vec_cts(x51, 0);
vpkswss 22,20,21 # ih = vec_packs(i0, i1);
beq 1f # if (accum) {
lfd 0,0(4)
stfd 0,0(6) # *(long long *)&d = *(long long *)dest;
lvx 24,0,6
vmrghb 23,31,24 # dh = (vector signed short) vec_mergeh(zb, d);
vaddshs 22,23,22 # ih = vec_adds(dh, ih);
1: # }
vpkshus 24,22,31
stvx 24,0,6 # d = vec_packsu(ih, zh);
lfd 0,0(6)
stfd 0,0(4) # *(long long *)dest = *(long long *)&d;
add 4,4,5 # dest += stride;
vctsxs 20,6,0 # i0 = vec_cts(x60, 0);
vctsxs 21,16,0 # i1 = vec_cts(x61, 0);
vpkswss 22,20,21 # ih = vec_packs(i0, i1);
beq 1f # if (accum) {
lfd 0,0(4)
stfd 0,0(6) # *(long long *)&d = *(long long *)dest;
lvx 24,0,6
vmrghb 23,31,24 # dh = (vector signed short) vec_mergeh(zb, d);
vaddshs 22,23,22 # ih = vec_adds(dh, ih);
1: # }
vpkshus 24,22,31
stvx 24,0,6 # d = vec_packsu(ih, zh);
lfd 0,0(6)
stfd 0,0(4) # *(long long *)dest = *(long long *)&d;
add 4,4,5 # dest += stride;
vctsxs 20,7,0 # i0 = vec_cts(x70, 0);
vctsxs 21,17,0 # i1 = vec_cts(x71, 0);
vpkswss 22,20,21 # ih = vec_packs(i0, i1);
beq 1f # if (accum) {
lfd 0,0(4)
stfd 0,0(6) # *(long long *)&d = *(long long *)dest;
lvx 24,0,6
vmrghb 23,31,24 # dh = (vector signed short) vec_mergeh(zb, d);
vaddshs 22,23,22 # ih = vec_adds(dh, ih);
1: # }
vpkshus 24,22,31
stvx 24,0,6 # d = vec_packsu(ih, zh);
lfd 0,0(6)
stfd 0,0(4) # *(long long *)dest = *(long long *)&d;
blr
......@@ -92,7 +92,7 @@ $(BUILTIN_MOTIONALTIVEC): BUILTIN_MOTIONALTIVEC_%.o: %.c
$(RANLIB) $@
../motionaltivec.so: $(PLUGIN_MOTIONALTIVEC)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_ALTIVEC)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
../motionaltivec.a: $(BUILTIN_MOTIONALTIVEC)
ar r $@ $^
......
......@@ -2,9 +2,9 @@
* motionaltivec.c : Altivec motion compensation module for vlc
*****************************************************************************
* Copyright (C) 2001 VideoLAN
* $Id: motionaltivec.c,v 1.3 2001/09/11 22:22:31 massiot Exp $
* $Id: motionaltivec.c,v 1.4 2001/09/25 11:46:14 massiot Exp $
*
* Authors: Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
* Authors: Michel Lespinasse <walken@zoy.org>
* Paul Mackerras <paulus@linuxcare.com.au>
*
* This program is free software; you can redistribute it and/or modify
......@@ -22,6 +22,8 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
#ifndef __ALTIVEC__
#define MODULE_NAME motionaltivec
#include "modules_inner.h"
......@@ -32,6 +34,7 @@
#include <stdlib.h> /* malloc(), free() */
#include <string.h>
#include <inttypes.h>
#include "config.h"
#include "common.h" /* boolean_t, byte_t */
......@@ -91,472 +94,1993 @@ static int motion_Probe( probedata_t *p_data )
* Motion compensation in Altivec
*****************************************************************************/
#define COPY_8(d, s) (*(long long *)(d) = *(long long *)(s))
#define COPY_16(d, s) (((long long *)(d))[0] = ((long long *)(s))[0], \
((long long *)(d))[1] = ((long long *)(s))[1])
/*
* The asm code is generated with:
*
* gcc-2.95 -fvec -D__ALTIVEC__ -O9 -fomit-frame-pointer -mregnames -S
* motion_comp_altivec.c
*
* sed 's/.L/._L/g' motion_comp_altivec.s |
* awk '{args=""; len=split ($2, arg, ",");
* for (i=1; i<=len; i++) { a=arg[i]; if (i<len) a=a",";
* args = args sprintf ("%-6s", a) }
* printf ("\t\"\t%-16s%-24s\\n\"\n", $1, args) }' |
* unexpand -a
*/
static void MC_put_o_16_altivec (uint8_t * dest, uint8_t * ref,
int stride, int height)
{
asm (" \n"
" srawi %r6, %r6, 1 \n"
" li %r9, 15 \n"
" addi %r6, %r6, -1 \n"
" lvsl %v12, 0, %r4 \n"
" mtctr %r6 \n"
" lvx %v1, 0, %r4 \n"
" lvx %v0, %r9, %r4 \n"
" add %r0, %r5, %r5 \n"
" vperm %v13, %v1, %v0, %v12 \n"
" add %r4, %r4, %r5 \n"
"._L6: \n"
" li %r9, 15 \n"
" lvx %v1, 0, %r4 \n"
" lvx %v0, %r9, %r4 \n"
" stvx %v13, 0, %r3 \n"
" vperm %v13, %v1, %v0, %v12 \n"
" add %r4, %r4, %r5 \n"
" lvx %v1, 0, %r4 \n"
" lvx %v0, %r9, %r4 \n"
" stvx %v13, %r5, %r3 \n"
" vperm %v13, %v1, %v0, %v12 \n"
" add %r4, %r4, %r5 \n"
" add %r3, %r3, %r0 \n"
" bdnz ._L6 \n"
" lvx %v0, %r9, %r4 \n"
" lvx %v1, 0, %r4 \n"
" stvx %v13, 0, %r3 \n"
" vperm %v13, %v1, %v0, %v12 \n"
" stvx %v13, %r5, %r3 \n"
);
}
static void MC_put_o_8_altivec (uint8_t * dest, uint8_t * ref,
int stride, int height)
{
asm (" \n"
" lvsl %v12, 0, %r4 \n"
" lvsl %v1, %r5, %r4 \n"
" vmrghb %v12, %v12, %v12 \n"
" srawi %r6, %r6, 1 \n"
" li %r9, 7 \n"
" vmrghb %v1, %v1, %v1 \n"
" addi %r6, %r6, -1 \n"
" vpkuhum %v10, %v12, %v12 \n"
" lvx %v13, 0, %r4 \n"
" mtctr %r6 \n"
" vpkuhum %v11, %v1, %v1 \n"
" lvx %v0, %r9, %r4 \n"
" add %r4, %r4, %r5 \n"
" vperm %v12, %v13, %v0, %v10 \n"
"._L11: \n"
" li %r9, 7 \n"
" lvx %v0, %r9, %r4 \n"
" lvx %v13, 0, %r4 \n"
" stvewx %v12, 0, %r3 \n"
" li %r9, 4 \n"
" vperm %v1, %v13, %v0, %v11 \n"
" stvewx %v12, %r9, %r3 \n"
" add %r4, %r4, %r5 \n"
" li %r9, 7 \n"
" lvx %v0, %r9, %r4 \n"
" lvx %v13, 0, %r4 \n"
" add %r3, %r3, %r5 \n"
" stvewx %v1, 0, %r3 \n"
" vperm %v12, %v13, %v0, %v10 \n"
" li %r9, 4 \n"
" stvewx %v1, %r9, %r3 \n"
" add %r4, %r4, %r5 \n"
" add %r3, %r3, %r5 \n"
" bdnz ._L11 \n"
" li %r9, 7 \n"
" lvx %v0, %r9, %r4 \n"
" lvx %v13, 0, %r4 \n"
" stvewx %v12, 0, %r3 \n"
" li %r9, 4 \n"
" vperm %v1, %v13, %v0, %v11 \n"
" stvewx %v12, %r9, %r3 \n"
" add %r3, %r3, %r5 \n"
" stvewx %v1, 0, %r3 \n"
" stvewx %v1, %r9, %r3 \n"
);
}
static void MC_put_x_16_altivec (uint8_t * dest, uint8_t * ref,
int stride, int height)
{
asm (" \n"
" lvsl %v11, 0, %r4 \n"
" vspltisb %v0, 1 \n"
" li %r9, 16 \n"
" lvx %v12, 0, %r4 \n"
" vaddubm %v10, %v11, %v0 \n"
" lvx %v13, %r9, %r4 \n"
" srawi %r6, %r6, 1 \n"
" addi %r6, %r6, -1 \n"
" vperm %v1, %v12, %v13, %v10 \n"
" vperm %v0, %v12, %v13, %v11 \n"
" mtctr %r6 \n"
" add %r0, %r5, %r5 \n"
" add %r4, %r4, %r5 \n"
" vavgub %v0, %v0, %v1 \n"
"._L16: \n"
" li %r9, 16 \n"
" lvx %v12, 0, %r4 \n"
" lvx %v13, %r9, %r4 \n"
" stvx %v0, 0, %r3 \n"
" vperm %v1, %v12, %v13, %v10 \n"
" add %r4, %r4, %r5 \n"
" vperm %v0, %v12, %v13, %v11 \n"
" lvx %v12, 0, %r4 \n"
" lvx %v13, %r9, %r4 \n"
" vavgub %v0, %v0, %v1 \n"
" stvx %v0, %r5, %r3 \n"
" vperm %v1, %v12, %v13, %v10 \n"
" add %r4, %r4, %r5 \n"
" vperm %v0, %v12, %v13, %v11 \n"
" add %r3, %r3, %r0 \n"
" vavgub %v0, %v0, %v1 \n"
" bdnz ._L16 \n"
" lvx %v13, %r9, %r4 \n"
" lvx %v12, 0, %r4 \n"
" stvx %v0, 0, %r3 \n"
" vperm %v1, %v12, %v13, %v10 \n"
" vperm %v0, %v12, %v13, %v11 \n"
" vavgub %v0, %v0, %v1 \n"
" stvx %v0, %r5, %r3 \n"
);
}
static void MC_put_x_8_altivec (uint8_t * dest, uint8_t * ref,
int stride, int height)
{
asm (" \n"
" lvsl %v0, 0, %r4 \n"
" vspltisb %v13, 1 \n"
" lvsl %v10, %r5, %r4 \n"
" vmrghb %v0, %v0, %v0 \n"
" li %r9, 8 \n"
" lvx %v11, 0, %r4 \n"
" vmrghb %v10, %v10, %v10 \n"
" vpkuhum %v8, %v0, %v0 \n"
" lvx %v12, %r9, %r4 \n"
" srawi %r6, %r6, 1 \n"
" vpkuhum %v9, %v10, %v10 \n"
" vaddubm %v7, %v8, %v13 \n"
" addi %r6, %r6, -1 \n"
" vperm %v1, %v11, %v12, %v8 \n"
" mtctr %r6 \n"
" vaddubm %v13, %v9, %v13 \n"
" add %r4, %r4, %r5 \n"
" vperm %v0, %v11, %v12, %v7 \n"
" vavgub %v0, %v1, %v0 \n"
"._L21: \n"
" li %r9, 8 \n"
" lvx %v12, %r9, %r4 \n"
" lvx %v11, 0, %r4 \n"
" stvewx %v0, 0, %r3 \n"
" li %r9, 4 \n"
" vperm %v1, %v11, %v12, %v13 \n"
" stvewx %v0, %r9, %r3 \n"
" vperm %v0, %v11, %v12, %v9 \n"
" add %r4, %r4, %r5 \n"
" li %r9, 8 \n"
" lvx %v12, %r9, %r4 \n"
" vavgub %v10, %v0, %v1 \n"
" lvx %v11, 0, %r4 \n"
" add %r3, %r3, %r5 \n"
" stvewx %v10, 0, %r3 \n"
" vperm %v1, %v11, %v12, %v7 \n"
" vperm %v0, %v11, %v12, %v8 \n"
" li %r9, 4 \n"
" stvewx %v10, %r9, %r3 \n"
" add %r4, %r4, %r5 \n"
" vavgub %v0, %v0, %v1 \n"
" add %r3, %r3, %r5 \n"
" bdnz ._L21 \n"
" li %r9, 8 \n"
" lvx %v12, %r9, %r4 \n"
" lvx %v11, 0, %r4 \n"
" stvewx %v0, 0, %r3 \n"
" li %r9, 4 \n"
" vperm %v1, %v11, %v12, %v13 \n"
" stvewx %v0, %r9, %r3 \n"
" vperm %v0, %v11, %v12, %v9 \n"
" add %r3, %r3, %r5 \n"
" vavgub %v10, %v0, %v1 \n"
" stvewx %v10, 0, %r3 \n"
" stvewx %v10, %r9, %r3 \n"
);
}
static void MC_put_y_16_altivec (uint8_t * dest, uint8_t * ref,
int stride, int height)
{
asm (" \n"
" li %r9, 15 \n"
" lvsl %v10, 0, %r4 \n"
" lvx %v13, 0, %r4 \n"
" lvx %v1, %r9, %r4 \n"
" add %r4, %r4, %r5 \n"
" vperm %v12, %v13, %v1, %v10 \n"
" srawi %r6, %r6, 1 \n"
" lvx %v13, 0, %r4 \n"
" lvx %v1, %r9, %r4 \n"
" addi %r6, %r6, -1 \n"
" vperm %v11, %v13, %v1, %v10 \n"
" mtctr %r6 \n"
" add %r0, %r5, %r5 \n"
" add %r4, %r4, %r5 \n"
" vavgub %v0, %v12, %v11 \n"
"._L26: \n"
" li %r9, 15 \n"
" lvx %v13, 0, %r4 \n"
" lvx %v1, %r9, %r4 \n"
" stvx %v0, 0, %r3 \n"
" vperm %v12, %v13, %v1, %v10 \n"
" add %r4, %r4, %r5 \n"
" lvx %v13, 0, %r4 \n"
" lvx %v1, %r9, %r4 \n"
" vavgub %v0, %v12, %v11 \n"
" stvx %v0, %r5, %r3 \n"
" vperm %v11, %v13, %v1, %v10 \n"
" add %r4, %r4, %r5 \n"
" add %r3, %r3, %r0 \n"
" vavgub %v0, %v12, %v11 \n"
" bdnz ._L26 \n"
" lvx %v1, %r9, %r4 \n"
" lvx %v13, 0, %r4 \n"
" stvx %v0, 0, %r3 \n"
" vperm %v12, %v13, %v1, %v10 \n"
" vavgub %v0, %v12, %v11 \n"
" stvx %v0, %r5, %r3 \n"
);
}
static void MC_put_y_8_altivec (uint8_t * dest, uint8_t * ref,
int stride, int height)
{
asm (" \n"
" lvsl %v13, 0, %r4 \n"
" lvsl %v11, %r5, %r4 \n"
" vmrghb %v13, %v13, %v13 \n"
" li %r9, 7 \n"
" lvx %v12, 0, %r4 \n"
" vmrghb %v11, %v11, %v11 \n"
" lvx %v1, %r9, %r4 \n"
" vpkuhum %v9, %v13, %v13 \n"
" add %r4, %r4, %r5 \n"
" vpkuhum %v10, %v11, %v11 \n"
" vperm %v13, %v12, %v1, %v9 \n"
" srawi %r6, %r6, 1 \n"
" lvx %v12, 0, %r4 \n"
" lvx %v1, %r9, %r4 \n"
" addi %r6, %r6, -1 \n"
" vperm %v11, %v12, %v1, %v10 \n"
" mtctr %r6 \n"
" add %r4, %r4, %r5 \n"
" vavgub %v0, %v13, %v11 \n"
"._L31: \n"
" li %r9, 7 \n"
" lvx %v1, %r9, %r4 \n"
" lvx %v12, 0, %r4 \n"
" stvewx %v0, 0, %r3 \n"
" li %r9, 4 \n"
" vperm %v13, %v12, %v1, %v9 \n"
" stvewx %v0, %r9, %r3 \n"
" add %r4, %r4, %r5 \n"
" vavgub %v0, %v13, %v11 \n"
" li %r9, 7 \n"
" lvx %v1, %r9, %r4 \n"
" lvx %v12, 0, %r4 \n"
" add %r3, %r3, %r5 \n"
" stvewx %v0, 0, %r3 \n"
" vperm %v11, %v12, %v1, %v10 \n"
" li %r9, 4 \n"
" stvewx %v0, %r9, %r3 \n"
" vavgub %v0, %v13, %v11 \n"
" add %r4, %r4, %r5 \n"
" add %r3, %r3, %r5 \n"
" bdnz ._L31 \n"
" li %r9, 7 \n"
" lvx %v1, %r9, %r4 \n"
" lvx %v12, 0, %r4 \n"
" stvewx %v0, 0, %r3 \n"
" li %r9, 4 \n"
" vperm %v13, %v12, %v1, %v9 \n"
" stvewx %v0, %r9, %r3 \n"
" add %r3, %r3, %r5 \n"
" vavgub %v0, %v13, %v11 \n"
" stvewx %v0, 0, %r3 \n"
" stvewx %v0, %r9, %r3 \n"
);
}
static void MC_put_xy_16_altivec (uint8_t * dest, uint8_t * ref,
int stride, int height)
{
asm (" \n"
" lvsl %v5, 0, %r4 \n"
" vspltisb %v3, 1 \n"
" li %r9, 16 \n"
" lvx %v1, 0, %r4 \n"
" vaddubm %v4, %v5, %v3 \n"
" lvx %v0, %r9, %r4 \n"
" add %r4, %r4, %r5 \n"
" vperm %v10, %v1, %v0, %v4 \n"
" srawi %r6, %r6, 1 \n"
" vperm %v11, %v1, %v0, %v5 \n"
" addi %r6, %r6, -1 \n"
" lvx %v1, 0, %r4 \n"
" mtctr %r6 \n"
" lvx %v0, %r9, %r4 \n"
" vavgub %v9, %v11, %v10 \n"
" vxor %v8, %v11, %v10 \n"
" add %r0, %r5, %r5 \n"
" vperm %v10, %v1, %v0, %v4 \n"
" add %r4, %r4, %r5 \n"
" vperm %v11, %v1, %v0, %v5 \n"
" vxor %v6, %v11, %v10 \n"
" vavgub %v7, %v11, %v10 \n"
" vor %v0, %v8, %v6 \n"
" vxor %v13, %v9, %v7 \n"
" vand %v0, %v3, %v0 \n"
" vavgub %v1, %v9, %v7 \n"
" vand %v0, %v0, %v13 \n"
" vsububm %v13, %v1, %v0 \n"
"._L36: \n"
" li %r9, 16 \n"
" lvx %v1, 0, %r4 \n"
" lvx %v0, %r9, %r4 \n"
" stvx %v13, 0, %r3 \n"
" vperm %v10, %v1, %v0, %v4 \n"
" add %r4, %r4, %r5 \n"
" vperm %v11, %v1, %v0, %v5 \n"
" lvx %v1, 0, %r4 \n"
" lvx %v0, %r9, %r4 \n"
" vavgub %v9, %v11, %v10 \n"
" vxor %v8, %v11, %v10 \n"
" add %r4, %r4, %r5 \n"
" vperm %v10, %v1, %v0, %v4 \n"
" vavgub %v12, %v9, %v7 \n"
" vperm %v11, %v1, %v0, %v5 \n"
" vor %v13, %v8, %v6 \n"
" vxor %v0, %v9, %v7 \n"
" vxor %v6, %v11, %v10 \n"
" vand %v13, %v3, %v13 \n"
" vavgub %v7, %v11, %v10 \n"
" vor %v1, %v8, %v6 \n"
" vand %v13, %v13, %v0 \n"
" vxor %v0, %v9, %v7 \n"
" vand %v1, %v3, %v1 \n"
" vsububm %v13, %v12, %v13 \n"
" vand %v1, %v1, %v0 \n"
" stvx %v13, %r5, %r3 \n"
" vavgub %v0, %v9, %v7 \n"
" add %r3, %r3, %r0 \n"
" vsububm %v13, %v0, %v1 \n"
" bdnz ._L36 \n"
" lvx %v0, %r9, %r4 \n"
" lvx %v1, 0, %r4 \n"
" stvx %v13, 0, %r3 \n"
" vperm %v10, %v1, %v0, %v4 \n"
" vperm %v11, %v1, %v0, %v5 \n"
" vxor %v8, %v11, %v10 \n"
" vavgub %v9, %v11, %v10 \n"
" vor %v0, %v8, %v6 \n"
" vxor %v13, %v9, %v7 \n"
" vand %v0, %v3, %v0 \n"
" vavgub %v1, %v9, %v7 \n"
" vand %v0, %v0, %v13 \n"
" vsububm %v13, %v1, %v0 \n"
" stvx %v13, %r5, %r3 \n"
);
}
static void MC_put_xy_8_altivec (uint8_t * dest, uint8_t * ref,
int stride, int height)
{
asm (" \n"
" lvsl %v4, 0, %r4 \n"
" vspltisb %v3, 1 \n"
" lvsl %v5, %r5, %r4 \n"
" vmrghb %v4, %v4, %v4 \n"
" li %r9, 16 \n"
" vmrghb %v5, %v5, %v5 \n"
" lvx %v1, 0, %r4 \n"
" vpkuhum %v4, %v4, %v4 \n"
" lvx %v0, %r9, %r4 \n"
" vpkuhum %v5, %v5, %v5 \n"
" add %r4, %r4, %r5 \n"
" vaddubm %v2, %v4, %v3 \n"
" vperm %v11, %v1, %v0, %v4 \n"
" srawi %r6, %r6, 1 \n"
" vaddubm %v19, %v5, %v3 \n"
" addi %r6, %r6, -1 \n"
" vperm %v10, %v1, %v0, %v2 \n"
" mtctr %r6 \n"
" lvx %v1, 0, %r4 \n"
" lvx %v0, %r9, %r4 \n"
" vavgub %v9, %v11, %v10 \n"
" vxor %v8, %v11, %v10 \n"
" add %r4, %r4, %r5 \n"
" vperm %v10, %v1, %v0, %v19 \n"
" vperm %v11, %v1, %v0, %v5 \n"
" vxor %v6, %v11, %v10 \n"
" vavgub %v7, %v11, %v10 \n"
" vor %v0, %v8, %v6 \n"
" vxor %v13, %v9, %v7 \n"
" vand %v0, %v3, %v0 \n"
" vavgub %v1, %v9, %v7 \n"
" vand %v0, %v0, %v13 \n"
" vsububm %v13, %v1, %v0 \n"
"._L41: \n"
" li %r9, 16 \n"
" lvx %v0, %r9, %r4 \n"
" lvx %v1, 0, %r4 \n"
" stvewx %v13, 0, %r3 \n"
" li %r9, 4 \n"
" vperm %v10, %v1, %v0, %v2 \n"
" stvewx %v13, %r9, %r3 \n"
" vperm %v11, %v1, %v0, %v4 \n"
" add %r4, %r4, %r5 \n"
" li %r9, 16 \n"
" vavgub %v9, %v11, %v10 \n"
" lvx %v0, %r9, %r4 \n"
" vxor %v8, %v11, %v10 \n"
" lvx %v1, 0, %r4 \n"
" vavgub %v12, %v9, %v7 \n"
" vor %v13, %v8, %v6 \n"
" add %r3, %r3, %r5 \n"
" vperm %v10, %v1, %v0, %v19 \n"
" li %r9, 4 \n"
" vperm %v11, %v1, %v0, %v5 \n"
" vand %v13, %v3, %v13 \n"
" add %r4, %r4, %r5 \n"
" vxor %v0, %v9, %v7 \n"
" vxor %v6, %v11, %v10 \n"
" vavgub %v7, %v11, %v10 \n"
" vor %v1, %v8, %v6 \n"
" vand %v13, %v13, %v0 \n"
" vxor %v0, %v9, %v7 \n"
" vand %v1, %v3, %v1 \n"
" vsububm %v13, %v12, %v13 \n"
" vand %v1, %v1, %v0 \n"
" stvewx %v13, 0, %r3 \n"
" vavgub %v0, %v9, %v7 \n"
" stvewx %v13, %r9, %r3 \n"
" add %r3, %r3, %r5 \n"
" vsububm %v13, %v0, %v1 \n"
" bdnz ._L41 \n"
" li %r9, 16 \n"
" lvx %v0, %r9, %r4 \n"
" lvx %v1, 0, %r4 \n"
" stvewx %v13, 0, %r3 \n"
" vperm %v10, %v1, %v0, %v2 \n"
" li %r9, 4 \n"
" vperm %v11, %v1, %v0, %v4 \n"
" stvewx %v13, %r9, %r3 \n"
" add %r3, %r3, %r5 \n"
" vxor %v8, %v11, %v10 \n"
" vavgub %v9, %v11, %v10 \n"
" vor %v0, %v8, %v6 \n"
" vxor %v13, %v9, %v7 \n"
" vand %v0, %v3, %v0 \n"
" vavgub %v1, %v9, %v7 \n"
" vand %v0, %v0, %v13 \n"
" vsububm %v13, %v1, %v0 \n"
" stvewx %v13, 0, %r3 \n"
" stvewx %v13, %r9, %r3 \n"
);
}
static void MC_avg_o_16_altivec (uint8_t * dest, uint8_t * ref,
int stride, int height)
{
asm (" \n"
" li %r9, 15 \n"
" lvx %v0, %r9, %r4 \n"
" lvsl %v11, 0, %r4 \n"
" lvx %v1, 0, %r4 \n"
" srawi %r6, %r6, 1 \n"
" addi %r6, %r6, -1 \n"
" vperm %v0, %v1, %v0, %v11 \n"
" lvx %v13, 0, %r3 \n"
" mtctr %r6 \n"
" add %r9, %r5, %r5 \n"
" vavgub %v12, %v13, %v0 \n"
" add %r4, %r4, %r5 \n"
"._L46: \n"
" li %r11, 15 \n"
" lvx %v1, 0, %r4 \n"
" lvx %v0, %r11, %r4 \n"
" lvx %v13, %r5, %r3 \n"
" vperm %v0, %v1, %v0, %v11 \n"
" stvx %v12, 0, %r3 \n"
" add %r4, %r4, %r5 \n"
" vavgub %v12, %v13, %v0 \n"
" lvx %v1, 0, %r4 \n"
" lvx %v0, %r11, %r4 \n"
" lvx %v13, %r9, %r3 \n"
" vperm %v0, %v1, %v0, %v11 \n"
" stvx %v12, %r5, %r3 \n"
" add %r4, %r4, %r5 \n"
" vavgub %v12, %v13, %v0 \n"
" add %r3, %r3, %r9 \n"
" bdnz ._L46 \n"
" lvx %v0, %r11, %r4 \n"
" lvx %v1, 0, %r4 \n"
" lvx %v13, %r5, %r3 \n"
" vperm %v0, %v1, %v0, %v11 \n"
" stvx %v12, 0, %r3 \n"
" vavgub %v12, %v13, %v0 \n"
" stvx %v12, %r5, %r3 \n"
);
}
static void MC_avg_o_8_altivec (uint8_t * dest, uint8_t * ref,
int stride, int height)
{
asm (" \n"
" lvsl %v12, 0, %r4 \n"
" li %r9, 7 \n"
" vmrghb %v12, %v12, %v12 \n"
" lvsl %v1, %r5, %r4 \n"
" lvx %v13, 0, %r4 \n"
" vpkuhum %v9, %v12, %v12 \n"
" lvx %v0, %r9, %r4 \n"
" srawi %r6, %r6, 1 \n"
" vmrghb %v1, %v1, %v1 \n"
" addi %r6, %r6, -1 \n"
" vperm %v0, %v13, %v0, %v9 \n"
" lvx %v11, 0, %r3 \n"
" mtctr %r6 \n"
" vpkuhum %v10, %v1, %v1 \n"
" add %r4, %r4, %r5 \n"
" vavgub %v12, %v11, %v0 \n"
"._L51: \n"
" li %r9, 7 \n"
" lvx %v0, %r9, %r4 \n"
" lvx %v13, 0, %r4 \n"
" lvx %v11, %r5, %r3 \n"
" stvewx %v12, 0, %r3 \n"
" vperm %v0, %v13, %v0, %v10 \n"
" li %r9, 4 \n"
" stvewx %v12, %r9, %r3 \n"
" vavgub %v1, %v11, %v0 \n"
" add %r4, %r4, %r5 \n"
" li %r9, 7 \n"
" lvx %v0, %r9, %r4 \n"
" add %r3, %r3, %r5 \n"
" lvx %v13, 0, %r4 \n"
" lvx %v11, %r5, %r3 \n"
" stvewx %v1, 0, %r3 \n"
" vperm %v0, %v13, %v0, %v9 \n"
" li %r9, 4 \n"
" stvewx %v1, %r9, %r3 \n"
" vavgub %v12, %v11, %v0 \n"
" add %r4, %r4, %r5 \n"
" add %r3, %r3, %r5 \n"
" bdnz ._L51 \n"
" li %r9, 7 \n"
" lvx %v0, %r9, %r4 \n"
" lvx %v13, 0, %r4 \n"
" lvx %v11, %r5, %r3 \n"
" stvewx %v12, 0, %r3 \n"
" vperm %v0, %v13, %v0, %v10 \n"
" li %r9, 4 \n"
" stvewx %v12, %r9, %r3 \n"
" vavgub %v1, %v11, %v0 \n"
" add %r3, %r3, %r5 \n"
" stvewx %v1, 0, %r3 \n"
" stvewx %v1, %r9, %r3 \n"
);
}
static void MC_avg_x_16_altivec (uint8_t * dest, uint8_t * ref,
int stride, int height)
{
asm (" \n"
" lvsl %v8, 0, %r4 \n"
" vspltisb %v0, 1 \n"
" li %r9, 16 \n"
" lvx %v12, %r9, %r4 \n"
" vaddubm %v7, %v8, %v0 \n"
" lvx %v11, 0, %r4 \n"
" srawi %r6, %r6, 1 \n"
" vperm %v1, %v11, %v12, %v7 \n"
" addi %r6, %r6, -1 \n"
" vperm %v0, %v11, %v12, %v8 \n"
" lvx %v9, 0, %r3 \n"
" mtctr %r6 \n"
" add %r9, %r5, %r5 \n"
" vavgub %v0, %v0, %v1 \n"
" add %r4, %r4, %r5 \n"
" vavgub %v10, %v9, %v0 \n"
"._L56: \n"
" li %r11, 16 \n"
" lvx %v11, 0, %r4 \n"
" lvx %v12, %r11, %r4 \n"
" lvx %v9, %r5, %r3 \n"
" stvx %v10, 0, %r3 \n"
" vperm %v0, %v11, %v12, %v7 \n"
" add %r4, %r4, %r5 \n"
" vperm %v1, %v11, %v12, %v8 \n"
" lvx %v11, 0, %r4 \n"
" lvx %v12, %r11, %r4 \n"
" vavgub %v1, %v1, %v0 \n"
" add %r4, %r4, %r5 \n"
" vperm %v13, %v11, %v12, %v7 \n"
" vavgub %v10, %v9, %v1 \n"
" vperm %v0, %v11, %v12, %v8 \n"
" lvx %v9, %r9, %r3 \n"
" stvx %v10, %r5, %r3 \n"
" vavgub %v0, %v0, %v13 \n"
" add %r3, %r3, %r9 \n"
" vavgub %v10, %v9, %v0 \n"
" bdnz ._L56 \n"
" lvx %v12, %r11, %r4 \n"
" lvx %v11, 0, %r4 \n"
" lvx %v9, %r5, %r3 \n"
" vperm %v1, %v11, %v12, %v7 \n"
" stvx %v10, 0, %r3 \n"
" vperm %v0, %v11, %v12, %v8 \n"
" vavgub %v0, %v0, %v1 \n"
" vavgub %v10, %v9, %v0 \n"
" stvx %v10, %r5, %r3 \n"
);
}
static void MC_avg_x_8_altivec (uint8_t * dest, uint8_t * ref,
int stride, int height)
{
asm (" \n"
" lvsl %v10, 0, %r4 \n"
" vspltisb %v13, 1 \n"
" li %r9, 8 \n"
" vmrghb %v10, %v10, %v10 \n"
" lvx %v11, 0, %r4 \n"
" lvx %v12, %r9, %r4 \n"
" vpkuhum %v7, %v10, %v10 \n"
" srawi %r6, %r6, 1 \n"
" lvsl %v10, %r5, %r4 \n"
" vaddubm %v6, %v7, %v13 \n"
" vperm %v0, %v11, %v12, %v7 \n"
" addi %r6, %r6, -1 \n"
" vmrghb %v10, %v10, %v10 \n"
" lvx %v9, 0, %r3 \n"
" mtctr %r6 \n"
" vperm %v1, %v11, %v12, %v6 \n"
" add %r4, %r4, %r5 \n"
" vpkuhum %v8, %v10, %v10 \n"
" vavgub %v0, %v0, %v1 \n"
" vaddubm %v13, %v8, %v13 \n"
" vavgub %v10, %v9, %v0 \n"
"._L61: \n"
" li %r9, 8 \n"
" lvx %v12, %r9, %r4 \n"
" lvx %v11, 0, %r4 \n"
" lvx %v9, %r5, %r3 \n"
" stvewx %v10, 0, %r3 \n"
" vperm %v1, %v11, %v12, %v13 \n"
" vperm %v0, %v11, %v12, %v8 \n"
" li %r9, 4 \n"
" stvewx %v10, %r9, %r3 \n"
" add %r4, %r4, %r5 \n"
" vavgub %v0, %v0, %v1 \n"
" li %r9, 8 \n"
" lvx %v12, %r9, %r4 \n"
" vavgub %v10, %v9, %v0 \n"
" lvx %v11, 0, %r4 \n"
" add %r3, %r3, %r5 \n"
" vperm %v1, %v11, %v12, %v6 \n"
" lvx %v9, %r5, %r3 \n"
" vperm %v0, %v11, %v12, %v7 \n"
" stvewx %v10, 0, %r3 \n"
" li %r9, 4 \n"
" vavgub %v0, %v0, %v1 \n"
" stvewx %v10, %r9, %r3 \n"
" add %r4, %r4, %r5 \n"
" add %r3, %r3, %r5 \n"
" vavgub %v10, %v9, %v0 \n"
" bdnz ._L61 \n"
" li %r9, 8 \n"
" lvx %v12, %r9, %r4 \n"
" lvx %v11, 0, %r4 \n"
" lvx %v9, %r5, %r3 \n"
" vperm %v1, %v11, %v12, %v13 \n"
" stvewx %v10, 0, %r3 \n"
" vperm %v0, %v11, %v12, %v8 \n"
" li %r9, 4 \n"
" stvewx %v10, %r9, %r3 \n"
" vavgub %v0, %v0, %v1 \n"
" add %r3, %r3, %r5 \n"
" vavgub %v10, %v9, %v0 \n"
" stvewx %v10, 0, %r3 \n"
" stvewx %v10, %r9, %r3 \n"
);
}
static void MC_avg_y_16_altivec (uint8_t * dest, uint8_t * ref,
int stride, int height)
{
asm (" \n"
" li %r9, 15 \n"
" lvx %v1, %r9, %r4 \n"
" lvsl %v9, 0, %r4 \n"
" lvx %v13, 0, %r4 \n"
" add %r4, %r4, %r5 \n"
" vperm %v11, %v13, %v1, %v9 \n"
" li %r11, 15 \n"
" lvx %v13, 0, %r4 \n"
" lvx %v1, %r11, %r4 \n"
" srawi %r6, %r6, 1 \n"
" vperm %v10, %v13, %v1, %v9 \n"
" addi %r6, %r6, -1 \n"
" lvx %v12, 0, %r3 \n"
" mtctr %r6 \n"
" vavgub %v0, %v11, %v10 \n"
" add %r9, %r5, %r5 \n"
" add %r4, %r4, %r5 \n"
" vavgub %v0, %v12, %v0 \n"
"._L66: \n"
" li %r11, 15 \n"
" lvx %v13, 0, %r4 \n"
" lvx %v1, %r11, %r4 \n"
" lvx %v12, %r5, %r3 \n"
" vperm %v11, %v13, %v1, %v9 \n"
" stvx %v0, 0, %r3 \n"
" add %r4, %r4, %r5 \n"
" vavgub %v0, %v11, %v10 \n"
" lvx %v13, 0, %r4 \n"
" lvx %v1, %r11, %r4 \n"
" vavgub %v0, %v12, %v0 \n"
" add %r4, %r4, %r5 \n"
" lvx %v12, %r9, %r3 \n"
" vperm %v10, %v13, %v1, %v9 \n"
" stvx %v0, %r5, %r3 \n"
" vavgub %v0, %v11, %v10 \n"
" add %r3, %r3, %r9 \n"
" vavgub %v0, %v12, %v0 \n"
" bdnz ._L66 \n"
" lvx %v1, %r11, %r4 \n"
" lvx %v13, 0, %r4 \n"
" lvx %v12, %r5, %r3 \n"
" vperm %v11, %v13, %v1, %v9 \n"
" stvx %v0, 0, %r3 \n"
" vavgub %v0, %v11, %v10 \n"
" vavgub %v0, %v12, %v0 \n"
" stvx %v0, %r5, %r3 \n"
);
}
void
MC_put_16_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
static void MC_avg_y_8_altivec (uint8_t * dest, uint8_t * ref,
int stride, int height)
{
vector unsigned char rshift, refw0, refw1, d;
asm (" \n"
" lvsl %v12, 0, %r4 \n"
" lvsl %v9, %r5, %r4 \n"
" vmrghb %v12, %v12, %v12 \n"
" li %r9, 7 \n"
" lvx %v11, 0, %r4 \n"
" vmrghb %v9, %v9, %v9 \n"
" lvx %v13, %r9, %r4 \n"
" vpkuhum %v7, %v12, %v12 \n"
" add %r4, %r4, %r5 \n"
" vpkuhum %v8, %v9, %v9 \n"
" vperm %v12, %v11, %v13, %v7 \n"
" srawi %r6, %r6, 1 \n"
" lvx %v11, 0, %r4 \n"
" lvx %v13, %r9, %r4 \n"
" addi %r6, %r6, -1 \n"
" vperm %v9, %v11, %v13, %v8 \n"
" lvx %v10, 0, %r3 \n"
" mtctr %r6 \n"
" add %r4, %r4, %r5 \n"
" vavgub %v0, %v12, %v9 \n"
" vavgub %v1, %v10, %v0 \n"
"._L71: \n"
" li %r9, 7 \n"
" lvx %v13, %r9, %r4 \n"
" lvx %v11, 0, %r4 \n"
" lvx %v10, %r5, %r3 \n"
" stvewx %v1, 0, %r3 \n"
" vperm %v12, %v11, %v13, %v7 \n"
" li %r9, 4 \n"
" stvewx %v1, %r9, %r3 \n"
" vavgub %v0, %v12, %v9 \n"
" add %r4, %r4, %r5 \n"
" li %r9, 7 \n"
" vavgub %v1, %v10, %v0 \n"
" lvx %v13, %r9, %r4 \n"
" lvx %v11, 0, %r4 \n"
" add %r3, %r3, %r5 \n"
" vperm %v9, %v11, %v13, %v8 \n"
" lvx %v10, %r5, %r3 \n"
" stvewx %v1, 0, %r3 \n"
" vavgub %v0, %v12, %v9 \n"
" li %r9, 4 \n"
" stvewx %v1, %r9, %r3 \n"
" add %r4, %r4, %r5 \n"
" vavgub %v1, %v10, %v0 \n"
" add %r3, %r3, %r5 \n"
" bdnz ._L71 \n"
" li %r9, 7 \n"
" lvx %v13, %r9, %r4 \n"
" lvx %v11, 0, %r4 \n"
" lvx %v10, %r5, %r3 \n"
" vperm %v12, %v11, %v13, %v7 \n"
" stvewx %v1, 0, %r3 \n"
" li %r9, 4 \n"
" vavgub %v0, %v12, %v9 \n"
" stvewx %v1, %r9, %r3 \n"
" add %r3, %r3, %r5 \n"
" vavgub %v1, %v10, %v0 \n"
" stvewx %v1, 0, %r3 \n"
" stvewx %v1, %r9, %r3 \n"
);
}
static void MC_avg_xy_16_altivec (uint8_t * dest, uint8_t * ref,
int stride, int height)
{
asm (" \n"
" lvsl %v4, 0, %r4 \n"
" vspltisb %v2, 1 \n"
" li %r9, 16 \n"
" lvx %v1, %r9, %r4 \n"
" vaddubm %v3, %v4, %v2 \n"
" lvx %v13, 0, %r4 \n"
" add %r4, %r4, %r5 \n"
" vperm %v10, %v13, %v1, %v3 \n"
" li %r11, 16 \n"
" vperm %v11, %v13, %v1, %v4 \n"
" srawi %r6, %r6, 1 \n"
" lvx %v13, 0, %r4 \n"
" lvx %v1, %r11, %r4 \n"
" vavgub %v9, %v11, %v10 \n"
" vxor %v8, %v11, %v10 \n"
" addi %r6, %r6, -1 \n"
" vperm %v10, %v13, %v1, %v3 \n"
" lvx %v6, 0, %r3 \n"
" mtctr %r6 \n"
" vperm %v11, %v13, %v1, %v4 \n"
" add %r9, %r5, %r5 \n"
" add %r4, %r4, %r5 \n"
" vxor %v5, %v11, %v10 \n"
" vavgub %v7, %v11, %v10 \n"
" vor %v1, %v8, %v5 \n"
" vxor %v13, %v9, %v7 \n"
" vand %v1, %v2, %v1 \n"
" vavgub %v0, %v9, %v7 \n"
" vand %v1, %v1, %v13 \n"
" vsububm %v0, %v0, %v1 \n"
" vavgub %v12, %v6, %v0 \n"
"._L76: \n"
" li %r11, 16 \n"
" lvx %v13, 0, %r4 \n"
" lvx %v1, %r11, %r4 \n"
" lvx %v6, %r5, %r3 \n"
" stvx %v12, 0, %r3 \n"
" vperm %v10, %v13, %v1, %v3 \n"
" vperm %v11, %v13, %v1, %v4 \n"
" add %r4, %r4, %r5 \n"
" lvx %v13, 0, %r4 \n"
" lvx %v1, %r11, %r4 \n"
" vavgub %v9, %v11, %v10 \n"
" vxor %v8, %v11, %v10 \n"
" add %r4, %r4, %r5 \n"
" vperm %v10, %v13, %v1, %v3 \n"
" vavgub %v12, %v9, %v7 \n"
" vperm %v11, %v13, %v1, %v4 \n"
" vor %v0, %v8, %v5 \n"
" vxor %v13, %v9, %v7 \n"
" vxor %v5, %v11, %v10 \n"
" vand %v0, %v2, %v0 \n"
" vavgub %v7, %v11, %v10 \n"
" vor %v1, %v8, %v5 \n"
" vand %v0, %v0, %v13 \n"
" vand %v1, %v2, %v1 \n"
" vxor %v13, %v9, %v7 \n"
" vsububm %v12, %v12, %v0 \n"
" vand %v1, %v1, %v13 \n"
" vavgub %v0, %v9, %v7 \n"
" vavgub %v12, %v6, %v12 \n"
" lvx %v6, %r9, %r3 \n"
" vsububm %v0, %v0, %v1 \n"
" stvx %v12, %r5, %r3 \n"
" vavgub %v12, %v6, %v0 \n"
" add %r3, %r3, %r9 \n"
" bdnz ._L76 \n"
" lvx %v1, %r11, %r4 \n"
" lvx %v13, 0, %r4 \n"
" lvx %v6, %r5, %r3 \n"
" vperm %v10, %v13, %v1, %v3 \n"
" stvx %v12, 0, %r3 \n"
" vperm %v11, %v13, %v1, %v4 \n"
" vxor %v8, %v11, %v10 \n"
" vavgub %v9, %v11, %v10 \n"
" vor %v0, %v8, %v5 \n"
" vxor %v13, %v9, %v7 \n"
" vand %v0, %v2, %v0 \n"
" vavgub %v1, %v9, %v7 \n"
" vand %v0, %v0, %v13 \n"
" vsububm %v1, %v1, %v0 \n"
" vavgub %v12, %v6, %v1 \n"
" stvx %v12, %r5, %r3 \n"
);
}
static void MC_avg_xy_8_altivec (uint8_t * dest, uint8_t * ref,
int stride, int height)
{
asm (" \n"
" lvsl %v2, 0, %r4 \n"
" vspltisb %v19, 1 \n"
" lvsl %v3, %r5, %r4 \n"
" vmrghb %v2, %v2, %v2 \n"
" li %r9, 16 \n"
" vmrghb %v3, %v3, %v3 \n"
" lvx %v9, 0, %r4 \n"
" vpkuhum %v2, %v2, %v2 \n"
" lvx %v1, %r9, %r4 \n"
" vpkuhum %v3, %v3, %v3 \n"
" add %r4, %r4, %r5 \n"
" vaddubm %v18, %v2, %v19 \n"
" vperm %v11, %v9, %v1, %v2 \n"
" srawi %r6, %r6, 1 \n"
" vaddubm %v17, %v3, %v19 \n"
" addi %r6, %r6, -1 \n"
" vperm %v10, %v9, %v1, %v18 \n"
" lvx %v4, 0, %r3 \n"
" mtctr %r6 \n"
" lvx %v1, %r9, %r4 \n"
" lvx %v9, 0, %r4 \n"
" vavgub %v8, %v11, %v10 \n"
" vxor %v7, %v11, %v10 \n"
" add %r4, %r4, %r5 \n"
" vperm %v10, %v9, %v1, %v17 \n"
" vperm %v11, %v9, %v1, %v3 \n"
" vxor %v5, %v11, %v10 \n"
" vavgub %v6, %v11, %v10 \n"
" vor %v1, %v7, %v5 \n"
" vxor %v13, %v8, %v6 \n"
" vand %v1, %v19, %v1 \n"
" vavgub %v0, %v8, %v6 \n"
" vand %v1, %v1, %v13 \n"
" vsububm %v0, %v0, %v1 \n"
" vavgub %v13, %v4, %v0 \n"
"._L81: \n"
" li %r9, 16 \n"
" lvx %v1, %r9, %r4 \n"
" lvx %v9, 0, %r4 \n"
" lvx %v4, %r5, %r3 \n"
" stvewx %v13, 0, %r3 \n"
" vperm %v10, %v9, %v1, %v18 \n"
" vperm %v11, %v9, %v1, %v2 \n"
" li %r9, 4 \n"
" stvewx %v13, %r9, %r3 \n"
" vxor %v7, %v11, %v10 \n"
" add %r4, %r4, %r5 \n"
" li %r9, 16 \n"
" vavgub %v8, %v11, %v10 \n"
" lvx %v1, %r9, %r4 \n"
" vor %v0, %v7, %v5 \n"
" lvx %v9, 0, %r4 \n"
" vxor %v12, %v8, %v6 \n"
" vand %v0, %v19, %v0 \n"
" add %r3, %r3, %r5 \n"
" vperm %v10, %v9, %v1, %v17 \n"
" vavgub %v13, %v8, %v6 \n"
" li %r9, 4 \n"
" vperm %v11, %v9, %v1, %v3 \n"
" vand %v0, %v0, %v12 \n"
" add %r4, %r4, %r5 \n"
" vxor %v5, %v11, %v10 \n"
" vavgub %v6, %v11, %v10 \n"
" vor %v1, %v7, %v5 \n"
" vsububm %v13, %v13, %v0 \n"
" vxor %v0, %v8, %v6 \n"
" vand %v1, %v19, %v1 \n"
" vavgub %v13, %v4, %v13 \n"
" vand %v1, %v1, %v0 \n"
" lvx %v4, %r5, %r3 \n"
" vavgub %v0, %v8, %v6 \n"
" stvewx %v13, 0, %r3 \n"
" stvewx %v13, %r9, %r3 \n"
" vsububm %v0, %v0, %v1 \n"
" add %r3, %r3, %r5 \n"
" vavgub %v13, %v4, %v0 \n"
" bdnz ._L81 \n"
" li %r9, 16 \n"
" lvx %v1, %r9, %r4 \n"
" lvx %v9, 0, %r4 \n"
" lvx %v4, %r5, %r3 \n"
" vperm %v10, %v9, %v1, %v18 \n"
" stvewx %v13, 0, %r3 \n"
" vperm %v11, %v9, %v1, %v2 \n"
" li %r9, 4 \n"
" stvewx %v13, %r9, %r3 \n"
" vxor %v7, %v11, %v10 \n"
" add %r3, %r3, %r5 \n"
" vavgub %v8, %v11, %v10 \n"
" vor %v0, %v7, %v5 \n"
" vxor %v13, %v8, %v6 \n"
" vand %v0, %v19, %v0 \n"
" vavgub %v1, %v8, %v6 \n"
" vand %v0, %v0, %v13 \n"
" vsububm %v1, %v1, %v0 \n"
" vavgub %v13, %v4, %v1 \n"
" stvewx %v13, 0, %r3 \n"
" stvewx %v13, %r9, %r3 \n"
);
}
#else /* __ALTIVEC__ */
#define vector_s16_t vector signed short
#define vector_u16_t vector unsigned short
#define vector_s8_t vector signed char
#define vector_u8_t vector unsigned char
#define vector_s32_t vector signed int
#define vector_u32_t vector unsigned int
void MC_put_o_16_altivec (unsigned char * dest, unsigned char * ref,
int stride, int height)
{
vector_u8_t perm, ref0, ref1, tmp;
perm = vec_lvsl (0, ref);
height = (height >> 1) - 1;
ref0 = vec_ld (0, ref);
ref1 = vec_ld (15, ref);
ref += stride;
tmp = vec_perm (ref0, ref1, perm);
do {
rshift = vec_lvsl(0, ref);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
d = vec_perm(refw0, refw1, rshift);
if ((unsigned long)dest & 15) {
/* unaligned store, yuck */
vector unsigned char x = d;
COPY_16(dest, &x);
} else
vec_st(d, 0, dest);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (15, ref);
ref += stride;
dest += stride;
vec_st (tmp, 0, dest);
tmp = vec_perm (ref0, ref1, perm);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (15, ref);
ref += stride;
vec_st (tmp, stride, dest);
dest += 2*stride;
tmp = vec_perm (ref0, ref1, perm);
} while (--height);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (15, ref);
vec_st (tmp, 0, dest);
tmp = vec_perm (ref0, ref1, perm);
vec_st (tmp, stride, dest);
}
void
MC_avg_16_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
void MC_put_o_8_altivec (unsigned char * dest, unsigned char * ref,
int stride, int height)
{
vector unsigned char rshift, refw0, refw1;
vector unsigned char r, d;
vector_u8_t perm0, perm1, tmp0, tmp1, ref0, ref1;
tmp0 = vec_lvsl (0, ref);
tmp0 = vec_mergeh (tmp0, tmp0);
perm0 = vec_pack ((vector_u16_t)tmp0, (vector_u16_t)tmp0);
tmp1 = vec_lvsl (stride, ref);
tmp1 = vec_mergeh (tmp1, tmp1);
perm1 = vec_pack ((vector_u16_t)tmp1, (vector_u16_t)tmp1);
height = (height >> 1) - 1;
ref0 = vec_ld (0, ref);
ref1 = vec_ld (7, ref);
ref += stride;
tmp0 = vec_perm (ref0, ref1, perm0);
do {
rshift = vec_lvsl(0, ref);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
r = vec_perm(refw0, refw1, rshift);
if ((unsigned long)dest & 15) {
/* unaligned load/store, yuck */
vector unsigned char dw0, dw1, dshift, mask;
dshift = vec_lvsr(0, dest);
dw0 = vec_ld(0, dest);
dw1 = vec_ld(16, dest);
d = vec_perm(r, r, dshift);
mask = vec_perm((vector unsigned char)(0),
(vector unsigned char)(255), dshift);
dw0 = vec_sel(dw0, vec_avg(dw0, d), mask);
dw1 = vec_sel(vec_avg(dw1, d), dw1, mask);
vec_st(dw0, 0, dest);
vec_st(dw1, 16, dest);
} else {
d = vec_ld(0, dest);
d = vec_avg(d, r);
vec_st(d, 0, dest);
}
ref0 = vec_ld (0, ref);
ref1 = vec_ld (7, ref);
ref += stride;
vec_ste ((vector_u32_t)tmp0, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp0, 4, (unsigned int *)dest);
dest += stride;
tmp1 = vec_perm (ref0, ref1, perm1);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (7, ref);
ref += stride;
vec_ste ((vector_u32_t)tmp1, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp1, 4, (unsigned int *)dest);
dest += stride;
tmp0 = vec_perm (ref0, ref1, perm0);
} while (--height);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (7, ref);
vec_ste ((vector_u32_t)tmp0, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp0, 4, (unsigned int *)dest);
dest += stride;
tmp1 = vec_perm (ref0, ref1, perm1);
vec_ste ((vector_u32_t)tmp1, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp1, 4, (unsigned int *)dest);
}
void
MC_put_x16_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
void MC_put_x_16_altivec (unsigned char * dest, unsigned char * ref,
int stride, int height)
{
vector unsigned char rshift0, rshift1, refw0, refw1;
vector unsigned char t0, t1, d, one;
vector_u8_t permA, permB, ref0, ref1, tmp;
permA = vec_lvsl (0, ref);
permB = vec_add (permA, vec_splat_u8 (1));
height = (height >> 1) - 1;
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
tmp = vec_avg (vec_perm (ref0, ref1, permA),
vec_perm (ref0, ref1, permB));
one = (vector unsigned char)(1);
do {
rshift0 = vec_lvsl(0, ref);
rshift1 = vec_add(rshift0, one);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
t0 = vec_perm(refw0, refw1, rshift0);
t1 = vec_perm(refw0, refw1, rshift1);
d = vec_avg(t0, t1);
if ((unsigned long)dest & 15) {
/* unaligned store, yuck */
vector unsigned char x = d;
COPY_16(dest, &x);
} else
vec_st(d, 0, dest);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
dest += stride;
vec_st (tmp, 0, dest);
tmp = vec_avg (vec_perm (ref0, ref1, permA),
vec_perm (ref0, ref1, permB));
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
vec_st (tmp, stride, dest);
dest += 2*stride;
tmp = vec_avg (vec_perm (ref0, ref1, permA),
vec_perm (ref0, ref1, permB));
} while (--height);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
vec_st (tmp, 0, dest);
tmp = vec_avg (vec_perm (ref0, ref1, permA),
vec_perm (ref0, ref1, permB));
vec_st (tmp, stride, dest);
}
void
MC_avg_x16_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
void MC_put_x_8_altivec (unsigned char * dest, unsigned char * ref,
int stride, int height)
{
vector unsigned char rshift0, rshift1, refw0, refw1;
vector unsigned char t0, t1, r, d, one;
vector_u8_t perm0A, perm0B, perm1A, perm1B, ones, tmp0, tmp1, ref0, ref1;
ones = vec_splat_u8 (1);
tmp0 = vec_lvsl (0, ref);
tmp0 = vec_mergeh (tmp0, tmp0);
perm0A = vec_pack ((vector_u16_t)tmp0, (vector_u16_t)tmp0);
perm0B = vec_add (perm0A, ones);
tmp1 = vec_lvsl (stride, ref);
tmp1 = vec_mergeh (tmp1, tmp1);
perm1A = vec_pack ((vector_u16_t)tmp1, (vector_u16_t)tmp1);
perm1B = vec_add (perm1A, ones);
height = (height >> 1) - 1;
ref0 = vec_ld (0, ref);
ref1 = vec_ld (8, ref);
ref += stride;
tmp0 = vec_avg (vec_perm (ref0, ref1, perm0A),
vec_perm (ref0, ref1, perm0B));
one = (vector unsigned char)(1);
do {
rshift0 = vec_lvsl(0, ref);
rshift1 = vec_add(rshift0, one);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
t0 = vec_perm(refw0, refw1, rshift0);
t1 = vec_perm(refw0, refw1, rshift1);
r = vec_avg(t0, t1);
if ((unsigned long)dest & 15) {
/* unaligned load/store, yuck */
vector unsigned char dw0, dw1, dshift, mask;
dshift = vec_lvsr(0, dest);
dw0 = vec_ld(0, dest);
dw1 = vec_ld(16, dest);
d = vec_perm(r, r, dshift);
mask = vec_perm((vector unsigned char)(0),
(vector unsigned char)(255), dshift);
dw0 = vec_sel(dw0, vec_avg(dw0, d), mask);
dw1 = vec_sel(vec_avg(dw1, d), dw1, mask);
vec_st(dw0, 0, dest);
vec_st(dw1, 16, dest);
} else {
d = vec_ld(0, dest);
d = vec_avg(d, r);
vec_st(d, 0, dest);
}
ref0 = vec_ld (0, ref);
ref1 = vec_ld (8, ref);
ref += stride;
vec_ste ((vector_u32_t)tmp0, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp0, 4, (unsigned int *)dest);
dest += stride;
tmp1 = vec_avg (vec_perm (ref0, ref1, perm1A),
vec_perm (ref0, ref1, perm1B));
ref0 = vec_ld (0, ref);
ref1 = vec_ld (8, ref);
ref += stride;
vec_ste ((vector_u32_t)tmp1, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp1, 4, (unsigned int *)dest);
dest += stride;
tmp0 = vec_avg (vec_perm (ref0, ref1, perm0A),
vec_perm (ref0, ref1, perm0B));
} while (--height);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (8, ref);
vec_ste ((vector_u32_t)tmp0, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp0, 4, (unsigned int *)dest);
dest += stride;
tmp1 = vec_avg (vec_perm (ref0, ref1, perm1A),
vec_perm (ref0, ref1, perm1B));
vec_ste ((vector_u32_t)tmp1, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp1, 4, (unsigned int *)dest);
}
void
MC_put_y16_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
void MC_put_y_16_altivec (unsigned char * dest, unsigned char * ref,
int stride, int height)
{
vector unsigned char rshift, refw0, refw1;
vector unsigned char r0, r1, d;
vector_u8_t perm, ref0, ref1, tmp0, tmp1, tmp;
perm = vec_lvsl (0, ref);
height = (height >> 1) - 1;
ref0 = vec_ld (0, ref);
ref1 = vec_ld (15, ref);
ref += stride;
tmp0 = vec_perm (ref0, ref1, perm);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (15, ref);
ref += stride;
tmp1 = vec_perm (ref0, ref1, perm);
tmp = vec_avg (tmp0, tmp1);
rshift = vec_lvsl(0, ref);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
r0 = vec_perm(refw0, refw1, rshift);
do {
ref0 = vec_ld (0, ref);
ref1 = vec_ld (15, ref);
ref += stride;
rshift = vec_lvsl(0, ref);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
r1 = vec_perm(refw0, refw1, rshift);
d = vec_avg(r0, r1);
r0 = r1;
if ((unsigned long)dest & 15) {
/* unaligned store, yuck */
vector unsigned char x = d;
COPY_16(dest, &x);
} else
vec_st(d, 0, dest);
dest += stride;
vec_st (tmp, 0, dest);
tmp0 = vec_perm (ref0, ref1, perm);
tmp = vec_avg (tmp0, tmp1);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (15, ref);
ref += stride;
vec_st (tmp, stride, dest);
dest += 2*stride;
tmp1 = vec_perm (ref0, ref1, perm);
tmp = vec_avg (tmp0, tmp1);
} while (--height);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (15, ref);
vec_st (tmp, 0, dest);
tmp0 = vec_perm (ref0, ref1, perm);
tmp = vec_avg (tmp0, tmp1);
vec_st (tmp, stride, dest);
}
void
MC_avg_y16_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
void MC_put_y_8_altivec (unsigned char * dest, unsigned char * ref,
int stride, int height)
{
vector unsigned char rshift, refw0, refw1;
vector unsigned char r0, r1, r, d;
vector_u8_t perm0, perm1, tmp0, tmp1, tmp, ref0, ref1;
tmp0 = vec_lvsl (0, ref);
tmp0 = vec_mergeh (tmp0, tmp0);
perm0 = vec_pack ((vector_u16_t)tmp0, (vector_u16_t)tmp0);
tmp1 = vec_lvsl (stride, ref);
tmp1 = vec_mergeh (tmp1, tmp1);
perm1 = vec_pack ((vector_u16_t)tmp1, (vector_u16_t)tmp1);
height = (height >> 1) - 1;
ref0 = vec_ld (0, ref);
ref1 = vec_ld (7, ref);
ref += stride;
tmp0 = vec_perm (ref0, ref1, perm0);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (7, ref);
ref += stride;
tmp1 = vec_perm (ref0, ref1, perm1);
tmp = vec_avg (tmp0, tmp1);
rshift = vec_lvsl(0, ref);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
r0 = vec_perm(refw0, refw1, rshift);
do {
ref0 = vec_ld (0, ref);
ref1 = vec_ld (7, ref);
ref += stride;
rshift = vec_lvsl(0, ref);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
r1 = vec_perm(refw0, refw1, rshift);
r = vec_avg(r0, r1);
r0 = r1;
if ((unsigned long)dest & 15) {
/* unaligned load/store, yuck */
vector unsigned char dw0, dw1, dshift, mask;
dshift = vec_lvsr(0, dest);
dw0 = vec_ld(0, dest);
dw1 = vec_ld(16, dest);
d = vec_perm(r, r, dshift);
mask = vec_perm((vector unsigned char)(0),
(vector unsigned char)(255), dshift);
dw0 = vec_sel(dw0, vec_avg(dw0, d), mask);
dw1 = vec_sel(vec_avg(dw1, d), dw1, mask);
vec_st(dw0, 0, dest);
vec_st(dw1, 16, dest);
} else {
d = vec_ld(0, dest);
d = vec_avg(d, r);
vec_st(d, 0, dest);
}
vec_ste ((vector_u32_t)tmp, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
dest += stride;
tmp0 = vec_perm (ref0, ref1, perm0);
tmp = vec_avg (tmp0, tmp1);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (7, ref);
ref += stride;
vec_ste ((vector_u32_t)tmp, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
dest += stride;
tmp1 = vec_perm (ref0, ref1, perm1);
tmp = vec_avg (tmp0, tmp1);
} while (--height);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (7, ref);
vec_ste ((vector_u32_t)tmp, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
dest += stride;
tmp0 = vec_perm (ref0, ref1, perm0);
tmp = vec_avg (tmp0, tmp1);
vec_ste ((vector_u32_t)tmp, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
}
void
MC_put_xy16_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
void MC_put_xy_16_altivec (unsigned char * dest, unsigned char * ref,
int stride, int height)
{
vector unsigned char rshift0, rshift1, refw0, refw1;
vector unsigned char t0, t1, r0, r1, d, one;
vector_u8_t permA, permB, ref0, ref1, A, B, avg0, avg1, xor0, xor1, tmp;
vector_u8_t ones;
ones = vec_splat_u8 (1);
permA = vec_lvsl (0, ref);
permB = vec_add (permA, ones);
height = (height >> 1) - 1;
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
A = vec_perm (ref0, ref1, permA);
B = vec_perm (ref0, ref1, permB);
avg0 = vec_avg (A, B);
xor0 = vec_xor (A, B);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
A = vec_perm (ref0, ref1, permA);
B = vec_perm (ref0, ref1, permB);
avg1 = vec_avg (A, B);
xor1 = vec_xor (A, B);
tmp = vec_sub (vec_avg (avg0, avg1),
vec_and (vec_and (ones, vec_or (xor0, xor1)),
vec_xor (avg0, avg1)));
rshift0 = vec_lvsl(0, ref);
one = (vector unsigned char)(1);
rshift1 = vec_add(rshift0, one);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
t0 = vec_perm(refw0, refw1, rshift0);
t1 = vec_perm(refw0, refw1, rshift1);
r0 = vec_avg(t0, t1);
do {
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
rshift0 = vec_lvsl(0, ref);
rshift1 = vec_add(rshift0, one);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
t0 = vec_perm(refw0, refw1, rshift0);
t1 = vec_perm(refw0, refw1, rshift1);
r1 = vec_avg(t0, t1);
d = vec_avg(r0, r1);
r0 = r1;
if ((unsigned long)dest & 15) {
/* unaligned store, yuck */
vector unsigned char x = d;
COPY_16(dest, &x);
} else
vec_st(d, 0, dest);
dest += stride;
vec_st (tmp, 0, dest);
A = vec_perm (ref0, ref1, permA);
B = vec_perm (ref0, ref1, permB);
avg0 = vec_avg (A, B);
xor0 = vec_xor (A, B);
tmp = vec_sub (vec_avg (avg0, avg1),
vec_and (vec_and (ones, vec_or (xor0, xor1)),
vec_xor (avg0, avg1)));
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
vec_st (tmp, stride, dest);
dest += 2*stride;
A = vec_perm (ref0, ref1, permA);
B = vec_perm (ref0, ref1, permB);
avg1 = vec_avg (A, B);
xor1 = vec_xor (A, B);
tmp = vec_sub (vec_avg (avg0, avg1),
vec_and (vec_and (ones, vec_or (xor0, xor1)),
vec_xor (avg0, avg1)));
} while (--height);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
vec_st (tmp, 0, dest);
A = vec_perm (ref0, ref1, permA);
B = vec_perm (ref0, ref1, permB);
avg0 = vec_avg (A, B);
xor0 = vec_xor (A, B);
tmp = vec_sub (vec_avg (avg0, avg1),
vec_and (vec_and (ones, vec_or (xor0, xor1)),
vec_xor (avg0, avg1)));
vec_st (tmp, stride, dest);
}
void
MC_avg_xy16_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
void MC_put_xy_8_altivec (unsigned char * dest, unsigned char * ref,
int stride, int height)
{
vector unsigned char rshift0, rshift1, refw0, refw1;
vector unsigned char t0, t1, r0, r1, r, d, one;
vector_u8_t perm0A, perm0B, perm1A, perm1B, ref0, ref1, A, B;
vector_u8_t avg0, avg1, xor0, xor1, tmp, ones;
ones = vec_splat_u8 (1);
perm0A = vec_lvsl (0, ref);
perm0A = vec_mergeh (perm0A, perm0A);
perm0A = vec_pack ((vector_u16_t)perm0A, (vector_u16_t)perm0A);
perm0B = vec_add (perm0A, ones);
perm1A = vec_lvsl (stride, ref);
perm1A = vec_mergeh (perm1A, perm1A);
perm1A = vec_pack ((vector_u16_t)perm1A, (vector_u16_t)perm1A);
perm1B = vec_add (perm1A, ones);
height = (height >> 1) - 1;
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
A = vec_perm (ref0, ref1, perm0A);
B = vec_perm (ref0, ref1, perm0B);
avg0 = vec_avg (A, B);
xor0 = vec_xor (A, B);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
A = vec_perm (ref0, ref1, perm1A);
B = vec_perm (ref0, ref1, perm1B);
avg1 = vec_avg (A, B);
xor1 = vec_xor (A, B);
tmp = vec_sub (vec_avg (avg0, avg1),
vec_and (vec_and (ones, vec_or (xor0, xor1)),
vec_xor (avg0, avg1)));
rshift0 = vec_lvsl(0, ref);
one = (vector unsigned char)(1);
rshift1 = vec_add(rshift0, one);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
t0 = vec_perm(refw0, refw1, rshift0);
t1 = vec_perm(refw0, refw1, rshift1);
r0 = vec_avg(t0, t1);
do {
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
rshift0 = vec_lvsl(0, ref);
rshift1 = vec_add(rshift0, one);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
t0 = vec_perm(refw0, refw1, rshift0);
t1 = vec_perm(refw0, refw1, rshift1);
r1 = vec_avg(t0, t1);
r = vec_avg(r0, r1);
r0 = r1;
if ((unsigned long)dest & 15) {
/* unaligned load/store, yuck */
vector unsigned char dw0, dw1, dshift, mask;
dshift = vec_lvsr(0, dest);
dw0 = vec_ld(0, dest);
dw1 = vec_ld(16, dest);
d = vec_perm(r, r, dshift);
mask = vec_perm((vector unsigned char)(0),
(vector unsigned char)(255), dshift);
dw0 = vec_sel(dw0, vec_avg(dw0, d), mask);
dw1 = vec_sel(vec_avg(dw1, d), dw1, mask);
vec_st(dw0, 0, dest);
vec_st(dw1, 16, dest);
} else {
d = vec_ld(0, dest);
d = vec_avg(d, r);
vec_st(d, 0, dest);
}
vec_ste ((vector_u32_t)tmp, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
dest += stride;
A = vec_perm (ref0, ref1, perm0A);
B = vec_perm (ref0, ref1, perm0B);
avg0 = vec_avg (A, B);
xor0 = vec_xor (A, B);
tmp = vec_sub (vec_avg (avg0, avg1),
vec_and (vec_and (ones, vec_or (xor0, xor1)),
vec_xor (avg0, avg1)));
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
vec_ste ((vector_u32_t)tmp, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
dest += stride;
A = vec_perm (ref0, ref1, perm1A);
B = vec_perm (ref0, ref1, perm1B);
avg1 = vec_avg (A, B);
xor1 = vec_xor (A, B);
tmp = vec_sub (vec_avg (avg0, avg1),
vec_and (vec_and (ones, vec_or (xor0, xor1)),
vec_xor (avg0, avg1)));
} while (--height);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
vec_ste ((vector_u32_t)tmp, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
dest += stride;
A = vec_perm (ref0, ref1, perm0A);
B = vec_perm (ref0, ref1, perm0B);
avg0 = vec_avg (A, B);
xor0 = vec_xor (A, B);
tmp = vec_sub (vec_avg (avg0, avg1),
vec_and (vec_and (ones, vec_or (xor0, xor1)),
vec_xor (avg0, avg1)));
vec_ste ((vector_u32_t)tmp, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
}
void
MC_put_8_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
#if 0
void MC_put_xy_8_altivec (unsigned char * dest, unsigned char * ref,
int stride, int height)
{
vector unsigned char rshift, refw0, refw1, d;
vector_u8_t permA, permB, ref0, ref1, A, B, C, D, tmp, zero, ones;
vector_u16_t splat2, temp;
ones = vec_splat_u8 (1);
permA = vec_lvsl (0, ref);
permB = vec_add (permA, ones);
zero = vec_splat_u8 (0);
splat2 = vec_splat_u16 (2);
do {
rshift = vec_lvsl(0, ref);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
d = vec_perm(refw0, refw1, rshift);
COPY_8(dest, &d);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
A = vec_perm (ref0, ref1, permA);
B = vec_perm (ref0, ref1, permB);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
C = vec_perm (ref0, ref1, permA);
D = vec_perm (ref0, ref1, permB);
temp = vec_add (vec_add ((vector_u16_t)vec_mergeh (zero, A),
(vector_u16_t)vec_mergeh (zero, B)),
vec_add ((vector_u16_t)vec_mergeh (zero, C),
(vector_u16_t)vec_mergeh (zero, D)));
temp = vec_sr (vec_add (temp, splat2), splat2);
tmp = vec_pack (temp, temp);
vec_st (tmp, 0, dest);
dest += stride;
tmp = vec_avg (vec_perm (ref0, ref1, permA),
vec_perm (ref0, ref1, permB));
} while (--height);
}
#endif
void
MC_avg_8_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
void MC_avg_o_16_altivec (unsigned char * dest, unsigned char * ref,
int stride, int height)
{
vector unsigned char rshift, refw0, refw1;
vector unsigned char r, d;
vector_u8_t perm, ref0, ref1, tmp, prev;
perm = vec_lvsl (0, ref);
height = (height >> 1) - 1;
ref0 = vec_ld (0, ref);
ref1 = vec_ld (15, ref);
ref += stride;
prev = vec_ld (0, dest);
tmp = vec_avg (prev, vec_perm (ref0, ref1, perm));
do {
rshift = vec_lvsl(0, ref);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
r = vec_perm(refw0, refw1, rshift);
COPY_8(&d, dest);
d = vec_avg(d, r);
COPY_8(dest, &d);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (15, ref);
ref += stride;
dest += stride;
prev = vec_ld (stride, dest);
vec_st (tmp, 0, dest);
tmp = vec_avg (prev, vec_perm (ref0, ref1, perm));
ref0 = vec_ld (0, ref);
ref1 = vec_ld (15, ref);
ref += stride;
prev = vec_ld (2*stride, dest);
vec_st (tmp, stride, dest);
dest += 2*stride;
tmp = vec_avg (prev, vec_perm (ref0, ref1, perm));
} while (--height);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (15, ref);
prev = vec_ld (stride, dest);
vec_st (tmp, 0, dest);
tmp = vec_avg (prev, vec_perm (ref0, ref1, perm));
vec_st (tmp, stride, dest);
}
void
MC_put_x8_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
void MC_avg_o_8_altivec (unsigned char * dest, unsigned char * ref,
int stride, int height)
{
vector unsigned char rshift0, rshift1, refw0, refw1;
vector unsigned char t0, t1, d, one;
vector_u8_t perm0, perm1, tmp0, tmp1, ref0, ref1, prev;
tmp0 = vec_lvsl (0, ref);
tmp0 = vec_mergeh (tmp0, tmp0);
perm0 = vec_pack ((vector_u16_t)tmp0, (vector_u16_t)tmp0);
tmp1 = vec_lvsl (stride, ref);
tmp1 = vec_mergeh (tmp1, tmp1);
perm1 = vec_pack ((vector_u16_t)tmp1, (vector_u16_t)tmp1);
height = (height >> 1) - 1;
ref0 = vec_ld (0, ref);
ref1 = vec_ld (7, ref);
ref += stride;
prev = vec_ld (0, dest);
tmp0 = vec_avg (prev, vec_perm (ref0, ref1, perm0));
one = (vector unsigned char)(1);
do {
rshift0 = vec_lvsl(0, ref);
rshift1 = vec_add(rshift0, one);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
t0 = vec_perm(refw0, refw1, rshift0);
t1 = vec_perm(refw0, refw1, rshift1);
d = vec_avg(t0, t1);
COPY_8(dest, &d);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (7, ref);
ref += stride;
prev = vec_ld (stride, dest);
vec_ste ((vector_u32_t)tmp0, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp0, 4, (unsigned int *)dest);
dest += stride;
tmp1 = vec_avg (prev, vec_perm (ref0, ref1, perm1));
ref0 = vec_ld (0, ref);
ref1 = vec_ld (7, ref);
ref += stride;
prev = vec_ld (stride, dest);
vec_ste ((vector_u32_t)tmp1, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp1, 4, (unsigned int *)dest);
dest += stride;
tmp0 = vec_avg (prev, vec_perm (ref0, ref1, perm0));
} while (--height);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (7, ref);
prev = vec_ld (stride, dest);
vec_ste ((vector_u32_t)tmp0, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp0, 4, (unsigned int *)dest);
dest += stride;
tmp1 = vec_avg (prev, vec_perm (ref0, ref1, perm1));
vec_ste ((vector_u32_t)tmp1, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp1, 4, (unsigned int *)dest);
}
void
MC_avg_x8_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
void MC_avg_x_16_altivec (unsigned char * dest, unsigned char * ref,
int stride, int height)
{
vector unsigned char rshift0, rshift1, refw0, refw1;
vector unsigned char t0, t1, r, d, one;
vector_u8_t permA, permB, ref0, ref1, tmp, prev;
permA = vec_lvsl (0, ref);
permB = vec_add (permA, vec_splat_u8 (1));
height = (height >> 1) - 1;
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
prev = vec_ld (0, dest);
ref += stride;
tmp = vec_avg (prev, vec_avg (vec_perm (ref0, ref1, permA),
vec_perm (ref0, ref1, permB)));
one = (vector unsigned char)(1);
do {
rshift0 = vec_lvsl(0, ref);
rshift1 = vec_add(rshift0, one);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
t0 = vec_perm(refw0, refw1, rshift0);
t1 = vec_perm(refw0, refw1, rshift1);
r = vec_avg(t0, t1);
COPY_8(&d, dest);
d = vec_avg(d, r);
COPY_8(dest, &d);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
dest += stride;
prev = vec_ld (stride, dest);
vec_st (tmp, 0, dest);
tmp = vec_avg (prev, vec_avg (vec_perm (ref0, ref1, permA),
vec_perm (ref0, ref1, permB)));
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
prev = vec_ld (2*stride, dest);
vec_st (tmp, stride, dest);
dest += 2*stride;
tmp = vec_avg (prev, vec_avg (vec_perm (ref0, ref1, permA),
vec_perm (ref0, ref1, permB)));
} while (--height);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
prev = vec_ld (stride, dest);
vec_st (tmp, 0, dest);
tmp = vec_avg (prev, vec_avg (vec_perm (ref0, ref1, permA),
vec_perm (ref0, ref1, permB)));
vec_st (tmp, stride, dest);
}
void
MC_put_y8_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
void MC_avg_x_8_altivec (unsigned char * dest, unsigned char * ref,
int stride, int height)
{
vector unsigned char rshift, refw0, refw1;
vector unsigned char r0, r1, d;
vector_u8_t perm0A, perm0B, perm1A, perm1B, ones, tmp0, tmp1, ref0, ref1;
vector_u8_t prev;
ones = vec_splat_u8 (1);
tmp0 = vec_lvsl (0, ref);
tmp0 = vec_mergeh (tmp0, tmp0);
perm0A = vec_pack ((vector_u16_t)tmp0, (vector_u16_t)tmp0);
perm0B = vec_add (perm0A, ones);
tmp1 = vec_lvsl (stride, ref);
tmp1 = vec_mergeh (tmp1, tmp1);
perm1A = vec_pack ((vector_u16_t)tmp1, (vector_u16_t)tmp1);
perm1B = vec_add (perm1A, ones);
height = (height >> 1) - 1;
ref0 = vec_ld (0, ref);
ref1 = vec_ld (8, ref);
prev = vec_ld (0, dest);
ref += stride;
tmp0 = vec_avg (prev, vec_avg (vec_perm (ref0, ref1, perm0A),
vec_perm (ref0, ref1, perm0B)));
rshift = vec_lvsl(0, ref);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
r0 = vec_perm(refw0, refw1, rshift);
do {
ref0 = vec_ld (0, ref);
ref1 = vec_ld (8, ref);
ref += stride;
rshift = vec_lvsl(0, ref);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
r1 = vec_perm(refw0, refw1, rshift);
d = vec_avg(r0, r1);
r0 = r1;
COPY_8(dest, &d);
prev = vec_ld (stride, dest);
vec_ste ((vector_u32_t)tmp0, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp0, 4, (unsigned int *)dest);
dest += stride;
tmp1 = vec_avg (prev, vec_avg (vec_perm (ref0, ref1, perm1A),
vec_perm (ref0, ref1, perm1B)));
ref0 = vec_ld (0, ref);
ref1 = vec_ld (8, ref);
ref += stride;
prev = vec_ld (stride, dest);
vec_ste ((vector_u32_t)tmp1, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp1, 4, (unsigned int *)dest);
dest += stride;
tmp0 = vec_avg (prev, vec_avg (vec_perm (ref0, ref1, perm0A),
vec_perm (ref0, ref1, perm0B)));
} while (--height);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (8, ref);
prev = vec_ld (stride, dest);
vec_ste ((vector_u32_t)tmp0, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp0, 4, (unsigned int *)dest);
dest += stride;
tmp1 = vec_avg (prev, vec_avg (vec_perm (ref0, ref1, perm1A),
vec_perm (ref0, ref1, perm1B)));
vec_ste ((vector_u32_t)tmp1, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp1, 4, (unsigned int *)dest);
}
void
MC_avg_y8_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
void MC_avg_y_16_altivec (unsigned char * dest, unsigned char * ref,
int stride, int height)
{
vector unsigned char rshift, refw0, refw1;
vector unsigned char r0, r1, r, d;
vector_u8_t perm, ref0, ref1, tmp0, tmp1, tmp, prev;
perm = vec_lvsl (0, ref);
height = (height >> 1) - 1;
ref0 = vec_ld (0, ref);
ref1 = vec_ld (15, ref);
ref += stride;
tmp0 = vec_perm (ref0, ref1, perm);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (15, ref);
ref += stride;
prev = vec_ld (0, dest);
tmp1 = vec_perm (ref0, ref1, perm);
tmp = vec_avg (prev, vec_avg (tmp0, tmp1));
rshift = vec_lvsl(0, ref);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
r0 = vec_perm(refw0, refw1, rshift);
do {
ref0 = vec_ld (0, ref);
ref1 = vec_ld (15, ref);
ref += stride;
rshift = vec_lvsl(0, ref);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
r1 = vec_perm(refw0, refw1, rshift);
r = vec_avg(r0, r1);
r0 = r1;
COPY_8(&d, dest);
d = vec_avg(d, r);
COPY_8(dest, &d);
dest += stride;
prev = vec_ld (stride, dest);
vec_st (tmp, 0, dest);
tmp0 = vec_perm (ref0, ref1, perm);
tmp = vec_avg (prev, vec_avg (tmp0, tmp1));
ref0 = vec_ld (0, ref);
ref1 = vec_ld (15, ref);
ref += stride;
prev = vec_ld (2*stride, dest);
vec_st (tmp, stride, dest);
dest += 2*stride;
tmp1 = vec_perm (ref0, ref1, perm);
tmp = vec_avg (prev, vec_avg (tmp0, tmp1));
} while (--height);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (15, ref);
prev = vec_ld (stride, dest);
vec_st (tmp, 0, dest);
tmp0 = vec_perm (ref0, ref1, perm);
tmp = vec_avg (prev, vec_avg (tmp0, tmp1));
vec_st (tmp, stride, dest);
}
void
MC_put_xy8_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
void MC_avg_y_8_altivec (unsigned char * dest, unsigned char * ref,
int stride, int height)
{
vector unsigned char rshift0, rshift1, refw0, refw1;
vector unsigned char t0, t1, r0, r1, d, one;
vector_u8_t perm0, perm1, tmp0, tmp1, tmp, ref0, ref1, prev;
tmp0 = vec_lvsl (0, ref);
tmp0 = vec_mergeh (tmp0, tmp0);
perm0 = vec_pack ((vector_u16_t)tmp0, (vector_u16_t)tmp0);
tmp1 = vec_lvsl (stride, ref);
tmp1 = vec_mergeh (tmp1, tmp1);
perm1 = vec_pack ((vector_u16_t)tmp1, (vector_u16_t)tmp1);
height = (height >> 1) - 1;
ref0 = vec_ld (0, ref);
ref1 = vec_ld (7, ref);
ref += stride;
tmp0 = vec_perm (ref0, ref1, perm0);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (7, ref);
ref += stride;
prev = vec_ld (0, dest);
tmp1 = vec_perm (ref0, ref1, perm1);
tmp = vec_avg (prev, vec_avg (tmp0, tmp1));
rshift0 = vec_lvsl(0, ref);
one = (vector unsigned char)(1);
rshift1 = vec_add(rshift0, one);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
t0 = vec_perm(refw0, refw1, rshift0);
t1 = vec_perm(refw0, refw1, rshift1);
r0 = vec_avg(t0, t1);
do {
ref0 = vec_ld (0, ref);
ref1 = vec_ld (7, ref);
ref += stride;
prev = vec_ld (stride, dest);
vec_ste ((vector_u32_t)tmp, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
dest += stride;
tmp0 = vec_perm (ref0, ref1, perm0);
tmp = vec_avg (prev, vec_avg (tmp0, tmp1));
ref0 = vec_ld (0, ref);
ref1 = vec_ld (7, ref);
ref += stride;
rshift0 = vec_lvsl(0, ref);
rshift1 = vec_add(rshift0, one);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
t0 = vec_perm(refw0, refw1, rshift0);
t1 = vec_perm(refw0, refw1, rshift1);
r1 = vec_avg(t0, t1);
d = vec_avg(r0, r1);
r0 = r1;
COPY_8(dest, &d);
prev = vec_ld (stride, dest);
vec_ste ((vector_u32_t)tmp, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
dest += stride;
tmp1 = vec_perm (ref0, ref1, perm1);
tmp = vec_avg (prev, vec_avg (tmp0, tmp1));
} while (--height);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (7, ref);
prev = vec_ld (stride, dest);
vec_ste ((vector_u32_t)tmp, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
dest += stride;
tmp0 = vec_perm (ref0, ref1, perm0);
tmp = vec_avg (prev, vec_avg (tmp0, tmp1));
vec_ste ((vector_u32_t)tmp, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
}
void
MC_avg_xy8_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
void MC_avg_xy_16_altivec (unsigned char * dest, unsigned char * ref,
int stride, int height)
{
vector unsigned char rshift0, rshift1, refw0, refw1;
vector unsigned char t0, t1, r0, r1, r, d, one;
vector_u8_t permA, permB, ref0, ref1, A, B, avg0, avg1, xor0, xor1, tmp;
vector_u8_t ones, prev;
ones = vec_splat_u8 (1);
permA = vec_lvsl (0, ref);
permB = vec_add (permA, ones);
height = (height >> 1) - 1;
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
A = vec_perm (ref0, ref1, permA);
B = vec_perm (ref0, ref1, permB);
avg0 = vec_avg (A, B);
xor0 = vec_xor (A, B);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
prev = vec_ld (0, dest);
A = vec_perm (ref0, ref1, permA);
B = vec_perm (ref0, ref1, permB);
avg1 = vec_avg (A, B);
xor1 = vec_xor (A, B);
tmp = vec_avg (prev, vec_sub (vec_avg (avg0, avg1),
vec_and (vec_and (ones, vec_or (xor0, xor1)),
vec_xor (avg0, avg1))));
rshift0 = vec_lvsl(0, ref);
one = (vector unsigned char)(1);
rshift1 = vec_add(rshift0, one);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
t0 = vec_perm(refw0, refw1, rshift0);
t1 = vec_perm(refw0, refw1, rshift1);
r0 = vec_avg(t0, t1);
do {
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
prev = vec_ld (stride, dest);
vec_st (tmp, 0, dest);
A = vec_perm (ref0, ref1, permA);
B = vec_perm (ref0, ref1, permB);
avg0 = vec_avg (A, B);
xor0 = vec_xor (A, B);
tmp = vec_avg (prev,
vec_sub (vec_avg (avg0, avg1),
vec_and (vec_and (ones, vec_or (xor0, xor1)),
vec_xor (avg0, avg1))));
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
prev = vec_ld (2*stride, dest);
vec_st (tmp, stride, dest);
dest += 2*stride;
A = vec_perm (ref0, ref1, permA);
B = vec_perm (ref0, ref1, permB);
avg1 = vec_avg (A, B);
xor1 = vec_xor (A, B);
tmp = vec_avg (prev,
vec_sub (vec_avg (avg0, avg1),
vec_and (vec_and (ones, vec_or (xor0, xor1)),
vec_xor (avg0, avg1))));
} while (--height);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
prev = vec_ld (stride, dest);
vec_st (tmp, 0, dest);
A = vec_perm (ref0, ref1, permA);
B = vec_perm (ref0, ref1, permB);
avg0 = vec_avg (A, B);
xor0 = vec_xor (A, B);
tmp = vec_avg (prev, vec_sub (vec_avg (avg0, avg1),
vec_and (vec_and (ones, vec_or (xor0, xor1)),
vec_xor (avg0, avg1))));
vec_st (tmp, stride, dest);
}
void MC_avg_xy_8_altivec (unsigned char * dest, unsigned char * ref,
int stride, int height)
{
vector_u8_t perm0A, perm0B, perm1A, perm1B, ref0, ref1, A, B;
vector_u8_t avg0, avg1, xor0, xor1, tmp, ones, prev;
ones = vec_splat_u8 (1);
perm0A = vec_lvsl (0, ref);
perm0A = vec_mergeh (perm0A, perm0A);
perm0A = vec_pack ((vector_u16_t)perm0A, (vector_u16_t)perm0A);
perm0B = vec_add (perm0A, ones);
perm1A = vec_lvsl (stride, ref);
perm1A = vec_mergeh (perm1A, perm1A);
perm1A = vec_pack ((vector_u16_t)perm1A, (vector_u16_t)perm1A);
perm1B = vec_add (perm1A, ones);
height = (height >> 1) - 1;
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
rshift0 = vec_lvsl(0, ref);
rshift1 = vec_add(rshift0, one);
refw0 = vec_ld(0, ref);
refw1 = vec_ld(16, ref);
t0 = vec_perm(refw0, refw1, rshift0);
t1 = vec_perm(refw0, refw1, rshift1);
r1 = vec_avg(t0, t1);
r = vec_avg(r0, r1);
r0 = r1;
COPY_8(&d, dest);
d = vec_avg(d, r);
COPY_8(dest, &d);
A = vec_perm (ref0, ref1, perm0A);
B = vec_perm (ref0, ref1, perm0B);
avg0 = vec_avg (A, B);
xor0 = vec_xor (A, B);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
prev = vec_ld (0, dest);
A = vec_perm (ref0, ref1, perm1A);
B = vec_perm (ref0, ref1, perm1B);
avg1 = vec_avg (A, B);
xor1 = vec_xor (A, B);
tmp = vec_avg (prev, vec_sub (vec_avg (avg0, avg1),
vec_and (vec_and (ones, vec_or (xor0, xor1)),
vec_xor (avg0, avg1))));
do {
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
prev = vec_ld (stride, dest);
vec_ste ((vector_u32_t)tmp, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
dest += stride;
A = vec_perm (ref0, ref1, perm0A);
B = vec_perm (ref0, ref1, perm0B);
avg0 = vec_avg (A, B);
xor0 = vec_xor (A, B);
tmp = vec_avg (prev,
vec_sub (vec_avg (avg0, avg1),
vec_and (vec_and (ones, vec_or (xor0, xor1)),
vec_xor (avg0, avg1))));
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
ref += stride;
prev = vec_ld (stride, dest);
vec_ste ((vector_u32_t)tmp, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
dest += stride;
A = vec_perm (ref0, ref1, perm1A);
B = vec_perm (ref0, ref1, perm1B);
avg1 = vec_avg (A, B);
xor1 = vec_xor (A, B);
tmp = vec_avg (prev,
vec_sub (vec_avg (avg0, avg1),
vec_and (vec_and (ones, vec_or (xor0, xor1)),
vec_xor (avg0, avg1))));
} while (--height);
ref0 = vec_ld (0, ref);
ref1 = vec_ld (16, ref);
prev = vec_ld (stride, dest);
vec_ste ((vector_u32_t)tmp, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
dest += stride;
A = vec_perm (ref0, ref1, perm0A);
B = vec_perm (ref0, ref1, perm0B);
avg0 = vec_avg (A, B);
xor0 = vec_xor (A, B);
tmp = vec_avg (prev, vec_sub (vec_avg (avg0, avg1),
vec_and (vec_and (ones, vec_or (xor0, xor1)),
vec_xor (avg0, avg1))));
vec_ste ((vector_u32_t)tmp, 0, (unsigned int *)dest);
vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
}
#endif /* __ALTIVEC__ */
#ifndef __ALTIVEC__
/*****************************************************************************
* Functions exported as capabilities. They are declared as static so that
* we don't pollute the namespace too much.
......@@ -570,22 +2094,22 @@ static void motion_getfunctions( function_list_t * p_function_list )
/* Copying functions */
{
/* Width == 16 */
MC_put_16_altivec, MC_put_x16_altivec, MC_put_y16_altivec, MC_put_xy16_altivec
MC_put_o_16_altivec, MC_put_x_16_altivec, MC_put_y_16_altivec, MC_put_xy_16_altivec
},
{
/* Width == 8 */
MC_put_8_altivec, MC_put_x8_altivec, MC_put_y8_altivec, MC_put_xy8_altivec
MC_put_o_8_altivec, MC_put_x_8_altivec, MC_put_y_8_altivec, MC_put_xy_8_altivec
}
},
{
/* Averaging functions */
{
/* Width == 16 */
MC_avg_16_altivec, MC_avg_x16_altivec, MC_avg_y16_altivec, MC_avg_xy16_altivec
MC_avg_o_16_altivec, MC_avg_x_16_altivec, MC_avg_y_16_altivec, MC_avg_xy_16_altivec
},
{
/* Width == 8 */
MC_avg_8_altivec, MC_avg_x8_altivec, MC_avg_y8_altivec, MC_avg_xy8_altivec
MC_avg_o_8_altivec, MC_avg_x_8_altivec, MC_avg_y_8_altivec, MC_avg_xy_8_altivec
}
}
};
......@@ -598,3 +2122,5 @@ static void motion_getfunctions( function_list_t * p_function_list )
return;
}
#endif /* __ALTIVEC__ */
......@@ -4,7 +4,7 @@
* and spawn threads.
*****************************************************************************
* Copyright (C) 1998, 1999, 2000 VideoLAN
* $Id: main.c,v 1.113 2001/09/05 16:07:50 massiot Exp $
* $Id: main.c,v 1.114 2001/09/25 11:46:14 massiot Exp $
*
* Authors: Vincent Seguin <seguin@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
......@@ -1184,16 +1184,12 @@ static int CPUCapabilities( void )
return( i_capabilities );
#elif defined( __powerpc__ )
# if defined( vector )
/* Test for Altivec */
signal( SIGILL, InstructionSignalHandler );
i_illegal = 0;
if( setjmp( env ) == 0 )
{
/* Set VSCR to 0 */
vec_mtvscr( (vector unsigned int)(0) );
/* Set the VRSAVE register in case the kernel looks at it */
asm volatile ("mtspr 256,%0" : : "r" (-1));
}
......@@ -1203,7 +1199,6 @@ static int CPUCapabilities( void )
}
signal( SIGILL, NULL );
# endif
return( i_capabilities );
......
......@@ -2,7 +2,7 @@
* vpar_pool.c : management of the pool of decoder threads
*****************************************************************************
* Copyright (C) 1999, 2000, 2001 VideoLAN
* $Id: vpar_pool.c,v 1.2 2001/08/22 17:21:46 massiot Exp $
* $Id: vpar_pool.c,v 1.3 2001/09/25 11:46:14 massiot Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
......@@ -64,6 +64,8 @@ static void DecodeMacroblockPool( vdec_pool_t * p_pool, macroblock_t * p_mb );
*****************************************************************************/
void vpar_InitPool( vpar_thread_t * p_vpar )
{
int j;
/* Initialize mutex and cond. */
vlc_mutex_init( &p_vpar->pool.lock );
vlc_cond_init( &p_vpar->pool.wait_empty );
......@@ -89,6 +91,12 @@ void vpar_InitPool( vpar_thread_t * p_vpar )
p_vpar->pool.p_vdec->b_die = 0;
p_vpar->pool.p_vdec->p_pool = &p_vpar->pool;
vdec_InitThread( p_vpar->pool.p_vdec );
for( j = 0; j < 6; j++ )
{
p_vpar->pool.mb.p_idcts[j].pi_block =
memalign( 16, 64 * sizeof(dctelem_t) );
}
}
/*****************************************************************************
......@@ -124,7 +132,14 @@ void vpar_SpawnPool( vpar_thread_t * p_vpar )
for( i = p_vpar->pool.i_smp - 1; i >= i_new_smp; i-- )
{
int j;
vdec_DestroyThread( p_vpar->pool.pp_vdec[i] );
for( j = 0; j < 6; j++ )
{
free( p_vpar->pool.p_macroblocks[i].p_idcts[j].pi_block );
}
}
p_vpar->pool.pp_vdec = realloc( p_vpar->pool.pp_vdec,
......@@ -155,6 +170,14 @@ void vpar_SpawnPool( vpar_thread_t * p_vpar )
for( i = p_vpar->pool.i_smp; i < i_new_smp ; i++ )
{
int j;
for( j = 0; j < 6; j++ )
{
p_vpar->pool.p_macroblocks[i].p_idcts[j].pi_block =
memalign( 16, 64 * sizeof(dctelem_t) );
}
p_vpar->pool.pp_vdec[i] = vdec_CreateThread( &p_vpar->pool );
}
......@@ -203,7 +226,14 @@ void vpar_EndPool( vpar_thread_t * p_vpar )
for( i = 0; i < p_vpar->pool.i_smp; i++ )
{
int j;
vdec_DestroyThread( p_vpar->pool.pp_vdec[i] );
for( j = 0; j < 6; j++ )
{
free( p_vpar->pool.p_macroblocks[i].p_idcts[j].pi_block );
}
}
if( p_vpar->pool.i_smp )
......
......@@ -5,7 +5,7 @@
* thread, and destroy a previously oppened video output thread.
*****************************************************************************
* Copyright (C) 2000 VideoLAN
* $Id: video_output.c,v 1.138 2001/08/22 21:18:43 gbazin Exp $
* $Id: video_output.c,v 1.139 2001/09/25 11:46:14 massiot Exp $
*
* Authors: Vincent Seguin <seguin@via.ecp.fr>
*
......@@ -402,10 +402,10 @@ subpicture_t *vout_CreateSubPicture( vout_thread_t *p_vout, int i_type,
switch( i_type )
{
case TEXT_SUBPICTURE: /* text subpicture */
p_free_subpic->p_data = malloc( i_size + 1 );
p_free_subpic->p_data = memalign( 16, i_size + 1 );
break;
case DVD_SUBPICTURE: /* DVD subpicture unit */
p_free_subpic->p_data = malloc( i_size );
p_free_subpic->p_data = memalign( 16, i_size );
break;
#ifdef DEBUG
default:
......@@ -623,21 +623,24 @@ picture_t *vout_CreatePicture( vout_thread_t *p_vout, int i_type,
{
case YUV_420_PICTURE: /* YUV 420: 1,1/4,1/4 samples per pixel */
i_chroma_width = i_width / 2;
p_free_picture->p_data = malloc( i_height * i_chroma_width * 3 * sizeof( yuv_data_t ) );
p_free_picture->p_data = memalign( 16, i_height * i_chroma_width
* 3 * sizeof( yuv_data_t ) );
p_free_picture->p_y = (yuv_data_t *)p_free_picture->p_data;
p_free_picture->p_u = (yuv_data_t *)p_free_picture->p_data +i_height*i_chroma_width*4/2;
p_free_picture->p_v = (yuv_data_t *)p_free_picture->p_data +i_height*i_chroma_width*5/2;
break;
case YUV_422_PICTURE: /* YUV 422: 1,1/2,1/2 samples per pixel */
i_chroma_width = i_width / 2;
p_free_picture->p_data = malloc( i_height * i_chroma_width * 4 * sizeof( yuv_data_t ) );
p_free_picture->p_data = memalign( 16, i_height * i_chroma_width
* 4 * sizeof( yuv_data_t ) );
p_free_picture->p_y = (yuv_data_t *)p_free_picture->p_data;
p_free_picture->p_u = (yuv_data_t *)p_free_picture->p_data +i_height*i_chroma_width*2;
p_free_picture->p_v = (yuv_data_t *)p_free_picture->p_data +i_height*i_chroma_width*3;
break;
case YUV_444_PICTURE: /* YUV 444: 1,1,1 samples per pixel */
i_chroma_width = i_width;
p_free_picture->p_data = malloc( i_height * i_chroma_width * 3 * sizeof( yuv_data_t ) );
p_free_picture->p_data = memalign( 16, i_height * i_chroma_width
* 3 * sizeof( yuv_data_t ) );
p_free_picture->p_y = (yuv_data_t *)p_free_picture->p_data;
p_free_picture->p_u = (yuv_data_t *)p_free_picture->p_data +i_height*i_chroma_width;
p_free_picture->p_v = (yuv_data_t *)p_free_picture->p_data +i_height*i_chroma_width*2;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment