From: Jorgen Lundman Date: Wed, 2 May 2012 00:15:28 +0000 (+0000) Subject: Add missing 64-bit divide for 32-bit ARM X-Git-Tag: debian/0.7.9-2~190^2~8 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=ef6f91ce0c96f7440a6fab23cb605a7f67185790;p=mirror_spl-debian.git Add missing 64-bit divide for 32-bit ARM Leverage the existing generic 64-bit division operations which were originally implemented for x86 to support ARM. All that is required is to make the symbols available to the linker with the expected names. Signed-off-by: Brian Behlendorf --- diff --git a/module/spl/spl-generic.c b/module/spl/spl-generic.c index be099aa..d22100e 100644 --- a/module/spl/spl-generic.c +++ b/module/spl/spl-generic.c @@ -183,7 +183,7 @@ __udivdi3(uint64_t u, uint64_t v) q0 = q0 - 1; // too small by 1. if ((u - q0 * v) >= v) q0 = q0 + 1; // Now q0 is correct. - + return q0; } } @@ -212,6 +212,27 @@ __umoddi3(uint64_t dividend, uint64_t divisor) } EXPORT_SYMBOL(__umoddi3); +#if defined(__arm) || defined(__arm__) +/* + * Implementation of 64-bit unsigned division for 32-bit arm machines. + */ +uint64_t +__aeabi_uldivmod(uint64_t u, uint64_t v) +{ + return __udivdi3(u, v); +} +EXPORT_SYMBOL(__aeabi_uldivmod); + +/* + * Implementation of 64-bit signed division for 32-bit arm machines. + */ +int64_t +__aeabi_ldivmod(int64_t u, int64_t v) +{ + return __divdi3(u, v); +} +EXPORT_SYMBOL(__aeabi_ldivmod); +#endif /* __arm || __arm__ */ #endif /* BITS_PER_LONG */ /* NOTE: The strtoxx behavior is solely based on my reading of the Solaris