pub struct FpuGuard { /* private fields */ }Expand description
RAII guard that protects a computation from dangerous FPU settings
On creation:
- Triggers one-time FPU check and warning (if not already done)
- If FZ or DAZ is enabled, disables them temporarily
On drop:
- Restores the original FPU state
§Example
ⓘ
{
let _guard = FpuGuard::new_protect_computation();
// Computation here - FZ/DAZ are disabled
perform_svd_computation();
} // Original FPU state is restored here§Performance
The overhead is negligible (a few CPU cycles for stmxcsr/ldmxcsr).
Implementations§
Source§impl FpuGuard
impl FpuGuard
Sourcepub fn new_protect_computation() -> Self
pub fn new_protect_computation() -> Self
Create a new guard that protects computation from FZ/DAZ
- Triggers one-time warning if dangerous FPU settings are detected
- Temporarily disables FZ/DAZ if they are enabled
- Restores original state when dropped
Sourcepub fn was_modified(&self) -> bool
pub fn was_modified(&self) -> bool
Check if the guard needed to modify FPU state
Trait Implementations§
Auto Trait Implementations§
impl Freeze for FpuGuard
impl RefUnwindSafe for FpuGuard
impl Send for FpuGuard
impl Sync for FpuGuard
impl Unpin for FpuGuard
impl UnwindSafe for FpuGuard
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
Source§impl<T> IntoCloned<T> for T
impl<T> IntoCloned<T> for T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.