فهرست منبع

[POWERPC] Add __ucmpdi2 for 64-bit comparisons in 32-bit kernels

Some drivers (such as V4L2) have code that causes gcc to generate
calls to __ucmpdi2 when compiling for 32-bit powerpc, which results
in either a link-time error or a module that can't be loaded, as
we don't currently have a __ucmpdi2.  This adds one so these drivers
can be used.

Signed-off-by: Paul Mackerras <paulus@samba.org>
Paul Mackerras 17 سال پیش
والد
کامیت
95ff54f517
2فایلهای تغییر یافته به همراه17 افزوده شده و 0 حذف شده
  1. 15 0
      arch/powerpc/kernel/misc_32.S
  2. 2 0
      arch/powerpc/kernel/ppc_ksyms.c

+ 15 - 0
arch/powerpc/kernel/misc_32.S

@@ -785,6 +785,21 @@ _GLOBAL(__lshrdi3)
 	or	r4,r4,r7	# LSW |= t2
 	blr
 
+/*
+ * 64-bit comparison: __ucmpdi2(u64 a, u64 b)
+ * Returns 0 if a < b, 1 if a == b, 2 if a > b.
+ */
+_GLOBAL(__ucmpdi2)
+	cmplw	r3,r5
+	li	r3,1
+	bne	1f
+	cmplw	r4,r6
+	beqlr
+1:	li	r3,0
+	bltlr
+	li	r3,2
+	blr
+
 _GLOBAL(abs)
 	srawi	r4,r3,31
 	xor	r3,r3,r4

+ 2 - 0
arch/powerpc/kernel/ppc_ksyms.c

@@ -149,6 +149,8 @@ long long __lshrdi3(long long, int);
 EXPORT_SYMBOL(__ashrdi3);
 EXPORT_SYMBOL(__ashldi3);
 EXPORT_SYMBOL(__lshrdi3);
+int __ucmpdi2(unsigned long long, unsigned long long);
+EXPORT_SYMBOL(__ucmpdi2);
 #endif
 
 EXPORT_SYMBOL(memcpy);