summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Chapman <dave@dchapman.com>2007-07-29 16:40:11 +0000
committerDave Chapman <dave@dchapman.com>2007-07-29 16:40:11 +0000
commitf52c17851738b201ebafa45a055b748e9db12f4a (patch)
tree68dc83b03e460d0143cd17aac78f0f04d00b746d
parent3d45dfb4bdb9c6cb75d1d25f012e9b2179a1f11b (diff)
downloadrockbox-f52c17851738b201ebafa45a055b748e9db12f4a.tar.gz
rockbox-f52c17851738b201ebafa45a055b748e9db12f4a.zip
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
-rw-r--r--apps/codecs/libmad/dct32_arm.S10
-rw-r--r--apps/codecs/libmad/global.h6
-rw-r--r--apps/codecs/libmad/mad_iram.h52
-rw-r--r--apps/codecs/libmad/synth.c6
-rw-r--r--apps/codecs/libmad/synth_full_arm.S12
5 files changed, 60 insertions, 26 deletions
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 @@
17 * 17 *
18 ****************************************************************************/ 18 ****************************************************************************/
19 19
20#include "config.h" 20#include "mad_iram.h"
21 21
22 .global dct32 22 .global dct32
23 23
24/* This performs slower in IRAM on PP502x and there is no space in 24 .section ICODE_SECTION_MPA_ARM,"ax",%progbits
25 mpegplayer on the PP5002 */
26#if defined(CPU_PP502x) || (CONFIG_CPU == PP5002 && defined(MPEGPLAYER)) || defined(TOSHIBA_GIGABEAT_F)
27 .section .text,"ax",%progbits
28#else
29 .section .icode,"ax",%progbits
30#endif
31 25
32dct32: 26dct32:
33 stmdb r13!, {r4, r5, r6, r7, r8, r9, r10, r11, r12, lr} 27 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 @@
24# ifndef LIBMAD_GLOBAL_H 24# ifndef LIBMAD_GLOBAL_H
25# define LIBMAD_GLOBAL_H 25# define LIBMAD_GLOBAL_H
26 26
27#include "mad_iram.h"
28
27#if defined(CPU_COLDFIRE) 29#if defined(CPU_COLDFIRE)
28#define FPM_COLDFIRE_EMAC 30#define FPM_COLDFIRE_EMAC
29#elif defined(CPU_ARM) 31#elif defined(CPU_ARM)
@@ -66,8 +68,4 @@
66# endif 68# endif
67# endif 69# endif
68 70
69#ifndef ICONST_ATTR_MPA_HUFFMAN
70#define ICONST_ATTR_MPA_HUFFMAN ICONST_ATTR
71#endif
72
73# endif 71# 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 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2007 Dave Chapman
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20/* Define how IRAM is used on the various targets. Note that this
21 file is included by both .c and .S files so must not contain any C
22 code.
23*/
24
25#ifndef _LIBMAD_IRAM_H
26#define _LIBMAD_IRAM_H
27
28#include "config.h"
29
30/* Code performs slower in IRAM on PP502x and there is no space in
31 mpegplayer on the PP5002. S3C2440 doesn't have any IRAM available for
32 codecs */
33#if defined(CPU_PP502x) || (CONFIG_CPU == PP5002 && defined(MPEGPLAYER)) || \
34 (CONFIG_CPU==S3C2440)
35#define ICODE_SECTION_MPA_ARM .text
36#define ICODE_ATTR_MPA_SYNTH
37#else
38#define ICODE_SECTION_MPA_ARM .icode
39#define ICODE_ATTR_MPA_SYNTH ICODE_ATTR
40#endif
41
42#if CONFIG_CPU == S3C2440
43#define IBSS_SECTION_MPA_ARM .bss
44#else
45#define IBSS_SECTION_MPA_ARM .ibss
46#endif
47
48#ifndef ICONST_ATTR_MPA_HUFFMAN
49#define ICONST_ATTR_MPA_HUFFMAN ICONST_ATTR
50#endif
51
52#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],
1042 mad_fixed_t const (*D0ptr)[32], 1042 mad_fixed_t const (*D0ptr)[32],
1043 mad_fixed_t const (*D1ptr)[32]); 1043 mad_fixed_t const (*D1ptr)[32]);
1044 1044
1045/* This performs slower in IRAM on PP502x and there is no space in
1046 mpegplayer on the PP5002 */
1047#if !defined(CPU_PP502x) && !(CONFIG_CPU == PP5002 && defined(MPEGPLAYER)) && !defined(TOSHIBA_GIGABEAT_F)
1048static 1045static
1049void synth_full(struct mad_synth *synth, struct mad_frame const *frame, 1046void synth_full(struct mad_synth *synth, struct mad_frame const *frame,
1050 unsigned int nch, unsigned int ns) ICODE_ATTR; 1047 unsigned int nch, unsigned int ns) ICODE_ATTR_MPA_SYNTH;
1051#endif
1052static 1048static
1053void synth_full(struct mad_synth *synth, struct mad_frame const *frame, 1049void synth_full(struct mad_synth *synth, struct mad_frame const *frame,
1054 unsigned int nch, unsigned int ns) 1050 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 @@
17 * 17 *
18 ****************************************************************************/ 18 ****************************************************************************/
19 19
20#include "config.h" 20#include "mad_iram.h"
21 21
22/* This performs slower in IRAM on PP502x and there is no space in 22 .section ICODE_SECTION_MPA_ARM,"ax",%progbits
23 mpegplayer on the PP5002 */
24#if defined(CPU_PP502x) || (CONFIG_CPU == PP5002 && defined(MPEGPLAYER)) || defined(TOSHIBA_GIGABEAT_F)
25 .section .text,"ax",%progbits
26#else
27 .section .icode,"ax",%progbits
28#endif
29 23
30 .global synth_full1 24 .global synth_full1
31 .global synth_full2 25 .global synth_full2
@@ -338,6 +332,6 @@ III_overlap:
338 stmia r1!, {r4, r5, r6, r7, r8, lr} 332 stmia r1!, {r4, r5, r6, r7, r8, lr}
339 ldmia sp!, {r4, r5, r6, r7, r8, pc} 333 ldmia sp!, {r4, r5, r6, r7, r8, pc}
340 334
341 .section .ibss,"aw",%nobits 335 .section IBSS_SECTION_MPA_ARM,"aw",%nobits
342synth_full_sp: 336synth_full_sp:
343 .space 4 337 .space 4