summaryrefslogtreecommitdiff
path: root/validat1.cpp
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2018-08-09 00:06:42 -0400
committerJeffrey Walton <noloader@gmail.com>2018-08-09 00:06:42 -0400
commit5b89e774cc89b00bae587aa21abf2be42840c3fa (patch)
tree2a67d9f67bbdfc7f0d7fe303f8f2452675a336bd /validat1.cpp
parent13b6dac31d3f90c4b2930bcba6a90cc6cc6d4b32 (diff)
downloadcryptopp-git-5b89e774cc89b00bae587aa21abf2be42840c3fa.tar.gz
Add Altivec vector extraction tests
Diffstat (limited to 'validat1.cpp')
-rw-r--r--validat1.cpp33
1 files changed, 31 insertions, 2 deletions
diff --git a/validat1.cpp b/validat1.cpp
index 4a602425..2bbc51f0 100644
--- a/validat1.cpp
+++ b/validat1.cpp
@@ -1067,7 +1067,6 @@ bool TestHuffmanCodes()
bool TestAltivecOps()
{
std::cout << "\nTesting Altivec operations...\n\n";
- bool pass1=true, pass2=true;
if (HasAltivec() == false)
{
@@ -1082,6 +1081,7 @@ bool TestAltivecOps()
// Altivec/POWER4 without POWER7, like on an old PowerMac.
//********** Unaligned loads and stores **********//
+ bool pass1=true;
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};
@@ -1138,6 +1138,7 @@ bool TestAltivecOps()
std::cout << " Altivec loads and stores" << std::endl;
//********** Shifts **********//
+ bool pass2=true;
uint8x16_p val = {0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff};
@@ -1183,7 +1184,35 @@ bool TestAltivecOps()
std::cout << "passed:";
std::cout << " Altivec left and right shifts" << std::endl;
- return pass1 && pass2;
+ //********** 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};
+
+ pass3 = VectorEqual(ex2, VectorGetLow(ex1)) && pass3;
+ CRYPTOPP_ASSERT(pass3);
+ pass3 = VectorEqual(ex3, VectorGetHigh(ex1)) && pass3;
+ CRYPTOPP_ASSERT(pass3);
+
+ uint8x16_p ex4 = VectorShiftRight<8>(VectorShiftLeft<8>(ex1));
+ pass3 = VectorEqual(ex4, VectorGetLow(ex1)) && pass3;
+ CRYPTOPP_ASSERT(pass3);
+ uint8x16_p ex5 = VectorShiftRight<8>(ex1);
+ pass3 = VectorEqual(ex5, VectorGetHigh(ex1)) && pass3;
+ CRYPTOPP_ASSERT(pass3);
+
+ if (!pass3)
+ std::cout << "FAILED:";
+ else
+ std::cout << "passed:";
+ std::cout << " Altivec vector extraction" << std::endl;
+
+ return pass1 && pass2 && pass3;
}
#endif
#endif