[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-Id: <1166362145.6714.53.camel@pmac.infradead.org>
Date: Sun, 17 Dec 2006 13:29:05 +0000
From: David Woodhouse <dwmw2@...radead.org>
To: Kyle McMartin <kyle@...ntu.com>
Cc: Mauro Carvalho Chehab <mchehab@...radead.org>,
Meelis Roos <mroos@...ux.ee>,
Linux Kernel list <linux-kernel@...r.kernel.org>,
linuxppc-dev@...abs.org, paulus@...ba.org
Subject: Re: V4L2: __ucmpdi2 undefined on ppc
On Thu, 2006-12-14 at 14:58 -0500, Kyle McMartin wrote:
> I posted a patch to Paul this week to fix this,
Hm, I didn't see it on linuxppc-dev.
> Since ppc32 can't do a 64bit comparison on its own it seems, gcc
> will generate a call to a helper function from libgcc. What other
> arches do is link libgcc.a into libs-y, and export the symbol
> they want from it.
You still get to 'accidentally' do 64-bit arithmetic in-kernel that way
though. Might be better just to provide __ucmpdi2, just as we have for
the other functions which are required from libgcc
It'd be better just to fix the compiler though -- which is in fact what
they've done: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25724
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21237
I've applied this as a temporary hack to the Fedora kernel until the
compiler is updated there...
--- linux-2.6.19.ppc/arch/powerpc/kernel/misc_32.S~ 2006-11-29 21:57:37.000000000 +0000
+++ linux-2.6.19.ppc/arch/powerpc/kernel/misc_32.S 2006-12-17 12:19:48.000000000 +0000
@@ -728,6 +728,27 @@ _GLOBAL(__lshrdi3)
or r4,r4,r7 # LSW |= t2
blr
+/*
+ * __ucmpdi2: 64-bit comparison
+ *
+ * R3/R4 has 64 bit value A
+ * R5/R6 has 64 bit value B
+ * result in R3: 0 for A < B
+ * 1 for A == B
+ * 2 for A > B
+ */
+_GLOBAL(__ucmpdi2)
+ cmplw r7,r3,r5 # compare high words
+ li r3,0
+ blt r7,2f # a < b ... return 0
+ bgt r7,1f # a > b ... return 2
+ cmplw r6,r4,r6 # compare low words
+ blt r6,2f # a < b ... return 0
+ li r3,1
+ ble r6,2f # a = b ... return 1
+1: li r3,2
+2: blr
+
_GLOBAL(abs)
srawi r4,r3,31
xor r3,r3,r4
--- linux-2.6.19.ppc/arch/powerpc/kernel/ppc_ksyms.c~ 2006-12-15 17:19:56.000000000 +0000
+++ linux-2.6.19.ppc/arch/powerpc/kernel/ppc_ksyms.c 2006-12-17 12:16:54.000000000 +0000
@@ -161,9 +161,11 @@ EXPORT_SYMBOL(to_tm);
long long __ashrdi3(long long, int);
long long __ashldi3(long long, int);
long long __lshrdi3(long long, int);
+int __ucmpdi2(uint64_t, uint64_t);
EXPORT_SYMBOL(__ashrdi3);
EXPORT_SYMBOL(__ashldi3);
EXPORT_SYMBOL(__lshrdi3);
+EXPORT_SYMBOL(__ucmpdi2);
#endif
EXPORT_SYMBOL(memcpy);
--
dwmw2
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists