1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 3 * Copyright (C) 2015 Anshuman Khandual, IBM Corporation. 4 */ 5 #define VEC_MAX 128 6 #define VSX_MAX 32 7 #define VMX_MAX 32 8 9 /* 10 * unsigned long vsx[32] 11 * unsigned long load[128] 12 */ 13 int validate_vsx(unsigned long *vsx, unsigned long *load) 14 { 15 int i; 16 17 for (i = 0; i < VSX_MAX; i++) { 18 if (vsx[i] != load[2 * i + 1]) { 19 printf("vsx[%d]: %lx load[%d] %lx\n", 20 i, vsx[i], 2 * i + 1, load[2 * i + 1]); 21 return TEST_FAIL; 22 } 23 } 24 return TEST_PASS; 25 } 26 27 /* 28 * unsigned long vmx[32][2] 29 * unsigned long load[128] 30 */ 31 int validate_vmx(unsigned long vmx[][2], unsigned long *load) 32 { 33 int i; 34 35 for (i = 0; i < VMX_MAX; i++) { 36 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ 37 if ((vmx[i][0] != load[64 + 2 * i]) || 38 (vmx[i][1] != load[65 + 2 * i])) { 39 printf("vmx[%d][0]: %lx load[%d] %lx\n", 40 i, vmx[i][0], 64 + 2 * i, 41 load[64 + 2 * i]); 42 printf("vmx[%d][1]: %lx load[%d] %lx\n", 43 i, vmx[i][1], 65 + 2 * i, 44 load[65 + 2 * i]); 45 return TEST_FAIL; 46 } 47 #else /* 48 * In LE each value pair is stored in an 49 * alternate manner. 50 */ 51 if ((vmx[i][0] != load[65 + 2 * i]) || 52 (vmx[i][1] != load[64 + 2 * i])) { 53 printf("vmx[%d][0]: %lx load[%d] %lx\n", 54 i, vmx[i][0], 65 + 2 * i, 55 load[65 + 2 * i]); 56 printf("vmx[%d][1]: %lx load[%d] %lx\n", 57 i, vmx[i][1], 64 + 2 * i, 58 load[64 + 2 * i]); 59 return TEST_FAIL; 60 } 61 #endif 62 } 63 return TEST_PASS; 64 } 65 66 /* 67 * unsigned long store[128] 68 * unsigned long load[128] 69 */ 70 int compare_vsx_vmx(unsigned long *store, unsigned long *load) 71 { 72 int i; 73 74 for (i = 0; i < VSX_MAX; i++) { 75 if (store[1 + 2 * i] != load[1 + 2 * i]) { 76 printf("store[%d]: %lx load[%d] %lx\n", 77 1 + 2 * i, store[i], 78 1 + 2 * i, load[i]); 79 return TEST_FAIL; 80 } 81 } 82 83 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ 84 for (i = 64; i < VEC_MAX; i++) { 85 if (store[i] != load[i]) { 86 printf("store[%d]: %lx load[%d] %lx\n", 87 i, store[i], i, load[i]); 88 return TEST_FAIL; 89 } 90 } 91 #else /* In LE each value pair is stored in an alternate manner */ 92 for (i = 64; i < VEC_MAX; i++) { 93 if (!(i % 2) && (store[i] != load[i+1])) { 94 printf("store[%d]: %lx load[%d] %lx\n", 95 i, store[i], i+1, load[i+1]); 96 return TEST_FAIL; 97 } 98 if ((i % 2) && (store[i] != load[i-1])) { 99 printf("here store[%d]: %lx load[%d] %lx\n", 100 i, store[i], i-1, load[i-1]); 101 return TEST_FAIL; 102 } 103 } 104 #endif 105 return TEST_PASS; 106 } 107 108 void load_vsx_vmx(unsigned long *load, unsigned long *vsx, 109 unsigned long vmx[][2]) 110 { 111 int i; 112 113 for (i = 0; i < VSX_MAX; i++) 114 vsx[i] = load[1 + 2 * i]; 115 116 for (i = 0; i < VMX_MAX; i++) { 117 vmx[i][0] = load[64 + 2 * i]; 118 vmx[i][1] = load[65 + 2 * i]; 119 } 120 } 121 122 void loadvsx(void *p, int tmp); 123 void storevsx(void *p, int tmp); 124