xref: /linux-6.15/lib/cmpdi2.c (revision 588cb88c)
1*588cb88cSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-or-later
2b35cd988SPalmer Dabbelt /*
3b35cd988SPalmer Dabbelt  */
4b35cd988SPalmer Dabbelt 
5b35cd988SPalmer Dabbelt #include <linux/export.h>
6b35cd988SPalmer Dabbelt 
74db2b604SChristoph Hellwig #include <linux/libgcc.h>
8b35cd988SPalmer Dabbelt 
__cmpdi2(long long a,long long b)9b35cd988SPalmer Dabbelt word_type notrace __cmpdi2(long long a, long long b)
10b35cd988SPalmer Dabbelt {
11b35cd988SPalmer Dabbelt 	const DWunion au = {
12b35cd988SPalmer Dabbelt 		.ll = a
13b35cd988SPalmer Dabbelt 	};
14b35cd988SPalmer Dabbelt 	const DWunion bu = {
15b35cd988SPalmer Dabbelt 		.ll = b
16b35cd988SPalmer Dabbelt 	};
17b35cd988SPalmer Dabbelt 
18b35cd988SPalmer Dabbelt 	if (au.s.high < bu.s.high)
19b35cd988SPalmer Dabbelt 		return 0;
20b35cd988SPalmer Dabbelt 	else if (au.s.high > bu.s.high)
21b35cd988SPalmer Dabbelt 		return 2;
22b35cd988SPalmer Dabbelt 
23b35cd988SPalmer Dabbelt 	if ((unsigned int) au.s.low < (unsigned int) bu.s.low)
24b35cd988SPalmer Dabbelt 		return 0;
25b35cd988SPalmer Dabbelt 	else if ((unsigned int) au.s.low > (unsigned int) bu.s.low)
26b35cd988SPalmer Dabbelt 		return 2;
27b35cd988SPalmer Dabbelt 
28b35cd988SPalmer Dabbelt 	return 1;
29b35cd988SPalmer Dabbelt }
30b35cd988SPalmer Dabbelt EXPORT_SYMBOL(__cmpdi2);
31