aboutsummaryrefslogtreecommitdiffstats
path: root/core/fpu_ctrl.h
blob: 9554313ae047efb8ffb1726518d4cbdd2f76d5a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef CORE_FPU_CTRL_H
#define CORE_FPU_CTRL_H

class FPUCtl {
#if defined(HAVE_SSE_INTRINSICS) || (defined(__GNUC__) && defined(HAVE_SSE))
    unsigned int sse_state{};
#endif
    bool in_mode{};

public:
    FPUCtl() noexcept { enter(); in_mode = true; }
    ~FPUCtl() { if(in_mode) leave(); }

    FPUCtl(const FPUCtl&) = delete;
    FPUCtl& operator=(const FPUCtl&) = delete;

    void enter() noexcept;
    void leave() noexcept;
};

#endif /* CORE_FPU_CTRL_H */