POK
/home/jaouen/pok_official/pok/trunk/libpok/libc/misc/__udivdi3.c
00001 /*
00002  *                               POK header
00003  * 
00004  * The following file is a part of the POK project. Any modification should
00005  * made according to the POK licence. You CANNOT use this file or a part of
00006  * this file is this part of a file for your own project
00007  *
00008  * For more information on the POK licence, please see our LICENCE FILE
00009  *
00010  * Please follow the coding guidelines described in doc/CODING_GUIDELINES
00011  *
00012  *                                      Copyright (c) 2007-2009 POK team 
00013  *
00014  * Created by julien on Thu Jan 15 23:34:13 2009 
00015  */
00016 
00017 #include <core/dependencies.h>
00018 
00019 #ifdef  POK_CONFIG_NEEDS_FUNC_UDIVDI3
00020 
00021 unsigned long long __udivdi3(unsigned long long num,
00022                              unsigned long long den)
00023 {
00024   unsigned long long quot = 0, qbit = 1;
00025 
00026   if (den == 0)
00027     return 0;
00028 
00029   while ((long long) den >= 0)
00030   {
00031     den <<= 1;
00032     qbit <<= 1;
00033   }
00034 
00035   while (qbit)
00036   {
00037     if (den <= num)
00038     {
00039       num -= den;
00040       quot += qbit;
00041     }
00042     den >>= 1;
00043     qbit >>= 1;
00044   }
00045 
00046   return quot;
00047 }
00048 #endif
00049