diff options
author | Andreas Schwab <schwab@linux-m68k.org> | 2012-01-11 14:47:58 +0100 |
---|---|---|
committer | Charles Harris <charlesr.harris@gmail.com> | 2013-07-29 10:01:39 -0600 |
commit | 7bd1f1303f80f0f79352a3c76b4b29f7c5bd73be (patch) | |
tree | 7262221d5f53fc346c4e3cf3c1ec3bb50d10c69a /numpy/core/src | |
parent | 79106925b1377c6b781fabb61daf505a35564c21 (diff) | |
download | numpy-7bd1f1303f80f0f79352a3c76b4b29f7c5bd73be.tar.gz |
ENH: Add support for Motorola extended float format
Diffstat (limited to 'numpy/core/src')
-rw-r--r-- | numpy/core/src/npymath/npy_math_private.h | 39 | ||||
-rw-r--r-- | numpy/core/src/private/npy_fpmath.h | 1 |
2 files changed, 40 insertions, 0 deletions
diff --git a/numpy/core/src/npymath/npy_math_private.h b/numpy/core/src/npymath/npy_math_private.h index 722d03f94..c6f11f854 100644 --- a/numpy/core/src/npymath/npy_math_private.h +++ b/numpy/core/src/npymath/npy_math_private.h @@ -250,6 +250,45 @@ do { \ typedef npy_uint32 ldouble_man_t; typedef npy_uint32 ldouble_exp_t; typedef npy_uint32 ldouble_sign_t; +#elif defined(HAVE_LDOUBLE_MOTOROLA_EXTENDED_12_BYTES_BE) + /* + * Motorola extended 80 bits precision. Bit representation is + * | s |eeeeeeeeeeeeeee| junk |mmmmmmmm................mmmmmmm| + * | 1 bit | 15 bits | 16 bits| 64 bits | + * | a[0] | a[1] | a[2] | + * + * 16 low bits of a[0] are junk + */ + typedef npy_uint32 IEEEl2bitsrep_part; + +/* my machine */ + + union IEEEl2bitsrep { + npy_longdouble e; + IEEEl2bitsrep_part a[3]; + }; + + #define LDBL_MANL_INDEX 2 + #define LDBL_MANL_MASK 0xFFFFFFFF + #define LDBL_MANL_SHIFT 0 + + #define LDBL_MANH_INDEX 1 + #define LDBL_MANH_MASK 0xFFFFFFFF + #define LDBL_MANH_SHIFT 0 + + #define LDBL_EXP_INDEX 0 + #define LDBL_EXP_MASK 0x7FFF0000 + #define LDBL_EXP_SHIFT 16 + + #define LDBL_SIGN_INDEX 0 + #define LDBL_SIGN_MASK 0x80000000 + #define LDBL_SIGN_SHIFT 31 + + #define LDBL_NBIT 0x80000000 + + typedef npy_uint32 ldouble_man_t; + typedef npy_uint32 ldouble_exp_t; + typedef npy_uint32 ldouble_sign_t; #elif defined(HAVE_LDOUBLE_IEEE_DOUBLE_16_BYTES_BE) || \ defined(HAVE_LDOUBLE_IEEE_DOUBLE_BE) /* 64 bits IEEE double precision aligned on 16 bytes: used by ppc arch on diff --git a/numpy/core/src/private/npy_fpmath.h b/numpy/core/src/private/npy_fpmath.h index 92338e4c7..8a120cab7 100644 --- a/numpy/core/src/private/npy_fpmath.h +++ b/numpy/core/src/private/npy_fpmath.h @@ -40,6 +40,7 @@ defined(HAVE_LDOUBLE_IEEE_DOUBLE_16_BYTES_BE) || \ defined(HAVE_LDOUBLE_INTEL_EXTENDED_16_BYTES_LE) || \ defined(HAVE_LDOUBLE_INTEL_EXTENDED_12_BYTES_LE) || \ + defined(HAVE_LDOUBLE_MOTOROLA_EXTENDED_12_BYTES_BE) || \ defined(HAVE_LDOUBLE_DOUBLE_DOUBLE_BE)) #error No long double representation defined #endif |