1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

Fix compilation on ARM with android gcc 4.7

With the current code it fails due to running out
of registers.
So code the store offsets manually into the assembler
instead.
Passes "make fate-dts".

Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
This commit is contained in:
Reimar Döffinger 2013-03-16 13:36:20 +01:00
parent 920dd84bf1
commit 8067f55edf

View File

@ -34,46 +34,44 @@ static inline int decode_blockcodes(int code1, int code2, int levels,
{ {
int v0, v1, v2, v3, v4, v5; int v0, v1, v2, v3, v4, v5;
__asm__ ("smmul %8, %14, %18 \n" __asm__ ("smmul %0, %6, %10 \n"
"smmul %11, %15, %18 \n" "smmul %3, %7, %10 \n"
"smlabb %14, %8, %17, %14 \n" "smlabb %6, %0, %9, %6 \n"
"smlabb %15, %11, %17, %15 \n" "smlabb %7, %3, %9, %7 \n"
"smmul %9, %8, %18 \n" "smmul %1, %0, %10 \n"
"smmul %12, %11, %18 \n" "smmul %4, %3, %10 \n"
"sub %14, %14, %16, lsr #1 \n" "sub %6, %6, %8, lsr #1 \n"
"sub %15, %15, %16, lsr #1 \n" "sub %7, %7, %8, lsr #1 \n"
"smlabb %8, %9, %17, %8 \n" "smlabb %0, %1, %9, %0 \n"
"smlabb %11, %12, %17, %11 \n" "smlabb %3, %4, %9, %3 \n"
"smmul %10, %9, %18 \n" "smmul %2, %1, %10 \n"
"smmul %13, %12, %18 \n" "smmul %5, %4, %10 \n"
"str %14, %0 \n" "str %6, [%11, #0] \n"
"str %15, %4 \n" "str %7, [%11, #16] \n"
"sub %8, %8, %16, lsr #1 \n" "sub %0, %0, %8, lsr #1 \n"
"sub %11, %11, %16, lsr #1 \n" "sub %3, %3, %8, lsr #1 \n"
"smlabb %9, %10, %17, %9 \n" "smlabb %1, %2, %9, %1 \n"
"smlabb %12, %13, %17, %12 \n" "smlabb %4, %5, %9, %4 \n"
"smmul %14, %10, %18 \n" "smmul %6, %2, %10 \n"
"smmul %15, %13, %18 \n" "smmul %7, %5, %10 \n"
"str %8, %1 \n" "str %0, [%11, #4] \n"
"str %11, %5 \n" "str %3, [%11, #20] \n"
"sub %9, %9, %16, lsr #1 \n" "sub %1, %1, %8, lsr #1 \n"
"sub %12, %12, %16, lsr #1 \n" "sub %4, %4, %8, lsr #1 \n"
"smlabb %10, %14, %17, %10 \n" "smlabb %2, %6, %9, %2 \n"
"smlabb %13, %15, %17, %13 \n" "smlabb %5, %7, %9, %5 \n"
"str %9, %2 \n" "str %1, [%11, #8] \n"
"str %12, %6 \n" "str %4, [%11, #24] \n"
"sub %10, %10, %16, lsr #1 \n" "sub %2, %2, %8, lsr #1 \n"
"sub %13, %13, %16, lsr #1 \n" "sub %5, %5, %8, lsr #1 \n"
"str %10, %3 \n" "str %2, [%11, #12] \n"
"str %13, %7 \n" "str %5, [%11, #28] \n"
: "=m"(values[0]), "=m"(values[1]), : "=&r"(v0), "=&r"(v1), "=&r"(v2),
"=m"(values[2]), "=m"(values[3]),
"=m"(values[4]), "=m"(values[5]),
"=m"(values[6]), "=m"(values[7]),
"=&r"(v0), "=&r"(v1), "=&r"(v2),
"=&r"(v3), "=&r"(v4), "=&r"(v5), "=&r"(v3), "=&r"(v4), "=&r"(v5),
"+&r"(code1), "+&r"(code2) "+&r"(code1), "+&r"(code2)
: "r"(levels - 1), "r"(-levels), "r"(ff_inverse[levels])); : "r"(levels - 1), "r"(-levels),
"r"(ff_inverse[levels]), "r"(values)
: "memory");
return code1 | code2; return code1 | code2;
} }