18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * An integer based power function 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Derived from drivers/video/backlight/pwm_bl.c 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#include <linux/export.h> 98c2ecf20Sopenharmony_ci#include <linux/kernel.h> 108c2ecf20Sopenharmony_ci#include <linux/types.h> 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci/** 138c2ecf20Sopenharmony_ci * int_pow - computes the exponentiation of the given base and exponent 148c2ecf20Sopenharmony_ci * @base: base which will be raised to the given power 158c2ecf20Sopenharmony_ci * @exp: power to be raised to 168c2ecf20Sopenharmony_ci * 178c2ecf20Sopenharmony_ci * Computes: pow(base, exp), i.e. @base raised to the @exp power 188c2ecf20Sopenharmony_ci */ 198c2ecf20Sopenharmony_ciu64 int_pow(u64 base, unsigned int exp) 208c2ecf20Sopenharmony_ci{ 218c2ecf20Sopenharmony_ci u64 result = 1; 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci while (exp) { 248c2ecf20Sopenharmony_ci if (exp & 1) 258c2ecf20Sopenharmony_ci result *= base; 268c2ecf20Sopenharmony_ci exp >>= 1; 278c2ecf20Sopenharmony_ci base *= base; 288c2ecf20Sopenharmony_ci } 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_ci return result; 318c2ecf20Sopenharmony_ci} 328c2ecf20Sopenharmony_ciEXPORT_SYMBOL_GPL(int_pow); 33