diff options
author | Ali Saidi <saidi@eecs.umich.edu> | 2007-03-03 19:03:22 -0500 |
---|---|---|
committer | Ali Saidi <saidi@eecs.umich.edu> | 2007-03-03 19:03:22 -0500 |
commit | 82874eefca231fa960fbd39a90ed98929915c414 (patch) | |
tree | 8646c2358edec660d123e45d20885a366d0815de /src/base | |
parent | 61178c8de20d334e9c5cf0454d453880a5fff928 (diff) | |
parent | 1694c65ba169a555bd642d3352c65be41a36ce4d (diff) | |
download | gem5-82874eefca231fa960fbd39a90ed98929915c414.tar.xz |
Merge zizzer:/bk/newmem
into zeep.pool:/z/saidi/work/m5.newmem
--HG--
extra : convert_revision : fd6464c9883783c7c2cbefba317f4a0f20dd24cb
Diffstat (limited to 'src/base')
-rw-r--r-- | src/base/bitfield.hh | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/base/bitfield.hh b/src/base/bitfield.hh index 0f1233677..83b9138b4 100644 --- a/src/base/bitfield.hh +++ b/src/base/bitfield.hh @@ -112,4 +112,29 @@ replaceBits(T& val, int first, int last, B bit_val) val = insertBits(val, first, last, bit_val); } +/** + * Returns the bit position of the MSB that is set in the input + */ +inline +int +findMsbSet(uint64_t val) { + int msb = 0; + if (!val) + return 0; + if (bits(val, 63,32)) msb += 32; + val >>= 32; + if (bits(val, 31,16)) msb += 16; + val >>= 16; + if (bits(val, 15,8)) msb += 8; + val >>= 8; + if (bits(val, 7,4)) msb += 4; + val >>= 4; + if (bits(val, 3,2)) msb += 2; + val >>= 2; + if (bits(val, 1,1)) msb += 1; + return msb; +} + + + #endif // __BASE_BITFIELD_HH__ |