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