Revision 0211e5af target-i386/helper.c

b/target-i386/helper.c
1609 1609
#endif /* !CONFIG_USER_ONLY */
1610 1610

  
1611 1611

  
1612
#ifdef BUGGY_GCC_DIV64
1613
/* gcc 2.95.4 on PowerPC does not seem to like using __udivdi3, so we
1614
   call it from another function */
1615
uint32_t div32(uint64_t *q_ptr, uint64_t num, uint32_t den)
1616
{
1617
    *q_ptr = num / den;
1618
    return num % den;
1619
}
1620

  
1621
int32_t idiv32(int64_t *q_ptr, int64_t num, int32_t den)
1622
{
1623
    *q_ptr = num / den;
1624
    return num % den;
1625
}
1626
#endif
1627

  
1628 1612
/* division, flags are undefined */
1629 1613

  
1630 1614
void helper_divb_AL(target_ulong t0)
......
1707 1691
    if (den == 0) {
1708 1692
        raise_exception(EXCP00_DIVZ);
1709 1693
    }
1710
#ifdef BUGGY_GCC_DIV64
1711
    r = div32(&q, num, den);
1712
#else
1713 1694
    q = (num / den);
1714 1695
    r = (num % den);
1715
#endif
1716 1696
    if (q > 0xffffffff)
1717 1697
        raise_exception(EXCP00_DIVZ);
1718 1698
    EAX = (uint32_t)q;
......
1729 1709
    if (den == 0) {
1730 1710
        raise_exception(EXCP00_DIVZ);
1731 1711
    }
1732
#ifdef BUGGY_GCC_DIV64
1733
    r = idiv32(&q, num, den);
1734
#else
1735 1712
    q = (num / den);
1736 1713
    r = (num % den);
1737
#endif
1738 1714
    if (q != (int32_t)q)
1739 1715
        raise_exception(EXCP00_DIVZ);
1740 1716
    EAX = (uint32_t)q;

Also available in: Unified diff