brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · f881aa6 Raw
52 lines · cpp
1//===-- RegisterValue.cpp ---------------------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "RegisterValue.h"10#include "llvm/ADT/APFloat.h"11#include "llvm/ADT/StringRef.h"12 13namespace llvm {14namespace exegesis {15 16static APFloat getFloatValue(const fltSemantics &FltSemantics,17                             PredefinedValues Value) {18  switch (Value) {19  case PredefinedValues::POS_ZERO:20    return APFloat::getZero(FltSemantics);21  case PredefinedValues::NEG_ZERO:22    return APFloat::getZero(FltSemantics, true);23  case PredefinedValues::ONE:24    return APFloat(FltSemantics, "1");25  case PredefinedValues::TWO:26    return APFloat(FltSemantics, "2");27  case PredefinedValues::INF:28    return APFloat::getInf(FltSemantics);29  case PredefinedValues::QNAN:30    return APFloat::getQNaN(FltSemantics);31  case PredefinedValues::SMALLEST_NORM:32    return APFloat::getSmallestNormalized(FltSemantics);33  case PredefinedValues::LARGEST:34    return APFloat::getLargest(FltSemantics);35  case PredefinedValues::ULP:36    return APFloat::getSmallest(FltSemantics);37  case PredefinedValues::ONE_PLUS_ULP:38    auto Output = getFloatValue(FltSemantics, PredefinedValues::ONE);39    Output.next(false);40    return Output;41  }42  llvm_unreachable("Unhandled exegesis::PredefinedValues");43}44 45APInt bitcastFloatValue(const fltSemantics &FltSemantics,46                        PredefinedValues Value) {47  return getFloatValue(FltSemantics, Value).bitcastToAPInt();48}49 50} // namespace exegesis51} // namespace llvm52