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