patch-2.4.22 linux-2.4.22/include/asm-mips64/div64.h
Next file: linux-2.4.22/include/asm-mips64/dma.h
Previous file: linux-2.4.22/include/asm-mips64/delay.h
Back to the patch index
Back to the overall index
- Lines: 76
- Date:
2003-08-25 04:44:44.000000000 -0700
- Orig file:
linux-2.4.21/include/asm-mips64/div64.h
- Orig date:
2002-08-02 17:39:45.000000000 -0700
diff -urN linux-2.4.21/include/asm-mips64/div64.h linux-2.4.22/include/asm-mips64/div64.h
@@ -10,38 +10,20 @@
* Don't use this one in new code
*/
#define do_div64_32(res, high, low, base) ({ \
- unsigned long __quot, __mod; \
- unsigned long __cf, __tmp, __tmp2, __i; \
+ unsigned int __quot, __mod; \
+ unsigned long __div; \
+ unsigned int __low, __high, __base; \
\
- __asm__(".set push\n\t" \
- ".set noat\n\t" \
- ".set noreorder\n\t" \
- "move %2, $0\n\t" \
- "move %3, $0\n\t" \
- "b 1f\n\t" \
- " li %4, 0x21\n" \
- "0:\n\t" \
- "sll $1, %0, 0x1\n\t" \
- "srl %3, %0, 0x1f\n\t" \
- "or %0, $1, %5\n\t" \
- "sll %1, %1, 0x1\n\t" \
- "sll %2, %2, 0x1\n" \
- "1:\n\t" \
- "bnez %3, 2f\n\t" \
- "sltu %5, %0, %z6\n\t" \
- "bnez %5, 3f\n\t" \
- "2:\n\t" \
- " addiu %4,%4,-1\n\t" \
- "subu %0, %0, %z6\n\t" \
- "addiu %2, %2, 1\n" \
- "3:\n\t" \
- "bnez %4, 0b\n\t" \
- " srl %5, %1, 0x1f\n\t" \
- ".set pop" \
- : "=&r" (__mod), "=&r" (__tmp), "=&r" (__quot), "=&r" (__cf), \
- "=&r" (__i), "=&r" (__tmp2) \
- : "Jr" (base), "0" (high), "1" (low)); \
+ __high = (high); \
+ __low = (low); \
+ __div = __high; \
+ __div = __div << 32 | __low; \
+ __base = (base); \
\
+ __mod = __div % __base; \
+ __div = __div / __base; \
+ \
+ __quot = __div; \
(res) = __quot; \
__mod; })
@@ -49,10 +31,19 @@
* Hey, we're already 64-bit, no
* need to play games..
*/
-#define do_div(n,base) ({ \
- int __res; \
- __res = ((unsigned long) n) % (unsigned) base; \
- n = ((unsigned long) n) / (unsigned) base; \
- __res; })
+#define do_div(n, base) ({ \
+ unsigned long __quot; \
+ unsigned int __mod; \
+ unsigned long __div; \
+ unsigned int __base; \
+ \
+ __div = (n); \
+ __base = (base); \
+ \
+ __mod = __div % __base; \
+ __quot = __div / __base; \
+ \
+ (n) = __quot; \
+ __mod; })
#endif /* _ASM_DIV64_H */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)