1 /*
   2  * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 /**
  26  * @test
  27  * @bug 6340864
  28  * @summary Implement vectorization optimizations in hotspot-server
  29  *
  30  * @run main/othervm/timeout=400 -Xbatch -Xmx64m TestShortVect
  31  */
  32 
  33 public class TestShortVect {
  34   private static final int ARRLEN = 997;
  35   private static final int ITERS  = 11000;
  36   private static final int ADD_INIT = Short.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 Short 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     short[] a0 = new short[ARRLEN];
  53     short[] a1 = new short[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       short val = (short)(ADD_INIT+i);
  63       gold_sum += val;
  64       a1[i] = val;
  65       a2[i] = (short)VALUE;
  66       a3[i] = (short)-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, (short)VALUE);
  74       test_adda(a0, a1, a2);
  75       test_subc(a0, a1);
  76       test_subv(a0, a1, (short)VALUE);
  77       test_suba(a0, a1, a2);
  78       test_mulc(a0, a1);
  79       test_mulv(a0, a1, (short)VALUE);
  80       test_mula(a0, a1, a2);
  81       test_divc(a0, a1);
  82       test_divv(a0, a1, (short)VALUE);
  83       test_diva(a0, a1, a2);
  84       test_mulc_n(a0, a1);
  85       test_mulv(a0, a1, (short)-VALUE);
  86       test_mula(a0, a1, a3);
  87       test_divc_n(a0, a1);
  88       test_divv(a0, a1, (short)-VALUE);
  89       test_diva(a0, a1, a3);
  90       test_andc(a0, a1);
  91       test_andv(a0, a1, (short)BIT_MASK);
  92       test_anda(a0, a1, a4);
  93       test_orc(a0, a1);
  94       test_orv(a0, a1, (short)BIT_MASK);
  95       test_ora(a0, a1, a4);
  96       test_xorc(a0, a1);
  97       test_xorv(a0, a1, (short)BIT_MASK);
  98       test_xora(a0, a1, a4);
  99       test_sllc(a0, a1);
 100       test_sllv(a0, a1, VALUE);
 101       test_srlc(a0, a1);
 102       test_srlv(a0, a1, VALUE);
 103       test_srac(a0, a1);
 104       test_srav(a0, a1, VALUE);
 105       test_sllc_n(a0, a1);
 106       test_sllv(a0, a1, -VALUE);
 107       test_srlc_n(a0, a1);
 108       test_srlv(a0, a1, -VALUE);
 109       test_srac_n(a0, a1);
 110       test_srav(a0, a1, -VALUE);
 111       test_sllc_o(a0, a1);
 112       test_sllv(a0, a1, SHIFT);
 113       test_srlc_o(a0, a1);
 114       test_srlv(a0, a1, SHIFT);
 115       test_srac_o(a0, a1);
 116       test_srav(a0, a1, SHIFT);
 117       test_sllc_on(a0, a1);
 118       test_sllv(a0, a1, -SHIFT);
 119       test_srlc_on(a0, a1);
 120       test_srlv(a0, a1, -SHIFT);
 121       test_srac_on(a0, a1);
 122       test_srav(a0, a1, -SHIFT);
 123       test_pack2(p2, a1);
 124       test_unpack2(a0, p2);
 125       test_pack2_swap(p2, a1);
 126       test_unpack2_swap(a0, p2);
 127       test_pack4(p4, a1);
 128       test_unpack4(a0, p4);
 129       test_pack4_swap(p4, a1);
 130       test_unpack4_swap(a0, p4);
 131     }
 132     // Test and verify results
 133     System.out.println("Verification");
 134     int errn = 0;
 135     {
 136       int sum = test_sum(a1);
 137       if (sum != gold_sum) {
 138         System.err.println("test_sum:  " + sum + " != " + gold_sum);
 139         errn++;
 140       }
 141 
 142       test_addc(a0, a1);
 143       for (int i=0; i<ARRLEN; i++) {
 144         errn += verify("test_addc: ", i, a0[i], (short)((short)(ADD_INIT+i)+VALUE));
 145       }
 146       test_addv(a0, a1, (short)VALUE);
 147       for (int i=0; i<ARRLEN; i++) {
 148         errn += verify("test_addv: ", i, a0[i], (short)((short)(ADD_INIT+i)+VALUE));
 149       }
 150       test_adda(a0, a1, a2);
 151       for (int i=0; i<ARRLEN; i++) {
 152         errn += verify("test_adda: ", i, a0[i], (short)((short)(ADD_INIT+i)+VALUE));
 153       }
 154 
 155       test_subc(a0, a1);
 156       for (int i=0; i<ARRLEN; i++) {
 157         errn += verify("test_subc: ", i, a0[i], (short)((short)(ADD_INIT+i)-VALUE));
 158       }
 159       test_subv(a0, a1, (short)VALUE);
 160       for (int i=0; i<ARRLEN; i++) {
 161         errn += verify("test_subv: ", i, a0[i], (short)((short)(ADD_INIT+i)-VALUE));
 162       }
 163       test_suba(a0, a1, a2);
 164       for (int i=0; i<ARRLEN; i++) {
 165         errn += verify("test_suba: ", i, a0[i], (short)((short)(ADD_INIT+i)-VALUE));
 166       }
 167 
 168       test_mulc(a0, a1);
 169       for (int i=0; i<ARRLEN; i++) {
 170         errn += verify("test_mulc: ", i, a0[i], (short)((short)(ADD_INIT+i)*VALUE));
 171       }
 172       test_mulv(a0, a1, (short)VALUE);
 173       for (int i=0; i<ARRLEN; i++) {
 174         errn += verify("test_mulv: ", i, a0[i], (short)((short)(ADD_INIT+i)*VALUE));
 175       }
 176       test_mula(a0, a1, a2);
 177       for (int i=0; i<ARRLEN; i++) {
 178         errn += verify("test_mula: ", i, a0[i], (short)((short)(ADD_INIT+i)*VALUE));
 179       }
 180 
 181       test_divc(a0, a1);
 182       for (int i=0; i<ARRLEN; i++) {
 183         errn += verify("test_divc: ", i, a0[i], (short)((short)(ADD_INIT+i)/VALUE));
 184       }
 185       test_divv(a0, a1, (short)VALUE);
 186       for (int i=0; i<ARRLEN; i++) {
 187         errn += verify("test_divv: ", i, a0[i], (short)((short)(ADD_INIT+i)/VALUE));
 188       }
 189       test_diva(a0, a1, a2);
 190       for (int i=0; i<ARRLEN; i++) {
 191         errn += verify("test_diva: ", i, a0[i], (short)((short)(ADD_INIT+i)/VALUE));
 192       }
 193 
 194       test_mulc_n(a0, a1);
 195       for (int i=0; i<ARRLEN; i++) {
 196         errn += verify("test_mulc_n: ", i, a0[i], (short)((short)(ADD_INIT+i)*(-VALUE)));
 197       }
 198       test_mulv(a0, a1, (short)-VALUE);
 199       for (int i=0; i<ARRLEN; i++) {
 200         errn += verify("test_mulv_n: ", i, a0[i], (short)((short)(ADD_INIT+i)*(-VALUE)));
 201       }
 202       test_mula(a0, a1, a3);
 203       for (int i=0; i<ARRLEN; i++) {
 204         errn += verify("test_mula_n: ", i, a0[i], (short)((short)(ADD_INIT+i)*(-VALUE)));
 205       }
 206 
 207       test_divc_n(a0, a1);
 208       for (int i=0; i<ARRLEN; i++) {
 209         errn += verify("test_divc_n: ", i, a0[i], (short)((short)(ADD_INIT+i)/(-VALUE)));
 210       }
 211       test_divv(a0, a1, (short)-VALUE);
 212       for (int i=0; i<ARRLEN; i++) {
 213         errn += verify("test_divv_n: ", i, a0[i], (short)((short)(ADD_INIT+i)/(-VALUE)));
 214       }
 215       test_diva(a0, a1, a3);
 216       for (int i=0; i<ARRLEN; i++) {
 217         errn += verify("test_diva_n: ", i, a0[i], (short)((short)(ADD_INIT+i)/(-VALUE)));
 218       }
 219 
 220       test_andc(a0, a1);
 221       for (int i=0; i<ARRLEN; i++) {
 222         errn += verify("test_andc: ", i, a0[i], (short)((short)(ADD_INIT+i)&BIT_MASK));
 223       }
 224       test_andv(a0, a1, (short)BIT_MASK);
 225       for (int i=0; i<ARRLEN; i++) {
 226         errn += verify("test_andv: ", i, a0[i], (short)((short)(ADD_INIT+i)&BIT_MASK));
 227       }
 228       test_anda(a0, a1, a4);
 229       for (int i=0; i<ARRLEN; i++) {
 230         errn += verify("test_anda: ", i, a0[i], (short)((short)(ADD_INIT+i)&BIT_MASK));
 231       }
 232 
 233       test_orc(a0, a1);
 234       for (int i=0; i<ARRLEN; i++) {
 235         errn += verify("test_orc: ", i, a0[i], (short)((short)(ADD_INIT+i)|BIT_MASK));
 236       }
 237       test_orv(a0, a1, (short)BIT_MASK);
 238       for (int i=0; i<ARRLEN; i++) {
 239         errn += verify("test_orv: ", i, a0[i], (short)((short)(ADD_INIT+i)|BIT_MASK));
 240       }
 241       test_ora(a0, a1, a4);
 242       for (int i=0; i<ARRLEN; i++) {
 243         errn += verify("test_ora: ", i, a0[i], (short)((short)(ADD_INIT+i)|BIT_MASK));
 244       }
 245 
 246       test_xorc(a0, a1);
 247       for (int i=0; i<ARRLEN; i++) {
 248         errn += verify("test_xorc: ", i, a0[i], (short)((short)(ADD_INIT+i)^BIT_MASK));
 249       }
 250       test_xorv(a0, a1, (short)BIT_MASK);
 251       for (int i=0; i<ARRLEN; i++) {
 252         errn += verify("test_xorv: ", i, a0[i], (short)((short)(ADD_INIT+i)^BIT_MASK));
 253       }
 254       test_xora(a0, a1, a4);
 255       for (int i=0; i<ARRLEN; i++) {
 256         errn += verify("test_xora: ", i, a0[i], (short)((short)(ADD_INIT+i)^BIT_MASK));
 257       }
 258 
 259       test_sllc(a0, a1);
 260       for (int i=0; i<ARRLEN; i++) {
 261         errn += verify("test_sllc: ", i, a0[i], (short)((short)(ADD_INIT+i)<<VALUE));
 262       }
 263       test_sllv(a0, a1, VALUE);
 264       for (int i=0; i<ARRLEN; i++) {
 265         errn += verify("test_sllv: ", i, a0[i], (short)((short)(ADD_INIT+i)<<VALUE));
 266       }
 267 
 268       test_srlc(a0, a1);
 269       for (int i=0; i<ARRLEN; i++) {
 270         errn += verify("test_srlc: ", i, a0[i], (short)((short)(ADD_INIT+i)>>>VALUE));
 271       }
 272       test_srlv(a0, a1, VALUE);
 273       for (int i=0; i<ARRLEN; i++) {
 274         errn += verify("test_srlv: ", i, a0[i], (short)((short)(ADD_INIT+i)>>>VALUE));
 275       }
 276 
 277       test_srac(a0, a1);
 278       for (int i=0; i<ARRLEN; i++) {
 279         errn += verify("test_srac: ", i, a0[i], (short)((short)(ADD_INIT+i)>>VALUE));
 280       }
 281       test_srav(a0, a1, VALUE);
 282       for (int i=0; i<ARRLEN; i++) {
 283         errn += verify("test_srav: ", i, a0[i], (short)((short)(ADD_INIT+i)>>VALUE));
 284       }
 285 
 286       test_sllc_n(a0, a1);
 287       for (int i=0; i<ARRLEN; i++) {
 288         errn += verify("test_sllc_n: ", i, a0[i], (short)((short)(ADD_INIT+i)<<(-VALUE)));
 289       }
 290       test_sllv(a0, a1, -VALUE);
 291       for (int i=0; i<ARRLEN; i++) {
 292         errn += verify("test_sllv_n: ", i, a0[i], (short)((short)(ADD_INIT+i)<<(-VALUE)));
 293       }
 294 
 295       test_srlc_n(a0, a1);
 296       for (int i=0; i<ARRLEN; i++) {
 297         errn += verify("test_srlc_n: ", i, a0[i], (short)((short)(ADD_INIT+i)>>>(-VALUE)));
 298       }
 299       test_srlv(a0, a1, -VALUE);
 300       for (int i=0; i<ARRLEN; i++) {
 301         errn += verify("test_srlv_n: ", i, a0[i], (short)((short)(ADD_INIT+i)>>>(-VALUE)));
 302       }
 303 
 304       test_srac_n(a0, a1);
 305       for (int i=0; i<ARRLEN; i++) {
 306         errn += verify("test_srac_n: ", i, a0[i], (short)((short)(ADD_INIT+i)>>(-VALUE)));
 307       }
 308       test_srav(a0, a1, -VALUE);
 309       for (int i=0; i<ARRLEN; i++) {
 310         errn += verify("test_srav_n: ", i, a0[i], (short)((short)(ADD_INIT+i)>>(-VALUE)));
 311       }
 312 
 313       test_sllc_o(a0, a1);
 314       for (int i=0; i<ARRLEN; i++) {
 315         errn += verify("test_sllc_o: ", i, a0[i], (short)((short)(ADD_INIT+i)<<SHIFT));
 316       }
 317       test_sllv(a0, a1, SHIFT);
 318       for (int i=0; i<ARRLEN; i++) {
 319         errn += verify("test_sllv_o: ", i, a0[i], (short)((short)(ADD_INIT+i)<<SHIFT));
 320       }
 321 
 322       test_srlc_o(a0, a1);
 323       for (int i=0; i<ARRLEN; i++) {
 324         errn += verify("test_srlc_o: ", i, a0[i], (short)((short)(ADD_INIT+i)>>>SHIFT));
 325       }
 326       test_srlv(a0, a1, SHIFT);
 327       for (int i=0; i<ARRLEN; i++) {
 328         errn += verify("test_srlv_o: ", i, a0[i], (short)((short)(ADD_INIT+i)>>>SHIFT));
 329       }
 330 
 331       test_srac_o(a0, a1);
 332       for (int i=0; i<ARRLEN; i++) {
 333         errn += verify("test_srac_o: ", i, a0[i], (short)((short)(ADD_INIT+i)>>SHIFT));
 334       }
 335       test_srav(a0, a1, SHIFT);
 336       for (int i=0; i<ARRLEN; i++) {
 337         errn += verify("test_srav_o: ", i, a0[i], (short)((short)(ADD_INIT+i)>>SHIFT));
 338       }
 339 
 340       test_sllc_on(a0, a1);
 341       for (int i=0; i<ARRLEN; i++) {
 342         errn += verify("test_sllc_on: ", i, a0[i], (short)((short)(ADD_INIT+i)<<(-SHIFT)));
 343       }
 344       test_sllv(a0, a1, -SHIFT);
 345       for (int i=0; i<ARRLEN; i++) {
 346         errn += verify("test_sllv_on: ", i, a0[i], (short)((short)(ADD_INIT+i)<<(-SHIFT)));
 347       }
 348 
 349       test_srlc_on(a0, a1);
 350       for (int i=0; i<ARRLEN; i++) {
 351         errn += verify("test_srlc_on: ", i, a0[i], (short)((short)(ADD_INIT+i)>>>(-SHIFT)));
 352       }
 353       test_srlv(a0, a1, -SHIFT);
 354       for (int i=0; i<ARRLEN; i++) {
 355         errn += verify("test_srlv_on: ", i, a0[i], (short)((short)(ADD_INIT+i)>>>(-SHIFT)));
 356       }
 357 
 358       test_srac_on(a0, a1);
 359       for (int i=0; i<ARRLEN; i++) {
 360         errn += verify("test_srac_on: ", i, a0[i], (short)((short)(ADD_INIT+i)>>(-SHIFT)));
 361       }
 362       test_srav(a0, a1, -SHIFT);
 363       for (int i=0; i<ARRLEN; i++) {
 364         errn += verify("test_srav_on: ", i, a0[i], (short)((short)(ADD_INIT+i)>>(-SHIFT)));
 365       }
 366 
 367       test_pack2(p2, a1);
 368       for (int i=0; i<ARRLEN/2; i++) {
 369         errn += verify("test_pack2: ", i, p2[i], ((int)(ADD_INIT+2*i) & 0xFFFF) | ((int)(ADD_INIT+2*i+1) << 16));
 370       }
 371       for (int i=0; i<ARRLEN; i++) {
 372         a0[i] = -1;
 373       }
 374       test_unpack2(a0, p2);
 375       for (int i=0; i<(ARRLEN&(-2)); i++) {
 376         errn += verify("test_unpack2: ", i, a0[i], (short)(ADD_INIT+i));
 377       }
 378 
 379       test_pack2_swap(p2, a1);
 380       for (int i=0; i<ARRLEN/2; i++) {
 381         errn += verify("test_pack2_swap: ", i, p2[i], ((int)(ADD_INIT+2*i+1) & 0xFFFF) | ((int)(ADD_INIT+2*i) << 16));
 382       }
 383       for (int i=0; i<ARRLEN; i++) {
 384         a0[i] = -1;
 385       }
 386       test_unpack2_swap(a0, p2);
 387       for (int i=0; i<(ARRLEN&(-2)); i++) {
 388         errn += verify("test_unpack2_swap: ", i, a0[i], (short)(ADD_INIT+i));
 389       }
 390 
 391       test_pack4(p4, a1);
 392       for (int i=0; i<ARRLEN/4; i++) {
 393         errn += verify("test_pack4: ", i, p4[i],  ((long)(ADD_INIT+4*i+0) & 0xFFFFl) |
 394                                                  (((long)(ADD_INIT+4*i+1) & 0xFFFFl) << 16)  |
 395                                                  (((long)(ADD_INIT+4*i+2) & 0xFFFFl) << 32)  |
 396                                                  (((long)(ADD_INIT+4*i+3) & 0xFFFFl) << 48));
 397       }
 398       for (int i=0; i<ARRLEN; i++) {
 399         a0[i] = -1;
 400       }
 401       test_unpack4(a0, p4);
 402       for (int i=0; i<(ARRLEN&(-4)); i++) {
 403         errn += verify("test_unpack4: ", i, a0[i], (short)(ADD_INIT+i));
 404       }
 405 
 406       test_pack4_swap(p4, a1);
 407       for (int i=0; i<ARRLEN/4; i++) {
 408         errn += verify("test_pack4_swap: ", i, p4[i],  ((long)(ADD_INIT+4*i+3) & 0xFFFFl) |
 409                                                       (((long)(ADD_INIT+4*i+2) & 0xFFFFl) << 16)  |
 410                                                       (((long)(ADD_INIT+4*i+1) & 0xFFFFl) << 32)  |
 411                                                       (((long)(ADD_INIT+4*i+0) & 0xFFFFl) << 48));
 412       }
 413       for (int i=0; i<ARRLEN; i++) {
 414         a0[i] = -1;
 415       }
 416       test_unpack4_swap(a0, p4);
 417       for (int i=0; i<(ARRLEN&(-4)); i++) {
 418         errn += verify("test_unpack4_swap: ", i, a0[i], (short)(ADD_INIT+i));
 419       }
 420 
 421     }
 422 
 423     if (errn > 0)
 424       return errn;
 425 
 426     System.out.println("Time");
 427     long start, end;
 428 
 429     start = System.currentTimeMillis();
 430     for (int i=0; i<ITERS; i++) {
 431       test_sum(a1);
 432     }
 433     end = System.currentTimeMillis();
 434     System.out.println("test_sum: " + (end - start));
 435 
 436     start = System.currentTimeMillis();
 437     for (int i=0; i<ITERS; i++) {
 438       test_addc(a0, a1);
 439     }
 440     end = System.currentTimeMillis();
 441     System.out.println("test_addc: " + (end - start));
 442     start = System.currentTimeMillis();
 443     for (int i=0; i<ITERS; i++) {
 444       test_addv(a0, a1, (short)VALUE);
 445     }
 446     end = System.currentTimeMillis();
 447     System.out.println("test_addv: " + (end - start));
 448     start = System.currentTimeMillis();
 449     for (int i=0; i<ITERS; i++) {
 450       test_adda(a0, a1, a2);
 451     }
 452     end = System.currentTimeMillis();
 453     System.out.println("test_adda: " + (end - start));
 454 
 455     start = System.currentTimeMillis();
 456     for (int i=0; i<ITERS; i++) {
 457       test_subc(a0, a1);
 458     }
 459     end = System.currentTimeMillis();
 460     System.out.println("test_subc: " + (end - start));
 461     start = System.currentTimeMillis();
 462     for (int i=0; i<ITERS; i++) {
 463       test_subv(a0, a1, (short)VALUE);
 464     }
 465     end = System.currentTimeMillis();
 466     System.out.println("test_subv: " + (end - start));
 467     start = System.currentTimeMillis();
 468     for (int i=0; i<ITERS; i++) {
 469       test_suba(a0, a1, a2);
 470     }
 471     end = System.currentTimeMillis();
 472     System.out.println("test_suba: " + (end - start));
 473 
 474     start = System.currentTimeMillis();
 475     for (int i=0; i<ITERS; i++) {
 476       test_mulc(a0, a1);
 477     }
 478     end = System.currentTimeMillis();
 479     System.out.println("test_mulc: " + (end - start));
 480     start = System.currentTimeMillis();
 481     for (int i=0; i<ITERS; i++) {
 482       test_mulv(a0, a1, (short)VALUE);
 483     }
 484     end = System.currentTimeMillis();
 485     System.out.println("test_mulv: " + (end - start));
 486     start = System.currentTimeMillis();
 487     for (int i=0; i<ITERS; i++) {
 488       test_mula(a0, a1, a2);
 489     }
 490     end = System.currentTimeMillis();
 491     System.out.println("test_mula: " + (end - start));
 492 
 493     start = System.currentTimeMillis();
 494     for (int i=0; i<ITERS; i++) {
 495       test_divc(a0, a1);
 496     }
 497     end = System.currentTimeMillis();
 498     System.out.println("test_divc: " + (end - start));
 499     start = System.currentTimeMillis();
 500     for (int i=0; i<ITERS; i++) {
 501       test_divv(a0, a1, (short)VALUE);
 502     }
 503     end = System.currentTimeMillis();
 504     System.out.println("test_divv: " + (end - start));
 505     start = System.currentTimeMillis();
 506     for (int i=0; i<ITERS; i++) {
 507       test_diva(a0, a1, a2);
 508     }
 509     end = System.currentTimeMillis();
 510     System.out.println("test_diva: " + (end - start));
 511 
 512     start = System.currentTimeMillis();
 513     for (int i=0; i<ITERS; i++) {
 514       test_mulc_n(a0, a1);
 515     }
 516     end = System.currentTimeMillis();
 517     System.out.println("test_mulc_n: " + (end - start));
 518     start = System.currentTimeMillis();
 519     for (int i=0; i<ITERS; i++) {
 520       test_mulv(a0, a1, (short)-VALUE);
 521     }
 522     end = System.currentTimeMillis();
 523     System.out.println("test_mulv_n: " + (end - start));
 524     start = System.currentTimeMillis();
 525     for (int i=0; i<ITERS; i++) {
 526       test_mula(a0, a1, a3);
 527     }
 528     end = System.currentTimeMillis();
 529     System.out.println("test_mula_n: " + (end - start));
 530 
 531     start = System.currentTimeMillis();
 532     for (int i=0; i<ITERS; i++) {
 533       test_divc_n(a0, a1);
 534     }
 535     end = System.currentTimeMillis();
 536     System.out.println("test_divc_n: " + (end - start));
 537     start = System.currentTimeMillis();
 538     for (int i=0; i<ITERS; i++) {
 539       test_divv(a0, a1, (short)-VALUE);
 540     }
 541     end = System.currentTimeMillis();
 542     System.out.println("test_divv_n: " + (end - start));
 543     start = System.currentTimeMillis();
 544     for (int i=0; i<ITERS; i++) {
 545       test_diva(a0, a1, a3);
 546     }
 547     end = System.currentTimeMillis();
 548     System.out.println("test_diva_n: " + (end - start));
 549 
 550     start = System.currentTimeMillis();
 551     for (int i=0; i<ITERS; i++) {
 552       test_andc(a0, a1);
 553     }
 554     end = System.currentTimeMillis();
 555     System.out.println("test_andc: " + (end - start));
 556     start = System.currentTimeMillis();
 557     for (int i=0; i<ITERS; i++) {
 558       test_andv(a0, a1, (short)BIT_MASK);
 559     }
 560     end = System.currentTimeMillis();
 561     System.out.println("test_andv: " + (end - start));
 562     start = System.currentTimeMillis();
 563     for (int i=0; i<ITERS; i++) {
 564       test_anda(a0, a1, a4);
 565     }
 566     end = System.currentTimeMillis();
 567     System.out.println("test_anda: " + (end - start));
 568 
 569     start = System.currentTimeMillis();
 570     for (int i=0; i<ITERS; i++) {
 571       test_orc(a0, a1);
 572     }
 573     end = System.currentTimeMillis();
 574     System.out.println("test_orc: " + (end - start));
 575     start = System.currentTimeMillis();
 576     for (int i=0; i<ITERS; i++) {
 577       test_orv(a0, a1, (short)BIT_MASK);
 578     }
 579     end = System.currentTimeMillis();
 580     System.out.println("test_orv: " + (end - start));
 581     start = System.currentTimeMillis();
 582     for (int i=0; i<ITERS; i++) {
 583       test_ora(a0, a1, a4);
 584     }
 585     end = System.currentTimeMillis();
 586     System.out.println("test_ora: " + (end - start));
 587 
 588     start = System.currentTimeMillis();
 589     for (int i=0; i<ITERS; i++) {
 590       test_xorc(a0, a1);
 591     }
 592     end = System.currentTimeMillis();
 593     System.out.println("test_xorc: " + (end - start));
 594     start = System.currentTimeMillis();
 595     for (int i=0; i<ITERS; i++) {
 596       test_xorv(a0, a1, (short)BIT_MASK);
 597     }
 598     end = System.currentTimeMillis();
 599     System.out.println("test_xorv: " + (end - start));
 600     start = System.currentTimeMillis();
 601     for (int i=0; i<ITERS; i++) {
 602       test_xora(a0, a1, a4);
 603     }
 604     end = System.currentTimeMillis();
 605     System.out.println("test_xora: " + (end - start));
 606 
 607     start = System.currentTimeMillis();
 608     for (int i=0; i<ITERS; i++) {
 609       test_sllc(a0, a1);
 610     }
 611     end = System.currentTimeMillis();
 612     System.out.println("test_sllc: " + (end - start));
 613     start = System.currentTimeMillis();
 614     for (int i=0; i<ITERS; i++) {
 615       test_sllv(a0, a1, VALUE);
 616     }
 617     end = System.currentTimeMillis();
 618     System.out.println("test_sllv: " + (end - start));
 619 
 620     start = System.currentTimeMillis();
 621     for (int i=0; i<ITERS; i++) {
 622       test_srlc(a0, a1);
 623     }
 624     end = System.currentTimeMillis();
 625     System.out.println("test_srlc: " + (end - start));
 626     start = System.currentTimeMillis();
 627     for (int i=0; i<ITERS; i++) {
 628       test_srlv(a0, a1, VALUE);
 629     }
 630     end = System.currentTimeMillis();
 631     System.out.println("test_srlv: " + (end - start));
 632 
 633     start = System.currentTimeMillis();
 634     for (int i=0; i<ITERS; i++) {
 635       test_srac(a0, a1);
 636     }
 637     end = System.currentTimeMillis();
 638     System.out.println("test_srac: " + (end - start));
 639     start = System.currentTimeMillis();
 640     for (int i=0; i<ITERS; i++) {
 641       test_srav(a0, a1, VALUE);
 642     }
 643     end = System.currentTimeMillis();
 644     System.out.println("test_srav: " + (end - start));
 645 
 646     start = System.currentTimeMillis();
 647     for (int i=0; i<ITERS; i++) {
 648       test_sllc_n(a0, a1);
 649     }
 650     end = System.currentTimeMillis();
 651     System.out.println("test_sllc_n: " + (end - start));
 652     start = System.currentTimeMillis();
 653     for (int i=0; i<ITERS; i++) {
 654       test_sllv(a0, a1, -VALUE);
 655     }
 656     end = System.currentTimeMillis();
 657     System.out.println("test_sllv_n: " + (end - start));
 658 
 659     start = System.currentTimeMillis();
 660     for (int i=0; i<ITERS; i++) {
 661       test_srlc_n(a0, a1);
 662     }
 663     end = System.currentTimeMillis();
 664     System.out.println("test_srlc_n: " + (end - start));
 665     start = System.currentTimeMillis();
 666     for (int i=0; i<ITERS; i++) {
 667       test_srlv(a0, a1, -VALUE);
 668     }
 669     end = System.currentTimeMillis();
 670     System.out.println("test_srlv_n: " + (end - start));
 671 
 672     start = System.currentTimeMillis();
 673     for (int i=0; i<ITERS; i++) {
 674       test_srac_n(a0, a1);
 675     }
 676     end = System.currentTimeMillis();
 677     System.out.println("test_srac_n: " + (end - start));
 678     start = System.currentTimeMillis();
 679     for (int i=0; i<ITERS; i++) {
 680       test_srav(a0, a1, -VALUE);
 681     }
 682     end = System.currentTimeMillis();
 683     System.out.println("test_srav_n: " + (end - start));
 684 
 685     start = System.currentTimeMillis();
 686     for (int i=0; i<ITERS; i++) {
 687       test_sllc_o(a0, a1);
 688     }
 689     end = System.currentTimeMillis();
 690     System.out.println("test_sllc_o: " + (end - start));
 691     start = System.currentTimeMillis();
 692     for (int i=0; i<ITERS; i++) {
 693       test_sllv(a0, a1, SHIFT);
 694     }
 695     end = System.currentTimeMillis();
 696     System.out.println("test_sllv_o: " + (end - start));
 697 
 698     start = System.currentTimeMillis();
 699     for (int i=0; i<ITERS; i++) {
 700       test_srlc_o(a0, a1);
 701     }
 702     end = System.currentTimeMillis();
 703     System.out.println("test_srlc_o: " + (end - start));
 704     start = System.currentTimeMillis();
 705     for (int i=0; i<ITERS; i++) {
 706       test_srlv(a0, a1, SHIFT);
 707     }
 708     end = System.currentTimeMillis();
 709     System.out.println("test_srlv_o: " + (end - start));
 710 
 711     start = System.currentTimeMillis();
 712     for (int i=0; i<ITERS; i++) {
 713       test_srac_o(a0, a1);
 714     }
 715     end = System.currentTimeMillis();
 716     System.out.println("test_srac_o: " + (end - start));
 717     start = System.currentTimeMillis();
 718     for (int i=0; i<ITERS; i++) {
 719       test_srav(a0, a1, SHIFT);
 720     }
 721     end = System.currentTimeMillis();
 722     System.out.println("test_srav_o: " + (end - start));
 723 
 724     start = System.currentTimeMillis();
 725     for (int i=0; i<ITERS; i++) {
 726       test_sllc_on(a0, a1);
 727     }
 728     end = System.currentTimeMillis();
 729     System.out.println("test_sllc_on: " + (end - start));
 730     start = System.currentTimeMillis();
 731     for (int i=0; i<ITERS; i++) {
 732       test_sllv(a0, a1, -SHIFT);
 733     }
 734     end = System.currentTimeMillis();
 735     System.out.println("test_sllv_on: " + (end - start));
 736 
 737     start = System.currentTimeMillis();
 738     for (int i=0; i<ITERS; i++) {
 739       test_srlc_on(a0, a1);
 740     }
 741     end = System.currentTimeMillis();
 742     System.out.println("test_srlc_on: " + (end - start));
 743     start = System.currentTimeMillis();
 744     for (int i=0; i<ITERS; i++) {
 745       test_srlv(a0, a1, -SHIFT);
 746     }
 747     end = System.currentTimeMillis();
 748     System.out.println("test_srlv_on: " + (end - start));
 749 
 750     start = System.currentTimeMillis();
 751     for (int i=0; i<ITERS; i++) {
 752       test_srac_on(a0, a1);
 753     }
 754     end = System.currentTimeMillis();
 755     System.out.println("test_srac_on: " + (end - start));
 756     start = System.currentTimeMillis();
 757     for (int i=0; i<ITERS; i++) {
 758       test_srav(a0, a1, -SHIFT);
 759     }
 760     end = System.currentTimeMillis();
 761     System.out.println("test_srav_on: " + (end - start));
 762 
 763     start = System.currentTimeMillis();
 764     for (int i=0; i<ITERS; i++) {
 765       test_pack2(p2, a1);
 766     }
 767     end = System.currentTimeMillis();
 768     System.out.println("test_pack2: " + (end - start));
 769     start = System.currentTimeMillis();
 770     for (int i=0; i<ITERS; i++) {
 771       test_unpack2(a0, p2);
 772     }
 773     end = System.currentTimeMillis();
 774     System.out.println("test_unpack2: " + (end - start));
 775     start = System.currentTimeMillis();
 776     for (int i=0; i<ITERS; i++) {
 777       test_pack2_swap(p2, a1);
 778     }
 779     end = System.currentTimeMillis();
 780     System.out.println("test_pack2_swap: " + (end - start));
 781     start = System.currentTimeMillis();
 782     for (int i=0; i<ITERS; i++) {
 783       test_unpack2_swap(a0, p2);
 784     }
 785     end = System.currentTimeMillis();
 786     System.out.println("test_unpack2_swap: " + (end - start));
 787 
 788     start = System.currentTimeMillis();
 789     for (int i=0; i<ITERS; i++) {
 790       test_pack4(p4, a1);
 791     }
 792     end = System.currentTimeMillis();
 793     System.out.println("test_pack4: " + (end - start));
 794     start = System.currentTimeMillis();
 795     for (int i=0; i<ITERS; i++) {
 796       test_unpack4(a0, p4);
 797     }
 798     end = System.currentTimeMillis();
 799     System.out.println("test_unpack4: " + (end - start));
 800     start = System.currentTimeMillis();
 801     for (int i=0; i<ITERS; i++) {
 802       test_pack4_swap(p4, a1);
 803     }
 804     end = System.currentTimeMillis();
 805     System.out.println("test_pack4_swap: " + (end - start));
 806     start = System.currentTimeMillis();
 807     for (int i=0; i<ITERS; i++) {
 808       test_unpack4_swap(a0, p4);
 809     }
 810     end = System.currentTimeMillis();
 811     System.out.println("test_unpack4_swap: " + (end - start));
 812 
 813     return errn;
 814   }
 815 
 816   static int test_sum(short[] a1) {
 817     int sum = 0;
 818     for (int i = 0; i < a1.length; i+=1) {
 819       sum += a1[i];
 820     }
 821     return sum;
 822   }
 823 
 824   static void test_addc(short[] a0, short[] a1) {
 825     for (int i = 0; i < a0.length; i+=1) {
 826       a0[i] = (short)(a1[i]+VALUE);
 827     }
 828   }
 829   static void test_addv(short[] a0, short[] a1, short b) {
 830     for (int i = 0; i < a0.length; i+=1) {
 831       a0[i] = (short)(a1[i]+b);
 832     }
 833   }
 834   static void test_adda(short[] a0, short[] a1, short[] a2) {
 835     for (int i = 0; i < a0.length; i+=1) {
 836       a0[i] = (short)(a1[i]+a2[i]);
 837     }
 838   }
 839 
 840   static void test_subc(short[] a0, short[] a1) {
 841     for (int i = 0; i < a0.length; i+=1) {
 842       a0[i] = (short)(a1[i]-VALUE);
 843     }
 844   }
 845   static void test_subv(short[] a0, short[] a1, short b) {
 846     for (int i = 0; i < a0.length; i+=1) {
 847       a0[i] = (short)(a1[i]-b);
 848     }
 849   }
 850   static void test_suba(short[] a0, short[] a1, short[] a2) {
 851     for (int i = 0; i < a0.length; i+=1) {
 852       a0[i] = (short)(a1[i]-a2[i]);
 853     }
 854   }
 855 
 856   static void test_mulc(short[] a0, short[] a1) {
 857     for (int i = 0; i < a0.length; i+=1) {
 858       a0[i] = (short)(a1[i]*VALUE);
 859     }
 860   }
 861   static void test_mulc_n(short[] a0, short[] a1) {
 862     for (int i = 0; i < a0.length; i+=1) {
 863       a0[i] = (short)(a1[i]*(-VALUE));
 864     }
 865   }
 866   static void test_mulv(short[] a0, short[] a1, short b) {
 867     for (int i = 0; i < a0.length; i+=1) {
 868       a0[i] = (short)(a1[i]*b);
 869     }
 870   }
 871   static void test_mula(short[] a0, short[] a1, short[] a2) {
 872     for (int i = 0; i < a0.length; i+=1) {
 873       a0[i] = (short)(a1[i]*a2[i]);
 874     }
 875   }
 876 
 877   static void test_divc(short[] a0, short[] a1) {
 878     for (int i = 0; i < a0.length; i+=1) {
 879       a0[i] = (short)(a1[i]/VALUE);
 880     }
 881   }
 882   static void test_divc_n(short[] a0, short[] a1) {
 883     for (int i = 0; i < a0.length; i+=1) {
 884       a0[i] = (short)(a1[i]/(-VALUE));
 885     }
 886   }
 887   static void test_divv(short[] a0, short[] a1, short b) {
 888     for (int i = 0; i < a0.length; i+=1) {
 889       a0[i] = (short)(a1[i]/b);
 890     }
 891   }
 892   static void test_diva(short[] a0, short[] a1, short[] a2) {
 893     for (int i = 0; i < a0.length; i+=1) {
 894       a0[i] = (short)(a1[i]/a2[i]);
 895     }
 896   }
 897 
 898   static void test_andc(short[] a0, short[] a1) {
 899     for (int i = 0; i < a0.length; i+=1) {
 900       a0[i] = (short)(a1[i]&BIT_MASK);
 901     }
 902   }
 903   static void test_andv(short[] a0, short[] a1, short b) {
 904     for (int i = 0; i < a0.length; i+=1) {
 905       a0[i] = (short)(a1[i]&b);
 906     }
 907   }
 908   static void test_anda(short[] a0, short[] a1, short[] a2) {
 909     for (int i = 0; i < a0.length; i+=1) {
 910       a0[i] = (short)(a1[i]&a2[i]);
 911     }
 912   }
 913 
 914   static void test_orc(short[] a0, short[] a1) {
 915     for (int i = 0; i < a0.length; i+=1) {
 916       a0[i] = (short)(a1[i]|BIT_MASK);
 917     }
 918   }
 919   static void test_orv(short[] a0, short[] a1, short b) {
 920     for (int i = 0; i < a0.length; i+=1) {
 921       a0[i] = (short)(a1[i]|b);
 922     }
 923   }
 924   static void test_ora(short[] a0, short[] a1, short[] a2) {
 925     for (int i = 0; i < a0.length; i+=1) {
 926       a0[i] = (short)(a1[i]|a2[i]);
 927     }
 928   }
 929 
 930   static void test_xorc(short[] a0, short[] a1) {
 931     for (int i = 0; i < a0.length; i+=1) {
 932       a0[i] = (short)(a1[i]^BIT_MASK);
 933     }
 934   }
 935   static void test_xorv(short[] a0, short[] a1, short b) {
 936     for (int i = 0; i < a0.length; i+=1) {
 937       a0[i] = (short)(a1[i]^b);
 938     }
 939   }
 940   static void test_xora(short[] a0, short[] a1, short[] a2) {
 941     for (int i = 0; i < a0.length; i+=1) {
 942       a0[i] = (short)(a1[i]^a2[i]);
 943     }
 944   }
 945 
 946   static void test_sllc(short[] a0, short[] a1) {
 947     for (int i = 0; i < a0.length; i+=1) {
 948       a0[i] = (short)(a1[i]<<VALUE);
 949     }
 950   }
 951   static void test_sllc_n(short[] a0, short[] a1) {
 952     for (int i = 0; i < a0.length; i+=1) {
 953       a0[i] = (short)(a1[i]<<(-VALUE));
 954     }
 955   }
 956   static void test_sllc_o(short[] a0, short[] a1) {
 957     for (int i = 0; i < a0.length; i+=1) {
 958       a0[i] = (short)(a1[i]<<SHIFT);
 959     }
 960   }
 961   static void test_sllc_on(short[] a0, short[] a1) {
 962     for (int i = 0; i < a0.length; i+=1) {
 963       a0[i] = (short)(a1[i]<<(-SHIFT));
 964     }
 965   }
 966   static void test_sllv(short[] a0, short[] a1, int b) {
 967     for (int i = 0; i < a0.length; i+=1) {
 968       a0[i] = (short)(a1[i]<<b);
 969     }
 970   }
 971 
 972   static void test_srlc(short[] a0, short[] a1) {
 973     for (int i = 0; i < a0.length; i+=1) {
 974       a0[i] = (short)(a1[i]>>>VALUE);
 975     }
 976   }
 977   static void test_srlc_n(short[] a0, short[] a1) {
 978     for (int i = 0; i < a0.length; i+=1) {
 979       a0[i] = (short)(a1[i]>>>(-VALUE));
 980     }
 981   }
 982   static void test_srlc_o(short[] a0, short[] a1) {
 983     for (int i = 0; i < a0.length; i+=1) {
 984       a0[i] = (short)(a1[i]>>>SHIFT);
 985     }
 986   }
 987   static void test_srlc_on(short[] a0, short[] a1) {
 988     for (int i = 0; i < a0.length; i+=1) {
 989       a0[i] = (short)(a1[i]>>>(-SHIFT));
 990     }
 991   }
 992   static void test_srlv(short[] a0, short[] a1, int b) {
 993     for (int i = 0; i < a0.length; i+=1) {
 994       a0[i] = (short)(a1[i]>>>b);
 995     }
 996   }
 997 
 998   static void test_srac(short[] a0, short[] a1) {
 999     for (int i = 0; i < a0.length; i+=1) {
1000       a0[i] = (short)(a1[i]>>VALUE);
1001     }
1002   }
1003   static void test_srac_n(short[] a0, short[] a1) {
1004     for (int i = 0; i < a0.length; i+=1) {
1005       a0[i] = (short)(a1[i]>>(-VALUE));
1006     }
1007   }
1008   static void test_srac_o(short[] a0, short[] a1) {
1009     for (int i = 0; i < a0.length; i+=1) {
1010       a0[i] = (short)(a1[i]>>SHIFT);
1011     }
1012   }
1013   static void test_srac_on(short[] a0, short[] a1) {
1014     for (int i = 0; i < a0.length; i+=1) {
1015       a0[i] = (short)(a1[i]>>(-SHIFT));
1016     }
1017   }
1018   static void test_srav(short[] a0, short[] a1, int b) {
1019     for (int i = 0; i < a0.length; i+=1) {
1020       a0[i] = (short)(a1[i]>>b);
1021     }
1022   }
1023 
1024   static void test_pack2(int[] p2, short[] a1) {
1025     if (p2.length*2 > a1.length) return;
1026     for (int i = 0; i < p2.length; i+=1) {
1027       int l0 = (int)a1[i*2+0];
1028       int l1 = (int)a1[i*2+1];
1029       p2[i] = (l1 << 16) | (l0 & 0xFFFF);
1030     }
1031   }
1032   static void test_unpack2(short[] a0, int[] p2) {
1033     if (p2.length*2 > a0.length) return;
1034     for (int i = 0; i < p2.length; i+=1) {
1035       int l = p2[i];
1036       a0[i*2+0] = (short)(l & 0xFFFF);
1037       a0[i*2+1] = (short)(l >> 16);
1038     }
1039   }
1040   static void test_pack2_swap(int[] p2, short[] a1) {
1041     if (p2.length*2 > a1.length) return;
1042     for (int i = 0; i < p2.length; i+=1) {
1043       int l0 = (int)a1[i*2+0];
1044       int l1 = (int)a1[i*2+1];
1045       p2[i] = (l0 << 16) | (l1 & 0xFFFF);
1046     }
1047   }
1048   static void test_unpack2_swap(short[] a0, int[] p2) {
1049     if (p2.length*2 > a0.length) return;
1050     for (int i = 0; i < p2.length; i+=1) {
1051       int l = p2[i];
1052       a0[i*2+0] = (short)(l >> 16);
1053       a0[i*2+1] = (short)(l & 0xFFFF);
1054     }
1055   }
1056 
1057   static void test_pack4(long[] p4, short[] a1) {
1058     if (p4.length*4 > a1.length) return;
1059     for (int i = 0; i < p4.length; i+=1) {
1060       long l0 = (long)a1[i*4+0];
1061       long l1 = (long)a1[i*4+1];
1062       long l2 = (long)a1[i*4+2];
1063       long l3 = (long)a1[i*4+3];
1064       p4[i] = (l0 & 0xFFFFl) |
1065              ((l1 & 0xFFFFl) << 16) |
1066              ((l2 & 0xFFFFl) << 32) |
1067              ((l3 & 0xFFFFl) << 48);
1068     }
1069   }
1070   static void test_unpack4(short[] a0, long[] p4) {
1071     if (p4.length*4 > a0.length) return;
1072     for (int i = 0; i < p4.length; i+=1) {
1073       long l = p4[i];
1074       a0[i*4+0] = (short)(l & 0xFFFFl);
1075       a0[i*4+1] = (short)(l >> 16);
1076       a0[i*4+2] = (short)(l >> 32);
1077       a0[i*4+3] = (short)(l >> 48);
1078     }
1079   }
1080   static void test_pack4_swap(long[] p4, short[] a1) {
1081     if (p4.length*4 > a1.length) return;
1082     for (int i = 0; i < p4.length; i+=1) {
1083       long l0 = (long)a1[i*4+0];
1084       long l1 = (long)a1[i*4+1];
1085       long l2 = (long)a1[i*4+2];
1086       long l3 = (long)a1[i*4+3];
1087       p4[i] = (l3 & 0xFFFFl) |
1088              ((l2 & 0xFFFFl) << 16) |
1089              ((l1 & 0xFFFFl) << 32) |
1090              ((l0 & 0xFFFFl) << 48);
1091     }
1092   }
1093   static void test_unpack4_swap(short[] a0, long[] p4) {
1094     if (p4.length*4 > a0.length) return;
1095     for (int i = 0; i < p4.length; i+=1) {
1096       long l = p4[i];
1097       a0[i*4+0] = (short)(l >> 48);
1098       a0[i*4+1] = (short)(l >> 32);
1099       a0[i*4+2] = (short)(l >> 16);
1100       a0[i*4+3] = (short)(l & 0xFFFFl);
1101     }
1102   }
1103 
1104   static int verify(String text, int i, short elem, short val) {
1105     if (elem != val) {
1106       System.err.println(text + "[" + i + "] = " + elem + " != " + val);
1107       return 1;
1108     }
1109     return 0;
1110   }
1111 
1112   static int verify(String text, int i, int elem, int val) {
1113     if (elem != val) {
1114       System.err.println(text + "[" + i + "] = " + Integer.toHexString(elem) + " != " + Integer.toHexString(val));
1115       return 1;
1116     }
1117     return 0;
1118   }
1119 
1120   static int verify(String text, int i, long elem, long val) {
1121     if (elem != val) {
1122       System.err.println(text + "[" + i + "] = " + Long.toHexString(elem) + " != " + Long.toHexString(val));
1123       return 1;
1124     }
1125     return 0;
1126   }
1127 }