From 1fd8d612ea4b5f7e8a2ba80ddeaec6f355ee47e0 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Tue, 19 Jun 2018 21:35:44 -0400 Subject: [PATCH] Specialize single word UnpackXMM --- cham-simd.cpp | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/cham-simd.cpp b/cham-simd.cpp index f64a7eca..e5476d2a 100644 --- a/cham-simd.cpp +++ b/cham-simd.cpp @@ -121,7 +121,33 @@ inline __m128i UnpackXMM<3>(__m128i a, __m128i b, __m128i c, __m128i d) template inline __m128i UnpackXMM(__m128i v) { - return UnpackXMM(v, v, v, v); + // Should not be instantiated + CRYPTOPP_ASSERT(0);; + return _mm_setzero_si128(); +} + +template <> +inline __m128i UnpackXMM<0>(__m128i v) +{ + return _mm_shuffle_epi8(v, _mm_set_epi8(0,1,2,3, 0,1,2,3, 0,1,2,3, 0,1,2,3)); +} + +template <> +inline __m128i UnpackXMM<1>(__m128i v) +{ + return _mm_shuffle_epi8(v, _mm_set_epi8(4,5,6,7, 4,5,6,7, 4,5,6,7, 4,5,6,7)); +} + +template <> +inline __m128i UnpackXMM<2>(__m128i v) +{ + return _mm_shuffle_epi8(v, _mm_set_epi8(8,9,10,11, 8,9,10,11, 8,9,10,11, 8,9,10,11)); +} + +template <> +inline __m128i UnpackXMM<3>(__m128i v) +{ + return _mm_shuffle_epi8(v, _mm_set_epi8(12,13,14,15, 12,13,14,15, 12,13,14,15, 12,13,14,15)); } template @@ -133,7 +159,7 @@ inline __m128i RepackXMM(__m128i a, __m128i b, __m128i c, __m128i d) template inline __m128i RepackXMM(__m128i v) { - return RepackXMM(v, v, v, v); + return UnpackXMM(v); } inline void GCC_NO_UBSAN CHAM128_Enc_Block(__m128i &block0,