21 #ifndef AVCODEC_ARM_VP56_ARITH_H
22 #define AVCODEC_ARM_VP56_ARITH_H
32 #if CONFIG_THUMB || defined __clang__
42 #define vp56_rac_get_prob vp56_rac_get_prob_armv6
50 __asm__ (
"adds %3, %3, %0 \n"
53 L(
"ldrcsh %2, [%4], #2 \n")
54 U(
"ldrhcs %2, [%4], #2 \n")
56 "smlabb %0, %5, %6, %0 \n"
59 T(
"lslcs %2, %2, %3 \n")
60 T(
"orrcs %1, %1, %2 \n")
61 A(
"orrcs %1, %1, %2, lsl %3 \n")
62 "subcs %3, %3, #16 \n"
64 "cmp %1, %0, lsl #16 \n"
66 "subge %1, %1, %0, lsl #16 \n"
72 :
"r"(high),
"r"(pr),
"r"(c->
end - 1),
73 "0"(shift),
"1"(code_word)
79 #define vp56_rac_get_prob_branchy vp56_rac_get_prob_branchy_armv6
80 static inline int vp56_rac_get_prob_branchy_armv6(
VP56RangeCoder *
c,
int pr)
88 __asm__ (
"adds %3, %3, %0 \n"
91 L(
"ldrcsh %2, [%4], #2 \n")
92 U(
"ldrhcs %2, [%4], #2 \n")
94 "smlabb %0, %5, %6, %0 \n"
97 T(
"lslcs %2, %2, %3 \n")
98 T(
"orrcs %1, %1, %2 \n")
99 A(
"orrcs %1, %1, %2, lsl %3 \n")
100 "subcs %3, %3, #16 \n"
103 :
"=&r"(low),
"+&r"(code_word),
"=&r"(tmp),
105 :
"r"(high),
"r"(pr),
"r"(c->
end - 1),
"0"(shift)
108 if (code_word >= tmp) {
109 c->
high = high - low;
static int shift(int a, int b)
const uint8_t ff_vp56_norm_shift[256]
vp56 specific range coder implementation