diff options
author | Christian Heimes <christian@cheimes.de> | 2012-10-14 02:52:01 +0200 |
---|---|---|
committer | Christian Heimes <christian@cheimes.de> | 2012-10-14 02:52:01 +0200 |
commit | 784fde7cb4c5071a62ae775766c35f61951f13f2 (patch) | |
tree | 1055dc4f290cf8e05cc34e74d755b8a0d6aad39e /Modules/_sha3 | |
parent | Keccak: fromBytesToWord() and fromWordToBytes() are required on 64bit big end... (diff) | |
download | cpython-784fde7cb4c5071a62ae775766c35f61951f13f2.tar.gz cpython-784fde7cb4c5071a62ae775766c35f61951f13f2.tar.bz2 cpython-784fde7cb4c5071a62ae775766c35f61951f13f2.zip |
Force 32bit Keccak implementation on SPARC. It look like the Solaris CC compiler doesn't like the address alignment.
Diffstat (limited to 'Modules/_sha3')
-rw-r--r-- | Modules/_sha3/sha3module.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/Modules/_sha3/sha3module.c b/Modules/_sha3/sha3module.c index 56850e6c395..38bda75f9da 100644 --- a/Modules/_sha3/sha3module.c +++ b/Modules/_sha3/sha3module.c @@ -95,21 +95,27 @@ * * *************************************************************************/ -#if SIZEOF_VOID_P == 8 && defined(PY_UINT64_T) - /* 64bit platforms with unsigned int64 */ - #define KeccakImplementation 64 +#ifdef __sparc + /* On SPARC with Solaris CC opt64 fails with 'invalid address alignment' */ + #define KeccakOpt 32 +#elif SIZEOF_VOID_P == 8 + #define KeccakOpt 64 +#elif SIZEOF_VOID_P == 4 + #define KeccakOpt 32 +#endif + +#if KeccakOpt == 64 && defined(PY_UINT64_T) + /* 64bit platforms with unsigned int64 */ #define Unrolling 24 #define UseBebigokimisa typedef PY_UINT64_T UINT64; -#elif SIZEOF_VOID_P == 4 && defined(PY_UINT64_T) +#elif KeccakOpt == 32 && defined(PY_UINT64_T) /* 32bit platforms with unsigned int64 */ - #define KeccakImplementation 32 #define Unrolling 2 #define UseSchedule 3 typedef PY_UINT64_T UINT64; #else /* 32 or 64bit platforms without unsigned int64 */ - #define KeccakImplementation 32 #define Unrolling 2 #define UseSchedule 3 #define UseInterleaveTables @@ -125,9 +131,9 @@ #include "keccak/KeccakNISTInterface.h" #include "keccak/KeccakNISTInterface.c" #include "keccak/KeccakSponge.c" -#if KeccakImplementation == 64 +#if KeccakOpt == 64 #include "keccak/KeccakF-1600-opt64.c" -#elif KeccakImplementation == 32 +#elif KeccakOpt == 32 #include "keccak/KeccakF-1600-opt32.c" #endif |