[MIPS] Add __cmpdi2
authorRalf Baechle <ralf@linux-mips.org>
Fri, 24 Aug 2007 12:47:45 +0000 (13:47 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Mon, 27 Aug 2007 01:17:00 +0000 (02:17 +0100)
Certain 32-bit kernel configurations seem to be able to cause references,
this was observed with gcc 4.1.2.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/lib/Makefile
arch/mips/lib/cmpdi2.c [new file with mode: 0644]

index 91ed1eb331020f0f1ba5c4e718ffa975ef9a9330..8810dfb915dd210e0f45d076be1e36e6af779404 100644 (file)
@@ -28,4 +28,4 @@ obj-$(CONFIG_CPU_TX49XX)      += dump_tlb.o
 obj-$(CONFIG_CPU_VR41XX)       += dump_tlb.o
 
 # libgcc-style stuff needed in the kernel
-obj-y += ashldi3.o ashrdi3.o lshrdi3.o ucmpdi2.o
+obj-y += ashldi3.o ashrdi3.o cmpdi2.o lshrdi3.o ucmpdi2.o
diff --git a/arch/mips/lib/cmpdi2.c b/arch/mips/lib/cmpdi2.c
new file mode 100644 (file)
index 0000000..8c13064
--- /dev/null
@@ -0,0 +1,27 @@
+#include <linux/module.h>
+
+#include "libgcc.h"
+
+word_type __cmpdi2(long long a, long long b)
+{
+       const DWunion au = {
+               .ll = a
+       };
+       const DWunion bu = {
+               .ll = b
+       };
+
+       if (au.s.high < bu.s.high)
+               return 0;
+       else if (au.s.high > bu.s.high)
+               return 2;
+
+       if ((unsigned int) au.s.low < (unsigned int) bu.s.low)
+               return 0;
+       else if ((unsigned int) au.s.low > (unsigned int) bu.s.low)
+               return 2;
+
+       return 1;
+}
+
+EXPORT_SYMBOL(__cmpdi2);