From d07fd9667e2ffddea6e10c20656bdbd5019efa54 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Wed, 17 Feb 2021 23:25:56 -0800 Subject: [PATCH] base: Introduce a version of reverseBits for 8 bit types. These types shouldn't be shifted by 8, since shifting a type by its width is technically undefined behavior. We never actually use the result from this shift, but it still upsets certain versions of clang. Change-Id: I425431473fa44a6e0de2edf780c265ff4e3f440e Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/41593 Reviewed-by: Gabe Black Reviewed-by: Jason Lowe-Power Maintainer: Gabe Black Tested-by: kokoro --- src/base/bitfield.hh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/base/bitfield.hh b/src/base/bitfield.hh index 1ec684f806..470941ac4b 100644 --- a/src/base/bitfield.hh +++ b/src/base/bitfield.hh @@ -209,7 +209,7 @@ replaceBits(T& val, unsigned bit, B bit_val) * @ingroup api_bitfield */ template -std::enable_if_t::value, T> +std::enable_if_t::value && sizeof(T) != 1, T> reverseBits(T val, size_t size=sizeof(T)) { assert(size <= sizeof(T)); @@ -223,6 +223,14 @@ reverseBits(T val, size_t size=sizeof(T)) return output; } +template +std::enable_if_t::value && sizeof(T) == 1, T> +reverseBits(T val, size_t size=sizeof(T)) +{ + assert(size == 1); + return reverseBitsLookUpTable[val]; +} + /** * Returns the bit position of the MSB that is set in the input *