From a7615a8c7c59f5c11e784c8d3b39c9030b8929a1 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Sun, 28 Oct 2018 00:48:18 -0400 Subject: [PATCH] Add packed 32-bit Shuffle specializations for ChaCha on Power8 --- chacha-simd.cpp | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/chacha-simd.cpp b/chacha-simd.cpp index 4315f32c..280ae490 100644 --- a/chacha-simd.cpp +++ b/chacha-simd.cpp @@ -262,29 +262,29 @@ inline uint32x4_p RotateRight(const uint32x4_p val) template inline uint32x4_p Shuffle(const uint32x4_p& val) { - switch (S%4) - { - case 1: - { - const uint8x16_p mask = {4,5,6,7, 8,9,10,11, 12,13,14,15, 0,1,2,3}; - return vec_perm(val, val, mask); - } - case 2: - { - const uint8x16_p mask = {8,9,10,11, 12,13,14,15, 0,1,2,3, 4,5,6,7}; - return vec_perm(val, val, mask); - } - case 3: - { - const uint8x16_p mask = {12,13,14,15, 0,1,2,3, 4,5,6,7, 8,9,10,11}; - return vec_perm(val, val, mask); - } - default: - { - CRYPTOPP_ASSERT(0); - return val; - } - } + CRYPTOPP_ASSERT(0); + return val; +} + +template <> +inline uint32x4_p Shuffle<1>(const uint32x4_p& val) +{ + const uint8x16_p mask = {4,5,6,7, 8,9,10,11, 12,13,14,15, 0,1,2,3}; + return vec_perm(val, val, mask); +} + +template <> +inline uint32x4_p Shuffle<2>(const uint32x4_p& val) +{ + const uint8x16_p mask = {8,9,10,11, 12,13,14,15, 0,1,2,3, 4,5,6,7}; + return vec_perm(val, val, mask); +} + +template <> +inline uint32x4_p Shuffle<3>(const uint32x4_p& val) +{ + const uint8x16_p mask = {12,13,14,15, 0,1,2,3, 4,5,6,7, 8,9,10,11}; + return vec_perm(val, val, mask); } // Helper to perform 64-bit addition across two elements of 32-bit vectors