]>
Commit | Line | Data |
---|---|---|
2874c5fd | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
0da535c0 AK |
2 | /* |
3 | * Copyright (C) 2015 Anshuman Khandual, IBM Corporation. | |
0da535c0 AK |
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); |