From 9c175e5c3cd319c5afa4d16e5bda92d77a4e335e Mon Sep 17 00:00:00 2001 From: David Howells Date: Fri, 4 Jul 2008 09:59:47 -0700 Subject: [PATCH] --- yaml --- r: 98698 b: refs/heads/master c: fc26361ef0fbcad0406475fc6006fa4f09e60dce h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/mn10300/kernel/mn10300_ksyms.c | 2 ++ trunk/arch/mn10300/lib/Makefile | 2 +- trunk/arch/mn10300/lib/__ucmpdi2.S | 43 +++++++++++++++++++++++ 4 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 trunk/arch/mn10300/lib/__ucmpdi2.S diff --git a/[refs] b/[refs] index e7d99c00cd33..273c26aaa81f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7fc7228c0be9007f0e6a32c8a8ae340ea6246056 +refs/heads/master: fc26361ef0fbcad0406475fc6006fa4f09e60dce diff --git a/trunk/arch/mn10300/kernel/mn10300_ksyms.c b/trunk/arch/mn10300/kernel/mn10300_ksyms.c index 544ee1ae8c41..f9eb9753a404 100644 --- a/trunk/arch/mn10300/kernel/mn10300_ksyms.c +++ b/trunk/arch/mn10300/kernel/mn10300_ksyms.c @@ -34,7 +34,9 @@ extern u64 __ashrdi3(u64, unsigned); extern u64 __ashldi3(u64, unsigned); extern u64 __lshrdi3(u64, unsigned); extern s64 __negdi2(s64); +extern int __ucmpdi2(u64, u64); EXPORT_SYMBOL(__ashrdi3); EXPORT_SYMBOL(__ashldi3); EXPORT_SYMBOL(__lshrdi3); EXPORT_SYMBOL(__negdi2); +EXPORT_SYMBOL(__ucmpdi2); diff --git a/trunk/arch/mn10300/lib/Makefile b/trunk/arch/mn10300/lib/Makefile index fdfa9ec5b5bb..0cd2346f4c13 100644 --- a/trunk/arch/mn10300/lib/Makefile +++ b/trunk/arch/mn10300/lib/Makefile @@ -4,4 +4,4 @@ lib-y = delay.o usercopy.o checksum.o bitops.o memcpy.o memmove.o memset.o lib-y += do_csum.o -lib-y += __ashldi3.o __ashrdi3.o __lshrdi3.o negdi2.o +lib-y += __ashldi3.o __ashrdi3.o __lshrdi3.o negdi2.o __ucmpdi2.o diff --git a/trunk/arch/mn10300/lib/__ucmpdi2.S b/trunk/arch/mn10300/lib/__ucmpdi2.S new file mode 100644 index 000000000000..60dcbdfe386c --- /dev/null +++ b/trunk/arch/mn10300/lib/__ucmpdi2.S @@ -0,0 +1,43 @@ +/* __ucmpdi2.S: 64-bit unsigned compare + * + * Copyright (C) 2008 Red Hat, Inc. All Rights Reserved. + * Written by David Howells (dhowells@redhat.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + */ + + + .text + .p2align 4 + +############################################################################### +# +# int __ucmpdi2(unsigned long long a [D0:D1], +# unsigned long long b [(SP,12),(SP,16)]) +# +# - returns 0, 1, or 2 as a <, =, > b respectively. +# +############################################################################### + .globl __ucmpdi2 + .type __ucmpdi2,@function +__ucmpdi2: + mov (12,sp),a0 # b.lsw + mov (16,sp),a1 # b.msw + + sub a0,d0 + subc a1,d1 # may clear Z, never sets it + bne __ucmpdi2_differ # a.msw != b.msw + mov +1,d0 + rets + +__ucmpdi2_differ: + # C flag is set if LE, clear if GE + subc d0,d0 # -1 if LE, 0 if GE + add +1,d0 # 0 if LE, 1 if GE + add d0,d0 # 0 if LE, 2 if GE + rets + + .size __ucmpdi2, .-__ucmpdi2