forked from len0rd/rockbox
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
This commit is contained in:
parent
9ab57e510e
commit
6805448195
9 changed files with 78 additions and 66 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue