Mercurial > mplayer.hg
changeset 9122:5ba896a38d75
The two attached patches *should* allow for proper
compilation of the AltiVec stuff on both Darwin
and non-Darwin system. They've only been tested
for compilation on Debian using Debian's gcc-3.2.
Romain Dolbeau <dolbeau@irisa.fr>
author | arpi |
---|---|
date | Mon, 27 Jan 2003 21:47:25 +0000 |
parents | 57605e30cda4 |
children | 0f52526cb69a |
files | Makefile cpudetect.c liba52/Makefile liba52/imdct.c mp3lib/Makefile mp3lib/dct64_altivec.c |
diffstat | 6 files changed, 54 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/Makefile Mon Jan 27 20:46:45 2003 +0000 +++ b/Makefile Mon Jan 27 21:47:25 2003 +0000 @@ -41,7 +41,11 @@ CFLAGS = $(OPTFLAGS) -Ilibmpdemux -Iloader -Ilibvo $(FREETYPE_INC) $(EXTRA_INC) $(CDPARANOIA_INC) $(SDL_INC) # -Wall ifeq ($(TARGET_ALTIVEC),yes) +ifeq ($(TARGET_OS),Darwin) CFLAGS += -faltivec +else +CFLAGS += -maltivec -mabi=altivec +endif endif PARTS = libmpdemux libmpcodecs mp3lib liba52 libmpeg2 libavcodec libao2 drivers linux postproc input libvo libaf
--- a/cpudetect.c Mon Jan 27 20:46:45 2003 +0000 +++ b/cpudetect.c Mon Jan 27 21:47:25 2003 +0000 @@ -492,7 +492,7 @@ canjump = 1; asm volatile ("mtspr 256, %0\n\t" - "vand v0, v0, v0" + "vand %%v0, %%v0, %%v0" : : "r" (-1));
--- a/liba52/Makefile Mon Jan 27 20:46:45 2003 +0000 +++ b/liba52/Makefile Mon Jan 27 21:47:25 2003 +0000 @@ -8,7 +8,11 @@ CFLAGS = $(MLIB_INC) $(OPTFLAGS) ifeq ($(TARGET_ALTIVEC),yes) +ifeq ($(TARGET_OS),Darwin) CFLAGS+= -faltivec +else + CFLAGS+= -maltivec -mabi=altivec +endif endif .SUFFIXES: .c .o
--- a/liba52/imdct.c Mon Jan 27 20:46:45 2003 +0000 +++ b/liba52/imdct.c Mon Jan 27 21:47:25 2003 +0000 @@ -387,6 +387,10 @@ #ifdef HAVE_ALTIVEC +#ifndef SYS_DARWIN +#include <altivec.h> +#endif + // used to build registers permutation vectors (vcprm) // the 's' are for words in the _s_econd vector #define WORD_0 0x00,0x01,0x02,0x03 @@ -398,7 +402,11 @@ #define WORD_s2 0x18,0x19,0x1a,0x1b #define WORD_s3 0x1c,0x1d,0x1e,0x1f +#ifdef SYS_DARWIN #define vcprm(a,b,c,d) (const vector unsigned char)(WORD_ ## a, WORD_ ## b, WORD_ ## c, WORD_ ## d) +#else +#define vcprm(a,b,c,d) (const vector unsigned char){WORD_ ## a, WORD_ ## b, WORD_ ## c, WORD_ ## d} +#endif // vcprmle is used to keep the same index as in the SSE version. // it's the same as vcprm, with the index inversed @@ -410,7 +418,18 @@ #define FLOAT_n -1. #define FLOAT_p 1. +#ifdef SYS_DARWIN #define vcii(a,b,c,d) (const vector float)(FLOAT_ ## a, FLOAT_ ## b, FLOAT_ ## c, FLOAT_ ## d) +#else +#define vcii(a,b,c,d) (const vector float){FLOAT_ ## a, FLOAT_ ## b, FLOAT_ ## c, FLOAT_ ## d} +#endif + +#ifdef SYS_DARWIN +#define FOUROF(a) (a) +#else +#define FOUROF(a) {a,a,a,a} +#endif + void imdct_do_512_altivec(sample_t data[],sample_t delay[], sample_t bias) @@ -601,7 +620,7 @@ int p = k + i; int q = p + two_m; vector float vecp, vecq, vecw, temp1, temp2, temp3, temp4; - const vector float vczero = (const vector float)(0); + const vector float vczero = (const vector float)FOUROF(0.); // first compute buf[q] and buf[q+1] vecq = vec_ld(q << 3, (float*)buf); vecw = vec_ld(0, (float*)&(w[m][k])); @@ -658,7 +677,7 @@ #else vector float bufv_0, bufv_2, cosv, sinv, temp1, temp2; vector float temp0022, temp1133, tempCS01; - const vector float vczero = (const vector float)(0); + const vector float vczero = (const vector float)FOUROF(0.); bufv_0 = vec_ld((i + 0) << 3, (float*)buf); bufv_2 = vec_ld((i + 2) << 3, (float*)buf);
--- a/mp3lib/Makefile Mon Jan 27 20:46:45 2003 +0000 +++ b/mp3lib/Makefile Mon Jan 27 21:47:25 2003 +0000 @@ -26,7 +26,11 @@ ifeq ($(TARGET_ALTIVEC),yes) SRCS += dct64_altivec.c OBJS += dct64_altivec.o +ifeq ($(TARGET_OS),Darwin) CFLAGS += -faltivec +else +CFLAGS += -maltivec -mabi=altivec +endif endif endif
--- a/mp3lib/dct64_altivec.c Mon Jan 27 20:46:45 2003 +0000 +++ b/mp3lib/dct64_altivec.c Mon Jan 27 21:47:25 2003 +0000 @@ -13,6 +13,10 @@ #ifdef HAVE_ALTIVEC +#ifndef SYS_DARWIN +#include <altivec.h> +#endif + // used to build registers permutation vectors (vcprm) // the 's' are for words in the _s_econd vector #define WORD_0 0x00,0x01,0x02,0x03 @@ -24,7 +28,11 @@ #define WORD_s2 0x18,0x19,0x1a,0x1b #define WORD_s3 0x1c,0x1d,0x1e,0x1f +#ifdef SYS_DARWIN #define vcprm(a,b,c,d) (const vector unsigned char)(WORD_ ## a, WORD_ ## b, WORD_ ## c, WORD_ ## d) +#else +#define vcprm(a,b,c,d) (const vector unsigned char){WORD_ ## a, WORD_ ## b, WORD_ ## c, WORD_ ## d} +#endif // vcprmle is used to keep the same index as in the SSE version. // it's the same as vcprm, with the index inversed @@ -36,7 +44,17 @@ #define FLOAT_n -1. #define FLOAT_p 1. +#ifdef SYS_DARWIN #define vcii(a,b,c,d) (const vector float)(FLOAT_ ## a, FLOAT_ ## b, FLOAT_ ## c, FLOAT_ ## d) +#else +#define vcii(a,b,c,d) (const vector float){FLOAT_ ## a, FLOAT_ ## b, FLOAT_ ## c, FLOAT_ ## d} +#endif + +#ifdef SYS_DARWIN +#define FOUROF(a) (a) +#else +#define FOUROF(a) {a,a,a,a} +#endif void dct64_altivec(real *a,real *b,real *c) { @@ -47,7 +65,7 @@ real *out1 = b; real *samples = c; - const vector float vczero = (const vector float)(0.); + const vector float vczero = (const vector float)FOUROF(0.); const vector unsigned char reverse = (const vector unsigned char)vcprm(3,2,1,0); @@ -521,5 +539,5 @@ out1[0x10*15] = b1[0x1F]; } -#endif HAVE_ALTIVEC +#endif /* HAVE_ALTIVEC */