]>
Commit | Line | Data |
---|---|---|
2a367db0 AM |
1 | /* |
2 | * Test program for MSA instruction PCKEV.W | |
3 | * | |
dd8d6a2d AM |
4 | * Copyright (C) 2019 Wave Computing, Inc. |
5 | * Copyright (C) 2019 Aleksandar Markovic <amarkovic@wavecomp.com> | |
2a367db0 AM |
6 | * |
7 | * This program is free software: you can redistribute it and/or modify | |
8 | * it under the terms of the GNU General Public License as published by | |
9 | * the Free Software Foundation, either version 2 of the License, or | |
10 | * (at your option) any later version. | |
11 | *` | |
12 | * This program is distributed in the hope that it will be useful, | |
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | * GNU General Public License for more details. | |
16 | * | |
17 | * You should have received a copy of the GNU General Public License | |
18 | * along with this program. If not, see <https://www.gnu.org/licenses/>. | |
19 | * | |
20 | */ | |
21 | ||
22 | #include <sys/time.h> | |
23 | #include <stdint.h> | |
24 | ||
25 | #include "../../../../include/wrappers_msa.h" | |
81526dff AM |
26 | #include "../../../../include/test_inputs_128.h" |
27 | #include "../../../../include/test_utils_128.h" | |
2a367db0 AM |
28 | |
29 | #define TEST_COUNT_TOTAL ( \ | |
30 | (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ | |
f9fa196b | 31 | 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) |
2a367db0 AM |
32 | |
33 | ||
34 | int32_t main(void) | |
35 | { | |
8e6fe6b8 AM |
36 | char *isa_ase_name = "MSA"; |
37 | char *group_name = "Pack"; | |
38 | char *instruction_name = "PCKEV.W"; | |
2a367db0 AM |
39 | int32_t ret; |
40 | uint32_t i, j; | |
41 | struct timeval start, end; | |
42 | double elapsed_time; | |
43 | ||
44 | uint64_t b128_result[TEST_COUNT_TOTAL][2]; | |
45 | uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { | |
46 | { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 0 */ | |
47 | { 0x0000000000000000ULL, 0xffffffffffffffffULL, }, | |
48 | { 0xaaaaaaaaaaaaaaaaULL, 0xffffffffffffffffULL, }, | |
49 | { 0x5555555555555555ULL, 0xffffffffffffffffULL, }, | |
50 | { 0xccccccccccccccccULL, 0xffffffffffffffffULL, }, | |
51 | { 0x3333333333333333ULL, 0xffffffffffffffffULL, }, | |
52 | { 0xe38e38e38e38e38eULL, 0xffffffffffffffffULL, }, | |
53 | { 0x1c71c71c71c71c71ULL, 0xffffffffffffffffULL, }, | |
54 | { 0xffffffffffffffffULL, 0x0000000000000000ULL, }, /* 8 */ | |
55 | { 0x0000000000000000ULL, 0x0000000000000000ULL, }, | |
56 | { 0xaaaaaaaaaaaaaaaaULL, 0x0000000000000000ULL, }, | |
57 | { 0x5555555555555555ULL, 0x0000000000000000ULL, }, | |
58 | { 0xccccccccccccccccULL, 0x0000000000000000ULL, }, | |
59 | { 0x3333333333333333ULL, 0x0000000000000000ULL, }, | |
60 | { 0xe38e38e38e38e38eULL, 0x0000000000000000ULL, }, | |
61 | { 0x1c71c71c71c71c71ULL, 0x0000000000000000ULL, }, | |
62 | { 0xffffffffffffffffULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 16 */ | |
63 | { 0x0000000000000000ULL, 0xaaaaaaaaaaaaaaaaULL, }, | |
64 | { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, | |
65 | { 0x5555555555555555ULL, 0xaaaaaaaaaaaaaaaaULL, }, | |
66 | { 0xccccccccccccccccULL, 0xaaaaaaaaaaaaaaaaULL, }, | |
67 | { 0x3333333333333333ULL, 0xaaaaaaaaaaaaaaaaULL, }, | |
68 | { 0xe38e38e38e38e38eULL, 0xaaaaaaaaaaaaaaaaULL, }, | |
69 | { 0x1c71c71c71c71c71ULL, 0xaaaaaaaaaaaaaaaaULL, }, | |
70 | { 0xffffffffffffffffULL, 0x5555555555555555ULL, }, /* 24 */ | |
71 | { 0x0000000000000000ULL, 0x5555555555555555ULL, }, | |
72 | { 0xaaaaaaaaaaaaaaaaULL, 0x5555555555555555ULL, }, | |
73 | { 0x5555555555555555ULL, 0x5555555555555555ULL, }, | |
74 | { 0xccccccccccccccccULL, 0x5555555555555555ULL, }, | |
75 | { 0x3333333333333333ULL, 0x5555555555555555ULL, }, | |
76 | { 0xe38e38e38e38e38eULL, 0x5555555555555555ULL, }, | |
77 | { 0x1c71c71c71c71c71ULL, 0x5555555555555555ULL, }, | |
78 | { 0xffffffffffffffffULL, 0xccccccccccccccccULL, }, /* 32 */ | |
79 | { 0x0000000000000000ULL, 0xccccccccccccccccULL, }, | |
80 | { 0xaaaaaaaaaaaaaaaaULL, 0xccccccccccccccccULL, }, | |
81 | { 0x5555555555555555ULL, 0xccccccccccccccccULL, }, | |
82 | { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, | |
83 | { 0x3333333333333333ULL, 0xccccccccccccccccULL, }, | |
84 | { 0xe38e38e38e38e38eULL, 0xccccccccccccccccULL, }, | |
85 | { 0x1c71c71c71c71c71ULL, 0xccccccccccccccccULL, }, | |
86 | { 0xffffffffffffffffULL, 0x3333333333333333ULL, }, /* 40 */ | |
87 | { 0x0000000000000000ULL, 0x3333333333333333ULL, }, | |
88 | { 0xaaaaaaaaaaaaaaaaULL, 0x3333333333333333ULL, }, | |
89 | { 0x5555555555555555ULL, 0x3333333333333333ULL, }, | |
90 | { 0xccccccccccccccccULL, 0x3333333333333333ULL, }, | |
91 | { 0x3333333333333333ULL, 0x3333333333333333ULL, }, | |
92 | { 0xe38e38e38e38e38eULL, 0x3333333333333333ULL, }, | |
93 | { 0x1c71c71c71c71c71ULL, 0x3333333333333333ULL, }, | |
94 | { 0xffffffffffffffffULL, 0xe38e38e38e38e38eULL, }, /* 48 */ | |
95 | { 0x0000000000000000ULL, 0xe38e38e38e38e38eULL, }, | |
96 | { 0xaaaaaaaaaaaaaaaaULL, 0xe38e38e38e38e38eULL, }, | |
97 | { 0x5555555555555555ULL, 0xe38e38e38e38e38eULL, }, | |
98 | { 0xccccccccccccccccULL, 0xe38e38e38e38e38eULL, }, | |
99 | { 0x3333333333333333ULL, 0xe38e38e38e38e38eULL, }, | |
100 | { 0xe38e38e38e38e38eULL, 0xe38e38e38e38e38eULL, }, | |
101 | { 0x1c71c71c71c71c71ULL, 0xe38e38e38e38e38eULL, }, | |
102 | { 0xffffffffffffffffULL, 0x1c71c71c71c71c71ULL, }, /* 56 */ | |
103 | { 0x0000000000000000ULL, 0x1c71c71c71c71c71ULL, }, | |
104 | { 0xaaaaaaaaaaaaaaaaULL, 0x1c71c71c71c71c71ULL, }, | |
105 | { 0x5555555555555555ULL, 0x1c71c71c71c71c71ULL, }, | |
106 | { 0xccccccccccccccccULL, 0x1c71c71c71c71c71ULL, }, | |
107 | { 0x3333333333333333ULL, 0x1c71c71c71c71c71ULL, }, | |
108 | { 0xe38e38e38e38e38eULL, 0x1c71c71c71c71c71ULL, }, | |
109 | { 0x1c71c71c71c71c71ULL, 0x1c71c71c71c71c71ULL, }, | |
110 | { 0xfe7bb00c28625540ULL, 0xfe7bb00c28625540ULL, }, /* 64 */ | |
111 | { 0x153f52fc4d93c708ULL, 0xfe7bb00c28625540ULL, }, | |
112 | { 0xab2b2514b9cf8b80ULL, 0xfe7bb00c28625540ULL, }, | |
113 | { 0xa942e2a05e31e24eULL, 0xfe7bb00c28625540ULL, }, | |
114 | { 0xfe7bb00c28625540ULL, 0x153f52fc4d93c708ULL, }, | |
115 | { 0x153f52fc4d93c708ULL, 0x153f52fc4d93c708ULL, }, | |
116 | { 0xab2b2514b9cf8b80ULL, 0x153f52fc4d93c708ULL, }, | |
117 | { 0xa942e2a05e31e24eULL, 0x153f52fc4d93c708ULL, }, | |
118 | { 0xfe7bb00c28625540ULL, 0xab2b2514b9cf8b80ULL, }, /* 72 */ | |
119 | { 0x153f52fc4d93c708ULL, 0xab2b2514b9cf8b80ULL, }, | |
120 | { 0xab2b2514b9cf8b80ULL, 0xab2b2514b9cf8b80ULL, }, | |
121 | { 0xa942e2a05e31e24eULL, 0xab2b2514b9cf8b80ULL, }, | |
122 | { 0xfe7bb00c28625540ULL, 0xa942e2a05e31e24eULL, }, | |
123 | { 0x153f52fc4d93c708ULL, 0xa942e2a05e31e24eULL, }, | |
124 | { 0xab2b2514b9cf8b80ULL, 0xa942e2a05e31e24eULL, }, | |
125 | { 0xa942e2a05e31e24eULL, 0xa942e2a05e31e24eULL, }, | |
23dd244b AM |
126 | { 0xfe7bb00c28625540ULL, 0x5e31e24e5e31e24eULL, }, /* 80 */ |
127 | { 0x153f52fc4d93c708ULL, 0x5e31e24e28625540ULL, }, | |
128 | { 0xab2b2514b9cf8b80ULL, 0x286255404d93c708ULL, }, | |
129 | { 0xa942e2a05e31e24eULL, 0x4d93c708b9cf8b80ULL, }, | |
130 | { 0xfe7bb00c28625540ULL, 0xb9cf8b805e31e24eULL, }, | |
131 | { 0x153f52fc4d93c708ULL, 0x5e31e24e28625540ULL, }, | |
132 | { 0xab2b2514b9cf8b80ULL, 0x286255404d93c708ULL, }, | |
133 | { 0xa942e2a05e31e24eULL, 0x4d93c708b9cf8b80ULL, }, | |
134 | { 0xfe7bb00c28625540ULL, 0xb9cf8b805e31e24eULL, }, /* 88 */ | |
135 | { 0x153f52fc4d93c708ULL, 0x5e31e24e28625540ULL, }, | |
136 | { 0xab2b2514b9cf8b80ULL, 0x286255404d93c708ULL, }, | |
137 | { 0xa942e2a05e31e24eULL, 0x4d93c708b9cf8b80ULL, }, | |
138 | { 0xfe7bb00c28625540ULL, 0xb9cf8b805e31e24eULL, }, | |
139 | { 0x153f52fc4d93c708ULL, 0x5e31e24e28625540ULL, }, | |
140 | { 0xab2b2514b9cf8b80ULL, 0x286255404d93c708ULL, }, | |
141 | { 0xa942e2a05e31e24eULL, 0x4d93c708b9cf8b80ULL, }, | |
142 | { 0xb9cf8b805e31e24eULL, 0xfe7bb00c28625540ULL, }, /* 96 */ | |
143 | { 0x286255405e31e24eULL, 0xfe7bb00c28625540ULL, }, | |
144 | { 0x286255405e31e24eULL, 0xfe7bb00c28625540ULL, }, | |
145 | { 0x286255405e31e24eULL, 0xfe7bb00c28625540ULL, }, | |
146 | { 0x286255405e31e24eULL, 0x153f52fc4d93c708ULL, }, | |
147 | { 0x4d93c7085e31e24eULL, 0x153f52fc4d93c708ULL, }, | |
148 | { 0x4d93c7085e31e24eULL, 0x153f52fc4d93c708ULL, }, | |
149 | { 0x4d93c7085e31e24eULL, 0x153f52fc4d93c708ULL, }, | |
150 | { 0x4d93c7085e31e24eULL, 0xab2b2514b9cf8b80ULL, }, /* 104 */ | |
151 | { 0xb9cf8b805e31e24eULL, 0xab2b2514b9cf8b80ULL, }, | |
152 | { 0xb9cf8b805e31e24eULL, 0xab2b2514b9cf8b80ULL, }, | |
153 | { 0xb9cf8b805e31e24eULL, 0xab2b2514b9cf8b80ULL, }, | |
154 | { 0xb9cf8b805e31e24eULL, 0xa942e2a05e31e24eULL, }, | |
155 | { 0x5e31e24e5e31e24eULL, 0xa942e2a05e31e24eULL, }, | |
156 | { 0x5e31e24e5e31e24eULL, 0xa942e2a05e31e24eULL, }, | |
157 | { 0x5e31e24e5e31e24eULL, 0xa942e2a05e31e24eULL, }, | |
2a367db0 AM |
158 | }; |
159 | ||
ca693d1c AM |
160 | reset_msa_registers(); |
161 | ||
2a367db0 AM |
162 | gettimeofday(&start, NULL); |
163 | ||
164 | for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { | |
165 | for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { | |
166 | do_msa_PCKEV_W(b128_pattern[i], b128_pattern[j], | |
167 | b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); | |
168 | } | |
169 | } | |
170 | ||
171 | for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { | |
172 | for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { | |
173 | do_msa_PCKEV_W(b128_random[i], b128_random[j], | |
174 | b128_result[((PATTERN_INPUTS_SHORT_COUNT) * | |
175 | (PATTERN_INPUTS_SHORT_COUNT)) + | |
176 | RANDOM_INPUTS_SHORT_COUNT * i + j]); | |
177 | } | |
178 | } | |
179 | ||
f9fa196b AM |
180 | for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { |
181 | for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { | |
182 | do_msa_PCKEV_W__DDT(b128_random[i], b128_random[j], | |
183 | b128_result[ | |
184 | ((PATTERN_INPUTS_SHORT_COUNT) * | |
185 | (PATTERN_INPUTS_SHORT_COUNT)) + | |
186 | ((RANDOM_INPUTS_SHORT_COUNT) * | |
187 | (RANDOM_INPUTS_SHORT_COUNT)) + | |
188 | RANDOM_INPUTS_SHORT_COUNT * i + j]); | |
189 | } | |
190 | } | |
191 | ||
192 | for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { | |
193 | for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { | |
194 | do_msa_PCKEV_W__DSD(b128_random[i], b128_random[j], | |
195 | b128_result[ | |
196 | ((PATTERN_INPUTS_SHORT_COUNT) * | |
197 | (PATTERN_INPUTS_SHORT_COUNT)) + | |
198 | (2 * (RANDOM_INPUTS_SHORT_COUNT) * | |
199 | (RANDOM_INPUTS_SHORT_COUNT)) + | |
200 | RANDOM_INPUTS_SHORT_COUNT * i + j]); | |
201 | } | |
202 | } | |
203 | ||
2a367db0 AM |
204 | gettimeofday(&end, NULL); |
205 | ||
206 | elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; | |
207 | elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; | |
208 | ||
8e6fe6b8 AM |
209 | ret = check_results_128(isa_ase_name, group_name, instruction_name, |
210 | TEST_COUNT_TOTAL, elapsed_time, | |
211 | &b128_result[0][0], &b128_expect[0][0]); | |
2a367db0 AM |
212 | |
213 | return ret; | |
214 | } |