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