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