1*71db0c75SAndroid Build Coastguard Worker //===-- RoundingModeUtils.h -------------------------------------*- C++ -*-===// 2*71db0c75SAndroid Build Coastguard Worker // 3*71db0c75SAndroid Build Coastguard Worker // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*71db0c75SAndroid Build Coastguard Worker // See https://llvm.org/LICENSE.txt for license information. 5*71db0c75SAndroid Build Coastguard Worker // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*71db0c75SAndroid Build Coastguard Worker // 7*71db0c75SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 8*71db0c75SAndroid Build Coastguard Worker 9*71db0c75SAndroid Build Coastguard Worker #ifndef LLVM_LIBC_TEST_UNITTEST_ROUNDINGMODEUTILS_H 10*71db0c75SAndroid Build Coastguard Worker #define LLVM_LIBC_TEST_UNITTEST_ROUNDINGMODEUTILS_H 11*71db0c75SAndroid Build Coastguard Worker 12*71db0c75SAndroid Build Coastguard Worker #include "src/__support/macros/config.h" 13*71db0c75SAndroid Build Coastguard Worker #include <stdint.h> 14*71db0c75SAndroid Build Coastguard Worker 15*71db0c75SAndroid Build Coastguard Worker namespace LIBC_NAMESPACE_DECL { 16*71db0c75SAndroid Build Coastguard Worker namespace fputil { 17*71db0c75SAndroid Build Coastguard Worker namespace testing { 18*71db0c75SAndroid Build Coastguard Worker 19*71db0c75SAndroid Build Coastguard Worker enum class RoundingMode : uint8_t { Upward, Downward, TowardZero, Nearest }; 20*71db0c75SAndroid Build Coastguard Worker 21*71db0c75SAndroid Build Coastguard Worker struct ForceRoundingMode { 22*71db0c75SAndroid Build Coastguard Worker ForceRoundingMode(RoundingMode); 23*71db0c75SAndroid Build Coastguard Worker ~ForceRoundingMode(); 24*71db0c75SAndroid Build Coastguard Worker 25*71db0c75SAndroid Build Coastguard Worker int old_rounding_mode; 26*71db0c75SAndroid Build Coastguard Worker int rounding_mode; 27*71db0c75SAndroid Build Coastguard Worker bool success; 28*71db0c75SAndroid Build Coastguard Worker }; 29*71db0c75SAndroid Build Coastguard Worker 30*71db0c75SAndroid Build Coastguard Worker template <RoundingMode R> struct ForceRoundingModeTest : ForceRoundingMode { ForceRoundingModeTestForceRoundingModeTest31*71db0c75SAndroid Build Coastguard Worker ForceRoundingModeTest() : ForceRoundingMode(R) {} 32*71db0c75SAndroid Build Coastguard Worker }; 33*71db0c75SAndroid Build Coastguard Worker 34*71db0c75SAndroid Build Coastguard Worker } // namespace testing 35*71db0c75SAndroid Build Coastguard Worker } // namespace fputil 36*71db0c75SAndroid Build Coastguard Worker } // namespace LIBC_NAMESPACE_DECL 37*71db0c75SAndroid Build Coastguard Worker 38*71db0c75SAndroid Build Coastguard Worker #endif // LLVM_LIBC_TEST_UNITTEST_ROUNDINGMODEUTILS_H 39