mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-01-27 18:34:22 +03:00
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 <behlendorf1@llnl.gov>
This commit is contained in:
parent
cb75844e85
commit
ef6f91ce0c
@ -183,7 +183,7 @@ __udivdi3(uint64_t u, uint64_t v)
|
|||||||
q0 = q0 - 1; // too small by 1.
|
q0 = q0 - 1; // too small by 1.
|
||||||
if ((u - q0 * v) >= v)
|
if ((u - q0 * v) >= v)
|
||||||
q0 = q0 + 1; // Now q0 is correct.
|
q0 = q0 + 1; // Now q0 is correct.
|
||||||
|
|
||||||
return q0;
|
return q0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -212,6 +212,27 @@ __umoddi3(uint64_t dividend, uint64_t divisor)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(__umoddi3);
|
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 */
|
#endif /* BITS_PER_LONG */
|
||||||
|
|
||||||
/* NOTE: The strtoxx behavior is solely based on my reading of the Solaris
|
/* NOTE: The strtoxx behavior is solely based on my reading of the Solaris
|
||||||
|
Loading…
Reference in New Issue
Block a user