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