From b0778be81f3fc6427224e84e730dcf5d51bbecfb Mon Sep 17 00:00:00 2001 From: kent Date: Sun, 23 Jun 2002 08:45:09 +0000 Subject: Integrate ARM 64bit fixedpoint patch submitted by Tim Deegan in pkg/16479. This feature is enabled by MPG123_ARM_FIXED64. mpg123/Makefile.common contains common stuff of mpg123 and mpg123-esound. --- audio/mpg123/patches/patch-aa | 44 ++++++++++++++++------ audio/mpg123/patches/patch-aj | 86 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 115 insertions(+), 15 deletions(-) (limited to 'audio/mpg123/patches') diff --git a/audio/mpg123/patches/patch-aa b/audio/mpg123/patches/patch-aa index 0b3523482a3..558a3765590 100644 --- a/audio/mpg123/patches/patch-aa +++ b/audio/mpg123/patches/patch-aa @@ -1,24 +1,26 @@ -$NetBSD: patch-aa,v 1.20 2002/06/22 19:03:11 kent Exp $ +$NetBSD: patch-aa,v 1.21 2002/06/23 08:45:09 kent Exp $ ---- Makefile.orig Sun Jun 23 03:50:48 2002 +--- Makefile.orig Sun Jun 23 16:56:17 2002 +++ Makefile -@@ -54,6 +54,15 @@ +@@ -54,6 +54,17 @@ @echo "make aix-tk3play IBM AIX" @echo "make os2 IBM OS/2" @echo "make netbsd NetBSD" -+ @echo "make netbsd-arm NetBSD for strongarm" ++ @echo "make netbsd-arm NetBSD for strongarm (32bit fixedpoint)" ++ @echo "make netbsd-arm-64 NetBSD for strongarm (64bit fixedpoint)" + @echo "make netbsd-i386 NetBSD optimized for i386" + @echo "make netbsd-i386-elf NetBSD optimized for i386, ELF format" + @echo "make netbsd-m68k NetBSD optimized for m68k" + @echo "make netbsd-esd NetBSD with EsounD" -+ @echo "make netbsd-arm-esd NetBSD for strongarm with EsounD" ++ @echo "make netbsd-arm-esd NetBSD for strongarm (32bit fixedpoint) with EsounD" ++ @echo "make netbsd-arm-64-esd NetBSD for strongarm (64bit fixedpoint) with EsounD" + @echo "make netbsd-i386-esd NetBSD optimized for i386 with EsounD" + @echo "make netbsd-i386-elf-esd NetBSD optimized for i386, ELF format with EsounD" -+ @echo "make netbsd-m68k-esd NetBSD optimized for m68k with EsounD" ++ @echo "make netbsd-m68k-esd NetBSD optimized for m68k with EsounD" @echo "make bsdos BSDI BSD/OS" @echo "make bsdos4 BSDI BSD/OS 4.0" @echo "make bsdos-nas BSDI BSD/OS with NAS support" -@@ -496,18 +505,100 @@ +@@ -496,18 +507,120 @@ netbsd: $(MAKE) CC=cc LDFLAGS= \ @@ -46,8 +48,7 @@ $NetBSD: patch-aa,v 1.20 2002/06/22 19:03:11 kent Exp $ + OBJECTS='decode_i386.o dct64_i386.o decode_i586.o \ + audio_sun.o term.o' \ + CFLAGS='$(CFLAGS) -Wall -ansi -pedantic -O4 -fomit-frame-pointer \ - -funroll-all-loops -ffast-math -DROT_I386 \ -- -DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DNETBSD' \ ++ -funroll-all-loops -ffast-math -DROT_I386 \ + -DI386_ASSEM -DPENTIUM_OPT -DREAL_IS_FLOAT -DUSE_MMAP \ + -DREAD_MMAP -DNETBSD -DTERM_CONTROL' \ + mpg123-make @@ -70,6 +71,16 @@ $NetBSD: patch-aa,v 1.20 2002/06/22 19:03:11 kent Exp $ + -DNETBSD' \ + mpg123-make + ++netbsd-arm-64: ++ $(MAKE) CC=cc LDFLAGS= \ ++ OBJECTS='decode.o dct64.o audio_sun.o term.o' \ ++ CFLAGS='$(CFLAGS) -Wall -O6 -fomit-frame-pointer \ ++ -funroll-all-loops -finline-functions -ffast-math \ ++ -march=armv4 -mtune=strongarm110 -mcpu=strongarm110 \ ++ -DREAL_IS_FIXED_ARMV4 -DUSE_MMAP -DREAD_MMAP \ ++ -DTERM_CONTROL -DNETBSD' \ ++ mpg123-make ++ +netbsd-esd: + $(MAKE) CC=cc LDFLAGS= \ + AUDIO_LIB="`$(ESD_CONFIG) --libs`" \ @@ -91,13 +102,13 @@ $NetBSD: patch-aa,v 1.20 2002/06/22 19:03:11 kent Exp $ + mpg123-make + +netbsd-i386-elf-esd: -+ echo GETBITS: $(GETBITS) + $(MAKE) CC=cc LDFLAGS= \ + AUDIO_LIB="`$(ESD_CONFIG) --libs`" \ + OBJECTS='decode_i386.o dct64_i386.o decode_i586.o \ + audio_esd.o term.o' \ + CFLAGS='$(CFLAGS) -Wall -ansi -pedantic -O4 -fomit-frame-pointer \ -+ -funroll-all-loops -ffast-math -DROT_I386 \ + -funroll-all-loops -ffast-math -DROT_I386 \ +- -DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DNETBSD' \ + -DI386_ASSEM -DPENTIUM_OPT -DREAL_IS_FLOAT -DUSE_MMAP \ + -DREAD_MMAP -DNETBSD -DTERM_CONTROL \ + `$(ESD_CONFIG) --cflags`' \ @@ -122,6 +133,17 @@ $NetBSD: patch-aa,v 1.20 2002/06/22 19:03:11 kent Exp $ + -march=armv4 -mtune=strongarm -mcpu=strongarm \ + -DREAL_IS_FIXED -DUSE_MMAP -DREAD_MMAP -DTERM_CONTROL \ + -DNETBSD `$(ESD_CONFIG) --cflags`' \ ++ mpg123-make ++ ++netbsd-arm-64-esd: ++ $(MAKE) CC=cc LDFLAGS= \ ++ AUDIO_LIB="`$(ESD_CONFIG) --libs`" \ ++ OBJECTS='decode.o dct64.o audio_esd.o term.o' \ ++ CFLAGS='$(CFLAGS) -Wall -O6 -fomit-frame-pointer \ ++ -funroll-all-loops -finline-functions -ffast-math \ ++ -march=armv4 -mtune=strongarm110 -mcpu=strongarm110 \ ++ -DREAL_IS_FIXED_ARMV4 -DUSE_MMAP -DREAD_MMAP \ ++ -DTERM_CONTROL -DNETBSD `$(ESD_CONFIG) --cflags`' \ mpg123-make bsdos: diff --git a/audio/mpg123/patches/patch-aj b/audio/mpg123/patches/patch-aj index 58a38bbefbb..15eb00dd41c 100644 --- a/audio/mpg123/patches/patch-aj +++ b/audio/mpg123/patches/patch-aj @@ -1,8 +1,8 @@ -$NetBSD: patch-aj,v 1.1 1999/10/12 04:43:15 simonb Exp $ +$NetBSD: patch-aj,v 1.2 2002/06/23 08:45:09 kent Exp $ ---- mpg123.h.orig Sat May 29 00:51:58 1999 -+++ mpg123.h Tue Oct 12 01:17:16 1999 -@@ -56,8 +56,37 @@ +--- mpg123.h.orig Fri May 28 23:51:58 1999 ++++ mpg123.h +@@ -56,8 +56,115 @@ # define real float #elif defined(REAL_IS_LONG_DOUBLE) # define real long double @@ -18,6 +18,84 @@ $NetBSD: patch-aj,v 1.1 1999/10/12 04:43:15 simonb Exp $ +# define DOUBLE_TO_REAL(x) ((int)((x) * REAL_FACTOR)) +# define REAL_TO_SHORT(x) ((x) >> REAL_RADIX) +# define REAL_MUL(x, y) (((long long)(x) * (long long)(y)) >> REAL_RADIX) ++ ++#elif defined(REAL_IS_FIXED_ARMV4) ++# define REAL_IS_FIXED ++# define real long long ++ ++# define REAL_RADIX 32 ++# define REAL_FACTOR (4294967296.0) ++ ++# define REAL_PLUS_32767 ( 32767LL << REAL_RADIX ) ++# define REAL_MINUS_32768 ( -32768LL << REAL_RADIX ) ++ ++# define DOUBLE_TO_REAL(x) ((long long)((x) * REAL_FACTOR)) ++# define REAL_TO_SHORT(x) ((x) >> REAL_RADIX) ++ ++/* ++ * "Reals" are signed, 15 bits before the point, 32 bits after. ++ * Multiplication is done like so: ++ * ++ * if |x| < 2^8, shift x >> 7, else shift x >>15 ++ * if |y| < 2^8, shift y >> 7, else shift y >>15 ++ * multiply x * y (just avoids clipping MSB) ++ * shift the result >> 2, 10 or 18 bits, to make a total shift of 32 bits ++ * ++ * I'd do it in C, but gcc optimises it rather poorly (2K stack ++ * frames, anyone?). Hence the bit of (ARMv4) asm magic below. ++ * (Unfortunately, the CLZ opcode, which would make for a much neater ++ * solution to this, doesn't appear until ARMv5) ++ * ++ * (tjd April 2002) ++ */ ++ ++# define REAL_MUL(x, y) real_mul((x),(y)) ++ ++static __inline__ long long real_mul(long long x, long long y) { ++ const register long long _x asm("r0") = (x); ++ const register long long _y asm("r2") = (y); ++ register long long rv asm("r0"); ++ __asm__ __volatile__ ( ++"@ we'll need to shift the result at least >> 2\n" ++" mov r4, #2\n" ++"@ both args >> 7,\n" ++" mov r0, r0, lsr #7\n" ++" mov r2, r2, lsr #7\n" ++" orr r0, r0, r1, lsl #25\n" ++" orr r2, r2, r3, lsl #25\n" ++" mov r1, r1, asr #7\n" ++" mov r3, r3, asr #7\n" ++"@ check if x needs further shiftage\n" ++" cmp r1, #0\n" ++" cmnne r1, #1\n" ++" addeq r4, r4, #8\n" ++"@ shift x if needed\n" ++" movne r0, r0, lsr #8\n" ++" orrne r0, r0, r1, lsl #24\n" ++" movne r1, r1, asr #8\n" ++"@ check if y needs further shiftage\n" ++" cmp r3, #0\n" ++" cmnne r3, #1\n" ++" addeq r4, r4, #8\n" ++"@ shift y if needed\n" ++" movne r2, r2, lsr #8\n" ++" orrne r2, r2, r3, lsl #24\n" ++" movne r3, r3, asr #8\n" ++"@ multiply (ignoring overflow)\n" ++" mul r3, r0, r3\n" ++" mla r3, r1, r2, r3\n" ++" umull r0, r1, r2, r0\n" ++" add r1, r1, r3\n" ++"@ shift the result the appropriate amount\n" ++" rsb r3, r4, #32\n" ++" mov r0, r0, lsr r4\n" ++" orr r0, r0, r1, lsl r3\n" ++" mov r1, r1, asr r4\n" ++ : "=r" (rv) ++ : "0" (_x), "r" (_y) ++ : "r1", "r3", "r4", "cc"); ++ return rv; ++} + #else # define real double -- cgit v1.2.3