base: Use if constexpr to simplify the reverseBits function.

Handle the sizeof(T) == 1 special case within the function using if
constexpr, instead of having two functions.

Change-Id: Idce63e18c77d2f7cc59d86c19f42d57ccdbefe5c
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/48504
Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br>
Maintainer: Daniel Carvalho <odanrc@yahoo.com.br>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Gabe Black
2021-07-23 21:29:25 -07:00
parent 0f2fb7bbb4
commit 5412b20b47

View File

@@ -232,26 +232,23 @@ replaceBits(T& val, unsigned bit, B bit_val)
* @ingroup api_bitfield
*/
template <class T>
std::enable_if_t<std::is_integral<T>::value && sizeof(T) != 1, T>
std::enable_if_t<std::is_integral_v<T>, T>
reverseBits(T val, size_t size=sizeof(T))
{
assert(size <= sizeof(T));
T output = {};
for (size_t byte = 0; byte < size; byte++) {
output = (output << 8) | reverseBitsLookUpTable[val & mask(8)];
val >>= 8;
if constexpr (sizeof(T) == 1) {
return reverseBitsLookUpTable[val];
} else {
T output = {};
for (size_t byte = 0; byte < size; byte++) {
output = (output << 8) | reverseBitsLookUpTable[val & mask(8)];
val >>= 8;
}
return output;
}
return output;
}
template <class T>
std::enable_if_t<std::is_integral<T>::value && sizeof(T) == 1, T>
reverseBits(T val, size_t size=sizeof(T))
{
assert(size == 1);
return reverseBitsLookUpTable[val];
}
/**