Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[platform/kernel/linux-starfive.git] / lib / math / int_pow.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * An integer based power function
4  *
5  * Derived from drivers/video/backlight/pwm_bl.c
6  */
7
8 #include <linux/export.h>
9 #include <linux/kernel.h>
10 #include <linux/types.h>
11
12 /**
13  * int_pow - computes the exponentiation of the given base and exponent
14  * @base: base which will be raised to the given power
15  * @exp: power to be raised to
16  *
17  * Computes: pow(base, exp), i.e. @base raised to the @exp power
18  */
19 u64 int_pow(u64 base, unsigned int exp)
20 {
21         u64 result = 1;
22
23         while (exp) {
24                 if (exp & 1)
25                         result *= base;
26                 exp >>= 1;
27                 base *= base;
28         }
29
30         return result;
31 }
32 EXPORT_SYMBOL_GPL(int_pow);