Mercurial > foo_out_sdl
comparison foosdk/sdk/pfc/fpu.h @ 1:20d02a178406 default tip
*: check in everything else
yay
| author | Paper <paper@tflc.us> |
|---|---|
| date | Mon, 05 Jan 2026 02:15:46 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 0:e9bb126753e7 | 1:20d02a178406 |
|---|---|
| 1 #pragma once | |
| 2 | |
| 3 #ifdef _MSC_VER | |
| 4 | |
| 5 class fpu_control | |
| 6 { | |
| 7 unsigned old_val; | |
| 8 unsigned mask; | |
| 9 public: | |
| 10 inline fpu_control(unsigned p_mask,unsigned p_val) | |
| 11 { | |
| 12 mask = p_mask; | |
| 13 _controlfp_s(&old_val,p_val,mask); | |
| 14 } | |
| 15 inline ~fpu_control() | |
| 16 { | |
| 17 unsigned dummy; | |
| 18 _controlfp_s(&dummy,old_val,mask); | |
| 19 } | |
| 20 }; | |
| 21 | |
| 22 class fpu_control_roundnearest : private fpu_control | |
| 23 { | |
| 24 public: | |
| 25 fpu_control_roundnearest() : fpu_control(_MCW_RC,_RC_NEAR) {} | |
| 26 }; | |
| 27 | |
| 28 class fpu_control_flushdenormal : private fpu_control | |
| 29 { | |
| 30 public: | |
| 31 fpu_control_flushdenormal() : fpu_control(_MCW_DN,_DN_FLUSH) {} | |
| 32 }; | |
| 33 | |
| 34 class fpu_control_default : private fpu_control | |
| 35 { | |
| 36 public: | |
| 37 fpu_control_default() : fpu_control(_MCW_DN|_MCW_RC,_DN_FLUSH|_RC_NEAR) {} | |
| 38 }; | |
| 39 | |
| 40 #ifdef _M_IX86 | |
| 41 class sse_control { | |
| 42 public: | |
| 43 sse_control(unsigned p_mask,unsigned p_val) : m_mask(p_mask) { | |
| 44 __control87_2(p_val,p_mask,NULL,&m_oldval); | |
| 45 } | |
| 46 ~sse_control() { | |
| 47 __control87_2(m_oldval,m_mask,NULL,&m_oldval); | |
| 48 } | |
| 49 private: | |
| 50 unsigned m_mask,m_oldval; | |
| 51 }; | |
| 52 class sse_control_flushdenormal : private sse_control { | |
| 53 public: | |
| 54 sse_control_flushdenormal() : sse_control(_MCW_DN,_DN_FLUSH) {} | |
| 55 }; | |
| 56 #endif | |
| 57 | |
| 58 #endif |
