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