//===-- RegisterValue.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 "llvm/ADT/APFloat.h" #include "llvm/ADT/StringRef.h" namespace llvm { namespace exegesis { static APFloat getFloatValue(const fltSemantics &FltSemantics, PredefinedValues Value) { switch (Value) { case PredefinedValues::POS_ZERO: return APFloat::getZero(FltSemantics); case PredefinedValues::NEG_ZERO: return APFloat::getZero(FltSemantics, true); case PredefinedValues::ONE: return APFloat(FltSemantics, "1"); case PredefinedValues::TWO: return APFloat(FltSemantics, "2"); case PredefinedValues::INF: return APFloat::getInf(FltSemantics); case PredefinedValues::QNAN: return APFloat::getQNaN(FltSemantics); case PredefinedValues::SMALLEST_NORM: return APFloat::getSmallestNormalized(FltSemantics); case PredefinedValues::LARGEST: return APFloat::getLargest(FltSemantics); case PredefinedValues::ULP: return APFloat::getSmallest(FltSemantics); case PredefinedValues::ONE_PLUS_ULP: auto Output = getFloatValue(FltSemantics, PredefinedValues::ONE); Output.next(false); return Output; } llvm_unreachable("Unhandled exegesis::PredefinedValues"); } APInt bitcastFloatValue(const fltSemantics &FltSemantics, PredefinedValues Value) { return getFloatValue(FltSemantics, Value).bitcastToAPInt(); } } // namespace exegesis } // namespace llvm