TestBooleanVect.java revision 12158:0fe2815ffa74
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 7119644
27 * @summary Increase superword's vector size up to 256 bits
28 *
29 * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions
30 *    -XX:-TieredCompilation -XX:-OptimizeFill
31 *    compiler.codegen.TestBooleanVect
32 */
33
34package compiler.codegen;
35
36public class TestBooleanVect {
37  private static final int ARRLEN = 997;
38  private static final int ITERS  = 11000;
39  private static final int OFFSET = 3;
40  private static final int SCALE = 2;
41  private static final int ALIGN_OFF = 8;
42  private static final int UNALIGN_OFF = 5;
43
44  public static void main(String args[]) {
45    System.out.println("Testing Boolean vectors");
46    int errn = test();
47    if (errn > 0) {
48      System.err.println("FAILED: " + errn + " errors");
49      System.exit(97);
50    }
51    System.out.println("PASSED");
52  }
53
54  static int test() {
55    boolean[] a1 = new boolean[ARRLEN];
56    boolean[] a2 = new boolean[ARRLEN];
57    System.out.println("Warmup");
58    for (int i=0; i<ITERS; i++) {
59      test_ci(a1);
60      test_vi(a2, true);
61      test_cp(a1, a2);
62      test_2ci(a1, a2);
63      test_2vi(a1, a2, true, true);
64      test_ci_neg(a1);
65      test_vi_neg(a2, true);
66      test_cp_neg(a1, a2);
67      test_2ci_neg(a1, a2);
68      test_2vi_neg(a1, a2, true, true);
69      test_ci_oppos(a1);
70      test_vi_oppos(a2, true);
71      test_cp_oppos(a1, a2);
72      test_2ci_oppos(a1, a2);
73      test_2vi_oppos(a1, a2, true, true);
74      test_ci_off(a1);
75      test_vi_off(a2, true);
76      test_cp_off(a1, a2);
77      test_2ci_off(a1, a2);
78      test_2vi_off(a1, a2, true, true);
79      test_ci_inv(a1, OFFSET);
80      test_vi_inv(a2, true, OFFSET);
81      test_cp_inv(a1, a2, OFFSET);
82      test_2ci_inv(a1, a2, OFFSET);
83      test_2vi_inv(a1, a2, true, true, OFFSET);
84      test_ci_scl(a1);
85      test_vi_scl(a2, true);
86      test_cp_scl(a1, a2);
87      test_2ci_scl(a1, a2);
88      test_2vi_scl(a1, a2, true, true);
89      test_cp_alndst(a1, a2);
90      test_cp_alnsrc(a1, a2);
91      test_2ci_aln(a1, a2);
92      test_2vi_aln(a1, a2, true, true);
93      test_cp_unalndst(a1, a2);
94      test_cp_unalnsrc(a1, a2);
95      test_2ci_unaln(a1, a2);
96      test_2vi_unaln(a1, a2, true, true);
97    }
98    // Initialize
99    for (int i=0; i<ARRLEN; i++) {
100      a1[i] = false;
101      a2[i] = false;
102    }
103    // Test and verify results
104    System.out.println("Verification");
105    int errn = 0;
106    {
107      test_ci(a1);
108      for (int i=0; i<ARRLEN; i++) {
109        errn += verify("test_ci: a1", i, a1[i], false);
110      }
111      test_vi(a2, true);
112      for (int i=0; i<ARRLEN; i++) {
113        errn += verify("test_vi: a2", i, a2[i], true);
114      }
115      test_cp(a1, a2);
116      for (int i=0; i<ARRLEN; i++) {
117        errn += verify("test_cp: a1", i, a1[i], true);
118      }
119      test_2ci(a1, a2);
120      for (int i=0; i<ARRLEN; i++) {
121        errn += verify("test_2ci: a1", i, a1[i], false);
122        errn += verify("test_2ci: a2", i, a2[i], false);
123      }
124      test_2vi(a1, a2, true, true);
125      for (int i=0; i<ARRLEN; i++) {
126        errn += verify("test_2vi: a1", i, a1[i], true);
127        errn += verify("test_2vi: a2", i, a2[i], true);
128      }
129      // Reset for negative stride
130      for (int i=0; i<ARRLEN; i++) {
131        a1[i] = false;
132        a2[i] = false;
133      }
134      test_ci_neg(a1);
135      for (int i=0; i<ARRLEN; i++) {
136        errn += verify("test_ci_neg: a1", i, a1[i], false);
137      }
138      test_vi_neg(a2, true);
139      for (int i=0; i<ARRLEN; i++) {
140        errn += verify("test_vi_neg: a2", i, a2[i], true);
141      }
142      test_cp_neg(a1, a2);
143      for (int i=0; i<ARRLEN; i++) {
144        errn += verify("test_cp_neg: a1", i, a1[i], true);
145      }
146      test_2ci_neg(a1, a2);
147      for (int i=0; i<ARRLEN; i++) {
148        errn += verify("test_2ci_neg: a1", i, a1[i], false);
149        errn += verify("test_2ci_neg: a2", i, a2[i], false);
150      }
151      test_2vi_neg(a1, a2, true, true);
152      for (int i=0; i<ARRLEN; i++) {
153        errn += verify("test_2vi_neg: a1", i, a1[i], true);
154        errn += verify("test_2vi_neg: a2", i, a2[i], true);
155      }
156      // Reset for opposite stride
157      for (int i=0; i<ARRLEN; i++) {
158        a1[i] = false;
159        a2[i] = false;
160      }
161      test_ci_oppos(a1);
162      for (int i=0; i<ARRLEN; i++) {
163        errn += verify("test_ci_oppos: a1", i, a1[i], false);
164      }
165      test_vi_oppos(a2, true);
166      for (int i=0; i<ARRLEN; i++) {
167        errn += verify("test_vi_oppos: a2", i, a2[i], true);
168      }
169      test_cp_oppos(a1, a2);
170      for (int i=0; i<ARRLEN; i++) {
171        errn += verify("test_cp_oppos: a1", i, a1[i], true);
172      }
173      test_2ci_oppos(a1, a2);
174      for (int i=0; i<ARRLEN; i++) {
175        errn += verify("test_2ci_oppos: a1", i, a1[i], false);
176        errn += verify("test_2ci_oppos: a2", i, a2[i], false);
177      }
178      test_2vi_oppos(a1, a2, true, true);
179      for (int i=0; i<ARRLEN; i++) {
180        errn += verify("test_2vi_oppos: a1", i, a1[i], true);
181        errn += verify("test_2vi_oppos: a2", i, a2[i], true);
182      }
183      // Reset for indexing with offset
184      for (int i=0; i<ARRLEN; i++) {
185        a1[i] = false;
186        a2[i] = false;
187      }
188      test_ci_off(a1);
189      for (int i=OFFSET; i<ARRLEN; i++) {
190        errn += verify("test_ci_off: a1", i, a1[i], false);
191      }
192      test_vi_off(a2, true);
193      for (int i=OFFSET; i<ARRLEN; i++) {
194        errn += verify("test_vi_off: a2", i, a2[i], true);
195      }
196      test_cp_off(a1, a2);
197      for (int i=OFFSET; i<ARRLEN; i++) {
198        errn += verify("test_cp_off: a1", i, a1[i], true);
199      }
200      test_2ci_off(a1, a2);
201      for (int i=OFFSET; i<ARRLEN; i++) {
202        errn += verify("test_2ci_off: a1", i, a1[i], false);
203        errn += verify("test_2ci_off: a2", i, a2[i], false);
204      }
205      test_2vi_off(a1, a2, true, true);
206      for (int i=OFFSET; i<ARRLEN; i++) {
207        errn += verify("test_2vi_off: a1", i, a1[i], true);
208        errn += verify("test_2vi_off: a2", i, a2[i], true);
209      }
210      for (int i=0; i<OFFSET; i++) {
211        errn += verify("test_2vi_off: a1", i, a1[i], false);
212        errn += verify("test_2vi_off: a2", i, a2[i], false);
213      }
214      // Reset for indexing with invariant offset
215      for (int i=0; i<ARRLEN; i++) {
216        a1[i] = false;
217        a2[i] = false;
218      }
219      test_ci_inv(a1, OFFSET);
220      for (int i=OFFSET; i<ARRLEN; i++) {
221        errn += verify("test_ci_inv: a1", i, a1[i], false);
222      }
223      test_vi_inv(a2, true, OFFSET);
224      for (int i=OFFSET; i<ARRLEN; i++) {
225        errn += verify("test_vi_inv: a2", i, a2[i], true);
226      }
227      test_cp_inv(a1, a2, OFFSET);
228      for (int i=OFFSET; i<ARRLEN; i++) {
229        errn += verify("test_cp_inv: a1", i, a1[i], true);
230      }
231      test_2ci_inv(a1, a2, OFFSET);
232      for (int i=OFFSET; i<ARRLEN; i++) {
233        errn += verify("test_2ci_inv: a1", i, a1[i], false);
234        errn += verify("test_2ci_inv: a2", i, a2[i], false);
235      }
236      test_2vi_inv(a1, a2, true, true, OFFSET);
237      for (int i=OFFSET; i<ARRLEN; i++) {
238        errn += verify("test_2vi_inv: a1", i, a1[i], true);
239        errn += verify("test_2vi_inv: a2", i, a2[i], true);
240      }
241      for (int i=0; i<OFFSET; i++) {
242        errn += verify("test_2vi_inv: a1", i, a1[i], false);
243        errn += verify("test_2vi_inv: a2", i, a2[i], false);
244      }
245      // Reset for indexing with scale
246      for (int i=0; i<ARRLEN; i++) {
247        a1[i] = true;
248        a2[i] = false;
249      }
250      test_ci_scl(a1);
251      for (int i=0; i<ARRLEN; i++) {
252        boolean val = (i%SCALE != 0);
253        errn += verify("test_ci_scl: a1", i, a1[i], val);
254      }
255      test_vi_scl(a2, true);
256      for (int i=0; i<ARRLEN; i++) {
257        boolean val = (i%SCALE == 0);
258        errn += verify("test_vi_scl: a2", i, a2[i], val);
259      }
260      test_cp_scl(a1, a2);
261      for (int i=0; i<ARRLEN; i++) {
262        errn += verify("test_cp_scl: a1", i, a1[i], true);
263      }
264      test_2ci_scl(a1, a2);
265      for (int i=0; i<ARRLEN; i++) {
266        if (i%SCALE != 0) {
267          errn += verify("test_2ci_scl: a1", i, a1[i], true);
268        } else if (i*SCALE < ARRLEN) {
269          errn += verify("test_2ci_scl: a1", i*SCALE, a1[i*SCALE], false);
270        }
271        if (i%SCALE != 0) {
272          errn += verify("test_2ci_scl: a2", i, a2[i], false);
273        } else if (i*SCALE < ARRLEN) {
274          errn += verify("test_2ci_scl: a2", i*SCALE, a2[i*SCALE], false);
275        }
276      }
277      test_2vi_scl(a1, a2, false, true);
278      for (int i=0; i<ARRLEN; i++) {
279        if (i%SCALE != 0) {
280          errn += verify("test_2vi_scl: a1", i, a1[i], true);
281        } else if (i*SCALE < ARRLEN) {
282          errn += verify("test_2vi_scl: a1", i*SCALE, a1[i*SCALE], false);
283        }
284        if (i%SCALE != 0) {
285          errn += verify("test_2vi_scl: a2", i, a2[i], false);
286        } else if (i*SCALE < ARRLEN) {
287          errn += verify("test_2vi_scl: a2", i*SCALE, a2[i*SCALE], true);
288        }
289      }
290      // Reset for 2 arrays with relative aligned offset
291      for (int i=0; i<ARRLEN; i++) {
292        a1[i] = false;
293        a2[i] = false;
294      }
295      test_vi(a2, true);
296      test_cp_alndst(a1, a2);
297      for (int i=0; i<ALIGN_OFF; i++) {
298        errn += verify("test_cp_alndst: a1", i, a1[i], false);
299      }
300      for (int i=ALIGN_OFF; i<ARRLEN; i++) {
301        errn += verify("test_cp_alndst: a1", i, a1[i], true);
302      }
303      test_vi(a2, false);
304      test_cp_alnsrc(a1, a2);
305      for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
306        errn += verify("test_cp_alnsrc: a1", i, a1[i], false);
307      }
308      for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
309        errn += verify("test_cp_alnsrc: a1", i, a1[i], true);
310      }
311      for (int i=0; i<ARRLEN; i++) {
312        a1[i] = false;
313        a2[i] = false;
314      }
315      test_2ci_aln(a1, a2);
316      for (int i=0; i<ALIGN_OFF; i++) {
317        errn += verify("test_2ci_aln: a1", i, a1[i], false);
318      }
319      for (int i=ALIGN_OFF; i<ARRLEN; i++) {
320        errn += verify("test_2ci_aln: a1", i, a1[i], false);
321      }
322      for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
323        errn += verify("test_2ci_aln: a2", i, a2[i], false);
324      }
325      for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
326        errn += verify("test_2ci_aln: a2", i, a2[i], false);
327      }
328      for (int i=0; i<ARRLEN; i++) {
329        a1[i] = false;
330        a2[i] = false;
331      }
332      test_2vi_aln(a1, a2, true, true);
333      for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
334        errn += verify("test_2vi_aln: a1", i, a1[i], true);
335      }
336      for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
337        errn += verify("test_2vi_aln: a1", i, a1[i], false);
338      }
339      for (int i=0; i<ALIGN_OFF; i++) {
340        errn += verify("test_2vi_aln: a2", i, a2[i], false);
341      }
342      for (int i=ALIGN_OFF; i<ARRLEN; i++) {
343        errn += verify("test_2vi_aln: a2", i, a2[i], true);
344      }
345
346      // Reset for 2 arrays with relative unaligned offset
347      for (int i=0; i<ARRLEN; i++) {
348        a1[i] = false;
349        a2[i] = false;
350      }
351      test_vi(a2, true);
352      test_cp_unalndst(a1, a2);
353      for (int i=0; i<UNALIGN_OFF; i++) {
354        errn += verify("test_cp_unalndst: a1", i, a1[i], false);
355      }
356      for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
357        errn += verify("test_cp_unalndst: a1", i, a1[i], true);
358      }
359      test_vi(a2, false);
360      test_cp_unalnsrc(a1, a2);
361      for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
362        errn += verify("test_cp_unalnsrc: a1", i, a1[i], false);
363      }
364      for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
365        errn += verify("test_cp_unalnsrc: a1", i, a1[i], true);
366      }
367      for (int i=0; i<ARRLEN; i++) {
368        a1[i] = false;
369        a2[i] = false;
370      }
371      test_2ci_unaln(a1, a2);
372      for (int i=0; i<UNALIGN_OFF; i++) {
373        errn += verify("test_2ci_unaln: a1", i, a1[i], false);
374      }
375      for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
376        errn += verify("test_2ci_unaln: a1", i, a1[i], false);
377      }
378      for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
379        errn += verify("test_2ci_unaln: a2", i, a2[i], false);
380      }
381      for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
382        errn += verify("test_2ci_unaln: a2", i, a2[i], false);
383      }
384      for (int i=0; i<ARRLEN; i++) {
385        a1[i] = false;
386        a2[i] = false;
387      }
388      test_2vi_unaln(a1, a2, true, true);
389      for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
390        errn += verify("test_2vi_unaln: a1", i, a1[i], true);
391      }
392      for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
393        errn += verify("test_2vi_unaln: a1", i, a1[i], false);
394      }
395      for (int i=0; i<UNALIGN_OFF; i++) {
396        errn += verify("test_2vi_unaln: a2", i, a2[i], false);
397      }
398      for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
399        errn += verify("test_2vi_unaln: a2", i, a2[i], true);
400      }
401
402      // Reset for aligned overlap initialization
403      for (int i=0; i<ALIGN_OFF; i++) {
404        a1[i] = (i > 0);
405      }
406      for (int i=ALIGN_OFF; i<ARRLEN; i++) {
407        a1[i] = false;
408      }
409      test_cp_alndst(a1, a1);
410      for (int i=0; i<ARRLEN; i++) {
411        boolean v = (i%ALIGN_OFF > 0);
412        errn += verify("test_cp_alndst_overlap: a1", i, a1[i], v);
413      }
414      for (int i=0; i<ALIGN_OFF; i++) {
415        a1[i+ALIGN_OFF] = false;
416      }
417      test_cp_alnsrc(a1, a1);
418      for (int i=0; i<ALIGN_OFF; i++) {
419        errn += verify("test_cp_alnsrc_overlap: a1", i, a1[i], false);
420      }
421      for (int i=ALIGN_OFF; i<ARRLEN; i++) {
422        boolean v = (i%ALIGN_OFF > 0);
423        errn += verify("test_cp_alnsrc_overlap: a1", i, a1[i], v);
424      }
425      for (int i=0; i<ARRLEN; i++) {
426        a1[i] = false;
427      }
428      test_2ci_aln(a1, a1);
429      for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
430        errn += verify("test_2ci_aln_overlap: a1", i, a1[i], false);
431      }
432      for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
433        errn += verify("test_2ci_aln_overlap: a1", i, a1[i], false);
434      }
435      for (int i=0; i<ARRLEN; i++) {
436        a1[i] = false;
437      }
438      test_2vi_aln(a1, a1, true, true);
439      for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
440        errn += verify("test_2vi_aln_overlap: a1", i, a1[i], true);
441      }
442      for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
443        errn += verify("test_2vi_aln_overlap: a1", i, a1[i], true);
444      }
445
446      // Reset for unaligned overlap initialization
447      for (int i=0; i<UNALIGN_OFF; i++) {
448        a1[i] = (i > 0);
449      }
450      for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
451        a1[i] = false;
452      }
453      test_cp_unalndst(a1, a1);
454      for (int i=0; i<ARRLEN; i++) {
455        boolean v = (i%UNALIGN_OFF > 0);
456        errn += verify("test_cp_unalndst_overlap: a1", i, a1[i], v);
457      }
458      for (int i=0; i<UNALIGN_OFF; i++) {
459        a1[i+UNALIGN_OFF] = false;
460      }
461      test_cp_unalnsrc(a1, a1);
462      for (int i=0; i<UNALIGN_OFF; i++) {
463        errn += verify("test_cp_unalnsrc_overlap: a1", i, a1[i], false);
464      }
465      for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
466        boolean v = (i%UNALIGN_OFF > 0);
467        errn += verify("test_cp_unalnsrc_overlap: a1", i, a1[i], v);
468      }
469      for (int i=0; i<ARRLEN; i++) {
470        a1[i] = false;
471      }
472      test_2ci_unaln(a1, a1);
473      for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
474        errn += verify("test_2ci_unaln_overlap: a1", i, a1[i], false);
475      }
476      for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
477        errn += verify("test_2ci_unaln_overlap: a1", i, a1[i], false);
478      }
479      for (int i=0; i<ARRLEN; i++) {
480        a1[i] = false;
481      }
482      test_2vi_unaln(a1, a1, true, true);
483      for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
484        errn += verify("test_2vi_unaln_overlap: a1", i, a1[i], true);
485      }
486      for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
487        errn += verify("test_2vi_unaln_overlap: a1", i, a1[i], true);
488      }
489
490    }
491
492    if (errn > 0)
493      return errn;
494
495    System.out.println("Time");
496    long start, end;
497    start = System.currentTimeMillis();
498    for (int i=0; i<ITERS; i++) {
499      test_ci(a1);
500    }
501    end = System.currentTimeMillis();
502    System.out.println("test_ci: " + (end - start));
503    start = System.currentTimeMillis();
504    for (int i=0; i<ITERS; i++) {
505      test_vi(a2, true);
506    }
507    end = System.currentTimeMillis();
508    System.out.println("test_vi: " + (end - start));
509    start = System.currentTimeMillis();
510    for (int i=0; i<ITERS; i++) {
511      test_cp(a1, a2);
512    }
513    end = System.currentTimeMillis();
514    System.out.println("test_cp: " + (end - start));
515    start = System.currentTimeMillis();
516    for (int i=0; i<ITERS; i++) {
517      test_2ci(a1, a2);
518    }
519    end = System.currentTimeMillis();
520    System.out.println("test_2ci: " + (end - start));
521    start = System.currentTimeMillis();
522    for (int i=0; i<ITERS; i++) {
523      test_2vi(a1, a2, true, true);
524    }
525    end = System.currentTimeMillis();
526    System.out.println("test_2vi: " + (end - start));
527
528    start = System.currentTimeMillis();
529    for (int i=0; i<ITERS; i++) {
530      test_ci_neg(a1);
531    }
532    end = System.currentTimeMillis();
533    System.out.println("test_ci_neg: " + (end - start));
534    start = System.currentTimeMillis();
535    for (int i=0; i<ITERS; i++) {
536      test_vi_neg(a2, true);
537    }
538    end = System.currentTimeMillis();
539    System.out.println("test_vi_neg: " + (end - start));
540    start = System.currentTimeMillis();
541    for (int i=0; i<ITERS; i++) {
542      test_cp_neg(a1, a2);
543    }
544    end = System.currentTimeMillis();
545    System.out.println("test_cp_neg: " + (end - start));
546    start = System.currentTimeMillis();
547    for (int i=0; i<ITERS; i++) {
548      test_2ci_neg(a1, a2);
549    }
550    end = System.currentTimeMillis();
551    System.out.println("test_2ci_neg: " + (end - start));
552    start = System.currentTimeMillis();
553    for (int i=0; i<ITERS; i++) {
554      test_2vi_neg(a1, a2, true, true);
555    }
556    end = System.currentTimeMillis();
557    System.out.println("test_2vi_neg: " + (end - start));
558
559    start = System.currentTimeMillis();
560    for (int i=0; i<ITERS; i++) {
561      test_ci_oppos(a1);
562    }
563    end = System.currentTimeMillis();
564    System.out.println("test_ci_oppos: " + (end - start));
565    start = System.currentTimeMillis();
566    for (int i=0; i<ITERS; i++) {
567      test_vi_oppos(a2, true);
568    }
569    end = System.currentTimeMillis();
570    System.out.println("test_vi_oppos: " + (end - start));
571    start = System.currentTimeMillis();
572    for (int i=0; i<ITERS; i++) {
573      test_cp_oppos(a1, a2);
574    }
575    end = System.currentTimeMillis();
576    System.out.println("test_cp_oppos: " + (end - start));
577    start = System.currentTimeMillis();
578    for (int i=0; i<ITERS; i++) {
579      test_2ci_oppos(a1, a2);
580    }
581    end = System.currentTimeMillis();
582    System.out.println("test_2ci_oppos: " + (end - start));
583    start = System.currentTimeMillis();
584    for (int i=0; i<ITERS; i++) {
585      test_2vi_oppos(a1, a2, true, true);
586    }
587    end = System.currentTimeMillis();
588    System.out.println("test_2vi_oppos: " + (end - start));
589
590    start = System.currentTimeMillis();
591    for (int i=0; i<ITERS; i++) {
592      test_ci_off(a1);
593    }
594    end = System.currentTimeMillis();
595    System.out.println("test_ci_off: " + (end - start));
596    start = System.currentTimeMillis();
597    for (int i=0; i<ITERS; i++) {
598      test_vi_off(a2, true);
599    }
600    end = System.currentTimeMillis();
601    System.out.println("test_vi_off: " + (end - start));
602    start = System.currentTimeMillis();
603    for (int i=0; i<ITERS; i++) {
604      test_cp_off(a1, a2);
605    }
606    end = System.currentTimeMillis();
607    System.out.println("test_cp_off: " + (end - start));
608    start = System.currentTimeMillis();
609    for (int i=0; i<ITERS; i++) {
610      test_2ci_off(a1, a2);
611    }
612    end = System.currentTimeMillis();
613    System.out.println("test_2ci_off: " + (end - start));
614    start = System.currentTimeMillis();
615    for (int i=0; i<ITERS; i++) {
616      test_2vi_off(a1, a2, true, true);
617    }
618    end = System.currentTimeMillis();
619    System.out.println("test_2vi_off: " + (end - start));
620
621    start = System.currentTimeMillis();
622    for (int i=0; i<ITERS; i++) {
623      test_ci_inv(a1, OFFSET);
624    }
625    end = System.currentTimeMillis();
626    System.out.println("test_ci_inv: " + (end - start));
627    start = System.currentTimeMillis();
628    for (int i=0; i<ITERS; i++) {
629      test_vi_inv(a2, true, OFFSET);
630    }
631    end = System.currentTimeMillis();
632    System.out.println("test_vi_inv: " + (end - start));
633    start = System.currentTimeMillis();
634    for (int i=0; i<ITERS; i++) {
635      test_cp_inv(a1, a2, OFFSET);
636    }
637    end = System.currentTimeMillis();
638    System.out.println("test_cp_inv: " + (end - start));
639    start = System.currentTimeMillis();
640    for (int i=0; i<ITERS; i++) {
641      test_2ci_inv(a1, a2, OFFSET);
642    }
643    end = System.currentTimeMillis();
644    System.out.println("test_2ci_inv: " + (end - start));
645    start = System.currentTimeMillis();
646    for (int i=0; i<ITERS; i++) {
647      test_2vi_inv(a1, a2, true, true, OFFSET);
648    }
649    end = System.currentTimeMillis();
650    System.out.println("test_2vi_inv: " + (end - start));
651
652    start = System.currentTimeMillis();
653    for (int i=0; i<ITERS; i++) {
654      test_ci_scl(a1);
655    }
656    end = System.currentTimeMillis();
657    System.out.println("test_ci_scl: " + (end - start));
658    start = System.currentTimeMillis();
659    for (int i=0; i<ITERS; i++) {
660      test_vi_scl(a2, true);
661    }
662    end = System.currentTimeMillis();
663    System.out.println("test_vi_scl: " + (end - start));
664    start = System.currentTimeMillis();
665    for (int i=0; i<ITERS; i++) {
666      test_cp_scl(a1, a2);
667    }
668    end = System.currentTimeMillis();
669    System.out.println("test_cp_scl: " + (end - start));
670    start = System.currentTimeMillis();
671    for (int i=0; i<ITERS; i++) {
672      test_2ci_scl(a1, a2);
673    }
674    end = System.currentTimeMillis();
675    System.out.println("test_2ci_scl: " + (end - start));
676    start = System.currentTimeMillis();
677    for (int i=0; i<ITERS; i++) {
678      test_2vi_scl(a1, a2, true, true);
679    }
680    end = System.currentTimeMillis();
681    System.out.println("test_2vi_scl: " + (end - start));
682
683    start = System.currentTimeMillis();
684    for (int i=0; i<ITERS; i++) {
685      test_cp_alndst(a1, a2);
686    }
687    end = System.currentTimeMillis();
688    System.out.println("test_cp_alndst: " + (end - start));
689    start = System.currentTimeMillis();
690    for (int i=0; i<ITERS; i++) {
691      test_cp_alnsrc(a1, a2);
692    }
693    end = System.currentTimeMillis();
694    System.out.println("test_cp_alnsrc: " + (end - start));
695    start = System.currentTimeMillis();
696    for (int i=0; i<ITERS; i++) {
697      test_2ci_aln(a1, a2);
698    }
699    end = System.currentTimeMillis();
700    System.out.println("test_2ci_aln: " + (end - start));
701    start = System.currentTimeMillis();
702    for (int i=0; i<ITERS; i++) {
703      test_2vi_aln(a1, a2, true, true);
704    }
705    end = System.currentTimeMillis();
706    System.out.println("test_2vi_aln: " + (end - start));
707
708    start = System.currentTimeMillis();
709    for (int i=0; i<ITERS; i++) {
710      test_cp_unalndst(a1, a2);
711    }
712    end = System.currentTimeMillis();
713    System.out.println("test_cp_unalndst: " + (end - start));
714    start = System.currentTimeMillis();
715    for (int i=0; i<ITERS; i++) {
716      test_cp_unalnsrc(a1, a2);
717    }
718    end = System.currentTimeMillis();
719    System.out.println("test_cp_unalnsrc: " + (end - start));
720    start = System.currentTimeMillis();
721    for (int i=0; i<ITERS; i++) {
722      test_2ci_unaln(a1, a2);
723    }
724    end = System.currentTimeMillis();
725    System.out.println("test_2ci_unaln: " + (end - start));
726    start = System.currentTimeMillis();
727    for (int i=0; i<ITERS; i++) {
728      test_2vi_unaln(a1, a2, true, true);
729    }
730    end = System.currentTimeMillis();
731    System.out.println("test_2vi_unaln: " + (end - start));
732
733    return errn;
734  }
735
736  static void test_ci(boolean[] a) {
737    for (int i = 0; i < a.length; i+=1) {
738      a[i] = false;
739    }
740  }
741  static void test_vi(boolean[] a, boolean b) {
742    for (int i = 0; i < a.length; i+=1) {
743      a[i] = b;
744    }
745  }
746  static void test_cp(boolean[] a, boolean[] b) {
747    for (int i = 0; i < a.length; i+=1) {
748      a[i] = b[i];
749    }
750  }
751  static void test_2ci(boolean[] a, boolean[] b) {
752    for (int i = 0; i < a.length; i+=1) {
753      a[i] = false;
754      b[i] = false;
755    }
756  }
757  static void test_2vi(boolean[] a, boolean[] b, boolean c, boolean d) {
758    for (int i = 0; i < a.length; i+=1) {
759      a[i] = c;
760      b[i] = d;
761    }
762  }
763  static void test_ci_neg(boolean[] a) {
764    for (int i = a.length-1; i >= 0; i-=1) {
765      a[i] = false;
766    }
767  }
768  static void test_vi_neg(boolean[] a, boolean b) {
769    for (int i = a.length-1; i >= 0; i-=1) {
770      a[i] = b;
771    }
772  }
773  static void test_cp_neg(boolean[] a, boolean[] b) {
774    for (int i = a.length-1; i >= 0; i-=1) {
775      a[i] = b[i];
776    }
777  }
778  static void test_2ci_neg(boolean[] a, boolean[] b) {
779    for (int i = a.length-1; i >= 0; i-=1) {
780      a[i] = false;
781      b[i] = false;
782    }
783  }
784  static void test_2vi_neg(boolean[] a, boolean[] b, boolean c, boolean d) {
785    for (int i = a.length-1; i >= 0; i-=1) {
786      a[i] = c;
787      b[i] = d;
788    }
789  }
790  static void test_ci_oppos(boolean[] a) {
791    int limit = a.length-1;
792    for (int i = 0; i < a.length; i+=1) {
793      a[limit-i] = false;
794    }
795  }
796  static void test_vi_oppos(boolean[] a, boolean b) {
797    int limit = a.length-1;
798    for (int i = limit; i >= 0; i-=1) {
799      a[limit-i] = b;
800    }
801  }
802  static void test_cp_oppos(boolean[] a, boolean[] b) {
803    int limit = a.length-1;
804    for (int i = 0; i < a.length; i+=1) {
805      a[i] = b[limit-i];
806    }
807  }
808  static void test_2ci_oppos(boolean[] a, boolean[] b) {
809    int limit = a.length-1;
810    for (int i = 0; i < a.length; i+=1) {
811      a[limit-i] = false;
812      b[i] = false;
813    }
814  }
815  static void test_2vi_oppos(boolean[] a, boolean[] b, boolean c, boolean d) {
816    int limit = a.length-1;
817    for (int i = limit; i >= 0; i-=1) {
818      a[i] = c;
819      b[limit-i] = d;
820    }
821  }
822  static void test_ci_off(boolean[] a) {
823    for (int i = 0; i < a.length-OFFSET; i+=1) {
824      a[i+OFFSET] = false;
825    }
826  }
827  static void test_vi_off(boolean[] a, boolean b) {
828    for (int i = 0; i < a.length-OFFSET; i+=1) {
829      a[i+OFFSET] = b;
830    }
831  }
832  static void test_cp_off(boolean[] a, boolean[] b) {
833    for (int i = 0; i < a.length-OFFSET; i+=1) {
834      a[i+OFFSET] = b[i+OFFSET];
835    }
836  }
837  static void test_2ci_off(boolean[] a, boolean[] b) {
838    for (int i = 0; i < a.length-OFFSET; i+=1) {
839      a[i+OFFSET] = false;
840      b[i+OFFSET] = false;
841    }
842  }
843  static void test_2vi_off(boolean[] a, boolean[] b, boolean c, boolean d) {
844    for (int i = 0; i < a.length-OFFSET; i+=1) {
845      a[i+OFFSET] = c;
846      b[i+OFFSET] = d;
847    }
848  }
849  static void test_ci_inv(boolean[] a, int k) {
850    for (int i = 0; i < a.length-k; i+=1) {
851      a[i+k] = false;
852    }
853  }
854  static void test_vi_inv(boolean[] a, boolean b, int k) {
855    for (int i = 0; i < a.length-k; i+=1) {
856      a[i+k] = b;
857    }
858  }
859  static void test_cp_inv(boolean[] a, boolean[] b, int k) {
860    for (int i = 0; i < a.length-k; i+=1) {
861      a[i+k] = b[i+k];
862    }
863  }
864  static void test_2ci_inv(boolean[] a, boolean[] b, int k) {
865    for (int i = 0; i < a.length-k; i+=1) {
866      a[i+k] = false;
867      b[i+k] = false;
868    }
869  }
870  static void test_2vi_inv(boolean[] a, boolean[] b, boolean c, boolean d, int k) {
871    for (int i = 0; i < a.length-k; i+=1) {
872      a[i+k] = c;
873      b[i+k] = d;
874    }
875  }
876  static void test_ci_scl(boolean[] a) {
877    for (int i = 0; i*SCALE < a.length; i+=1) {
878      a[i*SCALE] = false;
879    }
880  }
881  static void test_vi_scl(boolean[] a, boolean b) {
882    for (int i = 0; i*SCALE < a.length; i+=1) {
883      a[i*SCALE] = b;
884    }
885  }
886  static void test_cp_scl(boolean[] a, boolean[] b) {
887    for (int i = 0; i*SCALE < a.length; i+=1) {
888      a[i*SCALE] = b[i*SCALE];
889    }
890  }
891  static void test_2ci_scl(boolean[] a, boolean[] b) {
892    for (int i = 0; i*SCALE < a.length; i+=1) {
893      a[i*SCALE] = false;
894      b[i*SCALE] = false;
895    }
896  }
897  static void test_2vi_scl(boolean[] a, boolean[] b, boolean c, boolean d) {
898    for (int i = 0; i*SCALE < a.length; i+=1) {
899      a[i*SCALE] = c;
900      b[i*SCALE] = d;
901    }
902  }
903  static void test_cp_alndst(boolean[] a, boolean[] b) {
904    for (int i = 0; i < a.length-ALIGN_OFF; i+=1) {
905      a[i+ALIGN_OFF] = b[i];
906    }
907  }
908  static void test_cp_alnsrc(boolean[] a, boolean[] b) {
909    for (int i = 0; i < a.length-ALIGN_OFF; i+=1) {
910      a[i] = b[i+ALIGN_OFF];
911    }
912  }
913  static void test_2ci_aln(boolean[] a, boolean[] b) {
914    for (int i = 0; i < a.length-ALIGN_OFF; i+=1) {
915      a[i+ALIGN_OFF] = false;
916      b[i] = false;
917    }
918  }
919  static void test_2vi_aln(boolean[] a, boolean[] b, boolean c, boolean d) {
920    for (int i = 0; i < a.length-ALIGN_OFF; i+=1) {
921      a[i] = c;
922      b[i+ALIGN_OFF] = d;
923    }
924  }
925  static void test_cp_unalndst(boolean[] a, boolean[] b) {
926    for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) {
927      a[i+UNALIGN_OFF] = b[i];
928    }
929  }
930  static void test_cp_unalnsrc(boolean[] a, boolean[] b) {
931    for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) {
932      a[i] = b[i+UNALIGN_OFF];
933    }
934  }
935  static void test_2ci_unaln(boolean[] a, boolean[] b) {
936    for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) {
937      a[i+UNALIGN_OFF] = false;
938      b[i] = false;
939    }
940  }
941  static void test_2vi_unaln(boolean[] a, boolean[] b, boolean c, boolean d) {
942    for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) {
943      a[i] = c;
944      b[i+UNALIGN_OFF] = d;
945    }
946  }
947
948  static int verify(String text, int i, boolean elem, boolean val) {
949    if (elem != val) {
950      System.err.println(text + "[" + i + "] = " + elem + " != " + val);
951      return 1;
952    }
953    return 0;
954  }
955}
956