patch-2.3.29 linux/include/asm-arm/div64.h

Next file: linux/include/asm-arm/fcntl.h
Previous file: linux/include/asm-arm/arch-sa1100/serial.h
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.3.28/linux/include/asm-arm/div64.h linux/include/asm-arm/div64.h
@@ -0,0 +1,33 @@
+#ifndef __ASM_ARM_DIV64
+#define __ASM_ARM_DIV64
+
+/*
+ * unsigned long long division.  Yuck Yuck!  What is Linux coming to?
+ * This is 100% disgusting
+ */
+#define do_div(n,base)							\
+({									\
+	unsigned long __low, __low2, __high, __rem;			\
+	__low  = (n) & 0xffffffff;					\
+	__high = (n) >> 32;						\
+	if (__high) {							\
+		__rem   = __high % (unsigned long)base;			\
+		__high  = __high / (unsigned long)base;			\
+		__low2  = __low >> 16;					\
+		__low2 += __rem << 16;					\
+		__rem   = __low2 % (unsigned long)base;			\
+		__low2  = __low2 / (unsigned long)base;			\
+		__low   = __low & 0xffff;				\
+		__low  += __rem << 16;					\
+		__rem   = __low  % (unsigned long)base;			\
+		__low   = __low  / (unsigned long)base;			\
+		n = __low  + (__low2 << 16) + (__high << 32);		\
+	} else {							\
+		__rem = __low % (unsigned long)base;			\
+		n = (__low / (unsigned long)base);			\
+	}								\
+	__rem;								\
+})
+
+#endif
+

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)