summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/release/1.9.0-notes.rst3
-rw-r--r--numpy/core/include/numpy/npy_cpu.h3
-rw-r--r--numpy/core/include/numpy/npy_endian.h3
-rw-r--r--numpy/core/setup.py2
-rw-r--r--numpy/core/setup_common.py4
-rw-r--r--numpy/core/src/npymath/ieee754.c.src3
-rw-r--r--numpy/core/src/npymath/npy_math_private.h3
-rw-r--r--numpy/core/src/private/npy_fpmath.h5
8 files changed, 21 insertions, 5 deletions
diff --git a/doc/release/1.9.0-notes.rst b/doc/release/1.9.0-notes.rst
index 8a782f459..660450926 100644
--- a/doc/release/1.9.0-notes.rst
+++ b/doc/release/1.9.0-notes.rst
@@ -104,6 +104,9 @@ final two axes instead of raising an exception.
for ``tostring`` which exports arrays as ``bytes``. This is more consistent
in Python 3 where ``str`` and ``bytes`` are not the same.
+Build system
+~~~~~~~~~~~~
+Added experimental support for the ppc64le architecture.
Improvements
============
diff --git a/numpy/core/include/numpy/npy_cpu.h b/numpy/core/include/numpy/npy_cpu.h
index 80bd5fc56..31668afc7 100644
--- a/numpy/core/include/numpy/npy_cpu.h
+++ b/numpy/core/include/numpy/npy_cpu.h
@@ -5,6 +5,7 @@
* NPY_CPU_AMD64
* NPY_CPU_PPC
* NPY_CPU_PPC64
+ * NPY_CPU_PPC64LE
* NPY_CPU_SPARC
* NPY_CPU_S390
* NPY_CPU_IA64
@@ -41,6 +42,8 @@
* _ARCH_PPC is used by at least gcc on AIX
*/
#define NPY_CPU_PPC
+#elif defined(__ppc64le__)
+ #define NPY_CPU_PPC64LE
#elif defined(__ppc64__)
#define NPY_CPU_PPC64
#elif defined(__sparc__) || defined(__sparc)
diff --git a/numpy/core/include/numpy/npy_endian.h b/numpy/core/include/numpy/npy_endian.h
index 36d09232f..44d4326b1 100644
--- a/numpy/core/include/numpy/npy_endian.h
+++ b/numpy/core/include/numpy/npy_endian.h
@@ -27,7 +27,8 @@
|| defined(NPY_CPU_ARMEL) \
|| defined(NPY_CPU_AARCH64) \
|| defined(NPY_CPU_SH_LE) \
- || defined(NPY_CPU_MIPSEL)
+ || defined(NPY_CPU_MIPSEL) \
+ || defined(NPY_CPU_PPC64LE)
#define NPY_BYTE_ORDER NPY_LITTLE_ENDIAN
#elif defined(NPY_CPU_PPC) \
|| defined(NPY_CPU_SPARC) \
diff --git a/numpy/core/setup.py b/numpy/core/setup.py
index a93311ec5..d48368ca1 100644
--- a/numpy/core/setup.py
+++ b/numpy/core/setup.py
@@ -466,7 +466,7 @@ def configuration(parent_package='',top_path=None):
'MOTOROLA_EXTENDED_12_BYTES_BE',
'IEEE_QUAD_LE', 'IEEE_QUAD_BE',
'IEEE_DOUBLE_LE', 'IEEE_DOUBLE_BE',
- 'DOUBLE_DOUBLE_BE']:
+ 'DOUBLE_DOUBLE_BE', 'DOUBLE_DOUBLE_LE']:
moredefs.append(('HAVE_LDOUBLE_%s' % rep, 1))
else:
raise ValueError("Unrecognized long double format: %s" % rep)
diff --git a/numpy/core/setup_common.py b/numpy/core/setup_common.py
index 2db4b4331..d85973daf 100644
--- a/numpy/core/setup_common.py
+++ b/numpy/core/setup_common.py
@@ -256,6 +256,8 @@ _IEEE_QUAD_PREC_BE = ['300', '031', '326', '363', '105', '100', '000', '000',
_IEEE_QUAD_PREC_LE = _IEEE_QUAD_PREC_BE[::-1]
_DOUBLE_DOUBLE_BE = ['301', '235', '157', '064', '124', '000', '000', '000'] + \
['000'] * 8
+_DOUBLE_DOUBLE_LE = ['000', '000', '000', '124', '064', '157', '235', '301'] + \
+ ['000'] * 8
def long_double_representation(lines):
"""Given a binary dump as given by GNU od -b, look for long double
@@ -295,6 +297,8 @@ def long_double_representation(lines):
return 'IEEE_QUAD_LE'
elif read[8:-8] == _DOUBLE_DOUBLE_BE:
return 'DOUBLE_DOUBLE_BE'
+ elif read[8:-8] == _DOUBLE_DOUBLE_LE:
+ return 'DOUBLE_DOUBLE_LE'
elif read[:16] == _BEFORE_SEQ:
if read[16:-8] == _IEEE_DOUBLE_LE:
return 'IEEE_DOUBLE_LE'
diff --git a/numpy/core/src/npymath/ieee754.c.src b/numpy/core/src/npymath/ieee754.c.src
index 5a60bc049..b8f6889e1 100644
--- a/numpy/core/src/npymath/ieee754.c.src
+++ b/numpy/core/src/npymath/ieee754.c.src
@@ -133,7 +133,8 @@ static float _nextf(float x, int p)
return x;
}
-#ifdef HAVE_LDOUBLE_DOUBLE_DOUBLE_BE
+#if defined(HAVE_LDOUBLE_DOUBLE_DOUBLE_BE) || \
+ defined(HAVE_LDOUBLE_DOUBLE_DOUBLE_LE)
/*
* FIXME: this is ugly and untested. The asm part only works with gcc, and we
diff --git a/numpy/core/src/npymath/npy_math_private.h b/numpy/core/src/npymath/npy_math_private.h
index 2bca6bf60..b3b1690be 100644
--- a/numpy/core/src/npymath/npy_math_private.h
+++ b/numpy/core/src/npymath/npy_math_private.h
@@ -435,7 +435,8 @@ do { \
typedef npy_uint32 ldouble_sign_t;
#endif
-#ifndef HAVE_LDOUBLE_DOUBLE_DOUBLE_BE
+#if !defined(HAVE_LDOUBLE_DOUBLE_DOUBLE_BE) && \
+ !defined(HAVE_LDOUBLE_DOUBLE_DOUBLE_LE)
/* Get the sign bit of x. x should be of type IEEEl2bitsrep */
#define GET_LDOUBLE_SIGN(x) \
(((x).a[LDBL_SIGN_INDEX] & LDBL_SIGN_MASK) >> LDBL_SIGN_SHIFT)
diff --git a/numpy/core/src/private/npy_fpmath.h b/numpy/core/src/private/npy_fpmath.h
index 8a120cab7..86b9cf3da 100644
--- a/numpy/core/src/private/npy_fpmath.h
+++ b/numpy/core/src/private/npy_fpmath.h
@@ -29,6 +29,8 @@
#define HAVE_LDOUBLE_INTEL_EXTENDED_16_BYTES_LE
#elif defined(NPY_CPU_PPC) || defined(NPY_CPU_PPC64)
#define HAVE_LDOUBLE_IEEE_DOUBLE_16_BYTES_BE
+ #elif defined(NPY_CPU_PPC64LE)
+ #define HAVE_LDOUBLE_IEEE_DOUBLE_16_BYTES_LE
#endif
#endif
#endif
@@ -41,7 +43,8 @@
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))
+ defined(HAVE_LDOUBLE_DOUBLE_DOUBLE_BE) || \
+ defined(HAVE_LDOUBLE_DOUBLE_DOUBLE_LE))
#error No long double representation defined
#endif