blob: ccfb7f31b7784fdf4fad4c4eca1e5034db190926 [file] [log] [blame]
Karl Schimpf32817482014-12-15 09:52:26 -08001//===-- subzero/src/IceAPFloat.h - Constant float conversions --*- 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/// \file
11/// \brief This file implements a class to represent Subzero float and double
12/// values.
13///
14/// Note: This is a simplified version of
15/// llvm/include/llvm/ADT/APFloat.h for use with Subzero.
16//===----------------------------------------------------------------------===//
17
18#ifndef SUBZERO_SRC_ICEAPFLOAT_H
19#define SUBZERO_SRC_ICEAPFLOAT_H
20
21#include "IceAPInt.h"
22
23namespace Ice {
24
25template <typename IntType, typename FpType>
26inline FpType convertAPIntToFp(const APInt &Int) {
27 static_assert(sizeof(IntType) == sizeof(FpType),
28 "IntType and FpType should be the same width");
29 assert(Int.getBitWidth() == sizeof(IntType) * CHAR_BIT);
30 union {
31 IntType IntValue;
32 FpType FpValue;
33 } Converter;
34 Converter.IntValue = static_cast<IntType>(Int.getRawData());
35 return Converter.FpValue;
36}
37
38} // end of namespace Ice
39
40#endif // SUBZERO_SRC_ICEAPFLOAT_H