E.g. on MIPS64 it gives >20% improvement...
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/8261)
# define KECCAK_2X /* default to KECCAK_2X variant */
#endif
-#if defined(__i386) || defined(__i386__) || defined(_M_IX86)
+#if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \
+ (defined(__x86_64) && !defined(__BMI__)) || defined(_M_X64) || \
+ defined(__mips) || defined(__riscv) || defined(__s390__) || \
+ defined(__EMSCRIPTEN__)
+/*
+ * These don't have "and with complement" instruction, so minimize amount
+ * of "not"-s. Implemented only in the [default] KECCAK_2X variant.
+ */
# define KECCAK_COMPLEMENTING_TRANSFORM
#endif