1 //===-- RegisterValueTest.cpp -----------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "RegisterValue.h" 11 #include "gmock/gmock.h" 12 #include "gtest/gtest.h" 13 14 namespace llvm { 15 namespace exegesis { 16 17 namespace { 18 19 #define CHECK(EXPECTED, ACTUAL) \ 20 EXPECT_EQ(llvm::APInt(SizeInBits, EXPECTED, 16), \ 21 bitcastFloatValue(Semantic, PredefinedValues::ACTUAL)) 22 23 TEST(RegisterValueTest, Half) { 24 const size_t SizeInBits = 16; 25 const auto &Semantic = llvm::APFloatBase::IEEEhalf(); 26 CHECK("0000", POS_ZERO); 27 CHECK("8000", NEG_ZERO); 28 CHECK("3C00", ONE); 29 CHECK("4000", TWO); 30 CHECK("7C00", INF); 31 CHECK("7E00", QNAN); 32 CHECK("7BFF", LARGEST); 33 CHECK("0400", SMALLEST_NORM); 34 CHECK("0001", SMALLEST); 35 CHECK("0001", ULP); 36 CHECK("3C01", ONE_PLUS_ULP); 37 } 38 39 TEST(RegisterValueTest, Single) { 40 const size_t SizeInBits = 32; 41 const auto &Semantic = llvm::APFloatBase::IEEEsingle(); 42 CHECK("00000000", POS_ZERO); 43 CHECK("80000000", NEG_ZERO); 44 CHECK("3F800000", ONE); 45 CHECK("40000000", TWO); 46 CHECK("7F800000", INF); 47 CHECK("7FC00000", QNAN); 48 CHECK("7F7FFFFF", LARGEST); 49 CHECK("00800000", SMALLEST_NORM); 50 CHECK("00000001", SMALLEST); 51 CHECK("00000001", ULP); 52 CHECK("3F800001", ONE_PLUS_ULP); 53 } 54 55 TEST(RegisterValueTest, Double) { 56 const size_t SizeInBits = 64; 57 const auto &Semantic = llvm::APFloatBase::IEEEdouble(); 58 CHECK("0000000000000000", POS_ZERO); 59 CHECK("8000000000000000", NEG_ZERO); 60 CHECK("3FF0000000000000", ONE); 61 CHECK("4000000000000000", TWO); 62 CHECK("7FF0000000000000", INF); 63 CHECK("7FF8000000000000", QNAN); 64 CHECK("7FEFFFFFFFFFFFFF", LARGEST); 65 CHECK("0010000000000000", SMALLEST_NORM); 66 CHECK("0000000000000001", SMALLEST); 67 CHECK("0000000000000001", ULP); 68 CHECK("3FF0000000000001", ONE_PLUS_ULP); 69 } 70 71 } // namespace 72 } // namespace exegesis 73 } // namespace llvm 74