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