26 lines
640 B
C
Executable File
26 lines
640 B
C
Executable File
#ifndef _CHIPRAM_DIV64_H
|
|
#define _CHIPRAM_DIV64_H
|
|
#include <linux/types.h>
|
|
|
|
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 */
|