12874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
20da535c0SAnshuman Khandual /*
30da535c0SAnshuman Khandual  * Copyright (C) 2015 Anshuman Khandual, IBM Corporation.
40da535c0SAnshuman Khandual  */
50da535c0SAnshuman Khandual #define VEC_MAX 128
60da535c0SAnshuman Khandual #define VSX_MAX 32
70da535c0SAnshuman Khandual #define VMX_MAX 32
80da535c0SAnshuman Khandual 
90da535c0SAnshuman Khandual /*
100da535c0SAnshuman Khandual  * unsigned long vsx[32]
110da535c0SAnshuman Khandual  * unsigned long load[128]
120da535c0SAnshuman Khandual  */
validate_vsx(unsigned long * vsx,unsigned long * load)130da535c0SAnshuman Khandual int validate_vsx(unsigned long *vsx, unsigned long *load)
140da535c0SAnshuman Khandual {
150da535c0SAnshuman Khandual 	int i;
160da535c0SAnshuman Khandual 
170da535c0SAnshuman Khandual 	for (i = 0; i < VSX_MAX; i++) {
180da535c0SAnshuman Khandual 		if (vsx[i] != load[2 * i + 1]) {
190da535c0SAnshuman Khandual 			printf("vsx[%d]: %lx load[%d] %lx\n",
200da535c0SAnshuman Khandual 					i, vsx[i], 2 * i + 1, load[2 * i + 1]);
210da535c0SAnshuman Khandual 			return TEST_FAIL;
220da535c0SAnshuman Khandual 		}
230da535c0SAnshuman Khandual 	}
240da535c0SAnshuman Khandual 	return TEST_PASS;
250da535c0SAnshuman Khandual }
260da535c0SAnshuman Khandual 
270da535c0SAnshuman Khandual /*
280da535c0SAnshuman Khandual  * unsigned long vmx[32][2]
290da535c0SAnshuman Khandual  * unsigned long load[128]
300da535c0SAnshuman Khandual  */
validate_vmx(unsigned long vmx[][2],unsigned long * load)310da535c0SAnshuman Khandual int validate_vmx(unsigned long vmx[][2], unsigned long *load)
320da535c0SAnshuman Khandual {
330da535c0SAnshuman Khandual 	int i;
340da535c0SAnshuman Khandual 
350da535c0SAnshuman Khandual 	for (i = 0; i < VMX_MAX; i++) {
360da535c0SAnshuman Khandual 		#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
370da535c0SAnshuman Khandual 		if ((vmx[i][0] != load[64 + 2 * i]) ||
380da535c0SAnshuman Khandual 				(vmx[i][1] != load[65 + 2 * i])) {
390da535c0SAnshuman Khandual 			printf("vmx[%d][0]: %lx load[%d] %lx\n",
400da535c0SAnshuman Khandual 					i, vmx[i][0], 64 + 2 * i,
410da535c0SAnshuman Khandual 					load[64 + 2 * i]);
420da535c0SAnshuman Khandual 			printf("vmx[%d][1]: %lx load[%d] %lx\n",
430da535c0SAnshuman Khandual 					i, vmx[i][1], 65 + 2 * i,
440da535c0SAnshuman Khandual 					load[65 + 2 * i]);
450da535c0SAnshuman Khandual 			return TEST_FAIL;
460da535c0SAnshuman Khandual 		}
470da535c0SAnshuman Khandual 		#else  /*
480da535c0SAnshuman Khandual 			* In LE each value pair is stored in an
490da535c0SAnshuman Khandual 			* alternate manner.
500da535c0SAnshuman Khandual 			*/
510da535c0SAnshuman Khandual 		if ((vmx[i][0] != load[65 + 2 * i]) ||
520da535c0SAnshuman Khandual 				(vmx[i][1] != load[64 + 2 * i])) {
530da535c0SAnshuman Khandual 			printf("vmx[%d][0]: %lx load[%d] %lx\n",
540da535c0SAnshuman Khandual 					i, vmx[i][0], 65 + 2 * i,
550da535c0SAnshuman Khandual 					load[65 + 2 * i]);
560da535c0SAnshuman Khandual 			printf("vmx[%d][1]: %lx load[%d] %lx\n",
570da535c0SAnshuman Khandual 					i, vmx[i][1], 64 + 2 * i,
580da535c0SAnshuman Khandual 					load[64 + 2 * i]);
590da535c0SAnshuman Khandual 			return TEST_FAIL;
600da535c0SAnshuman Khandual 		}
610da535c0SAnshuman Khandual 		#endif
620da535c0SAnshuman Khandual 	}
630da535c0SAnshuman Khandual 	return TEST_PASS;
640da535c0SAnshuman Khandual }
650da535c0SAnshuman Khandual 
660da535c0SAnshuman Khandual /*
670da535c0SAnshuman Khandual  * unsigned long store[128]
680da535c0SAnshuman Khandual  * unsigned long load[128]
690da535c0SAnshuman Khandual  */
compare_vsx_vmx(unsigned long * store,unsigned long * load)700da535c0SAnshuman Khandual int compare_vsx_vmx(unsigned long *store, unsigned long *load)
710da535c0SAnshuman Khandual {
720da535c0SAnshuman Khandual 	int i;
730da535c0SAnshuman Khandual 
740da535c0SAnshuman Khandual 	for (i = 0; i < VSX_MAX; i++) {
750da535c0SAnshuman Khandual 		if (store[1 + 2 * i] != load[1 + 2 * i]) {
760da535c0SAnshuman Khandual 			printf("store[%d]: %lx load[%d] %lx\n",
770da535c0SAnshuman Khandual 					1 + 2 * i, store[i],
780da535c0SAnshuman Khandual 					1 + 2 * i, load[i]);
790da535c0SAnshuman Khandual 			return TEST_FAIL;
800da535c0SAnshuman Khandual 		}
810da535c0SAnshuman Khandual 	}
820da535c0SAnshuman Khandual 
830da535c0SAnshuman Khandual 	#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
840da535c0SAnshuman Khandual 	for (i = 64; i < VEC_MAX; i++) {
850da535c0SAnshuman Khandual 		if (store[i] != load[i]) {
860da535c0SAnshuman Khandual 			printf("store[%d]: %lx load[%d] %lx\n",
870da535c0SAnshuman Khandual 					i, store[i], i, load[i]);
880da535c0SAnshuman Khandual 			return TEST_FAIL;
890da535c0SAnshuman Khandual 		}
900da535c0SAnshuman Khandual 	}
910da535c0SAnshuman Khandual 	#else	/* In LE each value pair is stored in an alternate manner */
920da535c0SAnshuman Khandual 	for (i = 64; i < VEC_MAX; i++) {
930da535c0SAnshuman Khandual 		if (!(i % 2) && (store[i] != load[i+1])) {
940da535c0SAnshuman Khandual 			printf("store[%d]: %lx load[%d] %lx\n",
950da535c0SAnshuman Khandual 					i, store[i], i+1, load[i+1]);
960da535c0SAnshuman Khandual 			return TEST_FAIL;
970da535c0SAnshuman Khandual 		}
980da535c0SAnshuman Khandual 		if ((i % 2) && (store[i] != load[i-1])) {
990da535c0SAnshuman Khandual 			printf("here store[%d]: %lx load[%d] %lx\n",
1000da535c0SAnshuman Khandual 					i, store[i], i-1, load[i-1]);
1010da535c0SAnshuman Khandual 			return TEST_FAIL;
1020da535c0SAnshuman Khandual 		}
1030da535c0SAnshuman Khandual 	}
1040da535c0SAnshuman Khandual 	#endif
1050da535c0SAnshuman Khandual 	return TEST_PASS;
1060da535c0SAnshuman Khandual }
1070da535c0SAnshuman Khandual 
load_vsx_vmx(unsigned long * load,unsigned long * vsx,unsigned long vmx[][2])1080da535c0SAnshuman Khandual void load_vsx_vmx(unsigned long *load, unsigned long *vsx,
1090da535c0SAnshuman Khandual 		unsigned long vmx[][2])
1100da535c0SAnshuman Khandual {
1110da535c0SAnshuman Khandual 	int i;
1120da535c0SAnshuman Khandual 
1130da535c0SAnshuman Khandual 	for (i = 0; i < VSX_MAX; i++)
1140da535c0SAnshuman Khandual 		vsx[i] = load[1 + 2 * i];
1150da535c0SAnshuman Khandual 
1160da535c0SAnshuman Khandual 	for (i = 0; i < VMX_MAX; i++) {
1170da535c0SAnshuman Khandual 		vmx[i][0] = load[64 + 2 * i];
1180da535c0SAnshuman Khandual 		vmx[i][1] = load[65 + 2 * i];
1190da535c0SAnshuman Khandual 	}
1200da535c0SAnshuman Khandual }
1210da535c0SAnshuman Khandual 
1220da535c0SAnshuman Khandual void loadvsx(void *p, int tmp);
1230da535c0SAnshuman Khandual void storevsx(void *p, int tmp);
124