From 68054481958397a2ef348cbb19333b5c188adec9 Mon Sep 17 00:00:00 2001 From: Andree Buschmann Date: Sat, 29 May 2010 15:00:10 +0000 Subject: Correction to clobber lists of several codec's inline assembly. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26376 a1c6a512-1295-4272-9138-f99709370657 --- apps/codecs/demac/libdemac/vector_math16_armv5te.h | 6 +- apps/codecs/demac/libdemac/vector_math16_armv6.h | 6 +- apps/codecs/demac/libdemac/vector_math32_armv4.h | 6 +- apps/codecs/libmad/synth.c | 88 +++++++++++----------- apps/codecs/libspc/spc_dsp.c | 26 ++++--- apps/codecs/libspeex/filters_arm4.h | 2 +- apps/codecs/libspeex/ltp_arm4.h | 2 +- apps/codecs/libspeex/vq_arm4.h | 2 +- apps/codecs/libtremor/mapping0.c | 6 +- 9 files changed, 78 insertions(+), 66 deletions(-) (limited to 'apps') diff --git a/apps/codecs/demac/libdemac/vector_math16_armv5te.h b/apps/codecs/demac/libdemac/vector_math16_armv5te.h index 0a3679ce63..ae7427c137 100644 --- a/apps/codecs/demac/libdemac/vector_math16_armv5te.h +++ b/apps/codecs/demac/libdemac/vector_math16_armv5te.h @@ -168,7 +168,7 @@ static inline int32_t vector_sp_add(int16_t* v1, int16_t* f2, int16_t* s2) [res]"=r"(res) : /* inputs */ : /* clobbers */ - "r0", "r1", "r2", "r3", "r4", "r5", "memory" + "r0", "r1", "r2", "r3", "r4", "r5", "cc", "memory" ); return res; } @@ -310,7 +310,7 @@ static inline int32_t vector_sp_sub(int16_t* v1, int16_t* f2, int16_t* s2) [res]"=r"(res) : /* inputs */ : /* clobbers */ - "r0", "r1", "r2", "r3", "r4", "r5", "r6", "memory" + "r0", "r1", "r2", "r3", "r4", "r5", "r6", "cc", "memory" ); return res; } @@ -398,7 +398,7 @@ static inline int32_t scalarproduct(int16_t* v1, int16_t* v2) [res]"=r"(res) : /* inputs */ : /* clobbers */ - "r0", "r1", "r2", "r3" + "r0", "r1", "r2", "r3", "cc", "memory" ); return res; } diff --git a/apps/codecs/demac/libdemac/vector_math16_armv6.h b/apps/codecs/demac/libdemac/vector_math16_armv6.h index 2ce62728cb..8d27331b62 100644 --- a/apps/codecs/demac/libdemac/vector_math16_armv6.h +++ b/apps/codecs/demac/libdemac/vector_math16_armv6.h @@ -196,7 +196,7 @@ static inline int32_t vector_sp_add(int16_t* v1, int16_t* f2, int16_t* s2) : /* inputs */ : /* clobbers */ "r0", "r1", "r2", "r3", "r4", - "r5", "r6", "r7", "memory" + "r5", "r6", "r7", "cc", "memory" ); return res; } @@ -365,7 +365,7 @@ static inline int32_t vector_sp_sub(int16_t* v1, int16_t* f2, int16_t* s2) : /* inputs */ : /* clobbers */ "r0", "r1", "r2", "r3", "r4", - "r5", "r6", "r7", "memory" + "r5", "r6", "r7", "cc", "memory" ); return res; } @@ -484,7 +484,7 @@ static inline int32_t scalarproduct(int16_t* v1, int16_t* v2) : /* inputs */ : /* clobbers */ "r0", "r1", "r2", "r3", - "r4", "r5", "r6", "r7" + "r4", "r5", "r6", "r7", "cc", "memory" ); return res; } diff --git a/apps/codecs/demac/libdemac/vector_math32_armv4.h b/apps/codecs/demac/libdemac/vector_math32_armv4.h index cb5fe9e0ee..d6bb9b0d9c 100644 --- a/apps/codecs/demac/libdemac/vector_math32_armv4.h +++ b/apps/codecs/demac/libdemac/vector_math32_armv4.h @@ -89,7 +89,7 @@ static inline int32_t vector_sp_add(int32_t* v1, int32_t* f2, int32_t* s2) : /* inputs */ : /* clobbers */ "r0", "r1", "r2", "r3", "r4", - "r5", "r6", "r7", "memory" + "r5", "r6", "r7", "cc", "memory" ); return res; } @@ -149,7 +149,7 @@ static inline int32_t vector_sp_sub(int32_t* v1, int32_t* f2, int32_t* s2) : /* inputs */ : /* clobbers */ "r0", "r1", "r2", "r3", "r4", - "r5", "r6", "r7", "memory" + "r5", "r6", "r7", "cc", "memory" ); return res; } @@ -195,7 +195,7 @@ static inline int32_t scalarproduct(int32_t* v1, int32_t* v2) : /* inputs */ : /* clobbers */ "r0", "r1", "r2", "r3", - "r4", "r5", "r6", "r7" + "r4", "r5", "r6", "r7", "cc", "memory" ); return res; } diff --git a/apps/codecs/libmad/synth.c b/apps/codecs/libmad/synth.c index 1575d93667..7f1c2e6fc0 100644 --- a/apps/codecs/libmad/synth.c +++ b/apps/codecs/libmad/synth.c @@ -829,55 +829,57 @@ void synth_full(struct mad_synth *synth, struct mad_frame const *frame, #elif defined(FPM_ARM) #define PROD_O(hi, lo, f, ptr) \ - ({ \ - mad_fixed_t *__p = (f); \ - asm("ldmia %2!, {r0, r1, r2, r3}\n\t" \ - "ldr r4, [%3, #0]\n\t" \ - "smull %0, %1, r0, r4\n\t" \ - "ldr r4, [%3, #56]\n\t" \ - "smlal %0, %1, r1, r4\n\t" \ - "ldr r4, [%3, #48]\n\t" \ - "smlal %0, %1, r2, r4\n\t" \ - "ldr r4, [%3, #40]\n\t" \ - "smlal %0, %1, r3, r4\n\t" \ - "ldmia %2, {r0, r1, r2, r3}\n\t" \ - "ldr r4, [%3, #32]\n\t" \ - "smlal %0, %1, r0, r4\n\t" \ - "ldr r4, [%3, #24]\n\t" \ - "smlal %0, %1, r1, r4\n\t" \ - "ldr r4, [%3, #16]\n\t" \ - "smlal %0, %1, r2, r4\n\t" \ - "ldr r4, [%3, #8]\n\t" \ - "smlal %0, %1, r3, r4\n\t" \ + ({ \ + mad_fixed_t *__p = (f); \ + asm volatile ( \ + "ldmia %2!, {r0, r1, r2, r3} \n\t" \ + "ldr r4, [%3, #0] \n\t" \ + "smull %0, %1, r0, r4 \n\t" \ + "ldr r4, [%3, #56] \n\t" \ + "smlal %0, %1, r1, r4 \n\t" \ + "ldr r4, [%3, #48] \n\t" \ + "smlal %0, %1, r2, r4 \n\t" \ + "ldr r4, [%3, #40] \n\t" \ + "smlal %0, %1, r3, r4 \n\t" \ + "ldmia %2, {r0, r1, r2, r3} \n\t" \ + "ldr r4, [%3, #32] \n\t" \ + "smlal %0, %1, r0, r4 \n\t" \ + "ldr r4, [%3, #24] \n\t" \ + "smlal %0, %1, r1, r4 \n\t" \ + "ldr r4, [%3, #16] \n\t" \ + "smlal %0, %1, r2, r4 \n\t" \ + "ldr r4, [%3, #8] \n\t" \ + "smlal %0, %1, r3, r4 \n\t" \ : "=&r" (lo), "=&r" (hi), "+r" (__p) \ : "r" (ptr) \ - : "r0", "r1", "r2", "r3", "r4"); \ + : "r0", "r1", "r2", "r3", "r4", "memory"); \ }) #define PROD_A(hi, lo, f, ptr) \ - ({ \ - mad_fixed_t *__p = (f); \ - asm("ldmia %2!, {r0, r1, r2, r3}\n\t" \ - "ldr r4, [%3, #0]\n\t" \ - "smlal %0, %1, r0, r4\n\t" \ - "ldr r4, [%3, #56]\n\t" \ - "smlal %0, %1, r1, r4\n\t" \ - "ldr r4, [%3, #48]\n\t" \ - "smlal %0, %1, r2, r4\n\t" \ - "ldr r4, [%3, #40]\n\t" \ - "smlal %0, %1, r3, r4\n\t" \ - "ldmia %2, {r0, r1, r2, r3}\n\t" \ - "ldr r4, [%3, #32]\n\t" \ - "smlal %0, %1, r0, r4\n\t" \ - "ldr r4, [%3, #24]\n\t" \ - "smlal %0, %1, r1, r4\n\t" \ - "ldr r4, [%3, #16]\n\t" \ - "smlal %0, %1, r2, r4\n\t" \ - "ldr r4, [%3, #8]\n\t" \ - "smlal %0, %1, r3, r4\n\t" \ + ({ \ + mad_fixed_t *__p = (f); \ + asm volatile ( \ + "ldmia %2!, {r0, r1, r2, r3} \n\t" \ + "ldr r4, [%3, #0] \n\t" \ + "smlal %0, %1, r0, r4 \n\t" \ + "ldr r4, [%3, #56] \n\t" \ + "smlal %0, %1, r1, r4 \n\t" \ + "ldr r4, [%3, #48] \n\t" \ + "smlal %0, %1, r2, r4 \n\t" \ + "ldr r4, [%3, #40] \n\t" \ + "smlal %0, %1, r3, r4 \n\t" \ + "ldmia %2, {r0, r1, r2, r3} \n\t" \ + "ldr r4, [%3, #32] \n\t" \ + "smlal %0, %1, r0, r4 \n\t" \ + "ldr r4, [%3, #24] \n\t" \ + "smlal %0, %1, r1, r4 \n\t" \ + "ldr r4, [%3, #16] \n\t" \ + "smlal %0, %1, r2, r4 \n\t" \ + "ldr r4, [%3, #8] \n\t" \ + "smlal %0, %1, r3, r4 \n\t" \ : "+r" (lo), "+r" (hi), "+r" (__p) \ - : "r" (ptr) \ - : "r0", "r1", "r2", "r3", "r4"); \ + : "r" (ptr) \ + : "r0", "r1", "r2", "r3", "r4", "memory"); \ }) void synth_full_odd_sbsample (mad_fixed_t *pcm, diff --git a/apps/codecs/libspc/spc_dsp.c b/apps/codecs/libspc/spc_dsp.c index 0d07e5f04e..a5ad1ff877 100644 --- a/apps/codecs/libspc/spc_dsp.c +++ b/apps/codecs/libspc/spc_dsp.c @@ -840,7 +840,8 @@ void DSP_run_( struct Spc_Dsp* this, long count, int32_t* out_buf ) [_0]"=&r"(amp_0), [_1]"=&r"(amp_1), [_2]"=&r"(_2), [_3]"=&r"(_3) : [fwd]"r"(fwd), [rev]"r"(rev), - [interp]"r"(interp)); + [interp]"r"(interp) + : "memory"); /* Apply voice envelope */ asm volatile ( "mov %[_2], %[out], asr #(11-5) \r\n" /* To do >> 16 later */ @@ -876,7 +877,8 @@ void DSP_run_( struct Spc_Dsp* this, long count, int32_t* out_buf ) [_0]"=&r"(amp_0), [_1]"=&r"(amp_1), [_2]"=&r"(_2), [_3]"=&r"(_3) : [fwd]"r"(fwd), [rev]"r"(rev), - [interp]"r"(interp)); + [interp]"r"(interp) + : "memory"); /* Apply voice envelope */ asm volatile ( "mov %[_2], %[out], asr #11 \r\n" @@ -932,7 +934,8 @@ void DSP_run_( struct Spc_Dsp* this, long count, int32_t* out_buf ) [_0]"=&r"(amp_0), [_1]"=&r"(amp_1), [_2]"=&r"(_2), [_3]"=&r"(_3) : [fwd]"r"(fwd), [rev]"r"(rev), - [interp]"r"(interp)); + [interp]"r"(interp) + : "memory"); asm volatile ( "mov %[out], %[out], asr#12 \r\n" "add %[_0], %[out], %[_0], asr #12 \r\n" @@ -993,7 +996,8 @@ void DSP_run_( struct Spc_Dsp* this, long count, int32_t* out_buf ) [_0]"=&r"(amp_0), [_1]"=&r"(amp_1), [_2]"=&r"(_2), [_3]"=&r"(_3) : [fwd]"r"(fwd), [rev]"r"(rev), - [interp]"r"(interp)); + [interp]"r"(interp) + : "memory"); output = CLAMP16(output); } @@ -1128,7 +1132,9 @@ void DSP_run_( struct Spc_Dsp* this, long count, int32_t* out_buf ) "sub %[y1], %[y1], %[y0] \r\n" "mul %[f], %[y1], %[f] \r\n" "add %[y0], %[y0], %[f], asr #12 \r\n" - : [f]"+r"(f), [y0]"+r"(amp_0), [y1]"=&r"(amp_1)); + : [f]"+r"(f), [y0]"+r"(amp_0), [y1]"=&r"(amp_1) + : + : "memory"); } voice->position += rate; @@ -1347,7 +1353,8 @@ void DSP_run_( struct Spc_Dsp* this, long count, int32_t* out_buf ) /* duplicate at +8 eliminates wrap checking below */ "str %[fb_0], [%[fir_p], #28] \r\n" : [fir_p]"=&r"(fir_ptr), [t_fir_p]"+r"(this->fir_ptr) - : [fb_0]"r"(fb_0), [mask]"i"(~FIR_BUF_MASK)); + : [fb_0]"r"(fb_0), [mask]"i"(~FIR_BUF_MASK) + : "memory"); fir_coeff = (int32_t *)this->fir_coeff; @@ -1377,7 +1384,7 @@ void DSP_run_( struct Spc_Dsp* this, long count, int32_t* out_buf ) : [acc0]"+r"(fb_0), [acc1]"=&r"(fb_1), [_0]"=&r"(_0), [fir_p]"+r"(fir_ptr), [fir_c]"+r"(fir_coeff) : - : "r0", "r1", "r2", "r3", "r4", "r5"); + : "r0", "r1", "r2", "r3", "r4", "r5", "memory"); /* Generate output */ int amp_0, amp_1; @@ -1439,7 +1446,8 @@ void DSP_run_( struct Spc_Dsp* this, long count, int32_t* out_buf ) "str %[fb_0], [%[fir_p], #56] \r\n" "str %[fb_1], [%[fir_p], #60] \r\n" : [fir_p]"=&r"(fir_ptr), [t_fir_p]"+r"(this->fir_ptr) - : [fb_0]"r"(fb_0), [fb_1]"r"(fb_1), [mask]"i"(~FIR_BUF_MASK)); + : [fb_0]"r"(fb_0), [fb_1]"r"(fb_1), [mask]"i"(~FIR_BUF_MASK) + : "memory"); fir_coeff = this->fir_coeff; @@ -1471,7 +1479,7 @@ void DSP_run_( struct Spc_Dsp* this, long count, int32_t* out_buf ) : [fb_0]"+r"(fb_0), [fb_1]"+r"(fb_1), [fir_p]"+r"(fir_ptr), [fir_c]"+r"(fir_coeff) : - : "r0", "r1", "r2", "r3", "r4", "r5"); + : "r0", "r1", "r2", "r3", "r4", "r5", "memory"); /* Generate output */ int amp_0 = (chans_0 * global_vol_0 + fb_0 * this->r.g.echo_volume_0) diff --git a/apps/codecs/libspeex/filters_arm4.h b/apps/codecs/libspeex/filters_arm4.h index bbe4bc93f8..18c2a7d448 100644 --- a/apps/codecs/libspeex/filters_arm4.h +++ b/apps/codecs/libspeex/filters_arm4.h @@ -60,7 +60,7 @@ int normalize16(const spx_sig_t *x, spx_word16_t *y, spx_sig_t max_scale, int le : "=r" (dead1), "=r" (max_val), "=r" (dead3), "=r" (dead4), "=r" (dead5), "=r" (dead6) : "0" (x), "2" (len) - : "cc"); + : "cc", "memory"); sig_shift=0; while (max_val>max_scale) diff --git a/apps/codecs/libspeex/ltp_arm4.h b/apps/codecs/libspeex/ltp_arm4.h index e1c60ad7d5..46ecfa40ec 100644 --- a/apps/codecs/libspeex/ltp_arm4.h +++ b/apps/codecs/libspeex/ltp_arm4.h @@ -79,7 +79,7 @@ spx_word32_t inner_prod(const spx_word16_t *x, const spx_word16_t *y, int len) "=r" (deadlen), "=r" (dead1), "=r" (dead2), "=r" (dead3), "=r" (dead4), "=r" (dead5), "=r" (dead6) : "0" (x), "1" (y), "4" (len>>3) - : "cc" + : "cc", "memory" ); return (sum1+sum2)>>1; } diff --git a/apps/codecs/libspeex/vq_arm4.h b/apps/codecs/libspeex/vq_arm4.h index 585b8613c5..d2697e5784 100644 --- a/apps/codecs/libspeex/vq_arm4.h +++ b/apps/codecs/libspeex/vq_arm4.h @@ -66,7 +66,7 @@ void vq_nbest(spx_word16_t *in, const spx_word16_t *codebook, int len, int entri "=r" (dead1), "=r" (dead2), "=r" (codebook), "=r" (dead4), "=r" (dead5), "=r" (dead6), "=r" (dead7) : "4" (len), "5" (in), "6" (codebook) - : "cc"); + : "cc", "memory"); #else dist1=dist2=dist3=dist4=0; /* spx_word32_t dist1=0; diff --git a/apps/codecs/libtremor/mapping0.c b/apps/codecs/libtremor/mapping0.c index c7e7299ccc..f3bd3401fe 100644 --- a/apps/codecs/libtremor/mapping0.c +++ b/apps/codecs/libtremor/mapping0.c @@ -211,7 +211,8 @@ static inline void channel_couple(ogg_int32_t *pcmM, ogg_int32_t *pcmA, int n) "ldmia %[pcmA], {%[A0], %[A1], %[A2], %[A3]}\n\t" : [M0] "=r" (M0), [M1] "=r" (M1), [M2] "=r" (M2), [M3] "=r" (M3), [A0] "=r" (A0), [A1] "=r" (A1), [A2] "=r" (A2), [A3] "=r" (A3) - : [pcmM] "r" (pcmM), [pcmA] "r" (pcmA) ); + : [pcmM] "r" (pcmM), [pcmA] "r" (pcmA) + : "memory" ); MAGANG( M0, A0 ); MAGANG( M1, A1 ); MAGANG( M2, A2 ); @@ -220,7 +221,8 @@ static inline void channel_couple(ogg_int32_t *pcmM, ogg_int32_t *pcmA, int n) "stmia %[pcmA]!, {%[A0], %[A1], %[A2], %[A3]}\n\t" : [pcmM] "+r" (pcmM), [pcmA] "+r" (pcmA) : [M0] "r" (M0), [M1] "r" (M1), [M2] "r" (M2), [M3] "r" (M3), - [A0] "r" (A0), [A1] "r" (A1), [A2] "r" (A2), [A3] "r" (A3) ); + [A0] "r" (A0), [A1] "r" (A1), [A2] "r" (A2), [A3] "r" (A3) + : "memory" ); } } #else -- cgit v1.2.3