--- sse-intrinsics.c-md5opt 2012-03-21 04:51:56 +0000 +++ sse-intrinsics.c 2012-03-21 05:33:39 +0000 @@ -17,17 +17,19 @@ #include "MD5_std.h" #ifndef __XOP__ +#define _mm_slli_epi32a(a, s) \ + ((s) == 1 ? _mm_add_epi32((a), (a)) : _mm_slli_epi32((a), (s))) #ifdef __SSSE3__ #include #define rot16_mask _mm_set_epi64x(0x0d0c0f0e09080b0aL, 0x0504070601000302UL) #define _mm_roti_epi32(a, s) \ ((s) == 16 ? _mm_shuffle_epi8((a), rot16_mask) : \ - _mm_or_si128(_mm_slli_epi32((a), (s)), _mm_srli_epi32((a), 32-(s)))) + _mm_or_si128(_mm_slli_epi32a((a), (s)), _mm_srli_epi32((a), 32-(s)))) #else #define _mm_roti_epi32(a, s) \ ((s) == 16 ? \ _mm_shufflelo_epi16(_mm_shufflehi_epi16((a), 0xb1), 0xb1) : \ - _mm_or_si128(_mm_slli_epi32((a), (s)), _mm_srli_epi32((a), 32-(s)))) + _mm_or_si128(_mm_slli_epi32a((a), (s)), _mm_srli_epi32((a), 32-(s)))) #endif #endif