test/compiler/6340864/TestShortVect.java

changeset 4001
006050192a5a
child 4204
b2c669fd8114
equal deleted inserted replaced
3981:d5ec46c7da5c 4001:006050192a5a
1 /*
2 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 /**
26 * @test
27 * @bug 6340864
28 * @summary Implement vectorization optimizations in hotspot-server
29 *
30 * @run main/othervm/timeout=400 -Xbatch -Xmx64m TestShortVect
31 */
32
33 public class TestShortVect {
34 private static final int ARRLEN = 997;
35 private static final int ITERS = 11000;
36 private static final int ADD_INIT = Short.MAX_VALUE-500;
37 private static final int BIT_MASK = 0xB731;
38 private static final int VALUE = 7;
39 private static final int SHIFT = 16;
40
41 public static void main(String args[]) {
42 System.out.println("Testing Short vectors");
43 int errn = test();
44 if (errn > 0) {
45 System.err.println("FAILED: " + errn + " errors");
46 System.exit(97);
47 }
48 System.out.println("PASSED");
49 }
50
51 static int test() {
52 short[] a0 = new short[ARRLEN];
53 short[] a1 = new short[ARRLEN];
54 short[] a2 = new short[ARRLEN];
55 short[] a3 = new short[ARRLEN];
56 short[] a4 = new short[ARRLEN];
57 int[] p2 = new int[ARRLEN/2];
58 long[] p4 = new long[ARRLEN/4];
59 // Initialize
60 int gold_sum = 0;
61 for (int i=0; i<ARRLEN; i++) {
62 short val = (short)(ADD_INIT+i);
63 gold_sum += val;
64 a1[i] = val;
65 a2[i] = (short)VALUE;
66 a3[i] = (short)-VALUE;
67 a4[i] = (short)BIT_MASK;
68 }
69 System.out.println("Warmup");
70 for (int i=0; i<ITERS; i++) {
71 test_sum(a1);
72 test_addc(a0, a1);
73 test_addv(a0, a1, (short)VALUE);
74 test_adda(a0, a1, a2);
75 test_subc(a0, a1);
76 test_subv(a0, a1, (short)VALUE);
77 test_suba(a0, a1, a2);
78 test_mulc(a0, a1);
79 test_mulv(a0, a1, (short)VALUE);
80 test_mula(a0, a1, a2);
81 test_divc(a0, a1);
82 test_divv(a0, a1, (short)VALUE);
83 test_diva(a0, a1, a2);
84 test_mulc_n(a0, a1);
85 test_mulv(a0, a1, (short)-VALUE);
86 test_mula(a0, a1, a3);
87 test_divc_n(a0, a1);
88 test_divv(a0, a1, (short)-VALUE);
89 test_diva(a0, a1, a3);
90 test_andc(a0, a1);
91 test_andv(a0, a1, (short)BIT_MASK);
92 test_anda(a0, a1, a4);
93 test_orc(a0, a1);
94 test_orv(a0, a1, (short)BIT_MASK);
95 test_ora(a0, a1, a4);
96 test_xorc(a0, a1);
97 test_xorv(a0, a1, (short)BIT_MASK);
98 test_xora(a0, a1, a4);
99 test_sllc(a0, a1);
100 test_sllv(a0, a1, VALUE);
101 test_srlc(a0, a1);
102 test_srlv(a0, a1, VALUE);
103 test_srac(a0, a1);
104 test_srav(a0, a1, VALUE);
105 test_sllc_n(a0, a1);
106 test_sllv(a0, a1, -VALUE);
107 test_srlc_n(a0, a1);
108 test_srlv(a0, a1, -VALUE);
109 test_srac_n(a0, a1);
110 test_srav(a0, a1, -VALUE);
111 test_sllc_o(a0, a1);
112 test_sllv(a0, a1, SHIFT);
113 test_srlc_o(a0, a1);
114 test_srlv(a0, a1, SHIFT);
115 test_srac_o(a0, a1);
116 test_srav(a0, a1, SHIFT);
117 test_sllc_on(a0, a1);
118 test_sllv(a0, a1, -SHIFT);
119 test_srlc_on(a0, a1);
120 test_srlv(a0, a1, -SHIFT);
121 test_srac_on(a0, a1);
122 test_srav(a0, a1, -SHIFT);
123 test_pack2(p2, a1);
124 test_unpack2(a0, p2);
125 test_pack2_swap(p2, a1);
126 test_unpack2_swap(a0, p2);
127 test_pack4(p4, a1);
128 test_unpack4(a0, p4);
129 test_pack4_swap(p4, a1);
130 test_unpack4_swap(a0, p4);
131 }
132 // Test and verify results
133 System.out.println("Verification");
134 int errn = 0;
135 {
136 int sum = test_sum(a1);
137 if (sum != gold_sum) {
138 System.err.println("test_sum: " + sum + " != " + gold_sum);
139 errn++;
140 }
141
142 test_addc(a0, a1);
143 for (int i=0; i<ARRLEN; i++) {
144 errn += verify("test_addc: ", i, a0[i], (short)((short)(ADD_INIT+i)+VALUE));
145 }
146 test_addv(a0, a1, (short)VALUE);
147 for (int i=0; i<ARRLEN; i++) {
148 errn += verify("test_addv: ", i, a0[i], (short)((short)(ADD_INIT+i)+VALUE));
149 }
150 test_adda(a0, a1, a2);
151 for (int i=0; i<ARRLEN; i++) {
152 errn += verify("test_adda: ", i, a0[i], (short)((short)(ADD_INIT+i)+VALUE));
153 }
154
155 test_subc(a0, a1);
156 for (int i=0; i<ARRLEN; i++) {
157 errn += verify("test_subc: ", i, a0[i], (short)((short)(ADD_INIT+i)-VALUE));
158 }
159 test_subv(a0, a1, (short)VALUE);
160 for (int i=0; i<ARRLEN; i++) {
161 errn += verify("test_subv: ", i, a0[i], (short)((short)(ADD_INIT+i)-VALUE));
162 }
163 test_suba(a0, a1, a2);
164 for (int i=0; i<ARRLEN; i++) {
165 errn += verify("test_suba: ", i, a0[i], (short)((short)(ADD_INIT+i)-VALUE));
166 }
167
168 test_mulc(a0, a1);
169 for (int i=0; i<ARRLEN; i++) {
170 errn += verify("test_mulc: ", i, a0[i], (short)((short)(ADD_INIT+i)*VALUE));
171 }
172 test_mulv(a0, a1, (short)VALUE);
173 for (int i=0; i<ARRLEN; i++) {
174 errn += verify("test_mulv: ", i, a0[i], (short)((short)(ADD_INIT+i)*VALUE));
175 }
176 test_mula(a0, a1, a2);
177 for (int i=0; i<ARRLEN; i++) {
178 errn += verify("test_mula: ", i, a0[i], (short)((short)(ADD_INIT+i)*VALUE));
179 }
180
181 test_divc(a0, a1);
182 for (int i=0; i<ARRLEN; i++) {
183 errn += verify("test_divc: ", i, a0[i], (short)((short)(ADD_INIT+i)/VALUE));
184 }
185 test_divv(a0, a1, (short)VALUE);
186 for (int i=0; i<ARRLEN; i++) {
187 errn += verify("test_divv: ", i, a0[i], (short)((short)(ADD_INIT+i)/VALUE));
188 }
189 test_diva(a0, a1, a2);
190 for (int i=0; i<ARRLEN; i++) {
191 errn += verify("test_diva: ", i, a0[i], (short)((short)(ADD_INIT+i)/VALUE));
192 }
193
194 test_mulc_n(a0, a1);
195 for (int i=0; i<ARRLEN; i++) {
196 errn += verify("test_mulc_n: ", i, a0[i], (short)((short)(ADD_INIT+i)*(-VALUE)));
197 }
198 test_mulv(a0, a1, (short)-VALUE);
199 for (int i=0; i<ARRLEN; i++) {
200 errn += verify("test_mulv_n: ", i, a0[i], (short)((short)(ADD_INIT+i)*(-VALUE)));
201 }
202 test_mula(a0, a1, a3);
203 for (int i=0; i<ARRLEN; i++) {
204 errn += verify("test_mula_n: ", i, a0[i], (short)((short)(ADD_INIT+i)*(-VALUE)));
205 }
206
207 test_divc_n(a0, a1);
208 for (int i=0; i<ARRLEN; i++) {
209 errn += verify("test_divc_n: ", i, a0[i], (short)((short)(ADD_INIT+i)/(-VALUE)));
210 }
211 test_divv(a0, a1, (short)-VALUE);
212 for (int i=0; i<ARRLEN; i++) {
213 errn += verify("test_divv_n: ", i, a0[i], (short)((short)(ADD_INIT+i)/(-VALUE)));
214 }
215 test_diva(a0, a1, a3);
216 for (int i=0; i<ARRLEN; i++) {
217 errn += verify("test_diva_n: ", i, a0[i], (short)((short)(ADD_INIT+i)/(-VALUE)));
218 }
219
220 test_andc(a0, a1);
221 for (int i=0; i<ARRLEN; i++) {
222 errn += verify("test_andc: ", i, a0[i], (short)((short)(ADD_INIT+i)&BIT_MASK));
223 }
224 test_andv(a0, a1, (short)BIT_MASK);
225 for (int i=0; i<ARRLEN; i++) {
226 errn += verify("test_andv: ", i, a0[i], (short)((short)(ADD_INIT+i)&BIT_MASK));
227 }
228 test_anda(a0, a1, a4);
229 for (int i=0; i<ARRLEN; i++) {
230 errn += verify("test_anda: ", i, a0[i], (short)((short)(ADD_INIT+i)&BIT_MASK));
231 }
232
233 test_orc(a0, a1);
234 for (int i=0; i<ARRLEN; i++) {
235 errn += verify("test_orc: ", i, a0[i], (short)((short)(ADD_INIT+i)|BIT_MASK));
236 }
237 test_orv(a0, a1, (short)BIT_MASK);
238 for (int i=0; i<ARRLEN; i++) {
239 errn += verify("test_orv: ", i, a0[i], (short)((short)(ADD_INIT+i)|BIT_MASK));
240 }
241 test_ora(a0, a1, a4);
242 for (int i=0; i<ARRLEN; i++) {
243 errn += verify("test_ora: ", i, a0[i], (short)((short)(ADD_INIT+i)|BIT_MASK));
244 }
245
246 test_xorc(a0, a1);
247 for (int i=0; i<ARRLEN; i++) {
248 errn += verify("test_xorc: ", i, a0[i], (short)((short)(ADD_INIT+i)^BIT_MASK));
249 }
250 test_xorv(a0, a1, (short)BIT_MASK);
251 for (int i=0; i<ARRLEN; i++) {
252 errn += verify("test_xorv: ", i, a0[i], (short)((short)(ADD_INIT+i)^BIT_MASK));
253 }
254 test_xora(a0, a1, a4);
255 for (int i=0; i<ARRLEN; i++) {
256 errn += verify("test_xora: ", i, a0[i], (short)((short)(ADD_INIT+i)^BIT_MASK));
257 }
258
259 test_sllc(a0, a1);
260 for (int i=0; i<ARRLEN; i++) {
261 errn += verify("test_sllc: ", i, a0[i], (short)((short)(ADD_INIT+i)<<VALUE));
262 }
263 test_sllv(a0, a1, VALUE);
264 for (int i=0; i<ARRLEN; i++) {
265 errn += verify("test_sllv: ", i, a0[i], (short)((short)(ADD_INIT+i)<<VALUE));
266 }
267
268 test_srlc(a0, a1);
269 for (int i=0; i<ARRLEN; i++) {
270 errn += verify("test_srlc: ", i, a0[i], (short)((short)(ADD_INIT+i)>>>VALUE));
271 }
272 test_srlv(a0, a1, VALUE);
273 for (int i=0; i<ARRLEN; i++) {
274 errn += verify("test_srlv: ", i, a0[i], (short)((short)(ADD_INIT+i)>>>VALUE));
275 }
276
277 test_srac(a0, a1);
278 for (int i=0; i<ARRLEN; i++) {
279 errn += verify("test_srac: ", i, a0[i], (short)((short)(ADD_INIT+i)>>VALUE));
280 }
281 test_srav(a0, a1, VALUE);
282 for (int i=0; i<ARRLEN; i++) {
283 errn += verify("test_srav: ", i, a0[i], (short)((short)(ADD_INIT+i)>>VALUE));
284 }
285
286 test_sllc_n(a0, a1);
287 for (int i=0; i<ARRLEN; i++) {
288 errn += verify("test_sllc_n: ", i, a0[i], (short)((short)(ADD_INIT+i)<<(-VALUE)));
289 }
290 test_sllv(a0, a1, -VALUE);
291 for (int i=0; i<ARRLEN; i++) {
292 errn += verify("test_sllv_n: ", i, a0[i], (short)((short)(ADD_INIT+i)<<(-VALUE)));
293 }
294
295 test_srlc_n(a0, a1);
296 for (int i=0; i<ARRLEN; i++) {
297 errn += verify("test_srlc_n: ", i, a0[i], (short)((short)(ADD_INIT+i)>>>(-VALUE)));
298 }
299 test_srlv(a0, a1, -VALUE);
300 for (int i=0; i<ARRLEN; i++) {
301 errn += verify("test_srlv_n: ", i, a0[i], (short)((short)(ADD_INIT+i)>>>(-VALUE)));
302 }
303
304 test_srac_n(a0, a1);
305 for (int i=0; i<ARRLEN; i++) {
306 errn += verify("test_srac_n: ", i, a0[i], (short)((short)(ADD_INIT+i)>>(-VALUE)));
307 }
308 test_srav(a0, a1, -VALUE);
309 for (int i=0; i<ARRLEN; i++) {
310 errn += verify("test_srav_n: ", i, a0[i], (short)((short)(ADD_INIT+i)>>(-VALUE)));
311 }
312
313 test_sllc_o(a0, a1);
314 for (int i=0; i<ARRLEN; i++) {
315 errn += verify("test_sllc_o: ", i, a0[i], (short)((short)(ADD_INIT+i)<<SHIFT));
316 }
317 test_sllv(a0, a1, SHIFT);
318 for (int i=0; i<ARRLEN; i++) {
319 errn += verify("test_sllv_o: ", i, a0[i], (short)((short)(ADD_INIT+i)<<SHIFT));
320 }
321
322 test_srlc_o(a0, a1);
323 for (int i=0; i<ARRLEN; i++) {
324 errn += verify("test_srlc_o: ", i, a0[i], (short)((short)(ADD_INIT+i)>>>SHIFT));
325 }
326 test_srlv(a0, a1, SHIFT);
327 for (int i=0; i<ARRLEN; i++) {
328 errn += verify("test_srlv_o: ", i, a0[i], (short)((short)(ADD_INIT+i)>>>SHIFT));
329 }
330
331 test_srac_o(a0, a1);
332 for (int i=0; i<ARRLEN; i++) {
333 errn += verify("test_srac_o: ", i, a0[i], (short)((short)(ADD_INIT+i)>>SHIFT));
334 }
335 test_srav(a0, a1, SHIFT);
336 for (int i=0; i<ARRLEN; i++) {
337 errn += verify("test_srav_o: ", i, a0[i], (short)((short)(ADD_INIT+i)>>SHIFT));
338 }
339
340 test_sllc_on(a0, a1);
341 for (int i=0; i<ARRLEN; i++) {
342 errn += verify("test_sllc_on: ", i, a0[i], (short)((short)(ADD_INIT+i)<<(-SHIFT)));
343 }
344 test_sllv(a0, a1, -SHIFT);
345 for (int i=0; i<ARRLEN; i++) {
346 errn += verify("test_sllv_on: ", i, a0[i], (short)((short)(ADD_INIT+i)<<(-SHIFT)));
347 }
348
349 test_srlc_on(a0, a1);
350 for (int i=0; i<ARRLEN; i++) {
351 errn += verify("test_srlc_on: ", i, a0[i], (short)((short)(ADD_INIT+i)>>>(-SHIFT)));
352 }
353 test_srlv(a0, a1, -SHIFT);
354 for (int i=0; i<ARRLEN; i++) {
355 errn += verify("test_srlv_on: ", i, a0[i], (short)((short)(ADD_INIT+i)>>>(-SHIFT)));
356 }
357
358 test_srac_on(a0, a1);
359 for (int i=0; i<ARRLEN; i++) {
360 errn += verify("test_srac_on: ", i, a0[i], (short)((short)(ADD_INIT+i)>>(-SHIFT)));
361 }
362 test_srav(a0, a1, -SHIFT);
363 for (int i=0; i<ARRLEN; i++) {
364 errn += verify("test_srav_on: ", i, a0[i], (short)((short)(ADD_INIT+i)>>(-SHIFT)));
365 }
366
367 test_pack2(p2, a1);
368 for (int i=0; i<ARRLEN/2; i++) {
369 errn += verify("test_pack2: ", i, p2[i], ((int)(ADD_INIT+2*i) & 0xFFFF) | ((int)(ADD_INIT+2*i+1) << 16));
370 }
371 for (int i=0; i<ARRLEN; i++) {
372 a0[i] = -1;
373 }
374 test_unpack2(a0, p2);
375 for (int i=0; i<(ARRLEN&(-2)); i++) {
376 errn += verify("test_unpack2: ", i, a0[i], (short)(ADD_INIT+i));
377 }
378
379 test_pack2_swap(p2, a1);
380 for (int i=0; i<ARRLEN/2; i++) {
381 errn += verify("test_pack2_swap: ", i, p2[i], ((int)(ADD_INIT+2*i+1) & 0xFFFF) | ((int)(ADD_INIT+2*i) << 16));
382 }
383 for (int i=0; i<ARRLEN; i++) {
384 a0[i] = -1;
385 }
386 test_unpack2_swap(a0, p2);
387 for (int i=0; i<(ARRLEN&(-2)); i++) {
388 errn += verify("test_unpack2_swap: ", i, a0[i], (short)(ADD_INIT+i));
389 }
390
391 test_pack4(p4, a1);
392 for (int i=0; i<ARRLEN/4; i++) {
393 errn += verify("test_pack4: ", i, p4[i], ((long)(ADD_INIT+4*i+0) & 0xFFFFl) |
394 (((long)(ADD_INIT+4*i+1) & 0xFFFFl) << 16) |
395 (((long)(ADD_INIT+4*i+2) & 0xFFFFl) << 32) |
396 (((long)(ADD_INIT+4*i+3) & 0xFFFFl) << 48));
397 }
398 for (int i=0; i<ARRLEN; i++) {
399 a0[i] = -1;
400 }
401 test_unpack4(a0, p4);
402 for (int i=0; i<(ARRLEN&(-4)); i++) {
403 errn += verify("test_unpack4: ", i, a0[i], (short)(ADD_INIT+i));
404 }
405
406 test_pack4_swap(p4, a1);
407 for (int i=0; i<ARRLEN/4; i++) {
408 errn += verify("test_pack4_swap: ", i, p4[i], ((long)(ADD_INIT+4*i+3) & 0xFFFFl) |
409 (((long)(ADD_INIT+4*i+2) & 0xFFFFl) << 16) |
410 (((long)(ADD_INIT+4*i+1) & 0xFFFFl) << 32) |
411 (((long)(ADD_INIT+4*i+0) & 0xFFFFl) << 48));
412 }
413 for (int i=0; i<ARRLEN; i++) {
414 a0[i] = -1;
415 }
416 test_unpack4_swap(a0, p4);
417 for (int i=0; i<(ARRLEN&(-4)); i++) {
418 errn += verify("test_unpack4_swap: ", i, a0[i], (short)(ADD_INIT+i));
419 }
420
421 }
422
423 if (errn > 0)
424 return errn;
425
426 System.out.println("Time");
427 long start, end;
428
429 start = System.currentTimeMillis();
430 for (int i=0; i<ITERS; i++) {
431 test_sum(a1);
432 }
433 end = System.currentTimeMillis();
434 System.out.println("test_sum: " + (end - start));
435
436 start = System.currentTimeMillis();
437 for (int i=0; i<ITERS; i++) {
438 test_addc(a0, a1);
439 }
440 end = System.currentTimeMillis();
441 System.out.println("test_addc: " + (end - start));
442 start = System.currentTimeMillis();
443 for (int i=0; i<ITERS; i++) {
444 test_addv(a0, a1, (short)VALUE);
445 }
446 end = System.currentTimeMillis();
447 System.out.println("test_addv: " + (end - start));
448 start = System.currentTimeMillis();
449 for (int i=0; i<ITERS; i++) {
450 test_adda(a0, a1, a2);
451 }
452 end = System.currentTimeMillis();
453 System.out.println("test_adda: " + (end - start));
454
455 start = System.currentTimeMillis();
456 for (int i=0; i<ITERS; i++) {
457 test_subc(a0, a1);
458 }
459 end = System.currentTimeMillis();
460 System.out.println("test_subc: " + (end - start));
461 start = System.currentTimeMillis();
462 for (int i=0; i<ITERS; i++) {
463 test_subv(a0, a1, (short)VALUE);
464 }
465 end = System.currentTimeMillis();
466 System.out.println("test_subv: " + (end - start));
467 start = System.currentTimeMillis();
468 for (int i=0; i<ITERS; i++) {
469 test_suba(a0, a1, a2);
470 }
471 end = System.currentTimeMillis();
472 System.out.println("test_suba: " + (end - start));
473
474 start = System.currentTimeMillis();
475 for (int i=0; i<ITERS; i++) {
476 test_mulc(a0, a1);
477 }
478 end = System.currentTimeMillis();
479 System.out.println("test_mulc: " + (end - start));
480 start = System.currentTimeMillis();
481 for (int i=0; i<ITERS; i++) {
482 test_mulv(a0, a1, (short)VALUE);
483 }
484 end = System.currentTimeMillis();
485 System.out.println("test_mulv: " + (end - start));
486 start = System.currentTimeMillis();
487 for (int i=0; i<ITERS; i++) {
488 test_mula(a0, a1, a2);
489 }
490 end = System.currentTimeMillis();
491 System.out.println("test_mula: " + (end - start));
492
493 start = System.currentTimeMillis();
494 for (int i=0; i<ITERS; i++) {
495 test_divc(a0, a1);
496 }
497 end = System.currentTimeMillis();
498 System.out.println("test_divc: " + (end - start));
499 start = System.currentTimeMillis();
500 for (int i=0; i<ITERS; i++) {
501 test_divv(a0, a1, (short)VALUE);
502 }
503 end = System.currentTimeMillis();
504 System.out.println("test_divv: " + (end - start));
505 start = System.currentTimeMillis();
506 for (int i=0; i<ITERS; i++) {
507 test_diva(a0, a1, a2);
508 }
509 end = System.currentTimeMillis();
510 System.out.println("test_diva: " + (end - start));
511
512 start = System.currentTimeMillis();
513 for (int i=0; i<ITERS; i++) {
514 test_mulc_n(a0, a1);
515 }
516 end = System.currentTimeMillis();
517 System.out.println("test_mulc_n: " + (end - start));
518 start = System.currentTimeMillis();
519 for (int i=0; i<ITERS; i++) {
520 test_mulv(a0, a1, (short)-VALUE);
521 }
522 end = System.currentTimeMillis();
523 System.out.println("test_mulv_n: " + (end - start));
524 start = System.currentTimeMillis();
525 for (int i=0; i<ITERS; i++) {
526 test_mula(a0, a1, a3);
527 }
528 end = System.currentTimeMillis();
529 System.out.println("test_mula_n: " + (end - start));
530
531 start = System.currentTimeMillis();
532 for (int i=0; i<ITERS; i++) {
533 test_divc_n(a0, a1);
534 }
535 end = System.currentTimeMillis();
536 System.out.println("test_divc_n: " + (end - start));
537 start = System.currentTimeMillis();
538 for (int i=0; i<ITERS; i++) {
539 test_divv(a0, a1, (short)-VALUE);
540 }
541 end = System.currentTimeMillis();
542 System.out.println("test_divv_n: " + (end - start));
543 start = System.currentTimeMillis();
544 for (int i=0; i<ITERS; i++) {
545 test_diva(a0, a1, a3);
546 }
547 end = System.currentTimeMillis();
548 System.out.println("test_diva_n: " + (end - start));
549
550 start = System.currentTimeMillis();
551 for (int i=0; i<ITERS; i++) {
552 test_andc(a0, a1);
553 }
554 end = System.currentTimeMillis();
555 System.out.println("test_andc: " + (end - start));
556 start = System.currentTimeMillis();
557 for (int i=0; i<ITERS; i++) {
558 test_andv(a0, a1, (short)BIT_MASK);
559 }
560 end = System.currentTimeMillis();
561 System.out.println("test_andv: " + (end - start));
562 start = System.currentTimeMillis();
563 for (int i=0; i<ITERS; i++) {
564 test_anda(a0, a1, a4);
565 }
566 end = System.currentTimeMillis();
567 System.out.println("test_anda: " + (end - start));
568
569 start = System.currentTimeMillis();
570 for (int i=0; i<ITERS; i++) {
571 test_orc(a0, a1);
572 }
573 end = System.currentTimeMillis();
574 System.out.println("test_orc: " + (end - start));
575 start = System.currentTimeMillis();
576 for (int i=0; i<ITERS; i++) {
577 test_orv(a0, a1, (short)BIT_MASK);
578 }
579 end = System.currentTimeMillis();
580 System.out.println("test_orv: " + (end - start));
581 start = System.currentTimeMillis();
582 for (int i=0; i<ITERS; i++) {
583 test_ora(a0, a1, a4);
584 }
585 end = System.currentTimeMillis();
586 System.out.println("test_ora: " + (end - start));
587
588 start = System.currentTimeMillis();
589 for (int i=0; i<ITERS; i++) {
590 test_xorc(a0, a1);
591 }
592 end = System.currentTimeMillis();
593 System.out.println("test_xorc: " + (end - start));
594 start = System.currentTimeMillis();
595 for (int i=0; i<ITERS; i++) {
596 test_xorv(a0, a1, (short)BIT_MASK);
597 }
598 end = System.currentTimeMillis();
599 System.out.println("test_xorv: " + (end - start));
600 start = System.currentTimeMillis();
601 for (int i=0; i<ITERS; i++) {
602 test_xora(a0, a1, a4);
603 }
604 end = System.currentTimeMillis();
605 System.out.println("test_xora: " + (end - start));
606
607 start = System.currentTimeMillis();
608 for (int i=0; i<ITERS; i++) {
609 test_sllc(a0, a1);
610 }
611 end = System.currentTimeMillis();
612 System.out.println("test_sllc: " + (end - start));
613 start = System.currentTimeMillis();
614 for (int i=0; i<ITERS; i++) {
615 test_sllv(a0, a1, VALUE);
616 }
617 end = System.currentTimeMillis();
618 System.out.println("test_sllv: " + (end - start));
619
620 start = System.currentTimeMillis();
621 for (int i=0; i<ITERS; i++) {
622 test_srlc(a0, a1);
623 }
624 end = System.currentTimeMillis();
625 System.out.println("test_srlc: " + (end - start));
626 start = System.currentTimeMillis();
627 for (int i=0; i<ITERS; i++) {
628 test_srlv(a0, a1, VALUE);
629 }
630 end = System.currentTimeMillis();
631 System.out.println("test_srlv: " + (end - start));
632
633 start = System.currentTimeMillis();
634 for (int i=0; i<ITERS; i++) {
635 test_srac(a0, a1);
636 }
637 end = System.currentTimeMillis();
638 System.out.println("test_srac: " + (end - start));
639 start = System.currentTimeMillis();
640 for (int i=0; i<ITERS; i++) {
641 test_srav(a0, a1, VALUE);
642 }
643 end = System.currentTimeMillis();
644 System.out.println("test_srav: " + (end - start));
645
646 start = System.currentTimeMillis();
647 for (int i=0; i<ITERS; i++) {
648 test_sllc_n(a0, a1);
649 }
650 end = System.currentTimeMillis();
651 System.out.println("test_sllc_n: " + (end - start));
652 start = System.currentTimeMillis();
653 for (int i=0; i<ITERS; i++) {
654 test_sllv(a0, a1, -VALUE);
655 }
656 end = System.currentTimeMillis();
657 System.out.println("test_sllv_n: " + (end - start));
658
659 start = System.currentTimeMillis();
660 for (int i=0; i<ITERS; i++) {
661 test_srlc_n(a0, a1);
662 }
663 end = System.currentTimeMillis();
664 System.out.println("test_srlc_n: " + (end - start));
665 start = System.currentTimeMillis();
666 for (int i=0; i<ITERS; i++) {
667 test_srlv(a0, a1, -VALUE);
668 }
669 end = System.currentTimeMillis();
670 System.out.println("test_srlv_n: " + (end - start));
671
672 start = System.currentTimeMillis();
673 for (int i=0; i<ITERS; i++) {
674 test_srac_n(a0, a1);
675 }
676 end = System.currentTimeMillis();
677 System.out.println("test_srac_n: " + (end - start));
678 start = System.currentTimeMillis();
679 for (int i=0; i<ITERS; i++) {
680 test_srav(a0, a1, -VALUE);
681 }
682 end = System.currentTimeMillis();
683 System.out.println("test_srav_n: " + (end - start));
684
685 start = System.currentTimeMillis();
686 for (int i=0; i<ITERS; i++) {
687 test_sllc_o(a0, a1);
688 }
689 end = System.currentTimeMillis();
690 System.out.println("test_sllc_o: " + (end - start));
691 start = System.currentTimeMillis();
692 for (int i=0; i<ITERS; i++) {
693 test_sllv(a0, a1, SHIFT);
694 }
695 end = System.currentTimeMillis();
696 System.out.println("test_sllv_o: " + (end - start));
697
698 start = System.currentTimeMillis();
699 for (int i=0; i<ITERS; i++) {
700 test_srlc_o(a0, a1);
701 }
702 end = System.currentTimeMillis();
703 System.out.println("test_srlc_o: " + (end - start));
704 start = System.currentTimeMillis();
705 for (int i=0; i<ITERS; i++) {
706 test_srlv(a0, a1, SHIFT);
707 }
708 end = System.currentTimeMillis();
709 System.out.println("test_srlv_o: " + (end - start));
710
711 start = System.currentTimeMillis();
712 for (int i=0; i<ITERS; i++) {
713 test_srac_o(a0, a1);
714 }
715 end = System.currentTimeMillis();
716 System.out.println("test_srac_o: " + (end - start));
717 start = System.currentTimeMillis();
718 for (int i=0; i<ITERS; i++) {
719 test_srav(a0, a1, SHIFT);
720 }
721 end = System.currentTimeMillis();
722 System.out.println("test_srav_o: " + (end - start));
723
724 start = System.currentTimeMillis();
725 for (int i=0; i<ITERS; i++) {
726 test_sllc_on(a0, a1);
727 }
728 end = System.currentTimeMillis();
729 System.out.println("test_sllc_on: " + (end - start));
730 start = System.currentTimeMillis();
731 for (int i=0; i<ITERS; i++) {
732 test_sllv(a0, a1, -SHIFT);
733 }
734 end = System.currentTimeMillis();
735 System.out.println("test_sllv_on: " + (end - start));
736
737 start = System.currentTimeMillis();
738 for (int i=0; i<ITERS; i++) {
739 test_srlc_on(a0, a1);
740 }
741 end = System.currentTimeMillis();
742 System.out.println("test_srlc_on: " + (end - start));
743 start = System.currentTimeMillis();
744 for (int i=0; i<ITERS; i++) {
745 test_srlv(a0, a1, -SHIFT);
746 }
747 end = System.currentTimeMillis();
748 System.out.println("test_srlv_on: " + (end - start));
749
750 start = System.currentTimeMillis();
751 for (int i=0; i<ITERS; i++) {
752 test_srac_on(a0, a1);
753 }
754 end = System.currentTimeMillis();
755 System.out.println("test_srac_on: " + (end - start));
756 start = System.currentTimeMillis();
757 for (int i=0; i<ITERS; i++) {
758 test_srav(a0, a1, -SHIFT);
759 }
760 end = System.currentTimeMillis();
761 System.out.println("test_srav_on: " + (end - start));
762
763 start = System.currentTimeMillis();
764 for (int i=0; i<ITERS; i++) {
765 test_pack2(p2, a1);
766 }
767 end = System.currentTimeMillis();
768 System.out.println("test_pack2: " + (end - start));
769 start = System.currentTimeMillis();
770 for (int i=0; i<ITERS; i++) {
771 test_unpack2(a0, p2);
772 }
773 end = System.currentTimeMillis();
774 System.out.println("test_unpack2: " + (end - start));
775 start = System.currentTimeMillis();
776 for (int i=0; i<ITERS; i++) {
777 test_pack2_swap(p2, a1);
778 }
779 end = System.currentTimeMillis();
780 System.out.println("test_pack2_swap: " + (end - start));
781 start = System.currentTimeMillis();
782 for (int i=0; i<ITERS; i++) {
783 test_unpack2_swap(a0, p2);
784 }
785 end = System.currentTimeMillis();
786 System.out.println("test_unpack2_swap: " + (end - start));
787
788 start = System.currentTimeMillis();
789 for (int i=0; i<ITERS; i++) {
790 test_pack4(p4, a1);
791 }
792 end = System.currentTimeMillis();
793 System.out.println("test_pack4: " + (end - start));
794 start = System.currentTimeMillis();
795 for (int i=0; i<ITERS; i++) {
796 test_unpack4(a0, p4);
797 }
798 end = System.currentTimeMillis();
799 System.out.println("test_unpack4: " + (end - start));
800 start = System.currentTimeMillis();
801 for (int i=0; i<ITERS; i++) {
802 test_pack4_swap(p4, a1);
803 }
804 end = System.currentTimeMillis();
805 System.out.println("test_pack4_swap: " + (end - start));
806 start = System.currentTimeMillis();
807 for (int i=0; i<ITERS; i++) {
808 test_unpack4_swap(a0, p4);
809 }
810 end = System.currentTimeMillis();
811 System.out.println("test_unpack4_swap: " + (end - start));
812
813 return errn;
814 }
815
816 static int test_sum(short[] a1) {
817 int sum = 0;
818 for (int i = 0; i < a1.length; i+=1) {
819 sum += a1[i];
820 }
821 return sum;
822 }
823
824 static void test_addc(short[] a0, short[] a1) {
825 for (int i = 0; i < a0.length; i+=1) {
826 a0[i] = (short)(a1[i]+VALUE);
827 }
828 }
829 static void test_addv(short[] a0, short[] a1, short b) {
830 for (int i = 0; i < a0.length; i+=1) {
831 a0[i] = (short)(a1[i]+b);
832 }
833 }
834 static void test_adda(short[] a0, short[] a1, short[] a2) {
835 for (int i = 0; i < a0.length; i+=1) {
836 a0[i] = (short)(a1[i]+a2[i]);
837 }
838 }
839
840 static void test_subc(short[] a0, short[] a1) {
841 for (int i = 0; i < a0.length; i+=1) {
842 a0[i] = (short)(a1[i]-VALUE);
843 }
844 }
845 static void test_subv(short[] a0, short[] a1, short b) {
846 for (int i = 0; i < a0.length; i+=1) {
847 a0[i] = (short)(a1[i]-b);
848 }
849 }
850 static void test_suba(short[] a0, short[] a1, short[] a2) {
851 for (int i = 0; i < a0.length; i+=1) {
852 a0[i] = (short)(a1[i]-a2[i]);
853 }
854 }
855
856 static void test_mulc(short[] a0, short[] a1) {
857 for (int i = 0; i < a0.length; i+=1) {
858 a0[i] = (short)(a1[i]*VALUE);
859 }
860 }
861 static void test_mulc_n(short[] a0, short[] a1) {
862 for (int i = 0; i < a0.length; i+=1) {
863 a0[i] = (short)(a1[i]*(-VALUE));
864 }
865 }
866 static void test_mulv(short[] a0, short[] a1, short b) {
867 for (int i = 0; i < a0.length; i+=1) {
868 a0[i] = (short)(a1[i]*b);
869 }
870 }
871 static void test_mula(short[] a0, short[] a1, short[] a2) {
872 for (int i = 0; i < a0.length; i+=1) {
873 a0[i] = (short)(a1[i]*a2[i]);
874 }
875 }
876
877 static void test_divc(short[] a0, short[] a1) {
878 for (int i = 0; i < a0.length; i+=1) {
879 a0[i] = (short)(a1[i]/VALUE);
880 }
881 }
882 static void test_divc_n(short[] a0, short[] a1) {
883 for (int i = 0; i < a0.length; i+=1) {
884 a0[i] = (short)(a1[i]/(-VALUE));
885 }
886 }
887 static void test_divv(short[] a0, short[] a1, short b) {
888 for (int i = 0; i < a0.length; i+=1) {
889 a0[i] = (short)(a1[i]/b);
890 }
891 }
892 static void test_diva(short[] a0, short[] a1, short[] a2) {
893 for (int i = 0; i < a0.length; i+=1) {
894 a0[i] = (short)(a1[i]/a2[i]);
895 }
896 }
897
898 static void test_andc(short[] a0, short[] a1) {
899 for (int i = 0; i < a0.length; i+=1) {
900 a0[i] = (short)(a1[i]&BIT_MASK);
901 }
902 }
903 static void test_andv(short[] a0, short[] a1, short b) {
904 for (int i = 0; i < a0.length; i+=1) {
905 a0[i] = (short)(a1[i]&b);
906 }
907 }
908 static void test_anda(short[] a0, short[] a1, short[] a2) {
909 for (int i = 0; i < a0.length; i+=1) {
910 a0[i] = (short)(a1[i]&a2[i]);
911 }
912 }
913
914 static void test_orc(short[] a0, short[] a1) {
915 for (int i = 0; i < a0.length; i+=1) {
916 a0[i] = (short)(a1[i]|BIT_MASK);
917 }
918 }
919 static void test_orv(short[] a0, short[] a1, short b) {
920 for (int i = 0; i < a0.length; i+=1) {
921 a0[i] = (short)(a1[i]|b);
922 }
923 }
924 static void test_ora(short[] a0, short[] a1, short[] a2) {
925 for (int i = 0; i < a0.length; i+=1) {
926 a0[i] = (short)(a1[i]|a2[i]);
927 }
928 }
929
930 static void test_xorc(short[] a0, short[] a1) {
931 for (int i = 0; i < a0.length; i+=1) {
932 a0[i] = (short)(a1[i]^BIT_MASK);
933 }
934 }
935 static void test_xorv(short[] a0, short[] a1, short b) {
936 for (int i = 0; i < a0.length; i+=1) {
937 a0[i] = (short)(a1[i]^b);
938 }
939 }
940 static void test_xora(short[] a0, short[] a1, short[] a2) {
941 for (int i = 0; i < a0.length; i+=1) {
942 a0[i] = (short)(a1[i]^a2[i]);
943 }
944 }
945
946 static void test_sllc(short[] a0, short[] a1) {
947 for (int i = 0; i < a0.length; i+=1) {
948 a0[i] = (short)(a1[i]<<VALUE);
949 }
950 }
951 static void test_sllc_n(short[] a0, short[] a1) {
952 for (int i = 0; i < a0.length; i+=1) {
953 a0[i] = (short)(a1[i]<<(-VALUE));
954 }
955 }
956 static void test_sllc_o(short[] a0, short[] a1) {
957 for (int i = 0; i < a0.length; i+=1) {
958 a0[i] = (short)(a1[i]<<SHIFT);
959 }
960 }
961 static void test_sllc_on(short[] a0, short[] a1) {
962 for (int i = 0; i < a0.length; i+=1) {
963 a0[i] = (short)(a1[i]<<(-SHIFT));
964 }
965 }
966 static void test_sllv(short[] a0, short[] a1, int b) {
967 for (int i = 0; i < a0.length; i+=1) {
968 a0[i] = (short)(a1[i]<<b);
969 }
970 }
971
972 static void test_srlc(short[] a0, short[] a1) {
973 for (int i = 0; i < a0.length; i+=1) {
974 a0[i] = (short)(a1[i]>>>VALUE);
975 }
976 }
977 static void test_srlc_n(short[] a0, short[] a1) {
978 for (int i = 0; i < a0.length; i+=1) {
979 a0[i] = (short)(a1[i]>>>(-VALUE));
980 }
981 }
982 static void test_srlc_o(short[] a0, short[] a1) {
983 for (int i = 0; i < a0.length; i+=1) {
984 a0[i] = (short)(a1[i]>>>SHIFT);
985 }
986 }
987 static void test_srlc_on(short[] a0, short[] a1) {
988 for (int i = 0; i < a0.length; i+=1) {
989 a0[i] = (short)(a1[i]>>>(-SHIFT));
990 }
991 }
992 static void test_srlv(short[] a0, short[] a1, int b) {
993 for (int i = 0; i < a0.length; i+=1) {
994 a0[i] = (short)(a1[i]>>>b);
995 }
996 }
997
998 static void test_srac(short[] a0, short[] a1) {
999 for (int i = 0; i < a0.length; i+=1) {
1000 a0[i] = (short)(a1[i]>>VALUE);
1001 }
1002 }
1003 static void test_srac_n(short[] a0, short[] a1) {
1004 for (int i = 0; i < a0.length; i+=1) {
1005 a0[i] = (short)(a1[i]>>(-VALUE));
1006 }
1007 }
1008 static void test_srac_o(short[] a0, short[] a1) {
1009 for (int i = 0; i < a0.length; i+=1) {
1010 a0[i] = (short)(a1[i]>>SHIFT);
1011 }
1012 }
1013 static void test_srac_on(short[] a0, short[] a1) {
1014 for (int i = 0; i < a0.length; i+=1) {
1015 a0[i] = (short)(a1[i]>>(-SHIFT));
1016 }
1017 }
1018 static void test_srav(short[] a0, short[] a1, int b) {
1019 for (int i = 0; i < a0.length; i+=1) {
1020 a0[i] = (short)(a1[i]>>b);
1021 }
1022 }
1023
1024 static void test_pack2(int[] p2, short[] a1) {
1025 if (p2.length*2 > a1.length) return;
1026 for (int i = 0; i < p2.length; i+=1) {
1027 int l0 = (int)a1[i*2+0];
1028 int l1 = (int)a1[i*2+1];
1029 p2[i] = (l1 << 16) | (l0 & 0xFFFF);
1030 }
1031 }
1032 static void test_unpack2(short[] a0, int[] p2) {
1033 if (p2.length*2 > a0.length) return;
1034 for (int i = 0; i < p2.length; i+=1) {
1035 int l = p2[i];
1036 a0[i*2+0] = (short)(l & 0xFFFF);
1037 a0[i*2+1] = (short)(l >> 16);
1038 }
1039 }
1040 static void test_pack2_swap(int[] p2, short[] a1) {
1041 if (p2.length*2 > a1.length) return;
1042 for (int i = 0; i < p2.length; i+=1) {
1043 int l0 = (int)a1[i*2+0];
1044 int l1 = (int)a1[i*2+1];
1045 p2[i] = (l0 << 16) | (l1 & 0xFFFF);
1046 }
1047 }
1048 static void test_unpack2_swap(short[] a0, int[] p2) {
1049 if (p2.length*2 > a0.length) return;
1050 for (int i = 0; i < p2.length; i+=1) {
1051 int l = p2[i];
1052 a0[i*2+0] = (short)(l >> 16);
1053 a0[i*2+1] = (short)(l & 0xFFFF);
1054 }
1055 }
1056
1057 static void test_pack4(long[] p4, short[] a1) {
1058 if (p4.length*4 > a1.length) return;
1059 for (int i = 0; i < p4.length; i+=1) {
1060 long l0 = (long)a1[i*4+0];
1061 long l1 = (long)a1[i*4+1];
1062 long l2 = (long)a1[i*4+2];
1063 long l3 = (long)a1[i*4+3];
1064 p4[i] = (l0 & 0xFFFFl) |
1065 ((l1 & 0xFFFFl) << 16) |
1066 ((l2 & 0xFFFFl) << 32) |
1067 ((l3 & 0xFFFFl) << 48);
1068 }
1069 }
1070 static void test_unpack4(short[] a0, long[] p4) {
1071 if (p4.length*4 > a0.length) return;
1072 for (int i = 0; i < p4.length; i+=1) {
1073 long l = p4[i];
1074 a0[i*4+0] = (short)(l & 0xFFFFl);
1075 a0[i*4+1] = (short)(l >> 16);
1076 a0[i*4+2] = (short)(l >> 32);
1077 a0[i*4+3] = (short)(l >> 48);
1078 }
1079 }
1080 static void test_pack4_swap(long[] p4, short[] a1) {
1081 if (p4.length*4 > a1.length) return;
1082 for (int i = 0; i < p4.length; i+=1) {
1083 long l0 = (long)a1[i*4+0];
1084 long l1 = (long)a1[i*4+1];
1085 long l2 = (long)a1[i*4+2];
1086 long l3 = (long)a1[i*4+3];
1087 p4[i] = (l3 & 0xFFFFl) |
1088 ((l2 & 0xFFFFl) << 16) |
1089 ((l1 & 0xFFFFl) << 32) |
1090 ((l0 & 0xFFFFl) << 48);
1091 }
1092 }
1093 static void test_unpack4_swap(short[] a0, long[] p4) {
1094 if (p4.length*4 > a0.length) return;
1095 for (int i = 0; i < p4.length; i+=1) {
1096 long l = p4[i];
1097 a0[i*4+0] = (short)(l >> 48);
1098 a0[i*4+1] = (short)(l >> 32);
1099 a0[i*4+2] = (short)(l >> 16);
1100 a0[i*4+3] = (short)(l & 0xFFFFl);
1101 }
1102 }
1103
1104 static int verify(String text, int i, short elem, short val) {
1105 if (elem != val) {
1106 System.err.println(text + "[" + i + "] = " + elem + " != " + val);
1107 return 1;
1108 }
1109 return 0;
1110 }
1111
1112 static int verify(String text, int i, int elem, int val) {
1113 if (elem != val) {
1114 System.err.println(text + "[" + i + "] = " + Integer.toHexString(elem) + " != " + Integer.toHexString(val));
1115 return 1;
1116 }
1117 return 0;
1118 }
1119
1120 static int verify(String text, int i, long elem, long val) {
1121 if (elem != val) {
1122 System.err.println(text + "[" + i + "] = " + Long.toHexString(elem) + " != " + Long.toHexString(val));
1123 return 1;
1124 }
1125 return 0;
1126 }
1127 }

mercurial