[S390] add __ucmpdi2() helper function
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Tue, 7 Jul 2009 14:37:09 +0000 (16:37 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 7 Jul 2009 14:37:53 +0000 (16:37 +0200)
Provide __ucmpdi2() helper function on 31 bit so we don't run
again and again in compile errors like this one:

kernel/built-in.o: In function `T.689':
perf_counter.c:(.text+0x56c86): undefined reference to `__ucmpdi2'

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/lib/Makefile
arch/s390/lib/ucmpdi2.c [new file with mode: 0644]

index ab6735df2d2155b2755170048701f979272e6f03..97975ec7a27471253a8da274af72d14a16e9f171 100644 (file)
@@ -3,6 +3,6 @@
 #
 
 lib-y += delay.o string.o uaccess_std.o uaccess_pt.o
-obj-$(CONFIG_32BIT) += div64.o qrnnd.o
+obj-$(CONFIG_32BIT) += div64.o qrnnd.o ucmpdi2.o
 lib-$(CONFIG_64BIT) += uaccess_mvcos.o
 lib-$(CONFIG_SMP) += spinlock.o
diff --git a/arch/s390/lib/ucmpdi2.c b/arch/s390/lib/ucmpdi2.c
new file mode 100644 (file)
index 0000000..3e05ff5
--- /dev/null
@@ -0,0 +1,26 @@
+#include <linux/module.h>
+
+union ull_union {
+       unsigned long long ull;
+       struct {
+               unsigned int high;
+               unsigned int low;
+       } ui;
+};
+
+int __ucmpdi2(unsigned long long a, unsigned long long b)
+{
+       union ull_union au = {.ull = a};
+       union ull_union bu = {.ull = b};
+
+       if (au.ui.high < bu.ui.high)
+               return 0;
+       else if (au.ui.high > bu.ui.high)
+               return 2;
+       if (au.ui.low < bu.ui.low)
+               return 0;
+       else if (au.ui.low > bu.ui.low)
+               return 2;
+       return 1;
+}
+EXPORT_SYMBOL(__ucmpdi2);