diff options
Diffstat (limited to 'arch/mips/lib')
-rw-r--r-- | arch/mips/lib/Makefile | 2 | ||||
-rw-r--r-- | arch/mips/lib/cmpdi2.c | 27 |
2 files changed, 28 insertions, 1 deletions
diff --git a/arch/mips/lib/Makefile b/arch/mips/lib/Makefile index 91ed1eb33102..8810dfb915dd 100644 --- a/arch/mips/lib/Makefile +++ b/arch/mips/lib/Makefile | |||
@@ -28,4 +28,4 @@ obj-$(CONFIG_CPU_TX49XX) += dump_tlb.o | |||
28 | obj-$(CONFIG_CPU_VR41XX) += dump_tlb.o | 28 | obj-$(CONFIG_CPU_VR41XX) += dump_tlb.o |
29 | 29 | ||
30 | # libgcc-style stuff needed in the kernel | 30 | # libgcc-style stuff needed in the kernel |
31 | obj-y += ashldi3.o ashrdi3.o lshrdi3.o ucmpdi2.o | 31 | obj-y += ashldi3.o ashrdi3.o cmpdi2.o lshrdi3.o ucmpdi2.o |
diff --git a/arch/mips/lib/cmpdi2.c b/arch/mips/lib/cmpdi2.c new file mode 100644 index 000000000000..8c1306437ed1 --- /dev/null +++ b/arch/mips/lib/cmpdi2.c | |||
@@ -0,0 +1,27 @@ | |||
1 | #include <linux/module.h> | ||
2 | |||
3 | #include "libgcc.h" | ||
4 | |||
5 | word_type __cmpdi2(long long a, long long b) | ||
6 | { | ||
7 | const DWunion au = { | ||
8 | .ll = a | ||
9 | }; | ||
10 | const DWunion bu = { | ||
11 | .ll = b | ||
12 | }; | ||
13 | |||
14 | if (au.s.high < bu.s.high) | ||
15 | return 0; | ||
16 | else if (au.s.high > bu.s.high) | ||
17 | return 2; | ||
18 | |||
19 | if ((unsigned int) au.s.low < (unsigned int) bu.s.low) | ||
20 | return 0; | ||
21 | else if ((unsigned int) au.s.low > (unsigned int) bu.s.low) | ||
22 | return 2; | ||
23 | |||
24 | return 1; | ||
25 | } | ||
26 | |||
27 | EXPORT_SYMBOL(__cmpdi2); | ||