OSHW-DEIMOS/SOFTWARE/A64-TERES/linux-a64/drivers/soc/allwinner/pm/mem_divlibc.c
Dimitar Gamishev f9b0e7a283 linux
2017-10-13 14:07:04 +03:00

43 lines
700 B
C
Executable File

#include "pm_i.h"
void __mem_div0(void)
{
printk("Attempting division by 0!");
}
__u32 raw_lib_udiv(__u32 dividend, __u32 divisior)
{
__u32 tmpDiv = (__u32)divisior;
__u32 tmpQuot = 0;
__s32 shift = 0;
if(!divisior)
{
/* divide 0 error abort */
return 0;
}
while(!(tmpDiv & ((__u32)1<<31)))
{
tmpDiv <<= 1;
shift ++;
}
do
{
if(dividend >= tmpDiv)
{
dividend -= tmpDiv;
tmpQuot = (tmpQuot << 1) | 1;
}
else
{
tmpQuot = (tmpQuot << 1) | 0;
}
tmpDiv >>= 1;
shift --;
} while(shift >= 0);
return tmpQuot;
}