-#if 0 /* Overflow for nh>=FFFFFFFE, d==FFFFFFFF. Find a good fix later. */
-#define udiv_qrnnd(q, r, nh, nl, d) \
- do { /* Use the signed "div" insn, and adjust the result. */ \
- unsigned long int __q, __r, __nh, __nl, __d, __xh, __xl; \
- __nh = 0; \
- __nl = (((unsigned long int)(nh)) << 30) | ((unsigned long int)(nl) >> 2);\
- __nh = (unsigned long int)(nh) >> 2; \
- __d = ((unsigned long int)(d) >> 1); \
- __asm__ ("div %0,%2,%4" \
- : "=r" (__q), "=q" (__r) \
- : "r" (__nh), "1" (__nl), "r" (__d)); \
- __q <<= 1; \
- __asm__ ("mul %0,%2,%3" \
- : "=r" (__xh), "=q" (__xl) \
- : "r" (__q), "r" ((unsigned long int)(d))); \
- __xh += (((signed long int) __q >> 31) & (d)) + __q; \
- if ((nh) < __xh || ((nh) == __xh && (nl) < __xl)) \
- { \
- do \
- { \
- sub_ddmmss (__xh, __xl, __xh, __xl, 0, (d)); \
- __q--; \
- } \
- while ((nh) < __xh || ((nh) == __xh && (nl) < __xl)); \
- __xl = (nl) - __xl; \
- } \
- else \
- { \
- sub_ddmmss (__xh, __xl, (nh), (nl), __xh, __xl); \
- if (__xh != 0) \
- { \
- do \
- { \
- sub_ddmmss (__xh, __xl, __xh, __xl, 0, (d)); \
- __q++; \
- } \
- while (__xh != 0); \
- } \
- if (__xl >= (d)) \
- { \
- __xl -= (d); \
- __q++; \
- } \
- } \
- (q) = __q; \
- (r) = __xl; \
- } while (0)
+#define sdiv_qrnnd(q, r, nh, nl, d) \
+ __asm__ ("div %0,%2,%4" \
+ : "=r" (q), "=q" (r) \
+ : "r" (nh), "1" (nl), "r" (d))