summaryrefslogtreecommitdiff
path: root/py/misc.h
diff options
context:
space:
mode:
Diffstat (limited to 'py/misc.h')
-rw-r--r--py/misc.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/py/misc.h b/py/misc.h
index 12bf7b38e..50feaf7e4 100644
--- a/py/misc.h
+++ b/py/misc.h
@@ -211,14 +211,37 @@ extern mp_uint_t mp_verbose_flag;
/** float internals *************/
#if MICROPY_PY_BUILTINS_FLOAT
+
#if MICROPY_FLOAT_IMPL == MICROPY_FLOAT_IMPL_DOUBLE
#define MP_FLOAT_EXP_BITS (11)
#define MP_FLOAT_FRAC_BITS (52)
+typedef uint64_t mp_float_uint_t;
#elif MICROPY_FLOAT_IMPL == MICROPY_FLOAT_IMPL_FLOAT
#define MP_FLOAT_EXP_BITS (8)
#define MP_FLOAT_FRAC_BITS (23)
+typedef uint32_t mp_float_uint_t;
#endif
+
#define MP_FLOAT_EXP_BIAS ((1 << (MP_FLOAT_EXP_BITS - 1)) - 1)
+
+typedef union _mp_float_union_t {
+ mp_float_t f;
+ #if MP_ENDIANNESS_LITTLE
+ struct {
+ mp_float_uint_t frc : MP_FLOAT_FRAC_BITS;
+ mp_float_uint_t exp : MP_FLOAT_EXP_BITS;
+ mp_float_uint_t sgn : 1;
+ } p;
+ #else
+ struct {
+ mp_float_uint_t sgn : 1
+ mp_float_uint_t exp : MP_FLOAT_EXP_BITS;
+ mp_float_uint_t frc : MP_FLOAT_FRAC_BITS;
+ } p;
+ #endif
+ mp_float_uint_t i;
+} mp_float_union_t;
+
#endif // MICROPY_PY_BUILTINS_FLOAT
#endif // MICROPY_INCLUDED_PY_MISC_H