@ -45,23 +45,18 @@ static int decode_significance_x86(CABACContext *c, int max_coeff,
int minusindex = 4 - ( intptr_t ) index ;
int minusindex = 4 - ( intptr_t ) index ;
int bit ;
int bit ;
x86_reg coeff_count ;
x86_reg coeff_count ;
int low ;
int range ;
__asm__ volatile (
__asm__ volatile (
" movl %a11(%6), %5 \n \t "
" movl %a12(%6), %3 \n \t "
" 2: \n \t "
" 2: \n \t "
BRANCHLESS_GET_CABAC ( " %4 " , " %6 " , " (%1) " , " %3 " ,
BRANCHLESS_GET_CABAC ( " %4 " , " %6 " , " (%1) " , " %3 " ,
" %w3 " , " %5 " , " %k0 " , " %b0 " , " %a13 " )
" %w3 " , " %5 " , " %k0 " , " %b0 " , " %a11 " )
" test $1, %4 \n \t "
" test $1, %4 \n \t "
" jz 3f \n \t "
" jz 3f \n \t "
" add %10, %1 \n \t "
" add %10, %1 \n \t "
BRANCHLESS_GET_CABAC ( " %4 " , " %6 " , " (%1) " , " %3 " ,
BRANCHLESS_GET_CABAC ( " %4 " , " %6 " , " (%1) " , " %3 " ,
" %w3 " , " %5 " , " %k0 " , " %b0 " , " %a13 " )
" %w3 " , " %5 " , " %k0 " , " %b0 " , " %a11 " )
" sub %10, %1 \n \t "
" sub %10, %1 \n \t "
" mov %2, %0 \n \t "
" mov %2, %0 \n \t "
@ -72,8 +67,7 @@ static int decode_significance_x86(CABACContext *c, int max_coeff,
" test $1, %4 \n \t "
" test $1, %4 \n \t "
" jnz 4f \n \t "
" jnz 4f \n \t "
" add $4, %0 \n \t "
" add $4, %2 \n \t "
" mov %0, %2 \n \t "
" 3: \n \t "
" 3: \n \t "
" add $1, %1 \n \t "
" add $1, %1 \n \t "
@ -86,13 +80,9 @@ static int decode_significance_x86(CABACContext *c, int max_coeff,
" 4: \n \t "
" 4: \n \t "
" add %9, %k0 \n \t "
" add %9, %k0 \n \t "
" shr $2, %k0 \n \t "
" shr $2, %k0 \n \t "
" movl %5, %a11(%6) \n \t "
" movl %3, %a12(%6) \n \t "
: " =&q " ( coeff_count ) , " +r " ( significant_coeff_ctx_base ) , " +m " ( index ) ,
: " =&q " ( coeff_count ) , " +r " ( significant_coeff_ctx_base ) , " +m " ( index ) ,
" = &r" ( low ) , " =&r " ( bit ) , " = &r" ( range )
" +&r " ( c - > low ) , " =&r " ( bit ) , " +&r " ( c - > range )
: " r " ( c ) , " m " ( minusstart ) , " m " ( end ) , " m " ( minusindex ) , " m " ( last_off ) ,
: " r " ( c ) , " m " ( minusstart ) , " m " ( end ) , " m " ( minusindex ) , " m " ( last_off ) ,
" i " ( offsetof ( CABACContext , range ) ) , " i " ( offsetof ( CABACContext , low ) ) ,
" i " ( offsetof ( CABACContext , bytestream ) )
" i " ( offsetof ( CABACContext , bytestream ) )
: " % " REG_c , " memory "
: " % " REG_c , " memory "
) ;
) ;
@ -101,18 +91,13 @@ static int decode_significance_x86(CABACContext *c, int max_coeff,
static int decode_significance_8x8_x86 ( CABACContext * c ,
static int decode_significance_8x8_x86 ( CABACContext * c ,
uint8_t * significant_coeff_ctx_base ,
uint8_t * significant_coeff_ctx_base ,
int * index , x86_reg last_off , const uint8_t * sig_off ) {
int * index , uint8_t * last_coeff_ctx_base , const uint8_t * sig_off ) {
int minusindex = 4 - ( intptr_t ) index ;
int minusindex = 4 - ( intptr_t ) index ;
int bit ;
int bit ;
x86_reg coeff_count ;
x86_reg coeff_count ;
int low ;
int range ;
x86_reg last = 0 ;
x86_reg last = 0 ;
x86_reg state ;
x86_reg state ;
__asm__ volatile (
__asm__ volatile (
" movl %a12(%7), %5 \n \t "
" movl %a13(%7), %3 \n \t "
" mov %1, %6 \n \t "
" mov %1, %6 \n \t "
" 2: \n \t "
" 2: \n \t "
@ -121,18 +106,17 @@ static int decode_significance_8x8_x86(CABACContext *c,
" add %9, %6 \n \t "
" add %9, %6 \n \t "
BRANCHLESS_GET_CABAC ( " %4 " , " %7 " , " (%6) " , " %3 " ,
BRANCHLESS_GET_CABAC ( " %4 " , " %7 " , " (%6) " , " %3 " ,
" %w3 " , " %5 " , " %k0 " , " %b0 " , " %a14 " )
" %w3 " , " %5 " , " %k0 " , " %b0 " , " %a12 " )
" mov %1, %k6 \n \t "
" mov %1, %k6 \n \t "
" test $1, %4 \n \t "
" test $1, %4 \n \t "
" jz 3f \n \t "
" jz 3f \n \t "
" movzbl " MANGLE ( last_coeff_flag_offset_8x8 ) " (%k6), %k6 \n \t "
" movzbl " MANGLE ( last_coeff_flag_offset_8x8 ) " (%k6), %k6 \n \t "
" add %9, %6 \n \t "
" add %11, %6 \n \t "
" add %11, %6 \n \t "
BRANCHLESS_GET_CABAC ( " %4 " , " %7 " , " (%6) " , " %3 " ,
BRANCHLESS_GET_CABAC ( " %4 " , " %7 " , " (%6) " , " %3 " ,
" %w3 " , " %5 " , " %k0 " , " %b0 " , " %a14 " )
" %w3 " , " %5 " , " %k0 " , " %b0 " , " %a12 " )
" mov %2, %0 \n \t "
" mov %2, %0 \n \t "
" mov %1, %k6 \n \t "
" mov %1, %k6 \n \t "
@ -141,8 +125,7 @@ static int decode_significance_8x8_x86(CABACContext *c,
" test $1, %4 \n \t "
" test $1, %4 \n \t "
" jnz 4f \n \t "
" jnz 4f \n \t "
" add $4, %0 \n \t "
" add $4, %2 \n \t "
" mov %0, %2 \n \t "
" 3: \n \t "
" 3: \n \t "
" addl $1, %k6 \n \t "
" addl $1, %k6 \n \t "
@ -154,13 +137,9 @@ static int decode_significance_8x8_x86(CABACContext *c,
" 4: \n \t "
" 4: \n \t "
" addl %8, %k0 \n \t "
" addl %8, %k0 \n \t "
" shr $2, %k0 \n \t "
" shr $2, %k0 \n \t "
: " =&q " ( coeff_count ) , " +m " ( last ) , " +m " ( index ) , " +&r " ( c - > low ) , " =&r " ( bit ) ,
" movl %5, %a12(%7) \n \t "
" +&r " ( c - > range ) , " =&r " ( state )
" movl %3, %a13(%7) \n \t "
: " r " ( c ) , " m " ( minusindex ) , " m " ( significant_coeff_ctx_base ) , " m " ( sig_off ) , " m " ( last_coeff_ctx_base ) ,
: " =&q " ( coeff_count ) , " +m " ( last ) , " +m " ( index ) , " =&r " ( low ) , " =&r " ( bit ) ,
" =&r " ( range ) , " =&r " ( state )
: " r " ( c ) , " m " ( minusindex ) , " m " ( significant_coeff_ctx_base ) , " m " ( sig_off ) , " m " ( last_off ) ,
" i " ( offsetof ( CABACContext , range ) ) , " i " ( offsetof ( CABACContext , low ) ) ,
" i " ( offsetof ( CABACContext , bytestream ) )
" i " ( offsetof ( CABACContext , bytestream ) )
: " % " REG_c , " memory "
: " % " REG_c , " memory "
) ;
) ;