diff options
| -rw-r--r-- | arch/s390/lib/Makefile | 2 | ||||
| -rw-r--r-- | arch/s390/lib/ucmpdi2.c | 26 |
2 files changed, 27 insertions, 1 deletions
diff --git a/arch/s390/lib/Makefile b/arch/s390/lib/Makefile index ab6735df2d21..97975ec7a274 100644 --- a/arch/s390/lib/Makefile +++ b/arch/s390/lib/Makefile | |||
| @@ -3,6 +3,6 @@ | |||
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | lib-y += delay.o string.o uaccess_std.o uaccess_pt.o | 5 | lib-y += delay.o string.o uaccess_std.o uaccess_pt.o |
| 6 | obj-$(CONFIG_32BIT) += div64.o qrnnd.o | 6 | obj-$(CONFIG_32BIT) += div64.o qrnnd.o ucmpdi2.o |
| 7 | lib-$(CONFIG_64BIT) += uaccess_mvcos.o | 7 | lib-$(CONFIG_64BIT) += uaccess_mvcos.o |
| 8 | lib-$(CONFIG_SMP) += spinlock.o | 8 | lib-$(CONFIG_SMP) += spinlock.o |
diff --git a/arch/s390/lib/ucmpdi2.c b/arch/s390/lib/ucmpdi2.c new file mode 100644 index 000000000000..3e05ff532582 --- /dev/null +++ b/arch/s390/lib/ucmpdi2.c | |||
| @@ -0,0 +1,26 @@ | |||
| 1 | #include <linux/module.h> | ||
| 2 | |||
| 3 | union ull_union { | ||
| 4 | unsigned long long ull; | ||
| 5 | struct { | ||
| 6 | unsigned int high; | ||
| 7 | unsigned int low; | ||
| 8 | } ui; | ||
| 9 | }; | ||
| 10 | |||
| 11 | int __ucmpdi2(unsigned long long a, unsigned long long b) | ||
| 12 | { | ||
| 13 | union ull_union au = {.ull = a}; | ||
| 14 | union ull_union bu = {.ull = b}; | ||
| 15 | |||
| 16 | if (au.ui.high < bu.ui.high) | ||
| 17 | return 0; | ||
| 18 | else if (au.ui.high > bu.ui.high) | ||
| 19 | return 2; | ||
| 20 | if (au.ui.low < bu.ui.low) | ||
| 21 | return 0; | ||
| 22 | else if (au.ui.low > bu.ui.low) | ||
| 23 | return 2; | ||
| 24 | return 1; | ||
| 25 | } | ||
| 26 | EXPORT_SYMBOL(__ucmpdi2); | ||
