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