-extern const uint32_t ff_inverse[256];
-
-#if ARCH_X86
-# define FASTDIV(a,b) \
- ({\
- int ret,dmy;\
- __asm__ volatile(\
- "mull %3"\
- :"=d"(ret),"=a"(dmy)\
- :"1"(a),"g"(ff_inverse[b])\
- );\
- ret;\
- })
-#elif HAVE_ARMV6
-static inline av_const int FASTDIV(int a, int b)
-{
- int r, t;
- __asm__ volatile("cmp %3, #2 \n\t"
- "ldr %1, [%4, %3, lsl #2] \n\t"
- "lsrle %0, %2, #1 \n\t"
- "smmulgt %0, %1, %2 \n\t"
- : "=&r"(r), "=&r"(t) : "r"(a), "r"(b), "r"(ff_inverse));
- return r;
-}
-#elif ARCH_ARM
-static inline av_const int FASTDIV(int a, int b)
-{
- int r, t;
- __asm__ volatile ("umull %1, %0, %2, %3"
- : "=&r"(r), "=&r"(t) : "r"(a), "r"(ff_inverse[b]));
- return r;
-}
-#elif CONFIG_FASTDIV
-# define FASTDIV(a,b) ((uint32_t)((((uint64_t)a)*ff_inverse[b])>>32))
-#else
-# define FASTDIV(a,b) ((a)/(b))
-#endif
-
-extern const uint8_t ff_sqrt_tab[256];
-
-static inline av_const unsigned int ff_sqrt(unsigned int a)
-{
- unsigned int b;
-
- if(a<255) return (ff_sqrt_tab[a+1]-1)>>4;
- else if(a<(1<<12)) b= ff_sqrt_tab[a>>4 ]>>2;
-#if !CONFIG_SMALL
- else if(a<(1<<14)) b= ff_sqrt_tab[a>>6 ]>>1;
- else if(a<(1<<16)) b= ff_sqrt_tab[a>>8 ] ;
-#endif
- else{
- int s= av_log2_16bit(a>>16)>>1;
- unsigned int c= a>>(s+2);
- b= ff_sqrt_tab[c>>(s+8)];
- b= FASTDIV(c,b) + (b<<s);
- }
-
- return b - (a<b*b);
-}
-