summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndre Pang <athp@users.sourceforge.net>2004-11-06 09:23:15 +0000
committerAndre Pang <athp@users.sourceforge.net>2004-11-06 09:23:15 +0000
commit60635c5d5120e1180fab363b566c9c28e00d548a (patch)
treee150475da551376be0504fd34eeea7b620eef47e /src
parent5a9a7545889b82afffde6a867edd08941d3b4772 (diff)
downloadxine-lib-60635c5d5120e1180fab363b566c9c28e00d548a.tar.gz
xine-lib-60635c5d5120e1180fab363b566c9c28e00d548a.tar.bz2
libmpeg2 compilation fixes for Mac OS X
CVS patchset: 7105 CVS date: 2004/11/06 09:23:15
Diffstat (limited to 'src')
-rw-r--r--src/libmpeg2/cpu_state.c72
-rw-r--r--src/libmpeg2/idct_altivec.c38
-rw-r--r--src/libmpeg2/motion_comp_altivec.c19
-rw-r--r--src/libmpeg2/mpeg2_internal.h7
4 files changed, 114 insertions, 22 deletions
diff --git a/src/libmpeg2/cpu_state.c b/src/libmpeg2/cpu_state.c
index db876cf98..433a85b85 100644
--- a/src/libmpeg2/cpu_state.c
+++ b/src/libmpeg2/cpu_state.c
@@ -1,6 +1,6 @@
/*
* cpu_state.c
- * Copyright (C) 2000-2002 Michel Lespinasse <walken@zoy.org>
+ * Copyright (C) 2000-2003 Michel Lespinasse <walken@zoy.org>
* Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
*
* This file is part of mpeg2dec, a free MPEG-2 video stream decoder.
@@ -40,6 +40,9 @@ static void state_restore_mmx (cpu_state_t * state)
#endif
#if defined (ARCH_PPC) && defined (ENABLE_ALTIVEC)
+
+#ifndef HOST_OS_DARWIN
+
static void state_save_altivec (cpu_state_t * state)
{
asm (" \n"
@@ -97,7 +100,71 @@ static void state_restore_altivec (cpu_state_t * state)
" lvx %v31, %r9, %r3 \n"
);
}
-#endif
+
+#else /* HOST_OS_DARWIN */
+
+#define LI(a,b) "li r" #a "," #b "\n\t"
+#define STVX0(a,b,c) "stvx v" #a ",0,r" #c "\n\t"
+#define STVX(a,b,c) "stvx v" #a ",r" #b ",r" #c "\n\t"
+#define LVX0(a,b,c) "lvx v" #a ",0,r" #c "\n\t"
+#define LVX(a,b,c) "lvx v" #a ",r" #b ",r" #c "\n\t"
+
+static void state_save_altivec (cpu_state_t * state)
+{
+ asm (LI (9, 16)
+ STVX0 (20, 0, 3)
+ LI (11, 32)
+ STVX (21, 9, 3)
+ LI (9, 48)
+ STVX (22, 11, 3)
+ LI (11, 64)
+ STVX (23, 9, 3)
+ LI (9, 80)
+ STVX (24, 11, 3)
+ LI (11, 96)
+ STVX (25, 9, 3)
+ LI (9, 112)
+ STVX (26, 11, 3)
+ LI (11, 128)
+ STVX (27, 9, 3)
+ LI (9, 144)
+ STVX (28, 11, 3)
+ LI (11, 160)
+ STVX (29, 9, 3)
+ LI (9, 176)
+ STVX (30, 11, 3)
+ STVX (31, 9, 3));
+}
+
+static void state_restore_altivec (cpu_state_t * state)
+{
+ asm (LI (9, 16)
+ LVX0 (20, 0, 3)
+ LI (11, 32)
+ LVX (21, 9, 3)
+ LI (9, 48)
+ LVX (22, 11, 3)
+ LI (11, 64)
+ LVX (23, 9, 3)
+ LI (9, 80)
+ LVX (24, 11, 3)
+ LI (11, 96)
+ LVX (25, 9, 3)
+ LI (9, 112)
+ LVX (26, 11, 3)
+ LI (11, 128)
+ LVX (27, 9, 3)
+ LI (9, 144)
+ LVX (28, 11, 3)
+ LI (11, 160)
+ LVX (29, 9, 3)
+ LI (9, 176)
+ LVX (30, 11, 3)
+ LVX (31, 9, 3));
+}
+#endif /* HOST_OS_DARWIN */
+
+#endif /* defined (ARCH_PPC) && defined (ENABLE_ALTIVEC) */
void mpeg2_cpu_state_init (uint32_t mm_accel)
{
@@ -113,3 +180,4 @@ void mpeg2_cpu_state_init (uint32_t mm_accel)
}
#endif
}
+
diff --git a/src/libmpeg2/idct_altivec.c b/src/libmpeg2/idct_altivec.c
index 12c227aea..ffac29025 100644
--- a/src/libmpeg2/idct_altivec.c
+++ b/src/libmpeg2/idct_altivec.c
@@ -21,8 +21,6 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#ifndef __ALTIVEC__
-
#include "config.h"
#if defined (ARCH_PPC) && defined (ENABLE_ALTIVEC)
@@ -32,13 +30,7 @@
#include "mpeg2_internal.h"
#include "xineutils.h"
-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}
-};
+#ifndef HOST_OS_DARWIN
/*
* The asm code is generated with:
@@ -497,6 +489,14 @@ void mpeg2_idct_add_altivec (int16_t * block, uint8_t * dest, int stride)
);
}
+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}
+};
+
void mpeg2_idct_altivec_init (void)
{
int i, j;
@@ -512,9 +512,7 @@ void mpeg2_idct_altivec_init (void)
}
}
-#endif /* ARCH_PPC */
-
-#else /* __ALTIVEC__ */
+#else /* HOST_OS_DARWIN */
#define vector_s16_t vector signed short
#define vector_u16_t vector unsigned short
@@ -694,6 +692,20 @@ void mpeg2_idct_add_altivec (vector_s16_t * block, unsigned char * dest,
memset (block, 0, 64 * sizeof (signed short));
}
-#endif /* __ALTIVEC__ */
+void mpeg2_idct_altivec_init (void)
+{
+ int i, j;
+
+ /* the altivec idct uses a transposed input, so we patch scan tables */
+ for (i = 0; i < 64; i++) {
+ j = mpeg2_scan_norm[i];
+ mpeg2_scan_norm[i] = (j >> 3) | ((j & 7) << 3);
+ j = mpeg2_scan_alt[i];
+ mpeg2_scan_alt[i] = (j >> 3) | ((j & 7) << 3);
+ }
+}
+
+#endif /* HOST_OS_DARWIN */
+#endif /* ARCH_PPC && ENABLED_ALTIVEC */
diff --git a/src/libmpeg2/motion_comp_altivec.c b/src/libmpeg2/motion_comp_altivec.c
index 8ad951f1a..15adc5798 100644
--- a/src/libmpeg2/motion_comp_altivec.c
+++ b/src/libmpeg2/motion_comp_altivec.c
@@ -21,20 +21,20 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#ifndef __ALTIVEC__
-
#include "config.h"
-#if defined (ARCH_PPC) && defined (ENABLE_ALTIVEC)
+#ifndef HOST_OS_DARWIN
-#include <inttypes.h>
+#if defined (ARCH_PPC) && defined (ENABLE_ALTIVEC)
#include "mpeg2_internal.h"
+#include <inttypes.h>
+
/*
* The asm code is generated with:
*
- * gcc-2.95 -fvec -D__ALTIVEC__ -O9 -fomit-frame-pointer -mregnames -S
+ * gcc-2.95 -fvec -DHOST_OS_DARWIN -O9 -fomit-frame-pointer -mregnames -S
* motion_comp_altivec.c
*
* sed 's/.L/._L/g' motion_comp_altivec.s |
@@ -1067,7 +1067,9 @@ MPEG2_MC_EXTERN (altivec)
#endif /* ARCH_PPC */
-#else /* __ALTIVEC__ */
+#else /* HOST_OS_DARWIN */
+
+#include "mpeg2_internal.h"
#define vector_s16_t vector signed short
#define vector_u16_t vector unsigned short
@@ -2019,4 +2021,7 @@ void MC_avg_xy_8_altivec (unsigned char * dest, unsigned char * ref,
vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
}
-#endif /* __ALTIVEC__ */
+MPEG2_MC_EXTERN (altivec)
+
+#endif /* HOST_OS_DARWIN */
+
diff --git a/src/libmpeg2/mpeg2_internal.h b/src/libmpeg2/mpeg2_internal.h
index 27611e132..f279cd626 100644
--- a/src/libmpeg2/mpeg2_internal.h
+++ b/src/libmpeg2/mpeg2_internal.h
@@ -239,8 +239,15 @@ void mpeg2_zero_block_mmx (int16_t * block);
void mpeg2_idct_mmx_init (void);
/* idct_altivec.c */
+#ifndef HOST_OS_DARWIN
void mpeg2_idct_copy_altivec (int16_t * block, uint8_t * dest, int stride);
void mpeg2_idct_add_altivec (int16_t * block, uint8_t * dest, int stride);
+#else /* HOST_OS_DARWIN */
+void mpeg2_idct_copy_altivec (vector signed short * block, unsigned char * dest,
+ int stride);
+void mpeg2_idct_add_altivec (vector signed short * block, unsigned char * dest,
+ int stride);
+#endif /* HOST_OS_DARWIN */
void mpeg2_idct_altivec_init (void);
/* motion_comp.c */