#ifndef _CHIPRAM_DIV64_H #define _CHIPRAM_DIV64_H #include extern uint32_t __div64_32(uint64_t *dividend, uint32_t divisor); # define do_div(m,divisor) ({ \ uint32_t __divisor = (divisor); \ uint32_t __ret; \ (void)(((typeof((m)) *)0) == ((uint64_t *)0)); \ if (((m) >> 32) == 0) { \ __ret = (uint32_t)(m) % __divisor; \ (m) = (uint32_t)(m) / __divisor; \ } else \ __ret = __div64_32(&(m), __divisor); \ __ret; \ }) static inline uint64_t lldiv(uint64_t dividend, uint32_t divisor) { uint64_t __ret = dividend; do_div(__ret, divisor); return(__ret); } #endif /* _CHIPRAM_DIV64_H */