xref: /aosp_15_r20/external/compiler-rt/lib/builtins/ucmpdi2.c (revision 7c3d14c8b49c529e04be81a3ce6f5cc23712e4c6)
1*7c3d14c8STreehugger Robot /* ===-- ucmpdi2.c - Implement __ucmpdi2 -----------------------------------===
2*7c3d14c8STreehugger Robot  *
3*7c3d14c8STreehugger Robot  *                     The LLVM Compiler Infrastructure
4*7c3d14c8STreehugger Robot  *
5*7c3d14c8STreehugger Robot  * This file is dual licensed under the MIT and the University of Illinois Open
6*7c3d14c8STreehugger Robot  * Source Licenses. See LICENSE.TXT for details.
7*7c3d14c8STreehugger Robot  *
8*7c3d14c8STreehugger Robot  * ===----------------------------------------------------------------------===
9*7c3d14c8STreehugger Robot  *
10*7c3d14c8STreehugger Robot  * This file implements __ucmpdi2 for the compiler_rt library.
11*7c3d14c8STreehugger Robot  *
12*7c3d14c8STreehugger Robot  * ===----------------------------------------------------------------------===
13*7c3d14c8STreehugger Robot  */
14*7c3d14c8STreehugger Robot 
15*7c3d14c8STreehugger Robot #include "int_lib.h"
16*7c3d14c8STreehugger Robot 
17*7c3d14c8STreehugger Robot /* Returns:  if (a <  b) returns 0
18*7c3d14c8STreehugger Robot  *           if (a == b) returns 1
19*7c3d14c8STreehugger Robot  *           if (a >  b) returns 2
20*7c3d14c8STreehugger Robot  */
21*7c3d14c8STreehugger Robot 
22*7c3d14c8STreehugger Robot COMPILER_RT_ABI si_int
__ucmpdi2(du_int a,du_int b)23*7c3d14c8STreehugger Robot __ucmpdi2(du_int a, du_int b)
24*7c3d14c8STreehugger Robot {
25*7c3d14c8STreehugger Robot     udwords x;
26*7c3d14c8STreehugger Robot     x.all = a;
27*7c3d14c8STreehugger Robot     udwords y;
28*7c3d14c8STreehugger Robot     y.all = b;
29*7c3d14c8STreehugger Robot     if (x.s.high < y.s.high)
30*7c3d14c8STreehugger Robot         return 0;
31*7c3d14c8STreehugger Robot     if (x.s.high > y.s.high)
32*7c3d14c8STreehugger Robot         return 2;
33*7c3d14c8STreehugger Robot     if (x.s.low < y.s.low)
34*7c3d14c8STreehugger Robot         return 0;
35*7c3d14c8STreehugger Robot     if (x.s.low > y.s.low)
36*7c3d14c8STreehugger Robot         return 2;
37*7c3d14c8STreehugger Robot     return 1;
38*7c3d14c8STreehugger Robot }
39*7c3d14c8STreehugger Robot 
40*7c3d14c8STreehugger Robot #ifdef __ARM_EABI__
41*7c3d14c8STreehugger Robot /* Returns: if (a <  b) returns -1
42*7c3d14c8STreehugger Robot *           if (a == b) returns  0
43*7c3d14c8STreehugger Robot *           if (a >  b) returns  1
44*7c3d14c8STreehugger Robot */
45*7c3d14c8STreehugger Robot COMPILER_RT_ABI si_int
__aeabi_ulcmp(di_int a,di_int b)46*7c3d14c8STreehugger Robot __aeabi_ulcmp(di_int a, di_int b)
47*7c3d14c8STreehugger Robot {
48*7c3d14c8STreehugger Robot 	return __ucmpdi2(a, b) - 1;
49*7c3d14c8STreehugger Robot }
50*7c3d14c8STreehugger Robot #endif
51*7c3d14c8STreehugger Robot 
52