Add a mean to unset a bit in the cache
This commit is contained in:
parent
13fffd5fde
commit
1855195f40
1 changed files with 19 additions and 0 deletions
|
|
@ -23,6 +23,12 @@ const fn test_bit(x: u64, bit: u32) -> bool {
|
|||
x & (1 << bit) != 0
|
||||
}
|
||||
|
||||
/// Unset the `bit of `x`.
|
||||
#[inline]
|
||||
const fn unset_bit(x: u64, bit: u32) -> u64 {
|
||||
x & !(1 << bit)
|
||||
}
|
||||
|
||||
/// Maximum number of features that can be cached.
|
||||
const CACHE_CAPACITY: u32 = 63;
|
||||
|
||||
|
|
@ -63,6 +69,19 @@ impl Initializer {
|
|||
let v = self.0;
|
||||
self.0 = set_bit(v, bit);
|
||||
}
|
||||
|
||||
/// Unsets the `bit` of the cache.
|
||||
#[inline]
|
||||
pub(crate) fn unset(&mut self, bit: u32) {
|
||||
// FIXME: this way of making sure that the cache is large enough is
|
||||
// brittle.
|
||||
debug_assert!(
|
||||
bit < CACHE_CAPACITY,
|
||||
"too many features, time to increase the cache size!"
|
||||
);
|
||||
let v = self.0;
|
||||
self.0 = unset_bit(v, bit);
|
||||
}
|
||||
}
|
||||
|
||||
/// This global variable is a cache of the features supported by the CPU.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue