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