2016-02-06 21:57:11 +00:00
|
|
|
/*
|
|
|
|
* This set (target) cpu specific macros:
|
|
|
|
* - Possible values:
|
|
|
|
* NPY_CPU_X86
|
|
|
|
* NPY_CPU_AMD64
|
|
|
|
* NPY_CPU_PPC
|
|
|
|
* NPY_CPU_PPC64
|
|
|
|
* NPY_CPU_SPARC
|
|
|
|
* NPY_CPU_S390
|
|
|
|
* NPY_CPU_IA64
|
|
|
|
* NPY_CPU_HPPA
|
|
|
|
* NPY_CPU_ALPHA
|
|
|
|
* NPY_CPU_ARMEL
|
|
|
|
* NPY_CPU_ARMEB
|
|
|
|
* NPY_CPU_SH_LE
|
|
|
|
* NPY_CPU_SH_BE
|
|
|
|
*/
|
|
|
|
#ifndef _NPY_CPUARCH_H_
|
|
|
|
#define _NPY_CPUARCH_H_
|
|
|
|
|
|
|
|
#include "numpyconfig.h"
|
|
|
|
|
|
|
|
#if defined( __i386__ ) || defined(i386) || defined(_M_IX86)
|
|
|
|
/*
|
|
|
|
* __i386__ is defined by gcc and Intel compiler on Linux,
|
|
|
|
* _M_IX86 by VS compiler,
|
|
|
|
* i386 by Sun compilers on opensolaris at least
|
|
|
|
*/
|
|
|
|
#define NPY_CPU_X86
|
|
|
|
#elif defined(__x86_64__) || defined(__amd64__) || defined(__x86_64) || defined(_M_AMD64)
|
|
|
|
/*
|
|
|
|
* both __x86_64__ and __amd64__ are defined by gcc
|
|
|
|
* __x86_64 defined by sun compiler on opensolaris at least
|
|
|
|
* _M_AMD64 defined by MS compiler
|
|
|
|
*/
|
|
|
|
#define NPY_CPU_AMD64
|
|
|
|
#elif defined(__ppc__) || defined(__powerpc__) || defined(_ARCH_PPC)
|
|
|
|
/*
|
|
|
|
* __ppc__ is defined by gcc, I remember having seen __powerpc__ once,
|
|
|
|
* but can't find it ATM
|
|
|
|
* _ARCH_PPC is used by at least gcc on AIX
|
|
|
|
*/
|
|
|
|
#define NPY_CPU_PPC
|
|
|
|
#elif defined(__ppc64__)
|
|
|
|
#define NPY_CPU_PPC64
|
|
|
|
#elif defined(__sparc__) || defined(__sparc)
|
|
|
|
/* __sparc__ is defined by gcc and Forte (e.g. Sun) compilers */
|
|
|
|
#define NPY_CPU_SPARC
|
|
|
|
#elif defined(__s390__)
|
|
|
|
#define NPY_CPU_S390
|
|
|
|
#elif defined(__ia64)
|
|
|
|
#define NPY_CPU_IA64
|
|
|
|
#elif defined(__hppa)
|
|
|
|
#define NPY_CPU_HPPA
|
|
|
|
#elif defined(__alpha__)
|
|
|
|
#define NPY_CPU_ALPHA
|
|
|
|
#elif defined(__arm__) && defined(__ARMEL__)
|
|
|
|
#define NPY_CPU_ARMEL
|
|
|
|
#elif defined(__arm__) && defined(__ARMEB__)
|
|
|
|
#define NPY_CPU_ARMEB
|
|
|
|
#elif defined(__sh__) && defined(__LITTLE_ENDIAN__)
|
|
|
|
#define NPY_CPU_SH_LE
|
|
|
|
#elif defined(__sh__) && defined(__BIG_ENDIAN__)
|
|
|
|
#define NPY_CPU_SH_BE
|
|
|
|
#elif defined(__MIPSEL__)
|
|
|
|
#define NPY_CPU_MIPSEL
|
|
|
|
#elif defined(__MIPSEB__)
|
|
|
|
#define NPY_CPU_MIPSEB
|
|
|
|
#elif defined(__aarch64__)
|
|
|
|
#define NPY_CPU_AARCH64
|
|
|
|
#else
|
|
|
|
#error Unknown CPU, please report this to numpy maintainers with \
|
|
|
|
information about your platform (OS, CPU and compiler)
|
|
|
|
#endif
|
|
|
|
|
2016-04-19 17:50:42 +00:00
|
|
|
/*
|
|
|
|
This "white-lists" the architectures that we know don't require
|
|
|
|
pointer alignment. We white-list, since the memcpy version will
|
|
|
|
work everywhere, whereas assignment will only work where pointer
|
|
|
|
dereferencing doesn't require alignment.
|
2016-02-06 21:57:11 +00:00
|
|
|
|
2016-04-19 17:50:42 +00:00
|
|
|
TODO: There may be more architectures we can white list.
|
|
|
|
*/
|
|
|
|
#if defined(NPY_CPU_X86) || defined(NPY_CPU_AMD64)
|
|
|
|
#define NPY_COPY_PYOBJECT_PTR(dst, src) (*((PyObject **)(dst)) = *((PyObject **)(src)))
|
2016-02-06 21:57:11 +00:00
|
|
|
#else
|
2016-04-19 17:50:42 +00:00
|
|
|
#if NPY_SIZEOF_PY_INTPTR_T == 4
|
|
|
|
#define NPY_COPY_PYOBJECT_PTR(dst, src) \
|
|
|
|
((char*)(dst))[0] = ((char*)(src))[0]; \
|
|
|
|
((char*)(dst))[1] = ((char*)(src))[1]; \
|
|
|
|
((char*)(dst))[2] = ((char*)(src))[2]; \
|
|
|
|
((char*)(dst))[3] = ((char*)(src))[3];
|
|
|
|
#elif NPY_SIZEOF_PY_INTPTR_T == 8
|
|
|
|
#define NPY_COPY_PYOBJECT_PTR(dst, src) \
|
|
|
|
((char*)(dst))[0] = ((char*)(src))[0]; \
|
|
|
|
((char*)(dst))[1] = ((char*)(src))[1]; \
|
|
|
|
((char*)(dst))[2] = ((char*)(src))[2]; \
|
|
|
|
((char*)(dst))[3] = ((char*)(src))[3]; \
|
|
|
|
((char*)(dst))[4] = ((char*)(src))[4]; \
|
|
|
|
((char*)(dst))[5] = ((char*)(src))[5]; \
|
|
|
|
((char*)(dst))[6] = ((char*)(src))[6]; \
|
|
|
|
((char*)(dst))[7] = ((char*)(src))[7];
|
|
|
|
#else
|
|
|
|
#error Unknown architecture, please report this to numpy maintainers with \
|
|
|
|
information about your platform (OS, CPU and compiler)
|
|
|
|
#endif
|
2016-02-06 21:57:11 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif
|