hotspot/test/compiler/6934604/TestByteBoxing.java
changeset 17383 3665c0901a0d
equal deleted inserted replaced
17382:bba473b81ec0 17383:3665c0901a0d
       
     1 /*
       
     2  * Copyright (c) 2013, 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 6934604
       
    27  * @summary enable parts of EliminateAutoBox by default
       
    28  * @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:+EliminateAutoBox TestByteBoxing
       
    29  * @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:+EliminateAutoBox
       
    30  * -XX:CompileCommand=exclude,TestByteBoxing.dummy -XX:CompileCommand=exclude,TestByteBoxing.foo -XX:CompileCommand=exclude,TestByteBoxing.foob TestByteBoxing
       
    31  * @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-EliminateAutoBox
       
    32  * -XX:CompileCommand=exclude,TestByteBoxing.dummy -XX:CompileCommand=exclude,TestByteBoxing.foo -XX:CompileCommand=exclude,TestByteBoxing.foob TestByteBoxing
       
    33  *
       
    34  */
       
    35 
       
    36 public class TestByteBoxing {
       
    37 
       
    38   static final Byte ibc = new Byte((byte)1);
       
    39 
       
    40   //===============================================
       
    41   // Non-inlined methods to test deoptimization info
       
    42   static void dummy()      { }
       
    43   static byte foo(byte i)  { return i; }
       
    44   static Byte foob(byte i) { return Byte.valueOf(i); }
       
    45 
       
    46 
       
    47   static byte simple(byte i) {
       
    48     Byte ib = new Byte(i);
       
    49     return ib;
       
    50   }
       
    51 
       
    52   static byte simpleb(byte i) {
       
    53     Byte ib = Byte.valueOf(i);
       
    54     return ib;
       
    55   }
       
    56 
       
    57   static byte simplec() {
       
    58     Byte ib = ibc;
       
    59     return ib;
       
    60   }
       
    61 
       
    62   static byte simplef(byte i) {
       
    63     Byte ib = foob(i);
       
    64     return ib;
       
    65   }
       
    66 
       
    67   static byte simplep(Byte ib) {
       
    68     return ib;
       
    69   }
       
    70 
       
    71   static byte simple2(byte i) {
       
    72     Byte ib1 = new Byte(i);
       
    73     Byte ib2 = new Byte((byte)(i+1));
       
    74     return (byte)(ib1 + ib2);
       
    75   }
       
    76 
       
    77   static byte simpleb2(byte i) {
       
    78     Byte ib1 = Byte.valueOf(i);
       
    79     Byte ib2 = Byte.valueOf((byte)(i+1));
       
    80     return (byte)(ib1 + ib2);
       
    81   }
       
    82 
       
    83   static byte simplem2(byte i) {
       
    84     Byte ib1 = new Byte(i);
       
    85     Byte ib2 = Byte.valueOf((byte)(i+1));
       
    86     return (byte)(ib1 + ib2);
       
    87   }
       
    88 
       
    89   static byte simplep2(byte i, Byte ib1) {
       
    90     Byte ib2 = Byte.valueOf((byte)(i+1));
       
    91     return (byte)(ib1 + ib2);
       
    92   }
       
    93 
       
    94   static byte simplec2(byte i) {
       
    95     Byte ib1 = ibc;
       
    96     Byte ib2 = Byte.valueOf((byte)(i+1));
       
    97     return (byte)(ib1 + ib2);
       
    98   }
       
    99 
       
   100   //===============================================
       
   101   static byte test(byte i) {
       
   102     Byte ib = new Byte(i);
       
   103     if ((i&1) == 0)
       
   104       ib = (byte)(i+1);
       
   105     return ib;
       
   106   }
       
   107 
       
   108   static byte testb(byte i) {
       
   109     Byte ib = i;
       
   110     if ((i&1) == 0)
       
   111       ib = (byte)(i+1);
       
   112     return ib;
       
   113   }
       
   114 
       
   115   static byte testm(byte i) {
       
   116     Byte ib = i;
       
   117     if ((i&1) == 0)
       
   118       ib = new Byte((byte)(i+1));
       
   119     return ib;
       
   120   }
       
   121 
       
   122   static byte testp(byte i, Byte ib) {
       
   123     if ((i&1) == 0)
       
   124       ib = new Byte((byte)(i+1));
       
   125     return ib;
       
   126   }
       
   127 
       
   128   static byte testc(byte i) {
       
   129     Byte ib = ibc;
       
   130     if ((i&1) == 0)
       
   131       ib = new Byte((byte)(i+1));
       
   132     return ib;
       
   133   }
       
   134 
       
   135   static byte test2(byte i) {
       
   136     Byte ib1 = new Byte(i);
       
   137     Byte ib2 = new Byte((byte)(i+1));
       
   138     if ((i&1) == 0) {
       
   139       ib1 = new Byte((byte)(i+1));
       
   140       ib2 = new Byte((byte)(i+2));
       
   141     }
       
   142     return (byte)(ib1+ib2);
       
   143   }
       
   144 
       
   145   static byte testb2(byte i) {
       
   146     Byte ib1 = i;
       
   147     Byte ib2 = (byte)(i+1);
       
   148     if ((i&1) == 0) {
       
   149       ib1 = (byte)(i+1);
       
   150       ib2 = (byte)(i+2);
       
   151     }
       
   152     return (byte)(ib1 + ib2);
       
   153   }
       
   154 
       
   155   static byte testm2(byte i) {
       
   156     Byte ib1 = new Byte(i);
       
   157     Byte ib2 = (byte)(i+1);
       
   158     if ((i&1) == 0) {
       
   159       ib1 = new Byte((byte)(i+1));
       
   160       ib2 = (byte)(i+2);
       
   161     }
       
   162     return (byte)(ib1 + ib2);
       
   163   }
       
   164 
       
   165   static byte testp2(byte i, Byte ib1) {
       
   166     Byte ib2 = (byte)(i+1);
       
   167     if ((i&1) == 0) {
       
   168       ib1 = new Byte((byte)(i+1));
       
   169       ib2 = (byte)(i+2);
       
   170     }
       
   171     return (byte)(ib1 + ib2);
       
   172   }
       
   173 
       
   174   static byte testc2(byte i) {
       
   175     Byte ib1 = ibc;
       
   176     Byte ib2 = (byte)(i+1);
       
   177     if ((i&1) == 0) {
       
   178       ib1 = (byte)(ibc+1);
       
   179       ib2 = (byte)(i+2);
       
   180     }
       
   181     return (byte)(ib1 + ib2);
       
   182   }
       
   183 
       
   184   //===============================================
       
   185   static byte sum(byte[] a) {
       
   186     byte result = 1;
       
   187     for (Byte i : a)
       
   188         result += i;
       
   189     return result;
       
   190   }
       
   191 
       
   192   static byte sumb(byte[] a) {
       
   193     Byte result = 1;
       
   194     for (Byte i : a)
       
   195         result = (byte)(result + i);
       
   196     return result;
       
   197   }
       
   198 
       
   199   static byte sumc(byte[] a) {
       
   200     Byte result = ibc;
       
   201     for (Byte i : a)
       
   202         result = (byte)(result + i);
       
   203     return result;
       
   204   }
       
   205 
       
   206   static byte sumf(byte[] a) {
       
   207     Byte result = foob((byte)1);
       
   208     for (Byte i : a)
       
   209         result = (byte)(result + i);
       
   210     return result;
       
   211   }
       
   212 
       
   213   static byte sump(byte[] a, Byte result) {
       
   214     for (Byte i : a)
       
   215         result = (byte)(result + i);
       
   216     return result;
       
   217   }
       
   218 
       
   219   static byte sum2(byte[] a) {
       
   220     byte result1 = 1;
       
   221     byte result2 = 1;
       
   222     for (Byte i : a) {
       
   223         result1 += i;
       
   224         result2 += i + 1;
       
   225     }
       
   226     return (byte)(result1 + result2);
       
   227   }
       
   228 
       
   229   static byte sumb2(byte[] a) {
       
   230     Byte result1 = 1;
       
   231     Byte result2 = 1;
       
   232     for (Byte i : a) {
       
   233         result1 = (byte)(result1 + i);
       
   234         result2 = (byte)(result2 + i + 1);
       
   235     }
       
   236     return (byte)(result1 + result2);
       
   237   }
       
   238 
       
   239   static byte summ2(byte[] a) {
       
   240     Byte result1 = 1;
       
   241     Byte result2 = new Byte((byte)1);
       
   242     for (Byte i : a) {
       
   243         result1 = (byte)(result1 + i);
       
   244         result2 = (byte)(result2 + new Byte((byte)(i + 1)));
       
   245     }
       
   246     return (byte)(result1 + result2);
       
   247   }
       
   248 
       
   249   static byte sump2(byte[] a, Byte result2) {
       
   250     Byte result1 = 1;
       
   251     for (Byte i : a) {
       
   252         result1 = (byte)(result1 + i);
       
   253         result2 = (byte)(result2 + i + 1);
       
   254     }
       
   255     return (byte)(result1 + result2);
       
   256   }
       
   257 
       
   258   static byte sumc2(byte[] a) {
       
   259     Byte result1 = 1;
       
   260     Byte result2 = ibc;
       
   261     for (Byte i : a) {
       
   262         result1 = (byte)(result1 + i);
       
   263         result2 = (byte)(result2 + i + ibc);
       
   264     }
       
   265     return (byte)(result1 + result2);
       
   266   }
       
   267 
       
   268   //===============================================
       
   269   static byte remi_sum() {
       
   270     Byte j = new Byte((byte)1);
       
   271     for (int i = 0; i< 1000; i++) {
       
   272       j = new Byte((byte)(j + 1));
       
   273     }
       
   274     return j;
       
   275   }
       
   276 
       
   277   static byte remi_sumb() {
       
   278     Byte j = Byte.valueOf((byte)1);
       
   279     for (int i = 0; i< 1000; i++) {
       
   280       j = (byte)(j + 1);
       
   281     }
       
   282     return j;
       
   283   }
       
   284 
       
   285   static byte remi_sumf() {
       
   286     Byte j = foob((byte)1);
       
   287     for (int i = 0; i< 1000; i++) {
       
   288       j = (byte)(j + 1);
       
   289     }
       
   290     return j;
       
   291   }
       
   292 
       
   293   static byte remi_sump(Byte j) {
       
   294     for (int i = 0; i< 1000; i++) {
       
   295       j = new Byte((byte)(j + 1));
       
   296     }
       
   297     return j;
       
   298   }
       
   299 
       
   300   static byte remi_sumc() {
       
   301     Byte j = ibc;
       
   302     for (int i = 0; i< 1000; i++) {
       
   303       j = (byte)(j + ibc);
       
   304     }
       
   305     return j;
       
   306   }
       
   307 
       
   308   static byte remi_sum2() {
       
   309     Byte j1 = new Byte((byte)1);
       
   310     Byte j2 = new Byte((byte)1);
       
   311     for (int i = 0; i< 1000; i++) {
       
   312       j1 = new Byte((byte)(j1 + 1));
       
   313       j2 = new Byte((byte)(j2 + 2));
       
   314     }
       
   315     return (byte)(j1 + j2);
       
   316   }
       
   317 
       
   318   static byte remi_sumb2() {
       
   319     Byte j1 = Byte.valueOf((byte)1);
       
   320     Byte j2 = Byte.valueOf((byte)1);
       
   321     for (int i = 0; i< 1000; i++) {
       
   322       j1 = (byte)(j1 + 1);
       
   323       j2 = (byte)(j2 + 2);
       
   324     }
       
   325     return (byte)(j1 + j2);
       
   326   }
       
   327 
       
   328   static byte remi_summ2() {
       
   329     Byte j1 = new Byte((byte)1);
       
   330     Byte j2 = Byte.valueOf((byte)1);
       
   331     for (int i = 0; i< 1000; i++) {
       
   332       j1 = new Byte((byte)(j1 + 1));
       
   333       j2 = (byte)(j2 + 2);
       
   334     }
       
   335     return (byte)(j1 + j2);
       
   336   }
       
   337 
       
   338   static byte remi_sump2(Byte j1) {
       
   339     Byte j2 = Byte.valueOf((byte)1);
       
   340     for (int i = 0; i< 1000; i++) {
       
   341       j1 = new Byte((byte)(j1 + 1));
       
   342       j2 = (byte)(j2 + 2);
       
   343     }
       
   344     return (byte)(j1 + j2);
       
   345   }
       
   346 
       
   347   static byte remi_sumc2() {
       
   348     Byte j1 = ibc;
       
   349     Byte j2 = Byte.valueOf((byte)1);
       
   350     for (int i = 0; i< 1000; i++) {
       
   351       j1 = (byte)(j1 + ibc);
       
   352       j2 = (byte)(j2 + 2);
       
   353     }
       
   354     return (byte)(j1 + j2);
       
   355   }
       
   356 
       
   357 
       
   358   //===============================================
       
   359   // Safepointa and debug info for deoptimization
       
   360   static byte simple_deop(byte i) {
       
   361     Byte ib = new Byte(foo(i));
       
   362     dummy();
       
   363     return ib;
       
   364   }
       
   365 
       
   366   static byte simpleb_deop(byte i) {
       
   367     Byte ib = Byte.valueOf(foo(i));
       
   368     dummy();
       
   369     return ib;
       
   370   }
       
   371 
       
   372   static byte simplef_deop(byte i) {
       
   373     Byte ib = foob(i);
       
   374     dummy();
       
   375     return ib;
       
   376   }
       
   377 
       
   378   static byte simplep_deop(Byte ib) {
       
   379     dummy();
       
   380     return ib;
       
   381   }
       
   382 
       
   383   static byte simplec_deop(byte i) {
       
   384     Byte ib = ibc;
       
   385     dummy();
       
   386     return ib;
       
   387   }
       
   388 
       
   389   static byte test_deop(byte i) {
       
   390     Byte ib = new Byte(foo(i));
       
   391     if ((i&1) == 0)
       
   392       ib = foo((byte)(i+1));
       
   393     dummy();
       
   394     return ib;
       
   395   }
       
   396 
       
   397   static byte testb_deop(byte i) {
       
   398     Byte ib = foo(i);
       
   399     if ((i&1) == 0)
       
   400       ib = foo((byte)(i+1));
       
   401     dummy();
       
   402     return ib;
       
   403   }
       
   404 
       
   405   static byte testf_deop(byte i) {
       
   406     Byte ib = foob(i);
       
   407     if ((i&1) == 0)
       
   408       ib = foo((byte)(i+1));
       
   409     dummy();
       
   410     return ib;
       
   411   }
       
   412 
       
   413   static byte testp_deop(byte i, Byte ib) {
       
   414     if ((i&1) == 0)
       
   415       ib = foo((byte)(i+1));
       
   416     dummy();
       
   417     return ib;
       
   418   }
       
   419 
       
   420   static byte testc_deop(byte i) {
       
   421     Byte ib = ibc;
       
   422     if ((i&1) == 0)
       
   423       ib = foo((byte)(i+1));
       
   424     dummy();
       
   425     return ib;
       
   426   }
       
   427 
       
   428   static byte sum_deop(byte[] a) {
       
   429     byte result = 1;
       
   430     for (Byte i : a)
       
   431         result += foo(i);
       
   432     dummy();
       
   433     return result;
       
   434   }
       
   435 
       
   436   static byte sumb_deop(byte[] a) {
       
   437     Byte result = 1;
       
   438     for (Byte i : a)
       
   439         result = (byte)(result + foo(i));
       
   440     dummy();
       
   441     return result;
       
   442   }
       
   443 
       
   444   static byte sumf_deop(byte[] a) {
       
   445     Byte result = 1;
       
   446     for (Byte i : a)
       
   447         result = (byte)(result + foob(i));
       
   448     dummy();
       
   449     return result;
       
   450   }
       
   451 
       
   452   static byte sump_deop(byte[] a, Byte result) {
       
   453     for (Byte i : a)
       
   454         result = (byte)(result + foob(i));
       
   455     dummy();
       
   456     return result;
       
   457   }
       
   458 
       
   459   static byte sumc_deop(byte[] a) {
       
   460     Byte result = ibc;
       
   461     for (Byte i : a)
       
   462         result = (byte)(result + foo(i));
       
   463     dummy();
       
   464     return result;
       
   465   }
       
   466 
       
   467   static byte remi_sum_deop() {
       
   468     Byte j = new Byte(foo((byte)1));
       
   469     for (int i = 0; i< 1000; i++) {
       
   470       j = new Byte(foo((byte)(j + 1)));
       
   471     }
       
   472     dummy();
       
   473     return j;
       
   474   }
       
   475 
       
   476   static byte remi_sumb_deop() {
       
   477     Byte j = Byte.valueOf(foo((byte)1));
       
   478     for (int i = 0; i< 1000; i++) {
       
   479       j = foo((byte)(j + 1));
       
   480     }
       
   481     dummy();
       
   482     return j;
       
   483   }
       
   484 
       
   485   static byte remi_sumf_deop() {
       
   486     Byte j = foob((byte)1);
       
   487     for (int i = 0; i< 1000; i++) {
       
   488       j = foo((byte)(j + 1));
       
   489     }
       
   490     dummy();
       
   491     return j;
       
   492   }
       
   493 
       
   494   static byte remi_sump_deop(Byte j) {
       
   495     for (int i = 0; i< 1000; i++) {
       
   496       j = foo((byte)(j + 1));
       
   497     }
       
   498     dummy();
       
   499     return j;
       
   500   }
       
   501 
       
   502   static byte remi_sumc_deop() {
       
   503     Byte j = ibc;
       
   504     for (int i = 0; i< 1000; i++) {
       
   505       j = foo((byte)(j + 1));
       
   506     }
       
   507     dummy();
       
   508     return j;
       
   509   }
       
   510 
       
   511   //===============================================
       
   512   // Conditional increment
       
   513   static byte remi_sum_cond() {
       
   514     Byte j = new Byte((byte)1);
       
   515     for (int i = 0; i< 1000; i++) {
       
   516       if ((i&1) == 0) {
       
   517         j = new Byte((byte)(j + 1));
       
   518       }
       
   519     }
       
   520     return j;
       
   521   }
       
   522 
       
   523   static byte remi_sumb_cond() {
       
   524     Byte j = Byte.valueOf((byte)1);
       
   525     for (int i = 0; i< 1000; i++) {
       
   526       if ((i&1) == 0) {
       
   527         j = (byte)(j + 1);
       
   528       }
       
   529     }
       
   530     return j;
       
   531   }
       
   532 
       
   533   static byte remi_sumf_cond() {
       
   534     Byte j = foob((byte)1);
       
   535     for (int i = 0; i< 1000; i++) {
       
   536       if ((i&1) == 0) {
       
   537         j = (byte)(j + 1);
       
   538       }
       
   539     }
       
   540     return j;
       
   541   }
       
   542 
       
   543   static byte remi_sump_cond(Byte j) {
       
   544     for (int i = 0; i< 1000; i++) {
       
   545       if ((i&1) == 0) {
       
   546         j = (byte)(j + 1);
       
   547       }
       
   548     }
       
   549     return j;
       
   550   }
       
   551 
       
   552   static byte remi_sumc_cond() {
       
   553     Byte j = ibc;
       
   554     for (int i = 0; i< 1000; i++) {
       
   555       if ((i&1) == 0) {
       
   556         j = (byte)(j + ibc);
       
   557       }
       
   558     }
       
   559     return j;
       
   560   }
       
   561 
       
   562   static byte remi_sum2_cond() {
       
   563     Byte j1 = new Byte((byte)1);
       
   564     Byte j2 = new Byte((byte)1);
       
   565     for (int i = 0; i< 1000; i++) {
       
   566       if ((i&1) == 0) {
       
   567         j1 = new Byte((byte)(j1 + 1));
       
   568       } else {
       
   569         j2 = new Byte((byte)(j2 + 2));
       
   570       }
       
   571     }
       
   572     return (byte)(j1 + j2);
       
   573   }
       
   574 
       
   575   static byte remi_sumb2_cond() {
       
   576     Byte j1 = Byte.valueOf((byte)1);
       
   577     Byte j2 = Byte.valueOf((byte)1);
       
   578     for (int i = 0; i< 1000; i++) {
       
   579       if ((i&1) == 0) {
       
   580         j1 = (byte)(j1 + 1);
       
   581       } else {
       
   582         j2 = (byte)(j2 + 2);
       
   583       }
       
   584     }
       
   585     return (byte)(j1 + j2);
       
   586   }
       
   587 
       
   588   static byte remi_summ2_cond() {
       
   589     Byte j1 = new Byte((byte)1);
       
   590     Byte j2 = Byte.valueOf((byte)1);
       
   591     for (int i = 0; i< 1000; i++) {
       
   592       if ((i&1) == 0) {
       
   593         j1 = new Byte((byte)(j1 + 1));
       
   594       } else {
       
   595         j2 = (byte)(j2 + 2);
       
   596       }
       
   597     }
       
   598     return (byte)(j1 + j2);
       
   599   }
       
   600 
       
   601   static byte remi_sump2_cond(Byte j1) {
       
   602     Byte j2 = Byte.valueOf((byte)1);
       
   603     for (int i = 0; i< 1000; i++) {
       
   604       if ((i&1) == 0) {
       
   605         j1 = new Byte((byte)(j1 + 1));
       
   606       } else {
       
   607         j2 = (byte)(j2 + 2);
       
   608       }
       
   609     }
       
   610     return (byte)(j1 + j2);
       
   611   }
       
   612 
       
   613   static byte remi_sumc2_cond() {
       
   614     Byte j1 = ibc;
       
   615     Byte j2 = Byte.valueOf((byte)1);
       
   616     for (int i = 0; i< 1000; i++) {
       
   617       if ((i&1) == 0) {
       
   618         j1 = (byte)(j1 + ibc);
       
   619       } else {
       
   620         j2 = (byte)(j2 + 2);
       
   621       }
       
   622     }
       
   623     return (byte)(j1 + j2);
       
   624   }
       
   625 
       
   626 
       
   627   public static void main(String[] args) {
       
   628     final int ntests = 70;
       
   629 
       
   630     String[] test_name = new String[] {
       
   631         "simple",      "simpleb",      "simplec",      "simplef",      "simplep",
       
   632         "simple2",     "simpleb2",     "simplec2",     "simplem2",     "simplep2",
       
   633         "simple_deop", "simpleb_deop", "simplec_deop", "simplef_deop", "simplep_deop",
       
   634         "test",        "testb",        "testc",        "testm",        "testp",
       
   635         "test2",       "testb2",       "testc2",       "testm2",       "testp2",
       
   636         "test_deop",   "testb_deop",   "testc_deop",   "testf_deop",   "testp_deop",
       
   637         "sum",         "sumb",         "sumc",         "sumf",         "sump",
       
   638         "sum2",        "sumb2",        "sumc2",        "summ2",        "sump2",
       
   639         "sum_deop",    "sumb_deop",    "sumc_deop",    "sumf_deop",    "sump_deop",
       
   640         "remi_sum",       "remi_sumb",       "remi_sumc",       "remi_sumf",       "remi_sump",
       
   641         "remi_sum2",      "remi_sumb2",      "remi_sumc2",      "remi_summ2",      "remi_sump2",
       
   642         "remi_sum_deop",  "remi_sumb_deop",  "remi_sumc_deop",  "remi_sumf_deop",  "remi_sump_deop",
       
   643         "remi_sum_cond",  "remi_sumb_cond",  "remi_sumc_cond",  "remi_sumf_cond",  "remi_sump_cond",
       
   644         "remi_sum2_cond", "remi_sumb2_cond", "remi_sumc2_cond", "remi_summ2_cond", "remi_sump2_cond"
       
   645     };
       
   646 
       
   647     final int[] val = new int[] {
       
   648       -5488, -5488, 12000, -5488, -5488,
       
   649        1024,  1024, -5552,  1024,  1024,
       
   650       -5488, -5488, 12000, -5488, -5488,
       
   651         512,   512,  6256,   512,   512,
       
   652       13024, 13024, -5584, 13024, 13024,
       
   653         512,   512,  6256,   512,   512,
       
   654          45,    45,    45,    45,    45,
       
   655          66,    66,    66,    66,    66,
       
   656          45,    45,    45,    45,    45,
       
   657         -23,   -23,   -23,   -23,   -23,
       
   658         -70,   -70,   -70,   -70,   -70,
       
   659         -23,   -23,   -23,   -23,   -23,
       
   660         -11,   -11,   -11,   -11,   -11,
       
   661         -34,   -34,   -34,   -34,   -34
       
   662     };
       
   663 
       
   664     int[] res = new int[ntests];
       
   665     for (int i = 0; i < ntests; i++) {
       
   666       res[i] = 0;
       
   667     }
       
   668 
       
   669 
       
   670     for (int i = 0; i < 12000; i++) {
       
   671       res[0] += simple((byte)i);
       
   672       res[1] += simpleb((byte)i);
       
   673       res[2] += simplec();
       
   674       res[3] += simplef((byte)i);
       
   675       res[4] += simplep((byte)i);
       
   676 
       
   677       res[5] += simple2((byte)i);
       
   678       res[6] += simpleb2((byte)i);
       
   679       res[7] += simplec2((byte)i);
       
   680       res[8] += simplem2((byte)i);
       
   681       res[9] += simplep2((byte)i, (byte)i);
       
   682 
       
   683       res[10] += simple_deop((byte)i);
       
   684       res[11] += simpleb_deop((byte)i);
       
   685       res[12] += simplec_deop((byte)i);
       
   686       res[13] += simplef_deop((byte)i);
       
   687       res[14] += simplep_deop((byte)i);
       
   688 
       
   689       res[15] += test((byte)i);
       
   690       res[16] += testb((byte)i);
       
   691       res[17] += testc((byte)i);
       
   692       res[18] += testm((byte)i);
       
   693       res[19] += testp((byte)i, (byte)i);
       
   694 
       
   695       res[20] += test2((byte)i);
       
   696       res[21] += testb2((byte)i);
       
   697       res[22] += testc2((byte)i);
       
   698       res[23] += testm2((byte)i);
       
   699       res[24] += testp2((byte)i, (byte)i);
       
   700 
       
   701       res[25] += test_deop((byte)i);
       
   702       res[26] += testb_deop((byte)i);
       
   703       res[27] += testc_deop((byte)i);
       
   704       res[28] += testf_deop((byte)i);
       
   705       res[29] += testp_deop((byte)i, (byte)i);
       
   706     }
       
   707 
       
   708     byte[] ia = new byte[1000];
       
   709     for (int i = 0; i < 1000; i++) {
       
   710       ia[i] = (byte)i;
       
   711     }
       
   712 
       
   713     for (int i = 0; i < 100; i++) {
       
   714       res[30] = sum(ia);
       
   715       res[31] = sumb(ia);
       
   716       res[32] = sumc(ia);
       
   717       res[33] = sumf(ia);
       
   718       res[34] = sump(ia, (byte)1);
       
   719 
       
   720       res[35] = sum2(ia);
       
   721       res[36] = sumb2(ia);
       
   722       res[37] = sumc2(ia);
       
   723       res[38] = summ2(ia);
       
   724       res[39] = sump2(ia, (byte)1);
       
   725 
       
   726       res[40] = sum_deop(ia);
       
   727       res[41] = sumb_deop(ia);
       
   728       res[42] = sumc_deop(ia);
       
   729       res[43] = sumf_deop(ia);
       
   730       res[44] = sump_deop(ia, (byte)1);
       
   731 
       
   732       res[45] = remi_sum();
       
   733       res[46] = remi_sumb();
       
   734       res[47] = remi_sumc();
       
   735       res[48] = remi_sumf();
       
   736       res[49] = remi_sump((byte)1);
       
   737 
       
   738       res[50] = remi_sum2();
       
   739       res[51] = remi_sumb2();
       
   740       res[52] = remi_sumc2();
       
   741       res[53] = remi_summ2();
       
   742       res[54] = remi_sump2((byte)1);
       
   743 
       
   744       res[55] = remi_sum_deop();
       
   745       res[56] = remi_sumb_deop();
       
   746       res[57] = remi_sumc_deop();
       
   747       res[58] = remi_sumf_deop();
       
   748       res[59] = remi_sump_deop((byte)1);
       
   749 
       
   750       res[60] = remi_sum_cond();
       
   751       res[61] = remi_sumb_cond();
       
   752       res[62] = remi_sumc_cond();
       
   753       res[63] = remi_sumf_cond();
       
   754       res[64] = remi_sump_cond((byte)1);
       
   755 
       
   756       res[65] = remi_sum2_cond();
       
   757       res[66] = remi_sumb2_cond();
       
   758       res[67] = remi_sumc2_cond();
       
   759       res[68] = remi_summ2_cond();
       
   760       res[69] = remi_sump2_cond((byte)1);
       
   761     }
       
   762 
       
   763     int failed = 0;
       
   764     for (int i = 0; i < ntests; i++) {
       
   765       if (res[i] != val[i]) {
       
   766         System.err.println(test_name[i] + ": " + res[i] + " != " + val[i]);
       
   767         failed++;
       
   768       }
       
   769     }
       
   770     if (failed > 0) {
       
   771       System.err.println("Failed " + failed + " tests.");
       
   772       throw new InternalError();
       
   773     } else {
       
   774       System.out.println("Passed.");
       
   775     }
       
   776   }
       
   777 }