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