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