mirror of
https://github.com/love2d/megasource.git
synced 2026-08-12 08:30:59 +02:00
33 lines
669 B
C++
33 lines
669 B
C++
#ifndef CORE_FPU_CTRL_H
|
|
#define CORE_FPU_CTRL_H
|
|
|
|
class FPUCtl {
|
|
unsigned int sse_state{};
|
|
bool in_mode{};
|
|
|
|
static unsigned int Set() noexcept;
|
|
static void Reset(unsigned int state) noexcept;
|
|
|
|
public:
|
|
FPUCtl() noexcept : sse_state{Set()}, in_mode{true} { }
|
|
~FPUCtl() { if(in_mode) Reset(sse_state); }
|
|
|
|
FPUCtl(const FPUCtl&) = delete;
|
|
FPUCtl& operator=(const FPUCtl&) = delete;
|
|
|
|
void enter() noexcept
|
|
{
|
|
if(!in_mode)
|
|
sse_state = Set();
|
|
in_mode = true;
|
|
}
|
|
void leave() noexcept
|
|
{
|
|
if(in_mode)
|
|
Reset(sse_state);
|
|
in_mode = false;
|
|
}
|
|
};
|
|
|
|
#endif /* CORE_FPU_CTRL_H */
|