X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=images%2Fmath.h;h=b322949ddbaa5e4529021da583f647c49b8726b3;hb=ae7dfec55384883a72867d4877b5283a3c1c8aa1;hp=1824c95bb42a7a05361defc282487e32aa7574a3;hpb=c1afcf90949e5058a95e0e12a09b25a068d68b61;p=libucw.git diff --git a/images/math.h b/images/math.h index 1824c95b..b322949d 100644 --- a/images/math.h +++ b/images/math.h @@ -1,35 +1,27 @@ #ifndef _IMAGES_MATH_H #define _IMAGES_MATH_H +#ifdef CONFIG_UCW_CLEAN_ABI +#define fast_div_tab ucw_fast_div_tab +#define fast_sqrt_tab ucw_fast_sqrt_tab +#endif + extern const u32 fast_div_tab[]; extern const byte fast_sqrt_tab[]; -static inline uns -isqr(int x) +static inline uint isqr(int x) { return x * x; } -static inline uns -fast_div_u32_u8(uns x, uns y) +static inline uint fast_div_u32_u8(uint x, uint y) { -#ifdef CPU_I386 - int ret, dmy; - asm volatile ( - "mull %3" - :"=d"(ret),"=a"(dmy) - :"1"(x),"g"(fast_div_tab[y]) - ); - return ret; -#else return ((u64)(x) * fast_div_tab[y]) >> 32; -#endif } -static inline uns -fast_sqrt_u16(uns x) +static inline uint fast_sqrt_u16(uint x) { - uns y; + uint y; if (x < (1 << 10) - 3) y = fast_sqrt_tab[(x + 3) >> 2] >> 3; else if (x < (1 << 14) - 28) @@ -39,10 +31,9 @@ fast_sqrt_u16(uns x) return (x < y * y) ? y - 1 : y; } -static inline uns -fast_sqrt_u32(uns x) +static inline uint fast_sqrt_u32(uint x) { - uns y; + uint y; if (x < (1 << 16)) { if (x < (1 << 10) - 3)