Linux 2.6.31.8
[linux/fpc-iii.git] / arch / mn10300 / lib / __ucmpdi2.S
blob60dcbdfe386cf02a0a0b7e8fc2ff77fa2135d3e0
1 /* __ucmpdi2.S: 64-bit unsigned compare
2  *
3  * Copyright (C) 2008 Red Hat, Inc. All Rights Reserved.
4  * Written by David Howells (dhowells@redhat.com)
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version
9  * 2 of the License, or (at your option) any later version.
10  */
13         .text
14         .p2align        4
16 ###############################################################################
18 # int __ucmpdi2(unsigned long long a [D0:D1],
19 #               unsigned long long b [(SP,12),(SP,16)])
21 # - returns 0, 1, or 2 as a <, =, > b respectively.
23 ###############################################################################
24         .globl          __ucmpdi2
25         .type           __ucmpdi2,@function
26 __ucmpdi2:
27         mov             (12,sp),a0              # b.lsw
28         mov             (16,sp),a1              # b.msw
30         sub             a0,d0
31         subc            a1,d1                   # may clear Z, never sets it
32         bne             __ucmpdi2_differ        # a.msw != b.msw
33         mov             +1,d0
34         rets
36 __ucmpdi2_differ:
37         # C flag is set if LE, clear if GE
38         subc            d0,d0                   # -1 if LE, 0 if GE
39         add             +1,d0                   #  0 if LE, 1 if GE
40         add             d0,d0                   #  0 if LE, 2 if GE
41         rets
43         .size           __ucmpdi2, .-__ucmpdi2