/* Change Logs: Date Author Notes  Bernard the first version for i386  */
uint32_t __umodsi3(uint32_t num, uint32_t den)
/* Change Logs: Date Author Notes  Bernard the first version for i386  */
uint32_t __umodsi3(uint32_t num, uint32_t den)
{
    register uint32_t quot = 0, qbit = 1;
    if (den == 0)
    {
        asm volatile ("int $0");
        return 0;
    }
    while ((int32_t) den >= 0)
    {
        den <<= 1;
        qbit <<= 1;
    }
    while (qbit)
    {
        if (den <= num)
        {
            num -= den;
            quot += qbit;
        }
        den >>= 1;
        qbit >>= 1;
    }
    return num;
}