FS #8179. Small Musepack speedup for ARM.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15692 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Thom Johansen 2007-11-19 16:31:10 +00:00
parent 0fc7fb3686
commit 3947b0c632

View file

@ -448,50 +448,45 @@ mpc_decoder_windowing_D(MPC_SAMPLE_FORMAT * Data, const MPC_SAMPLE_FORMAT * V)
// 32=32x32-multiply assembler for ARM // 32=32x32-multiply assembler for ARM
for ( k = 0; k < 32; k++, V++ ) for ( k = 0; k < 32; k++, V++ )
{ {
asm volatile ( asm volatile (
"ldmia %[D]!, { r0-r3 } \n\t" "ldmia %[D]!, { r0-r7 } \n\t"
"ldr r4, [%[V]] \n\t" "ldr r8, [%[V]] \n\t"
"mul r5, r0, r4 \n\t" "mul r9, r0, r8 \n\t"
"ldr r4, [%[V], #96*4] \n\t" "ldr r8, [%[V], #96*4] \n\t"
"mla r5, r1, r4, r5 \n\t" "mla r9, r1, r8, r9 \n\t"
"ldr r4, [%[V], #128*4] \n\t" "ldr r8, [%[V], #128*4] \n\t"
"mla r5, r2, r4, r5 \n\t" "mla r9, r2, r8, r9 \n\t"
"ldr r4, [%[V], #224*4] \n\t" "ldr r8, [%[V], #224*4] \n\t"
"mla r5, r3, r4, r5 \n\t" "mla r9, r3, r8, r9 \n\t"
"ldr r8, [%[V], #256*4] \n\t"
"ldmia %[D]!, { r0-r3 } \n\t" "mla r9, r4, r8, r9 \n\t"
"ldr r4, [%[V], #256*4] \n\t" "ldr r8, [%[V], #352*4] \n\t"
"mla r5, r0, r4, r5 \n\t" "mla r9, r5, r8, r9 \n\t"
"ldr r4, [%[V], #352*4] \n\t" "ldr r8, [%[V], #384*4] \n\t"
"mla r5, r1, r4, r5 \n\t" "mla r9, r6, r8, r9 \n\t"
"ldr r4, [%[V], #384*4] \n\t" "ldr r8, [%[V], #480*4] \n\t"
"mla r5, r2, r4, r5 \n\t" "mla r9, r7, r8, r9 \n\t"
"ldr r4, [%[V], #480*4] \n\t" "ldmia %[D]!, { r0-r7 } \n\t"
"mla r5, r3, r4, r5 \n\t" "ldr r8, [%[V], #512*4] \n\t"
"mla r9, r0, r8, r9 \n\t"
"ldmia %[D]!, { r0-r3 } \n\t" "ldr r8, [%[V], #608*4] \n\t"
"ldr r4, [%[V], #512*4] \n\t" "mla r9, r1, r8, r9 \n\t"
"mla r5, r0, r4, r5 \n\t" "ldr r8, [%[V], #640*4] \n\t"
"ldr r4, [%[V], #608*4] \n\t" "mla r9, r2, r8, r9 \n\t"
"mla r5, r1, r4, r5 \n\t" "ldr r8, [%[V], #736*4] \n\t"
"ldr r4, [%[V], #640*4] \n\t" "mla r9, r3, r8, r9 \n\t"
"mla r5, r2, r4, r5 \n\t" "ldr r8, [%[V], #768*4] \n\t"
"ldr r4, [%[V], #736*4] \n\t" "mla r9, r4, r8, r9 \n\t"
"mla r5, r3, r4, r5 \n\t" "ldr r8, [%[V], #864*4] \n\t"
"mla r9, r5, r8, r9 \n\t"
"ldmia %[D]!, { r0-r3 } \n\t" "ldr r8, [%[V], #896*4] \n\t"
"ldr r4, [%[V], #768*4] \n\t" "mla r9, r6, r8, r9 \n\t"
"mla r5, r0, r4, r5 \n\t" "ldr r8, [%[V], #992*4] \n\t"
"ldr r4, [%[V], #864*4] \n\t" "mla r9, r7, r8, r9 \n\t"
"mla r5, r1, r4, r5 \n\t" "str r9, [%[Data]], #4 \n"
"ldr r4, [%[V], #896*4] \n\t"
"mla r5, r2, r4, r5 \n\t"
"ldr r4, [%[V], #992*4] \n\t"
"mla r5, r3, r4, r5 \n\t"
"str r5, [%[Data]], #4 \n"
: [Data] "+r" (Data), [D] "+r" (D) : [Data] "+r" (Data), [D] "+r" (D)
: [V] "r" (V) : [V] "r" (V)
: "r0", "r1", "r2", "r3", "r4", "r5"); : "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9");
} }
#else #else
// 32=32x32-multiply (FIXED_POINT) // 32=32x32-multiply (FIXED_POINT)