aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Heimes <christian@cheimes.de>2012-10-14 02:52:01 +0200
committerChristian Heimes <christian@cheimes.de>2012-10-14 02:52:01 +0200
commit784fde7cb4c5071a62ae775766c35f61951f13f2 (patch)
tree1055dc4f290cf8e05cc34e74d755b8a0d6aad39e /Modules/_sha3
parentKeccak: fromBytesToWord() and fromWordToBytes() are required on 64bit big end... (diff)
downloadcpython-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.c22
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