1 #ifndef FORTRAN_TEST_EVALUATE_FP_TESTING_H_
2 #define FORTRAN_TEST_EVALUATE_FP_TESTING_H_
3 
4 #include "flang/Evaluate/common.h"
5 #include <fenv.h>
6 
7 using Fortran::common::RoundingMode;
8 using Fortran::evaluate::RealFlags;
9 using Fortran::evaluate::Rounding;
10 
11 class ScopedHostFloatingPointEnvironment {
12 public:
13   ScopedHostFloatingPointEnvironment(bool treatSubnormalOperandsAsZero = false,
14       bool flushSubnormalResultsToZero = false);
15   ~ScopedHostFloatingPointEnvironment();
16   void ClearFlags() const;
17   static RealFlags CurrentFlags();
18   static void SetRounding(Rounding rounding);
19 
20 private:
21   fenv_t originalFenv_;
22 #if __x86_64__
23   unsigned int originalMxcsr;
24 #endif
25 };
26 
27 #endif // FORTRAN_TEST_EVALUATE_FP_TESTING_H_
28