From 503a1ef2c3e565494292fb2b06d97a73984e8210 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 2 Sep 2023 15:22:40 +0200 Subject: [PATCH] Simplify _mm_roti_epi64 definition --- .../blake2b/ref/blake2b-compress-sse41.h | 30 +++++++++--------- .../blake2b/ref/blake2b-compress-ssse3.h | 29 ++++++++--------- .../crypto_pwhash/argon2/blamka-round-ssse3.h | 31 +++++++++---------- 3 files changed, 42 insertions(+), 48 deletions(-) diff --git a/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-sse41.h b/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-sse41.h index 07c60493..c4c93f77 100644 --- a/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-sse41.h +++ b/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-sse41.h @@ -5,22 +5,20 @@ #define LOADU(p) _mm_loadu_si128((const __m128i *) (const void *) (p)) #define STOREU(p, r) _mm_storeu_si128((__m128i *) (void *) (p), r) -#ifndef __XOP__ // XOP feature set enabled implies _mm_roti_epi64 is existing AFAIK so no need to define the libsodium replacement. -# ifdef _mm_roti_epi64 // If we have the function macro but not the feature set macro it will fail compiling. -# undef _mm_roti_epi64 // So we hide the existing one and use the one provided by libsodium. Hiding avoids warnings for macro redefinitions. -# endif -# define _mm_roti_epi64(x, c) \ - (-(c) == 32) \ - ? _mm_shuffle_epi32((x), _MM_SHUFFLE(2, 3, 0, 1)) \ - : (-(c) == 24) \ - ? _mm_shuffle_epi8((x), r24) \ - : (-(c) == 16) \ - ? _mm_shuffle_epi8((x), r16) \ - : (-(c) == 63) \ - ? _mm_xor_si128(_mm_srli_epi64((x), -(c)), \ - _mm_add_epi64((x), (x))) \ - : _mm_xor_si128(_mm_srli_epi64((x), -(c)), \ - _mm_slli_epi64((x), 64 - (-(c)))) +#if !(defined(_mm_roti_epi64) && defined(__XOP__)) +#undef _mm_roti_epi64 +#define _mm_roti_epi64(x, c) \ + (-(c) == 32) \ + ? _mm_shuffle_epi32((x), _MM_SHUFFLE(2, 3, 0, 1)) \ + : (-(c) == 24) \ + ? _mm_shuffle_epi8((x), r24) \ + : (-(c) == 16) \ + ? _mm_shuffle_epi8((x), r16) \ + : (-(c) == 63) \ + ? _mm_xor_si128(_mm_srli_epi64((x), -(c)), \ + _mm_add_epi64((x), (x))) \ + : _mm_xor_si128(_mm_srli_epi64((x), -(c)), \ + _mm_slli_epi64((x), 64 - (-(c)))) #endif #define G1(row1l, row2l, row3l, row4l, row1h, row2h, row3h, row4h, b0, b1) \ diff --git a/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ssse3.h b/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ssse3.h index bfb60862..127c0f7e 100644 --- a/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ssse3.h +++ b/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ssse3.h @@ -5,22 +5,19 @@ #define LOADU(p) _mm_loadu_si128((const __m128i *) (const void *) (p)) #define STOREU(p, r) _mm_storeu_si128((__m128i *) (void *) (p), r) -#ifndef __XOP__ // XOP feature set enabled implies _mm_roti_epi64 is existing AFAIK so no need to define the libsodium replacement. -# ifdef _mm_roti_epi64 // If we have the function macro but not the feature set macro it will fail compiling. -# undef _mm_roti_epi64 // So we hide the existing one and use the one provided by libsodium. Hiding avoids warnings for macro redefinitions. -# endif -# define _mm_roti_epi64(x, c) \ - (-(c) == 32) \ - ? _mm_shuffle_epi32((x), _MM_SHUFFLE(2, 3, 0, 1)) \ - : (-(c) == 24) \ - ? _mm_shuffle_epi8((x), r24) \ - : (-(c) == 16) \ - ? _mm_shuffle_epi8((x), r16) \ - : (-(c) == 63) \ - ? _mm_xor_si128(_mm_srli_epi64((x), -(c)), \ - _mm_add_epi64((x), (x))) \ - : _mm_xor_si128(_mm_srli_epi64((x), -(c)), \ - _mm_slli_epi64((x), 64 - (-(c)))) +#if !(defined(_mm_roti_epi64) && defined(__XOP__)) +#define _mm_roti_epi64(x, c) \ + (-(c) == 32) \ + ? _mm_shuffle_epi32((x), _MM_SHUFFLE(2, 3, 0, 1)) \ + : (-(c) == 24) \ + ? _mm_shuffle_epi8((x), r24) \ + : (-(c) == 16) \ + ? _mm_shuffle_epi8((x), r16) \ + : (-(c) == 63) \ + ? _mm_xor_si128(_mm_srli_epi64((x), -(c)), \ + _mm_add_epi64((x), (x))) \ + : _mm_xor_si128(_mm_srli_epi64((x), -(c)), \ + _mm_slli_epi64((x), 64 - (-(c)))) #endif #define G1(row1l, row2l, row3l, row4l, row1h, row2h, row3h, row4h, b0, b1) \ diff --git a/src/libsodium/crypto_pwhash/argon2/blamka-round-ssse3.h b/src/libsodium/crypto_pwhash/argon2/blamka-round-ssse3.h index 18230637..5134b67c 100644 --- a/src/libsodium/crypto_pwhash/argon2/blamka-round-ssse3.h +++ b/src/libsodium/crypto_pwhash/argon2/blamka-round-ssse3.h @@ -8,22 +8,21 @@ (_mm_setr_epi8(2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9)) #define r24 \ (_mm_setr_epi8(3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10)) -#ifndef __XOP__ // XOP feature set enabled implies _mm_roti_epi64 is existing AFAIK so no need to define the libsodium replacement. -# ifdef _mm_roti_epi64 // If we have the function macro but not the feature set macro it will fail compiling. -# undef _mm_roti_epi64 // So we hide the existing one and use the one provided by libsodium. Hiding avoids warnings for macro redefinitions. -# endif -# define _mm_roti_epi64(x, c) \ - (-(c) == 32) \ - ? _mm_shuffle_epi32((x), _MM_SHUFFLE(2, 3, 0, 1)) \ - : (-(c) == 24) \ - ? _mm_shuffle_epi8((x), r24) \ - : (-(c) == 16) \ - ? _mm_shuffle_epi8((x), r16) \ - : (-(c) == 63) \ - ? _mm_xor_si128(_mm_srli_epi64((x), -(c)), \ - _mm_add_epi64((x), (x))) \ - : _mm_xor_si128(_mm_srli_epi64((x), -(c)), \ - _mm_slli_epi64((x), 64 - (-(c)))) + +#if !(defined(_mm_roti_epi64) && defined(__XOP__)) +#undef _mm_roti_epi64 +#define _mm_roti_epi64(x, c) \ + (-(c) == 32) \ + ? _mm_shuffle_epi32((x), _MM_SHUFFLE(2, 3, 0, 1)) \ + : (-(c) == 24) \ + ? _mm_shuffle_epi8((x), r24) \ + : (-(c) == 16) \ + ? _mm_shuffle_epi8((x), r16) \ + : (-(c) == 63) \ + ? _mm_xor_si128(_mm_srli_epi64((x), -(c)), \ + _mm_add_epi64((x), (x))) \ + : _mm_xor_si128(_mm_srli_epi64((x), -(c)), \ + _mm_slli_epi64((x), 64 - (-(c)))) #endif static inline __m128i