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