From 5492101fc0a6941cb94692efdef35ffb6f2ebf3e Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Wed, 21 Nov 2018 17:37:19 -0500 Subject: [PATCH] Fix XLC 13.1 debug builds on Linux --- ppc_simd.h | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/ppc_simd.h b/ppc_simd.h index ed1dffed..1707c4d4 100644 --- a/ppc_simd.h +++ b/ppc_simd.h @@ -829,9 +829,11 @@ inline T VecShiftLeftOctet(const T vec) else { #if (CRYPTOPP_BIG_ENDIAN) - return (T)vec_sld((uint8x16_p)vec, (uint8x16_p)zero, C); + enum { R=C&0xf }; + return (T)vec_sld((uint8x16_p)vec, (uint8x16_p)zero, R); #else - return (T)vec_sld((uint8x16_p)zero, (uint8x16_p)vec, 16-C); + enum { R=(16-C)&0xf }; // Linux xlC 13.1 workaround in Debug builds + return (T)vec_sld((uint8x16_p)zero, (uint8x16_p)vec, R); #endif } } @@ -872,9 +874,11 @@ inline T VecShiftRightOctet(const T vec) else { #if (CRYPTOPP_BIG_ENDIAN) - return (T)vec_sld((uint8x16_p)zero, (uint8x16_p)vec, 16-C); + enum { R=(16-C)&0xf }; // Linux xlC 13.1 workaround in Debug builds + return (T)vec_sld((uint8x16_p)zero, (uint8x16_p)vec, R); #else - return (T)vec_sld((uint8x16_p)vec, (uint8x16_p)zero, C); + enum { R=C&0xf }; + return (T)vec_sld((uint8x16_p)vec, (uint8x16_p)zero, R); #endif } } @@ -893,11 +897,12 @@ inline T VecShiftRightOctet(const T vec) template inline T VecRotateLeftOctet(const T vec) { - enum { R = C&0xf }; #if (CRYPTOPP_BIG_ENDIAN) + enum { R = C&0xf }; return (T)vec_sld((uint8x16_p)vec, (uint8x16_p)vec, R); #else - return (T)vec_sld((uint8x16_p)vec, (uint8x16_p)vec, 16-R); + enum { R=(16-C)&0xf }; // Linux xlC 13.1 workaround in Debug builds + return (T)vec_sld((uint8x16_p)vec, (uint8x16_p)vec, R); #endif } @@ -915,10 +920,11 @@ inline T VecRotateLeftOctet(const T vec) template inline T VecRotateRightOctet(const T vec) { - enum { R = C&0xf }; #if (CRYPTOPP_BIG_ENDIAN) - return (T)vec_sld((uint8x16_p)vec, (uint8x16_p)vec, 16-R); + enum { R=(16-C)&0xf }; // Linux xlC 13.1 workaround in Debug builds + return (T)vec_sld((uint8x16_p)vec, (uint8x16_p)vec, R); #else + enum { R = C&0xf }; return (T)vec_sld((uint8x16_p)vec, (uint8x16_p)vec, R); #endif }