diff options
author | Alexandru Gagniuc <mr.nuke.me@gmail.com> | 2014-01-13 00:49:49 -0600 |
---|---|---|
committer | Alexandru Gagniuc <mr.nuke.me@gmail.com> | 2014-01-14 14:14:46 +0100 |
commit | 594ef813266053a7d6777b91be7724ee5b62ff7a (patch) | |
tree | 2790c7f6b53d09cd81fcdf1fb0694ed188ef656e /src | |
parent | 3dd0e72d3b9ad5fb6593db6c81c9ad712711e330 (diff) |
lib: Add log2 ceiling function
Change-Id: Ifb41050e729a0ce314e4d4918e46f82bc7e16bed
Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Reviewed-on: http://review.coreboot.org/4684
Tested-by: build bot (Jenkins)
Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/include/lib.h | 1 | ||||
-rw-r--r-- | src/lib/clog2.c | 15 |
2 files changed, 16 insertions, 0 deletions
diff --git a/src/include/lib.h b/src/include/lib.h index 8de49d3508..bfa68e2eae 100644 --- a/src/include/lib.h +++ b/src/include/lib.h @@ -28,6 +28,7 @@ /* Defined in src/lib/clog2.c */ unsigned long log2(unsigned long x); #endif +unsigned long log2_ceil(unsigned long x); /* Defined in src/lib/lzma.c */ unsigned long ulzma(unsigned char *src, unsigned char *dst); diff --git a/src/lib/clog2.c b/src/lib/clog2.c index c6fe6f6cc8..b908762917 100644 --- a/src/lib/clog2.c +++ b/src/lib/clog2.c @@ -27,3 +27,18 @@ unsigned long log2(unsigned long x) return pow; } + +unsigned long log2_ceil(unsigned long x) +{ + unsigned long pow; + + if (! x) + return -1; + + pow = log2(x); + + if (x > (1ULL << pow)) + pow++; + + return pow; +} |