Properly handle move semantics in the scoped FTZ

This commit is contained in:
Robbert van der Helm
2021-04-28 12:43:46 +02:00
parent 93f089eca7
commit 160c6acb85
2 changed files with 19 additions and 2 deletions
+15 -1
View File
@@ -54,5 +54,19 @@ ScopedFlushToZero::ScopedFlushToZero() {
}
ScopedFlushToZero::~ScopedFlushToZero() {
_MM_SET_FLUSH_ZERO_MODE(old_ftz_mode);
if (old_ftz_mode) {
_MM_SET_FLUSH_ZERO_MODE(*old_ftz_mode);
}
}
ScopedFlushToZero::ScopedFlushToZero(ScopedFlushToZero&& o)
: old_ftz_mode(std::move(o.old_ftz_mode)) {
o.old_ftz_mode.reset();
}
ScopedFlushToZero& ScopedFlushToZero::operator=(ScopedFlushToZero&& o) {
old_ftz_mode = std::move(o.old_ftz_mode);
o.old_ftz_mode.reset();
return *this;
}