From 59b8fcfa5f736dff4a08ebcac032935b6fd92f34 Mon Sep 17 00:00:00 2001 From: Jim Laskey Date: Wed, 17 Aug 2005 17:27:47 +0000 Subject: [PATCH] Added support for converting raw bits to FP, and FP to raw bits. The intent is to avoid the distraction of the union declarations. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22830 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Support/MathExtras.h | 44 +++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/include/llvm/Support/MathExtras.h b/include/llvm/Support/MathExtras.h index ae3f752cc78..3dcb3a3972c 100644 --- a/include/llvm/Support/MathExtras.h +++ b/include/llvm/Support/MathExtras.h @@ -168,6 +168,50 @@ inline unsigned Log2_64(uint64_t Value) { return 63 - CountLeadingZeros_64(Value); } +// BitsToDouble - This function takes a 64-bit integer and returns the bit +// equivalent double. +inline double BitsToDouble(uint64_t Bits) { + union { + uint64_t L; + double D; + } T; + T.L = Bits; + return T.D; +} + +// BitsToFloat - This function takes a 32-bit integer and returns the bit +// equivalent float. +inline float BitsToFloat(unsigned Bits) { + union { + unsigned I; + float F; + } T; + T.I = Bits; + return T.F; +} + +// DoubleToBits - This function takes a double and returns the bit +// equivalent 64-bit integer. +inline uint64_t DoubleToBits(double Double) { + union { + uint64_t L; + double D; + } T; + T.D = Double; + return T.L; +} + +// FloatToBits - This function takes a float and returns the bit +// equivalent 32-bit integer. +inline unsigned FloatToBits(float Float) { + union { + unsigned I; + float F; + } T; + T.F = Float; + return T.I; +} + // Platform-independent wrappers for the C99 isnan() function. int IsNAN (float f); int IsNAN (double d); -- 2.34.1