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