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