math64: New DIV_S64_ROUND_CLOSEST helper
Provide DIV_S64_ROUND_CLOSEST helper which uses div_s64 to perform division rounded to the closest integer using signed 64bit dividend and signed 32bit divisor. Signed-off-by: Chunyan Zhang <chunyan.zhang@unisoc.com> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
This commit is contained in:
parent
ab92ffd5f6
commit
af60459a54
@ -279,4 +279,23 @@ static inline u64 mul_u64_u32_div(u64 a, u32 mul, u32 divisor)
|
||||
#define DIV64_U64_ROUND_CLOSEST(dividend, divisor) \
|
||||
({ u64 _tmp = (divisor); div64_u64((dividend) + _tmp / 2, _tmp); })
|
||||
|
||||
/*
|
||||
* DIV_S64_ROUND_CLOSEST - signed 64bit divide with 32bit divisor rounded to nearest integer
|
||||
* @dividend: signed 64bit dividend
|
||||
* @divisor: signed 32bit divisor
|
||||
*
|
||||
* Divide signed 64bit dividend by signed 32bit divisor
|
||||
* and round to closest integer.
|
||||
*
|
||||
* Return: dividend / divisor rounded to nearest integer
|
||||
*/
|
||||
#define DIV_S64_ROUND_CLOSEST(dividend, divisor)( \
|
||||
{ \
|
||||
s64 __x = (dividend); \
|
||||
s32 __d = (divisor); \
|
||||
((__x > 0) == (__d > 0)) ? \
|
||||
div_s64((__x + (__d / 2)), __d) : \
|
||||
div_s64((__x - (__d / 2)), __d); \
|
||||
} \
|
||||
)
|
||||
#endif /* _LINUX_MATH64_H */
|
||||
|
Loading…
Reference in New Issue
Block a user