From f52c17851738b201ebafa45a055b748e9db12f4a Mon Sep 17 00:00:00 2001 From: Dave Chapman Date: Sun, 29 Jul 2007 16:40:11 +0000 Subject: Revert r14050 (apart from the non-related whitespace changes) and fix the S3C2440 (Gigabeat F/X) problems introduced by my r14041 commit in a slightly different way: Introduce a mad_iram.h file and centralise all IRAM-related decisions in there (similar to how Tremor does it). Now checks for CPU type (S3C2440) instead of target (TOSHIBA_GIGABEAT_F) and there is also a .ibss variable in syth_full_arm.S which shouldn't go in IRAM on S3C2440 targets. Closes FS#7500 git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14057 a1c6a512-1295-4272-9138-f99709370657 --- apps/codecs/libmad/dct32_arm.S | 10 ++----- apps/codecs/libmad/global.h | 6 ++--- apps/codecs/libmad/mad_iram.h | 52 +++++++++++++++++++++++++++++++++++++ apps/codecs/libmad/synth.c | 6 +---- apps/codecs/libmad/synth_full_arm.S | 12 +++------ 5 files changed, 60 insertions(+), 26 deletions(-) create mode 100644 apps/codecs/libmad/mad_iram.h diff --git a/apps/codecs/libmad/dct32_arm.S b/apps/codecs/libmad/dct32_arm.S index 8ead5af899..5a1782a651 100644 --- a/apps/codecs/libmad/dct32_arm.S +++ b/apps/codecs/libmad/dct32_arm.S @@ -17,17 +17,11 @@ * ****************************************************************************/ -#include "config.h" +#include "mad_iram.h" .global dct32 -/* This performs slower in IRAM on PP502x and there is no space in - mpegplayer on the PP5002 */ -#if defined(CPU_PP502x) || (CONFIG_CPU == PP5002 && defined(MPEGPLAYER)) || defined(TOSHIBA_GIGABEAT_F) - .section .text,"ax",%progbits -#else - .section .icode,"ax",%progbits -#endif + .section ICODE_SECTION_MPA_ARM,"ax",%progbits dct32: stmdb r13!, {r4, r5, r6, r7, r8, r9, r10, r11, r12, lr} diff --git a/apps/codecs/libmad/global.h b/apps/codecs/libmad/global.h index 38e4aade35..1dad4d5583 100644 --- a/apps/codecs/libmad/global.h +++ b/apps/codecs/libmad/global.h @@ -24,6 +24,8 @@ # ifndef LIBMAD_GLOBAL_H # define LIBMAD_GLOBAL_H +#include "mad_iram.h" + #if defined(CPU_COLDFIRE) #define FPM_COLDFIRE_EMAC #elif defined(CPU_ARM) @@ -66,8 +68,4 @@ # endif # endif -#ifndef ICONST_ATTR_MPA_HUFFMAN -#define ICONST_ATTR_MPA_HUFFMAN ICONST_ATTR -#endif - # endif diff --git a/apps/codecs/libmad/mad_iram.h b/apps/codecs/libmad/mad_iram.h new file mode 100644 index 0000000000..b4dadd8a23 --- /dev/null +++ b/apps/codecs/libmad/mad_iram.h @@ -0,0 +1,52 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2007 Dave Chapman + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +/* Define how IRAM is used on the various targets. Note that this + file is included by both .c and .S files so must not contain any C + code. +*/ + +#ifndef _LIBMAD_IRAM_H +#define _LIBMAD_IRAM_H + +#include "config.h" + +/* Code performs slower in IRAM on PP502x and there is no space in + mpegplayer on the PP5002. S3C2440 doesn't have any IRAM available for + codecs */ +#if defined(CPU_PP502x) || (CONFIG_CPU == PP5002 && defined(MPEGPLAYER)) || \ + (CONFIG_CPU==S3C2440) +#define ICODE_SECTION_MPA_ARM .text +#define ICODE_ATTR_MPA_SYNTH +#else +#define ICODE_SECTION_MPA_ARM .icode +#define ICODE_ATTR_MPA_SYNTH ICODE_ATTR +#endif + +#if CONFIG_CPU == S3C2440 +#define IBSS_SECTION_MPA_ARM .bss +#else +#define IBSS_SECTION_MPA_ARM .ibss +#endif + +#ifndef ICONST_ATTR_MPA_HUFFMAN +#define ICONST_ATTR_MPA_HUFFMAN ICONST_ATTR +#endif + +#endif /* MAD_IRAM_H */ diff --git a/apps/codecs/libmad/synth.c b/apps/codecs/libmad/synth.c index 00e00ad5ff..6f5d2ec975 100644 --- a/apps/codecs/libmad/synth.c +++ b/apps/codecs/libmad/synth.c @@ -1042,13 +1042,9 @@ void synth_full2(mad_fixed_t *pcm, mad_fixed_t (*fo)[8], mad_fixed_t (*fe)[8], mad_fixed_t const (*D0ptr)[32], mad_fixed_t const (*D1ptr)[32]); -/* This performs slower in IRAM on PP502x and there is no space in - mpegplayer on the PP5002 */ -#if !defined(CPU_PP502x) && !(CONFIG_CPU == PP5002 && defined(MPEGPLAYER)) && !defined(TOSHIBA_GIGABEAT_F) static void synth_full(struct mad_synth *synth, struct mad_frame const *frame, - unsigned int nch, unsigned int ns) ICODE_ATTR; -#endif + unsigned int nch, unsigned int ns) ICODE_ATTR_MPA_SYNTH; static void synth_full(struct mad_synth *synth, struct mad_frame const *frame, unsigned int nch, unsigned int ns) diff --git a/apps/codecs/libmad/synth_full_arm.S b/apps/codecs/libmad/synth_full_arm.S index 3e81f77ec9..47560a4079 100644 --- a/apps/codecs/libmad/synth_full_arm.S +++ b/apps/codecs/libmad/synth_full_arm.S @@ -17,15 +17,9 @@ * ****************************************************************************/ -#include "config.h" +#include "mad_iram.h" -/* This performs slower in IRAM on PP502x and there is no space in - mpegplayer on the PP5002 */ -#if defined(CPU_PP502x) || (CONFIG_CPU == PP5002 && defined(MPEGPLAYER)) || defined(TOSHIBA_GIGABEAT_F) - .section .text,"ax",%progbits -#else - .section .icode,"ax",%progbits -#endif + .section ICODE_SECTION_MPA_ARM,"ax",%progbits .global synth_full1 .global synth_full2 @@ -338,6 +332,6 @@ III_overlap: stmia r1!, {r4, r5, r6, r7, r8, lr} ldmia sp!, {r4, r5, r6, r7, r8, pc} - .section .ibss,"aw",%nobits + .section IBSS_SECTION_MPA_ARM,"aw",%nobits synth_full_sp: .space 4 -- cgit v1.2.3