base: Add some functions to convert floats to bits and vice versa.
These make it easier to extract the binary representation of floats and doubles, and given a binary representation convert it back again. The versions with a size prefix are safer to use since they make it clear what size inputs/outputs are expected. The versions without are to make writing generic code easier in case the same code snippet, templated function, etc., needs to be applied in both circumstances. Change-Id: Ib1f35a7e88e00806a7c639c211c5699b4af5a472 Reviewed-on: https://gem5-review.googlesource.com/c/14455 Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Maintainer: Gabe Black <gabeblack@google.com>
This commit is contained in:
@@ -168,6 +168,60 @@ const Addr MaxAddr = (Addr)-1;
|
||||
typedef uint64_t RegVal;
|
||||
typedef double FloatRegVal;
|
||||
|
||||
static inline uint32_t
|
||||
floatToBits32(float val)
|
||||
{
|
||||
union
|
||||
{
|
||||
float f;
|
||||
uint32_t i;
|
||||
} u;
|
||||
u.f = val;
|
||||
return u.i;
|
||||
}
|
||||
|
||||
static inline uint64_t
|
||||
floatToBits64(double val)
|
||||
{
|
||||
union
|
||||
{
|
||||
double f;
|
||||
uint64_t i;
|
||||
} u;
|
||||
u.f = val;
|
||||
return u.i;
|
||||
}
|
||||
|
||||
static inline uint64_t floatToBits(double val) { return floatToBits64(val); }
|
||||
static inline uint32_t floatToBits(float val) { return floatToBits32(val); }
|
||||
|
||||
static inline float
|
||||
bitsToFloat32(uint32_t val)
|
||||
{
|
||||
union
|
||||
{
|
||||
float f;
|
||||
uint32_t i;
|
||||
} u;
|
||||
u.i = val;
|
||||
return u.f;
|
||||
}
|
||||
|
||||
static inline double
|
||||
bitsToFloat64(uint64_t val)
|
||||
{
|
||||
union
|
||||
{
|
||||
double f;
|
||||
uint64_t i;
|
||||
} u;
|
||||
u.i = val;
|
||||
return u.f;
|
||||
}
|
||||
|
||||
static inline double bitsToFloat(uint64_t val) { return bitsToFloat64(val); }
|
||||
static inline float bitsToFloat(uint32_t val) { return bitsToFloat32(val); }
|
||||
|
||||
/**
|
||||
* Thread index/ID type
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user