summaryrefslogtreecommitdiff
path: root/numpy/core/src
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@linux-m68k.org>2012-01-11 14:47:58 +0100
committerCharles Harris <charlesr.harris@gmail.com>2013-07-29 10:01:39 -0600
commit7bd1f1303f80f0f79352a3c76b4b29f7c5bd73be (patch)
tree7262221d5f53fc346c4e3cf3c1ec3bb50d10c69a /numpy/core/src
parent79106925b1377c6b781fabb61daf505a35564c21 (diff)
downloadnumpy-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.h39
-rw-r--r--numpy/core/src/private/npy_fpmath.h1
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