Add a RAII wrapper for enabling flush-to-zero

This commit is contained in:
Robbert van der Helm
2021-04-27 22:59:59 +02:00
parent 73d9f5f9b8
commit 3aac8e3483
2 changed files with 35 additions and 0 deletions
+25
View File
@@ -83,3 +83,28 @@ std::optional<int> get_realtime_priority();
* user does not have the privileges to set realtime priorities.
*/
bool set_realtime_priority(bool sched_fifo, int priority = 5);
/**
* A RAII wrapper that will temporarily enable the FTZ flag so that denormals
* are automatically flushed to zero, returning to whatever the flag was
* previously when it drops out of scope.
*/
class ScopedFlushToZero {
ScopedFlushToZero();
~ScopedFlushToZero();
ScopedFlushToZero(const ScopedFlushToZero&) = delete;
ScopedFlushToZero& operator=(const ScopedFlushToZero&) = delete;
ScopedFlushToZero(ScopedFlushToZero&&) = delete;
ScopedFlushToZero& operator=(ScopedFlushToZero&&) = delete;
private:
/**
* The previous FTZ mode. When we use this on the Wine side, this should
* always be disabled. But, we'll make sure to do it correctly anyhow so we
* don't accidentally end up disabling FTZ somewhere where it should be
* enabled.
*/
unsigned int old_ftz_mode;
};