| //===-- RegisterValueTest.cpp -----------------------------------*- C++ -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "RegisterValue.h" |
| #include "gmock/gmock.h" |
| #include "gtest/gtest.h" |
| |
| namespace llvm { |
| namespace exegesis { |
| |
| namespace { |
| |
| #define CHECK(EXPECTED, ACTUAL) \ |
| EXPECT_EQ(APInt(SizeInBits, EXPECTED, 16), \ |
| bitcastFloatValue(Semantic, PredefinedValues::ACTUAL)) |
| |
| TEST(RegisterValueTest, Half) { |
| const size_t SizeInBits = 16; |
| const auto &Semantic = APFloatBase::IEEEhalf(); |
| CHECK("0000", POS_ZERO); |
| CHECK("8000", NEG_ZERO); |
| CHECK("3C00", ONE); |
| CHECK("4000", TWO); |
| CHECK("7C00", INF); |
| CHECK("7E00", QNAN); |
| CHECK("7BFF", LARGEST); |
| CHECK("0400", SMALLEST_NORM); |
| CHECK("0001", SMALLEST); |
| CHECK("0001", ULP); |
| CHECK("3C01", ONE_PLUS_ULP); |
| } |
| |
| TEST(RegisterValueTest, Single) { |
| const size_t SizeInBits = 32; |
| const auto &Semantic = APFloatBase::IEEEsingle(); |
| CHECK("00000000", POS_ZERO); |
| CHECK("80000000", NEG_ZERO); |
| CHECK("3F800000", ONE); |
| CHECK("40000000", TWO); |
| CHECK("7F800000", INF); |
| CHECK("7FC00000", QNAN); |
| CHECK("7F7FFFFF", LARGEST); |
| CHECK("00800000", SMALLEST_NORM); |
| CHECK("00000001", SMALLEST); |
| CHECK("00000001", ULP); |
| CHECK("3F800001", ONE_PLUS_ULP); |
| } |
| |
| TEST(RegisterValueTest, Double) { |
| const size_t SizeInBits = 64; |
| const auto &Semantic = APFloatBase::IEEEdouble(); |
| CHECK("0000000000000000", POS_ZERO); |
| CHECK("8000000000000000", NEG_ZERO); |
| CHECK("3FF0000000000000", ONE); |
| CHECK("4000000000000000", TWO); |
| CHECK("7FF0000000000000", INF); |
| CHECK("7FF8000000000000", QNAN); |
| CHECK("7FEFFFFFFFFFFFFF", LARGEST); |
| CHECK("0010000000000000", SMALLEST_NORM); |
| CHECK("0000000000000001", SMALLEST); |
| CHECK("0000000000000001", ULP); |
| CHECK("3FF0000000000001", ONE_PLUS_ULP); |
| } |
| |
| } // namespace |
| } // namespace exegesis |
| } // namespace llvm |