From 92808945c19b0301b0594ad612174d3f41915c1b Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Sun, 20 Jan 2019 19:34:09 -0500 Subject: [PATCH] Fix TestAltivecOps on AIX --- ppc_simd.h | 8 ++++---- validat1.cpp | 22 +++++++++++++--------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/ppc_simd.h b/ppc_simd.h index bae862cfe..9f818039d 100644 --- a/ppc_simd.h +++ b/ppc_simd.h @@ -1362,9 +1362,9 @@ inline T VecSwapWords(const T vec) template inline T VecGetLow(const T val) { -#if (CRYPTOPP_BIG_ENDIAN) +#if (CRYPTOPP_BIG_ENDIAN) && (_ARCH_PWR8) const T zero = {0}; - return VecMergeLo(zero, val); + return (T)VecMergeLo((uint64x2_p)zero, (uint64x2_p)val); #else return VecShiftRightOctet<8>(VecShiftLeftOctet<8>(val)); #endif @@ -1384,9 +1384,9 @@ inline T VecGetLow(const T val) template inline T VecGetHigh(const T val) { -#if (CRYPTOPP_BIG_ENDIAN) +#if (CRYPTOPP_BIG_ENDIAN) && (_ARCH_PWR8) const T zero = {0}; - return VecMergeHi(zero, val); + return (T)VecMergeHi((uint64x2_p)zero, (uint64x2_p)val); #else return VecShiftRightOctet<8>(val); #endif diff --git a/validat1.cpp b/validat1.cpp index 39392b945..db5238802 100644 --- a/validat1.cpp +++ b/validat1.cpp @@ -1085,9 +1085,9 @@ bool TestAltivecOps() CRYPTOPP_ALIGN_DATA(16) byte dest[20], src[20] = {23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4}; - const byte st1[16] ={22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7}; - const byte st2[16] ={21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6}; - const byte st3[16] ={20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5}; + const byte st1[16] = {22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7}; + const byte st2[16] = {21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6}; + const byte st3[16] = {20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5}; VecStore(VecLoad(src), dest); pass1 = (0 == std::memcmp(src, dest, 16)) && pass1; @@ -1187,12 +1187,16 @@ bool TestAltivecOps() //********** Extraction **********// bool pass3=true; - uint8x16_p ex1 = {0x1f,0x1e,0x1d,0x1c, 0x1b,0x1a,0x19,0x18, - 0x17,0x16,0x15,0x14, 0x13,0x12,0x11,0x10}; - uint8x16_p ex2 = {0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, - 0x17,0x16,0x15,0x14, 0x13,0x12,0x11,0x10}; - uint8x16_p ex3 = {0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, - 0x1f,0x1e,0x1d,0x1c, 0x1b,0x1a,0x19,0x18}; + const byte bex1[] = {0x1f,0x1e,0x1d,0x1c, 0x1b,0x1a,0x19,0x18, + 0x17,0x16,0x15,0x14, 0x13,0x12,0x11,0x10}; + const byte bex2[] = {0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, + 0x17,0x16,0x15,0x14, 0x13,0x12,0x11,0x10}; + const byte bex3[] = {0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, + 0x1f,0x1e,0x1d,0x1c, 0x1b,0x1a,0x19,0x18}; + + const uint8x16_p ex1 = (uint8x16_p)VecLoad(bex1); + const uint8x16_p ex2 = (uint8x16_p)VecLoad(bex2); + const uint8x16_p ex3 = (uint8x16_p)VecLoad(bex3); pass3 = VecEqual(ex2, VecGetLow(ex1)) && pass3; CRYPTOPP_ASSERT(pass3);