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