test/compiler/6340864/TestIntVect.java

Mon, 20 Aug 2012 09:07:21 -0700

author
kvn
date
Mon, 20 Aug 2012 09:07:21 -0700
changeset 4001
006050192a5a
child 4204
b2c669fd8114
permissions
-rw-r--r--

6340864: Implement vectorization optimizations in hotspot-server
Summary: Added asm encoding and mach nodes for vector arithmetic instructions on x86.
Reviewed-by: roland

     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  */
    25 /**
    26  * @test
    27  * @bug 6340864
    28  * @summary Implement vectorization optimizations in hotspot-server
    29  *
    30  * @run main/othervm/timeout=400 -Xbatch -Xmx64m TestIntVect
    31  */
    33 public class TestIntVect {
    34   private static final int ARRLEN = 997;
    35   private static final int ITERS  = 11000;
    36   private static final int ADD_INIT = Integer.MAX_VALUE-500;
    37   private static final int BIT_MASK = 0xEC80F731;
    38   private static final int VALUE = 15;
    39   private static final int SHIFT = 32;
    41   public static void main(String args[]) {
    42     System.out.println("Testing Integer 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   }
    51   static int test() {
    52     int[] a0 = new int[ARRLEN];
    53     int[] a1 = new int[ARRLEN];
    54     int[] a2 = new int[ARRLEN];
    55     int[] a3 = new int[ARRLEN];
    56     int[] a4 = new int[ARRLEN];
    57     long[] p2 = new long[ARRLEN/2];
    58     // Initialize
    59     int gold_sum = 0;
    60     for (int i=0; i<ARRLEN; i++) {
    61       int val = (int)(ADD_INIT+i);
    62       gold_sum += val;
    63       a1[i] = val;
    64       a2[i] = (int)VALUE;
    65       a3[i] = (int)-VALUE;
    66       a4[i] = (int)BIT_MASK;
    67     }
    68     System.out.println("Warmup");
    69     for (int i=0; i<ITERS; i++) {
    70       test_sum(a1);
    71       test_addc(a0, a1);
    72       test_addv(a0, a1, (int)VALUE);
    73       test_adda(a0, a1, a2);
    74       test_subc(a0, a1);
    75       test_subv(a0, a1, (int)VALUE);
    76       test_suba(a0, a1, a2);
    77       test_mulc(a0, a1);
    78       test_mulv(a0, a1, (int)VALUE);
    79       test_mula(a0, a1, a2);
    80       test_divc(a0, a1);
    81       test_divv(a0, a1, (int)VALUE);
    82       test_diva(a0, a1, a2);
    83       test_mulc_n(a0, a1);
    84       test_mulv(a0, a1, (int)-VALUE);
    85       test_mula(a0, a1, a3);
    86       test_divc_n(a0, a1);
    87       test_divv(a0, a1, (int)-VALUE);
    88       test_diva(a0, a1, a3);
    89       test_andc(a0, a1);
    90       test_andv(a0, a1, (int)BIT_MASK);
    91       test_anda(a0, a1, a4);
    92       test_orc(a0, a1);
    93       test_orv(a0, a1, (int)BIT_MASK);
    94       test_ora(a0, a1, a4);
    95       test_xorc(a0, a1);
    96       test_xorv(a0, a1, (int)BIT_MASK);
    97       test_xora(a0, a1, a4);
    98       test_sllc(a0, a1);
    99       test_sllv(a0, a1, VALUE);
   100       test_srlc(a0, a1);
   101       test_srlv(a0, a1, VALUE);
   102       test_srac(a0, a1);
   103       test_srav(a0, a1, VALUE);
   104       test_sllc_n(a0, a1);
   105       test_sllv(a0, a1, -VALUE);
   106       test_srlc_n(a0, a1);
   107       test_srlv(a0, a1, -VALUE);
   108       test_srac_n(a0, a1);
   109       test_srav(a0, a1, -VALUE);
   110       test_sllc_o(a0, a1);
   111       test_sllv(a0, a1, SHIFT);
   112       test_srlc_o(a0, a1);
   113       test_srlv(a0, a1, SHIFT);
   114       test_srac_o(a0, a1);
   115       test_srav(a0, a1, SHIFT);
   116       test_sllc_on(a0, a1);
   117       test_sllv(a0, a1, -SHIFT);
   118       test_srlc_on(a0, a1);
   119       test_srlv(a0, a1, -SHIFT);
   120       test_srac_on(a0, a1);
   121       test_srav(a0, a1, -SHIFT);
   122       test_pack2(p2, a1);
   123       test_unpack2(a0, p2);
   124       test_pack2_swap(p2, a1);
   125       test_unpack2_swap(a0, p2);
   126     }
   127     // Test and verify results
   128     System.out.println("Verification");
   129     int errn = 0;
   130     {
   131       int sum = test_sum(a1);
   132       if (sum != gold_sum) {
   133         System.err.println("test_sum:  " + sum + " != " + gold_sum);
   134         errn++;
   135       }
   137       test_addc(a0, a1);
   138       for (int i=0; i<ARRLEN; i++) {
   139         errn += verify("test_addc: ", i, a0[i], (int)((int)(ADD_INIT+i)+VALUE));
   140       }
   141       test_addv(a0, a1, (int)VALUE);
   142       for (int i=0; i<ARRLEN; i++) {
   143         errn += verify("test_addv: ", i, a0[i], (int)((int)(ADD_INIT+i)+VALUE));
   144       }
   145       test_adda(a0, a1, a2);
   146       for (int i=0; i<ARRLEN; i++) {
   147         errn += verify("test_adda: ", i, a0[i], (int)((int)(ADD_INIT+i)+VALUE));
   148       }
   150       test_subc(a0, a1);
   151       for (int i=0; i<ARRLEN; i++) {
   152         errn += verify("test_subc: ", i, a0[i], (int)((int)(ADD_INIT+i)-VALUE));
   153       }
   154       test_subv(a0, a1, (int)VALUE);
   155       for (int i=0; i<ARRLEN; i++) {
   156         errn += verify("test_subv: ", i, a0[i], (int)((int)(ADD_INIT+i)-VALUE));
   157       }
   158       test_suba(a0, a1, a2);
   159       for (int i=0; i<ARRLEN; i++) {
   160         errn += verify("test_suba: ", i, a0[i], (int)((int)(ADD_INIT+i)-VALUE));
   161       }
   163       test_mulc(a0, a1);
   164       for (int i=0; i<ARRLEN; i++) {
   165         errn += verify("test_mulc: ", i, a0[i], (int)((int)(ADD_INIT+i)*VALUE));
   166       }
   167       test_mulv(a0, a1, (int)VALUE);
   168       for (int i=0; i<ARRLEN; i++) {
   169         errn += verify("test_mulv: ", i, a0[i], (int)((int)(ADD_INIT+i)*VALUE));
   170       }
   171       test_mula(a0, a1, a2);
   172       for (int i=0; i<ARRLEN; i++) {
   173         errn += verify("test_mula: ", i, a0[i], (int)((int)(ADD_INIT+i)*VALUE));
   174       }
   176       test_divc(a0, a1);
   177       for (int i=0; i<ARRLEN; i++) {
   178         errn += verify("test_divc: ", i, a0[i], (int)((int)(ADD_INIT+i)/VALUE));
   179       }
   180       test_divv(a0, a1, (int)VALUE);
   181       for (int i=0; i<ARRLEN; i++) {
   182         errn += verify("test_divv: ", i, a0[i], (int)((int)(ADD_INIT+i)/VALUE));
   183       }
   184       test_diva(a0, a1, a2);
   185       for (int i=0; i<ARRLEN; i++) {
   186         errn += verify("test_diva: ", i, a0[i], (int)((int)(ADD_INIT+i)/VALUE));
   187       }
   189       test_mulc_n(a0, a1);
   190       for (int i=0; i<ARRLEN; i++) {
   191         errn += verify("test_mulc_n: ", i, a0[i], (int)((int)(ADD_INIT+i)*(-VALUE)));
   192       }
   193       test_mulv(a0, a1, (int)-VALUE);
   194       for (int i=0; i<ARRLEN; i++) {
   195         errn += verify("test_mulv_n: ", i, a0[i], (int)((int)(ADD_INIT+i)*(-VALUE)));
   196       }
   197       test_mula(a0, a1, a3);
   198       for (int i=0; i<ARRLEN; i++) {
   199         errn += verify("test_mula_n: ", i, a0[i], (int)((int)(ADD_INIT+i)*(-VALUE)));
   200       }
   202       test_divc_n(a0, a1);
   203       for (int i=0; i<ARRLEN; i++) {
   204         errn += verify("test_divc_n: ", i, a0[i], (int)((int)(ADD_INIT+i)/(-VALUE)));
   205       }
   206       test_divv(a0, a1, (int)-VALUE);
   207       for (int i=0; i<ARRLEN; i++) {
   208         errn += verify("test_divv_n: ", i, a0[i], (int)((int)(ADD_INIT+i)/(-VALUE)));
   209       }
   210       test_diva(a0, a1, a3);
   211       for (int i=0; i<ARRLEN; i++) {
   212         errn += verify("test_diva_n: ", i, a0[i], (int)((int)(ADD_INIT+i)/(-VALUE)));
   213       }
   215       test_andc(a0, a1);
   216       for (int i=0; i<ARRLEN; i++) {
   217         errn += verify("test_andc: ", i, a0[i], (int)((int)(ADD_INIT+i)&BIT_MASK));
   218       }
   219       test_andv(a0, a1, (int)BIT_MASK);
   220       for (int i=0; i<ARRLEN; i++) {
   221         errn += verify("test_andv: ", i, a0[i], (int)((int)(ADD_INIT+i)&BIT_MASK));
   222       }
   223       test_anda(a0, a1, a4);
   224       for (int i=0; i<ARRLEN; i++) {
   225         errn += verify("test_anda: ", i, a0[i], (int)((int)(ADD_INIT+i)&BIT_MASK));
   226       }
   228       test_orc(a0, a1);
   229       for (int i=0; i<ARRLEN; i++) {
   230         errn += verify("test_orc: ", i, a0[i], (int)((int)(ADD_INIT+i)|BIT_MASK));
   231       }
   232       test_orv(a0, a1, (int)BIT_MASK);
   233       for (int i=0; i<ARRLEN; i++) {
   234         errn += verify("test_orv: ", i, a0[i], (int)((int)(ADD_INIT+i)|BIT_MASK));
   235       }
   236       test_ora(a0, a1, a4);
   237       for (int i=0; i<ARRLEN; i++) {
   238         errn += verify("test_ora: ", i, a0[i], (int)((int)(ADD_INIT+i)|BIT_MASK));
   239       }
   241       test_xorc(a0, a1);
   242       for (int i=0; i<ARRLEN; i++) {
   243         errn += verify("test_xorc: ", i, a0[i], (int)((int)(ADD_INIT+i)^BIT_MASK));
   244       }
   245       test_xorv(a0, a1, (int)BIT_MASK);
   246       for (int i=0; i<ARRLEN; i++) {
   247         errn += verify("test_xorv: ", i, a0[i], (int)((int)(ADD_INIT+i)^BIT_MASK));
   248       }
   249       test_xora(a0, a1, a4);
   250       for (int i=0; i<ARRLEN; i++) {
   251         errn += verify("test_xora: ", i, a0[i], (int)((int)(ADD_INIT+i)^BIT_MASK));
   252       }
   254       test_sllc(a0, a1);
   255       for (int i=0; i<ARRLEN; i++) {
   256         errn += verify("test_sllc: ", i, a0[i], (int)((int)(ADD_INIT+i)<<VALUE));
   257       }
   258       test_sllv(a0, a1, VALUE);
   259       for (int i=0; i<ARRLEN; i++) {
   260         errn += verify("test_sllv: ", i, a0[i], (int)((int)(ADD_INIT+i)<<VALUE));
   261       }
   263       test_srlc(a0, a1);
   264       for (int i=0; i<ARRLEN; i++) {
   265         errn += verify("test_srlc: ", i, a0[i], (int)((int)(ADD_INIT+i)>>>VALUE));
   266       }
   267       test_srlv(a0, a1, VALUE);
   268       for (int i=0; i<ARRLEN; i++) {
   269         errn += verify("test_srlv: ", i, a0[i], (int)((int)(ADD_INIT+i)>>>VALUE));
   270       }
   272       test_srac(a0, a1);
   273       for (int i=0; i<ARRLEN; i++) {
   274         errn += verify("test_srac: ", i, a0[i], (int)((int)(ADD_INIT+i)>>VALUE));
   275       }
   276       test_srav(a0, a1, VALUE);
   277       for (int i=0; i<ARRLEN; i++) {
   278         errn += verify("test_srav: ", i, a0[i], (int)((int)(ADD_INIT+i)>>VALUE));
   279       }
   281       test_sllc_n(a0, a1);
   282       for (int i=0; i<ARRLEN; i++) {
   283         errn += verify("test_sllc_n: ", i, a0[i], (int)((int)(ADD_INIT+i)<<(-VALUE)));
   284       }
   285       test_sllv(a0, a1, -VALUE);
   286       for (int i=0; i<ARRLEN; i++) {
   287         errn += verify("test_sllv_n: ", i, a0[i], (int)((int)(ADD_INIT+i)<<(-VALUE)));
   288       }
   290       test_srlc_n(a0, a1);
   291       for (int i=0; i<ARRLEN; i++) {
   292         errn += verify("test_srlc_n: ", i, a0[i], (int)((int)(ADD_INIT+i)>>>(-VALUE)));
   293       }
   294       test_srlv(a0, a1, -VALUE);
   295       for (int i=0; i<ARRLEN; i++) {
   296         errn += verify("test_srlv_n: ", i, a0[i], (int)((int)(ADD_INIT+i)>>>(-VALUE)));
   297       }
   299       test_srac_n(a0, a1);
   300       for (int i=0; i<ARRLEN; i++) {
   301         errn += verify("test_srac_n: ", i, a0[i], (int)((int)(ADD_INIT+i)>>(-VALUE)));
   302       }
   303       test_srav(a0, a1, -VALUE);
   304       for (int i=0; i<ARRLEN; i++) {
   305         errn += verify("test_srav_n: ", i, a0[i], (int)((int)(ADD_INIT+i)>>(-VALUE)));
   306       }
   308       test_sllc_o(a0, a1);
   309       for (int i=0; i<ARRLEN; i++) {
   310         errn += verify("test_sllc_o: ", i, a0[i], (int)((int)(ADD_INIT+i)<<SHIFT));
   311       }
   312       test_sllv(a0, a1, SHIFT);
   313       for (int i=0; i<ARRLEN; i++) {
   314         errn += verify("test_sllv_o: ", i, a0[i], (int)((int)(ADD_INIT+i)<<SHIFT));
   315       }
   317       test_srlc_o(a0, a1);
   318       for (int i=0; i<ARRLEN; i++) {
   319         errn += verify("test_srlc_o: ", i, a0[i], (int)((int)(ADD_INIT+i)>>>SHIFT));
   320       }
   321       test_srlv(a0, a1, SHIFT);
   322       for (int i=0; i<ARRLEN; i++) {
   323         errn += verify("test_srlv_o: ", i, a0[i], (int)((int)(ADD_INIT+i)>>>SHIFT));
   324       }
   326       test_srac_o(a0, a1);
   327       for (int i=0; i<ARRLEN; i++) {
   328         errn += verify("test_srac_o: ", i, a0[i], (int)((int)(ADD_INIT+i)>>SHIFT));
   329       }
   330       test_srav(a0, a1, SHIFT);
   331       for (int i=0; i<ARRLEN; i++) {
   332         errn += verify("test_srav_o: ", i, a0[i], (int)((int)(ADD_INIT+i)>>SHIFT));
   333       }
   335       test_sllc_on(a0, a1);
   336       for (int i=0; i<ARRLEN; i++) {
   337         errn += verify("test_sllc_on: ", i, a0[i], (int)((int)(ADD_INIT+i)<<(-SHIFT)));
   338       }
   339       test_sllv(a0, a1, -SHIFT);
   340       for (int i=0; i<ARRLEN; i++) {
   341         errn += verify("test_sllv_on: ", i, a0[i], (int)((int)(ADD_INIT+i)<<(-SHIFT)));
   342       }
   344       test_srlc_on(a0, a1);
   345       for (int i=0; i<ARRLEN; i++) {
   346         errn += verify("test_srlc_on: ", i, a0[i], (int)((int)(ADD_INIT+i)>>>(-SHIFT)));
   347       }
   348       test_srlv(a0, a1, -SHIFT);
   349       for (int i=0; i<ARRLEN; i++) {
   350         errn += verify("test_srlv_on: ", i, a0[i], (int)((int)(ADD_INIT+i)>>>(-SHIFT)));
   351       }
   353       test_srac_on(a0, a1);
   354       for (int i=0; i<ARRLEN; i++) {
   355         errn += verify("test_srac_on: ", i, a0[i], (int)((int)(ADD_INIT+i)>>(-SHIFT)));
   356       }
   357       test_srav(a0, a1, -SHIFT);
   358       for (int i=0; i<ARRLEN; i++) {
   359         errn += verify("test_srav_on: ", i, a0[i], (int)((int)(ADD_INIT+i)>>(-SHIFT)));
   360       }
   362       test_pack2(p2, a1);
   363       for (int i=0; i<ARRLEN/2; i++) {
   364         errn += verify("test_pack2: ", i, p2[i], ((long)(ADD_INIT+2*i) & 0xFFFFFFFFl) | ((long)(ADD_INIT+2*i+1) << 32));
   365       }
   366       for (int i=0; i<ARRLEN; i++) {
   367         a0[i] = -1;
   368       }
   369       test_unpack2(a0, p2);
   370       for (int i=0; i<(ARRLEN&(-2)); i++) {
   371         errn += verify("test_unpack2: ", i, a0[i], (ADD_INIT+i));
   372       }
   374       test_pack2_swap(p2, a1);
   375       for (int i=0; i<ARRLEN/2; i++) {
   376         errn += verify("test_pack2_swap: ", i, p2[i], ((long)(ADD_INIT+2*i+1) & 0xFFFFFFFFl) | ((long)(ADD_INIT+2*i) << 32));
   377       }
   378       for (int i=0; i<ARRLEN; i++) {
   379         a0[i] = -1;
   380       }
   381       test_unpack2_swap(a0, p2);
   382       for (int i=0; i<(ARRLEN&(-2)); i++) {
   383         errn += verify("test_unpack2_swap: ", i, a0[i], (ADD_INIT+i));
   384       }
   386     }
   388     if (errn > 0)
   389       return errn;
   391     System.out.println("Time");
   392     long start, end;
   394     start = System.currentTimeMillis();
   395     for (int i=0; i<ITERS; i++) {
   396       test_sum(a1);
   397     }
   398     end = System.currentTimeMillis();
   399     System.out.println("test_sum: " + (end - start));
   401     start = System.currentTimeMillis();
   402     for (int i=0; i<ITERS; i++) {
   403       test_addc(a0, a1);
   404     }
   405     end = System.currentTimeMillis();
   406     System.out.println("test_addc: " + (end - start));
   407     start = System.currentTimeMillis();
   408     for (int i=0; i<ITERS; i++) {
   409       test_addv(a0, a1, (int)VALUE);
   410     }
   411     end = System.currentTimeMillis();
   412     System.out.println("test_addv: " + (end - start));
   413     start = System.currentTimeMillis();
   414     for (int i=0; i<ITERS; i++) {
   415       test_adda(a0, a1, a2);
   416     }
   417     end = System.currentTimeMillis();
   418     System.out.println("test_adda: " + (end - start));
   420     start = System.currentTimeMillis();
   421     for (int i=0; i<ITERS; i++) {
   422       test_subc(a0, a1);
   423     }
   424     end = System.currentTimeMillis();
   425     System.out.println("test_subc: " + (end - start));
   426     start = System.currentTimeMillis();
   427     for (int i=0; i<ITERS; i++) {
   428       test_subv(a0, a1, (int)VALUE);
   429     }
   430     end = System.currentTimeMillis();
   431     System.out.println("test_subv: " + (end - start));
   432     start = System.currentTimeMillis();
   433     for (int i=0; i<ITERS; i++) {
   434       test_suba(a0, a1, a2);
   435     }
   436     end = System.currentTimeMillis();
   437     System.out.println("test_suba: " + (end - start));
   439     start = System.currentTimeMillis();
   440     for (int i=0; i<ITERS; i++) {
   441       test_mulc(a0, a1);
   442     }
   443     end = System.currentTimeMillis();
   444     System.out.println("test_mulc: " + (end - start));
   445     start = System.currentTimeMillis();
   446     for (int i=0; i<ITERS; i++) {
   447       test_mulv(a0, a1, (int)VALUE);
   448     }
   449     end = System.currentTimeMillis();
   450     System.out.println("test_mulv: " + (end - start));
   451     start = System.currentTimeMillis();
   452     for (int i=0; i<ITERS; i++) {
   453       test_mula(a0, a1, a2);
   454     }
   455     end = System.currentTimeMillis();
   456     System.out.println("test_mula: " + (end - start));
   458     start = System.currentTimeMillis();
   459     for (int i=0; i<ITERS; i++) {
   460       test_divc(a0, a1);
   461     }
   462     end = System.currentTimeMillis();
   463     System.out.println("test_divc: " + (end - start));
   464     start = System.currentTimeMillis();
   465     for (int i=0; i<ITERS; i++) {
   466       test_divv(a0, a1, (int)VALUE);
   467     }
   468     end = System.currentTimeMillis();
   469     System.out.println("test_divv: " + (end - start));
   470     start = System.currentTimeMillis();
   471     for (int i=0; i<ITERS; i++) {
   472       test_diva(a0, a1, a2);
   473     }
   474     end = System.currentTimeMillis();
   475     System.out.println("test_diva: " + (end - start));
   477     start = System.currentTimeMillis();
   478     for (int i=0; i<ITERS; i++) {
   479       test_mulc_n(a0, a1);
   480     }
   481     end = System.currentTimeMillis();
   482     System.out.println("test_mulc_n: " + (end - start));
   483     start = System.currentTimeMillis();
   484     for (int i=0; i<ITERS; i++) {
   485       test_mulv(a0, a1, (int)-VALUE);
   486     }
   487     end = System.currentTimeMillis();
   488     System.out.println("test_mulv_n: " + (end - start));
   489     start = System.currentTimeMillis();
   490     for (int i=0; i<ITERS; i++) {
   491       test_mula(a0, a1, a3);
   492     }
   493     end = System.currentTimeMillis();
   494     System.out.println("test_mula_n: " + (end - start));
   496     start = System.currentTimeMillis();
   497     for (int i=0; i<ITERS; i++) {
   498       test_divc_n(a0, a1);
   499     }
   500     end = System.currentTimeMillis();
   501     System.out.println("test_divc_n: " + (end - start));
   502     start = System.currentTimeMillis();
   503     for (int i=0; i<ITERS; i++) {
   504       test_divv(a0, a1, (int)-VALUE);
   505     }
   506     end = System.currentTimeMillis();
   507     System.out.println("test_divv_n: " + (end - start));
   508     start = System.currentTimeMillis();
   509     for (int i=0; i<ITERS; i++) {
   510       test_diva(a0, a1, a3);
   511     }
   512     end = System.currentTimeMillis();
   513     System.out.println("test_diva_n: " + (end - start));
   515     start = System.currentTimeMillis();
   516     for (int i=0; i<ITERS; i++) {
   517       test_andc(a0, a1);
   518     }
   519     end = System.currentTimeMillis();
   520     System.out.println("test_andc: " + (end - start));
   521     start = System.currentTimeMillis();
   522     for (int i=0; i<ITERS; i++) {
   523       test_andv(a0, a1, (int)BIT_MASK);
   524     }
   525     end = System.currentTimeMillis();
   526     System.out.println("test_andv: " + (end - start));
   527     start = System.currentTimeMillis();
   528     for (int i=0; i<ITERS; i++) {
   529       test_anda(a0, a1, a4);
   530     }
   531     end = System.currentTimeMillis();
   532     System.out.println("test_anda: " + (end - start));
   534     start = System.currentTimeMillis();
   535     for (int i=0; i<ITERS; i++) {
   536       test_orc(a0, a1);
   537     }
   538     end = System.currentTimeMillis();
   539     System.out.println("test_orc: " + (end - start));
   540     start = System.currentTimeMillis();
   541     for (int i=0; i<ITERS; i++) {
   542       test_orv(a0, a1, (int)BIT_MASK);
   543     }
   544     end = System.currentTimeMillis();
   545     System.out.println("test_orv: " + (end - start));
   546     start = System.currentTimeMillis();
   547     for (int i=0; i<ITERS; i++) {
   548       test_ora(a0, a1, a4);
   549     }
   550     end = System.currentTimeMillis();
   551     System.out.println("test_ora: " + (end - start));
   553     start = System.currentTimeMillis();
   554     for (int i=0; i<ITERS; i++) {
   555       test_xorc(a0, a1);
   556     }
   557     end = System.currentTimeMillis();
   558     System.out.println("test_xorc: " + (end - start));
   559     start = System.currentTimeMillis();
   560     for (int i=0; i<ITERS; i++) {
   561       test_xorv(a0, a1, (int)BIT_MASK);
   562     }
   563     end = System.currentTimeMillis();
   564     System.out.println("test_xorv: " + (end - start));
   565     start = System.currentTimeMillis();
   566     for (int i=0; i<ITERS; i++) {
   567       test_xora(a0, a1, a4);
   568     }
   569     end = System.currentTimeMillis();
   570     System.out.println("test_xora: " + (end - start));
   572     start = System.currentTimeMillis();
   573     for (int i=0; i<ITERS; i++) {
   574       test_sllc(a0, a1);
   575     }
   576     end = System.currentTimeMillis();
   577     System.out.println("test_sllc: " + (end - start));
   578     start = System.currentTimeMillis();
   579     for (int i=0; i<ITERS; i++) {
   580       test_sllv(a0, a1, VALUE);
   581     }
   582     end = System.currentTimeMillis();
   583     System.out.println("test_sllv: " + (end - start));
   585     start = System.currentTimeMillis();
   586     for (int i=0; i<ITERS; i++) {
   587       test_srlc(a0, a1);
   588     }
   589     end = System.currentTimeMillis();
   590     System.out.println("test_srlc: " + (end - start));
   591     start = System.currentTimeMillis();
   592     for (int i=0; i<ITERS; i++) {
   593       test_srlv(a0, a1, VALUE);
   594     }
   595     end = System.currentTimeMillis();
   596     System.out.println("test_srlv: " + (end - start));
   598     start = System.currentTimeMillis();
   599     for (int i=0; i<ITERS; i++) {
   600       test_srac(a0, a1);
   601     }
   602     end = System.currentTimeMillis();
   603     System.out.println("test_srac: " + (end - start));
   604     start = System.currentTimeMillis();
   605     for (int i=0; i<ITERS; i++) {
   606       test_srav(a0, a1, VALUE);
   607     }
   608     end = System.currentTimeMillis();
   609     System.out.println("test_srav: " + (end - start));
   611     start = System.currentTimeMillis();
   612     for (int i=0; i<ITERS; i++) {
   613       test_sllc_n(a0, a1);
   614     }
   615     end = System.currentTimeMillis();
   616     System.out.println("test_sllc_n: " + (end - start));
   617     start = System.currentTimeMillis();
   618     for (int i=0; i<ITERS; i++) {
   619       test_sllv(a0, a1, -VALUE);
   620     }
   621     end = System.currentTimeMillis();
   622     System.out.println("test_sllv_n: " + (end - start));
   624     start = System.currentTimeMillis();
   625     for (int i=0; i<ITERS; i++) {
   626       test_srlc_n(a0, a1);
   627     }
   628     end = System.currentTimeMillis();
   629     System.out.println("test_srlc_n: " + (end - start));
   630     start = System.currentTimeMillis();
   631     for (int i=0; i<ITERS; i++) {
   632       test_srlv(a0, a1, -VALUE);
   633     }
   634     end = System.currentTimeMillis();
   635     System.out.println("test_srlv_n: " + (end - start));
   637     start = System.currentTimeMillis();
   638     for (int i=0; i<ITERS; i++) {
   639       test_srac_n(a0, a1);
   640     }
   641     end = System.currentTimeMillis();
   642     System.out.println("test_srac_n: " + (end - start));
   643     start = System.currentTimeMillis();
   644     for (int i=0; i<ITERS; i++) {
   645       test_srav(a0, a1, -VALUE);
   646     }
   647     end = System.currentTimeMillis();
   648     System.out.println("test_srav_n: " + (end - start));
   650     start = System.currentTimeMillis();
   651     for (int i=0; i<ITERS; i++) {
   652       test_sllc_o(a0, a1);
   653     }
   654     end = System.currentTimeMillis();
   655     System.out.println("test_sllc_o: " + (end - start));
   656     start = System.currentTimeMillis();
   657     for (int i=0; i<ITERS; i++) {
   658       test_sllv(a0, a1, SHIFT);
   659     }
   660     end = System.currentTimeMillis();
   661     System.out.println("test_sllv_o: " + (end - start));
   663     start = System.currentTimeMillis();
   664     for (int i=0; i<ITERS; i++) {
   665       test_srlc_o(a0, a1);
   666     }
   667     end = System.currentTimeMillis();
   668     System.out.println("test_srlc_o: " + (end - start));
   669     start = System.currentTimeMillis();
   670     for (int i=0; i<ITERS; i++) {
   671       test_srlv(a0, a1, SHIFT);
   672     }
   673     end = System.currentTimeMillis();
   674     System.out.println("test_srlv_o: " + (end - start));
   676     start = System.currentTimeMillis();
   677     for (int i=0; i<ITERS; i++) {
   678       test_srac_o(a0, a1);
   679     }
   680     end = System.currentTimeMillis();
   681     System.out.println("test_srac_o: " + (end - start));
   682     start = System.currentTimeMillis();
   683     for (int i=0; i<ITERS; i++) {
   684       test_srav(a0, a1, SHIFT);
   685     }
   686     end = System.currentTimeMillis();
   687     System.out.println("test_srav_o: " + (end - start));
   689     start = System.currentTimeMillis();
   690     for (int i=0; i<ITERS; i++) {
   691       test_sllc_on(a0, a1);
   692     }
   693     end = System.currentTimeMillis();
   694     System.out.println("test_sllc_on: " + (end - start));
   695     start = System.currentTimeMillis();
   696     for (int i=0; i<ITERS; i++) {
   697       test_sllv(a0, a1, -SHIFT);
   698     }
   699     end = System.currentTimeMillis();
   700     System.out.println("test_sllv_on: " + (end - start));
   702     start = System.currentTimeMillis();
   703     for (int i=0; i<ITERS; i++) {
   704       test_srlc_on(a0, a1);
   705     }
   706     end = System.currentTimeMillis();
   707     System.out.println("test_srlc_on: " + (end - start));
   708     start = System.currentTimeMillis();
   709     for (int i=0; i<ITERS; i++) {
   710       test_srlv(a0, a1, -SHIFT);
   711     }
   712     end = System.currentTimeMillis();
   713     System.out.println("test_srlv_on: " + (end - start));
   715     start = System.currentTimeMillis();
   716     for (int i=0; i<ITERS; i++) {
   717       test_srac_on(a0, a1);
   718     }
   719     end = System.currentTimeMillis();
   720     System.out.println("test_srac_on: " + (end - start));
   721     start = System.currentTimeMillis();
   722     for (int i=0; i<ITERS; i++) {
   723       test_srav(a0, a1, -SHIFT);
   724     }
   725     end = System.currentTimeMillis();
   726     System.out.println("test_srav_on: " + (end - start));
   728     start = System.currentTimeMillis();
   729     for (int i=0; i<ITERS; i++) {
   730       test_pack2(p2, a1);
   731     }
   732     end = System.currentTimeMillis();
   733     System.out.println("test_pack2: " + (end - start));
   734     start = System.currentTimeMillis();
   735     for (int i=0; i<ITERS; i++) {
   736       test_unpack2(a0, p2);
   737     }
   738     end = System.currentTimeMillis();
   739     System.out.println("test_unpack2: " + (end - start));
   740     start = System.currentTimeMillis();
   741     for (int i=0; i<ITERS; i++) {
   742       test_pack2_swap(p2, a1);
   743     }
   744     end = System.currentTimeMillis();
   745     System.out.println("test_pack2_swap: " + (end - start));
   746     start = System.currentTimeMillis();
   747     for (int i=0; i<ITERS; i++) {
   748       test_unpack2_swap(a0, p2);
   749     }
   750     end = System.currentTimeMillis();
   751     System.out.println("test_unpack2_swap: " + (end - start));
   753     return errn;
   754   }
   756   static int test_sum(int[] a1) {
   757     int sum = 0;
   758     for (int i = 0; i < a1.length; i+=1) {
   759       sum += a1[i];
   760     }
   761     return sum;
   762   }
   764   static void test_addc(int[] a0, int[] a1) {
   765     for (int i = 0; i < a0.length; i+=1) {
   766       a0[i] = (int)(a1[i]+VALUE);
   767     }
   768   }
   769   static void test_addv(int[] a0, int[] a1, int b) {
   770     for (int i = 0; i < a0.length; i+=1) {
   771       a0[i] = (int)(a1[i]+b);
   772     }
   773   }
   774   static void test_adda(int[] a0, int[] a1, int[] a2) {
   775     for (int i = 0; i < a0.length; i+=1) {
   776       a0[i] = (int)(a1[i]+a2[i]);
   777     }
   778   }
   780   static void test_subc(int[] a0, int[] a1) {
   781     for (int i = 0; i < a0.length; i+=1) {
   782       a0[i] = (int)(a1[i]-VALUE);
   783     }
   784   }
   785   static void test_subv(int[] a0, int[] a1, int b) {
   786     for (int i = 0; i < a0.length; i+=1) {
   787       a0[i] = (int)(a1[i]-b);
   788     }
   789   }
   790   static void test_suba(int[] a0, int[] a1, int[] a2) {
   791     for (int i = 0; i < a0.length; i+=1) {
   792       a0[i] = (int)(a1[i]-a2[i]);
   793     }
   794   }
   796   static void test_mulc(int[] a0, int[] a1) {
   797     for (int i = 0; i < a0.length; i+=1) {
   798       a0[i] = (int)(a1[i]*VALUE);
   799     }
   800   }
   801   static void test_mulc_n(int[] a0, int[] a1) {
   802     for (int i = 0; i < a0.length; i+=1) {
   803       a0[i] = (int)(a1[i]*(-VALUE));
   804     }
   805   }
   806   static void test_mulv(int[] a0, int[] a1, int b) {
   807     for (int i = 0; i < a0.length; i+=1) {
   808       a0[i] = (int)(a1[i]*b);
   809     }
   810   }
   811   static void test_mula(int[] a0, int[] a1, int[] a2) {
   812     for (int i = 0; i < a0.length; i+=1) {
   813       a0[i] = (int)(a1[i]*a2[i]);
   814     }
   815   }
   817   static void test_divc(int[] a0, int[] a1) {
   818     for (int i = 0; i < a0.length; i+=1) {
   819       a0[i] = (int)(a1[i]/VALUE);
   820     }
   821   }
   822   static void test_divc_n(int[] a0, int[] a1) {
   823     for (int i = 0; i < a0.length; i+=1) {
   824       a0[i] = (int)(a1[i]/(-VALUE));
   825     }
   826   }
   827   static void test_divv(int[] a0, int[] a1, int b) {
   828     for (int i = 0; i < a0.length; i+=1) {
   829       a0[i] = (int)(a1[i]/b);
   830     }
   831   }
   832   static void test_diva(int[] a0, int[] a1, int[] a2) {
   833     for (int i = 0; i < a0.length; i+=1) {
   834       a0[i] = (int)(a1[i]/a2[i]);
   835     }
   836   }
   838   static void test_andc(int[] a0, int[] a1) {
   839     for (int i = 0; i < a0.length; i+=1) {
   840       a0[i] = (int)(a1[i]&BIT_MASK);
   841     }
   842   }
   843   static void test_andv(int[] a0, int[] a1, int b) {
   844     for (int i = 0; i < a0.length; i+=1) {
   845       a0[i] = (int)(a1[i]&b);
   846     }
   847   }
   848   static void test_anda(int[] a0, int[] a1, int[] a2) {
   849     for (int i = 0; i < a0.length; i+=1) {
   850       a0[i] = (int)(a1[i]&a2[i]);
   851     }
   852   }
   854   static void test_orc(int[] a0, int[] a1) {
   855     for (int i = 0; i < a0.length; i+=1) {
   856       a0[i] = (int)(a1[i]|BIT_MASK);
   857     }
   858   }
   859   static void test_orv(int[] a0, int[] a1, int b) {
   860     for (int i = 0; i < a0.length; i+=1) {
   861       a0[i] = (int)(a1[i]|b);
   862     }
   863   }
   864   static void test_ora(int[] a0, int[] a1, int[] a2) {
   865     for (int i = 0; i < a0.length; i+=1) {
   866       a0[i] = (int)(a1[i]|a2[i]);
   867     }
   868   }
   870   static void test_xorc(int[] a0, int[] a1) {
   871     for (int i = 0; i < a0.length; i+=1) {
   872       a0[i] = (int)(a1[i]^BIT_MASK);
   873     }
   874   }
   875   static void test_xorv(int[] a0, int[] a1, int b) {
   876     for (int i = 0; i < a0.length; i+=1) {
   877       a0[i] = (int)(a1[i]^b);
   878     }
   879   }
   880   static void test_xora(int[] a0, int[] a1, int[] a2) {
   881     for (int i = 0; i < a0.length; i+=1) {
   882       a0[i] = (int)(a1[i]^a2[i]);
   883     }
   884   }
   886   static void test_sllc(int[] a0, int[] a1) {
   887     for (int i = 0; i < a0.length; i+=1) {
   888       a0[i] = (int)(a1[i]<<VALUE);
   889     }
   890   }
   891   static void test_sllc_n(int[] a0, int[] a1) {
   892     for (int i = 0; i < a0.length; i+=1) {
   893       a0[i] = (int)(a1[i]<<(-VALUE));
   894     }
   895   }
   896   static void test_sllc_o(int[] a0, int[] a1) {
   897     for (int i = 0; i < a0.length; i+=1) {
   898       a0[i] = (int)(a1[i]<<SHIFT);
   899     }
   900   }
   901   static void test_sllc_on(int[] a0, int[] a1) {
   902     for (int i = 0; i < a0.length; i+=1) {
   903       a0[i] = (int)(a1[i]<<(-SHIFT));
   904     }
   905   }
   906   static void test_sllv(int[] a0, int[] a1, int b) {
   907     for (int i = 0; i < a0.length; i+=1) {
   908       a0[i] = (int)(a1[i]<<b);
   909     }
   910   }
   912   static void test_srlc(int[] a0, int[] a1) {
   913     for (int i = 0; i < a0.length; i+=1) {
   914       a0[i] = (int)(a1[i]>>>VALUE);
   915     }
   916   }
   917   static void test_srlc_n(int[] a0, int[] a1) {
   918     for (int i = 0; i < a0.length; i+=1) {
   919       a0[i] = (int)(a1[i]>>>(-VALUE));
   920     }
   921   }
   922   static void test_srlc_o(int[] a0, int[] a1) {
   923     for (int i = 0; i < a0.length; i+=1) {
   924       a0[i] = (int)(a1[i]>>>SHIFT);
   925     }
   926   }
   927   static void test_srlc_on(int[] a0, int[] a1) {
   928     for (int i = 0; i < a0.length; i+=1) {
   929       a0[i] = (int)(a1[i]>>>(-SHIFT));
   930     }
   931   }
   932   static void test_srlv(int[] a0, int[] a1, int b) {
   933     for (int i = 0; i < a0.length; i+=1) {
   934       a0[i] = (int)(a1[i]>>>b);
   935     }
   936   }
   938   static void test_srac(int[] a0, int[] a1) {
   939     for (int i = 0; i < a0.length; i+=1) {
   940       a0[i] = (int)(a1[i]>>VALUE);
   941     }
   942   }
   943   static void test_srac_n(int[] a0, int[] a1) {
   944     for (int i = 0; i < a0.length; i+=1) {
   945       a0[i] = (int)(a1[i]>>(-VALUE));
   946     }
   947   }
   948   static void test_srac_o(int[] a0, int[] a1) {
   949     for (int i = 0; i < a0.length; i+=1) {
   950       a0[i] = (int)(a1[i]>>SHIFT);
   951     }
   952   }
   953   static void test_srac_on(int[] a0, int[] a1) {
   954     for (int i = 0; i < a0.length; i+=1) {
   955       a0[i] = (int)(a1[i]>>(-SHIFT));
   956     }
   957   }
   958   static void test_srav(int[] a0, int[] a1, int b) {
   959     for (int i = 0; i < a0.length; i+=1) {
   960       a0[i] = (int)(a1[i]>>b);
   961     }
   962   }
   964   static void test_pack2(long[] p2, int[] a1) {
   965     if (p2.length*2 > a1.length) return;
   966     for (int i = 0; i < p2.length; i+=1) {
   967       long l0 = (long)a1[i*2+0];
   968       long l1 = (long)a1[i*2+1];
   969       p2[i] = (l1 << 32) | (l0 & 0xFFFFFFFFl);
   970     }
   971   }
   972   static void test_unpack2(int[] a0, long[] p2) {
   973     if (p2.length*2 > a0.length) return;
   974     for (int i = 0; i < p2.length; i+=1) {
   975       long l = p2[i];
   976       a0[i*2+0] = (int)(l & 0xFFFFFFFFl);
   977       a0[i*2+1] = (int)(l >> 32);
   978     }
   979   }
   980   static void test_pack2_swap(long[] p2, int[] a1) {
   981     if (p2.length*2 > a1.length) return;
   982     for (int i = 0; i < p2.length; i+=1) {
   983       long l0 = (long)a1[i*2+0];
   984       long l1 = (long)a1[i*2+1];
   985       p2[i] = (l0 << 32) | (l1 & 0xFFFFFFFFl);
   986     }
   987   }
   988   static void test_unpack2_swap(int[] a0, long[] p2) {
   989     if (p2.length*2 > a0.length) return;
   990     for (int i = 0; i < p2.length; i+=1) {
   991       long l = p2[i];
   992       a0[i*2+0] = (int)(l >> 32);
   993       a0[i*2+1] = (int)(l & 0xFFFFFFFFl);
   994     }
   995   }
   997   static int verify(String text, int i, int elem, int val) {
   998     if (elem != val) {
   999       System.err.println(text + "[" + i + "] = " + elem + " != " + val);
  1000       return 1;
  1002     return 0;
  1005   static int verify(String text, int i, long elem, long val) {
  1006     if (elem != val) {
  1007       System.err.println(text + "[" + i + "] = " + Long.toHexString(elem) + " != " + Long.toHexString(val));
  1008       return 1;
  1010     return 0;

mercurial