Request for reviews (L): 7196262: JSR 292: java/lang/invoke/PrivateInvokeTest.java fails on solaris-sparc

Christian Thalinger christian.thalinger at oracle.com
Thu Sep 13 15:45:25 PDT 2012


http://cr.openjdk.java.net/~twisti/7196262/

7196262: JSR 292: java/lang/invoke/PrivateInvokeTest.java fails on solaris-sparc
Reviewed-by:

We are using G1 and G4 in MethodHandles::generate_method_handle_dispatch 
as temporary registers but the calling convention on 32-bit SPARC uses G1 
and G4 to pass the first two long arguments.

While investigating possible fixes it turned out that there is another bug.
The appendix argument of the new JSR 292 implementation might end up in the 
wrong register or stack slot on SPARC.
 
To fix that issue I had to change the Java calling convention on SPARC.
While changing that code I also removed the special usage of G1 and G4 to 
pass long arguments on 32-bit SPARC.  In doing this I could remove a lot 
of complicated code.

The calling convention bug could potentially happen on other architectures 
as well.  I added assertion code that checks that the Java calling 
convention can deal with the appendix argument on all architectures.

Additionally I removed some unused code I came across.

Here are refworkload runs to make sure that the changed calling convention 
does not affect performance.

32-bit SPARC:

============================================================================
logs.hotspot-sparc: reference_server
  Benchmark         Samples        Mean     Stdev             Geomean Weight
  jetstream              20      173.86      4.09                 0.10
  scimark                20      400.22      2.73                 0.15
  specjbb2000            20   128767.32    417.38                 0.15
  specjbb2005            20    59437.83    237.98                 0.25
  specjvm98              20      363.66      1.39                 0.15
  volano25               20    79479.00   1652.97                 0.20
  --------------------------------------------------------------------------
  Weighted Geomean              8679.73
============================================================================
logs.7196262-sparc: reference_server
  Benchmark         Samples        Mean     Stdev   %Diff    P   Significant
  jetstream              20      169.95      7.96   -2.25 0.060            *
  scimark                20      401.49      1.70    0.32 0.087            *
  specjbb2000            20   128592.62    524.44   -0.14 0.251            *
  specjbb2005            20    59438.10    208.12    0.00 0.997            *
  specjvm98              20      363.23      1.28   -0.12 0.310            *
  volano25               20    79675.70    949.88    0.25 0.648            *
  --------------------------------------------------------------------------
  Weighted Geomean              8665.10             -0.17
============================================================================

64-bit SPARC:

============================================================================
logs.hotspot-sparcv9/: reference_server
  Benchmark         Samples        Mean     Stdev             Geomean Weight
  jetstream              20      155.65      0.99                 0.10
  scimark                20      371.01      5.29                 0.15
  specjbb2000            20   121447.56    167.26                 0.15
  specjbb2005            20    55700.69    281.70                 0.25
  specjvm98              20      306.40      0.93                 0.15
  volano25               20    70283.25   1468.01                 0.20
  --------------------------------------------------------------------------
  Weighted Geomean              7871.54
============================================================================
logs.7196262-sparcv9/: reference_server
  Benchmark         Samples        Mean     Stdev   %Diff    P   Significant
  jetstream              20      155.00      3.08   -0.42 0.375            *
  scimark                20      373.26      7.16    0.61 0.265            *
  specjbb2000            20   121482.24    178.23    0.02 0.529            *
  specjbb2005            20    55806.41    174.44    0.19 0.163            *
  specjvm98              20      306.16      1.07   -0.07 0.454            *
  volano25               20    69820.90   1221.87   -0.66 0.286            *
  --------------------------------------------------------------------------
  Weighted Geomean              7868.14             -0.04
============================================================================

src/cpu/sparc/vm/assembler_sparc.cpp
src/cpu/sparc/vm/assembler_sparc.hpp
src/cpu/sparc/vm/methodHandles_sparc.cpp
src/cpu/sparc/vm/sharedRuntime_sparc.cpp
src/cpu/x86/vm/methodHandles_x86.cpp
src/cpu/x86/vm/sharedRuntime_x86_32.cpp
src/cpu/x86/vm/sharedRuntime_x86_64.cpp
src/share/vm/asm/register.hpp
src/share/vm/code/nmethod.cpp
src/share/vm/runtime/sharedRuntime.cpp
src/share/vm/runtime/sharedRuntime.hpp



More information about the hotspot-compiler-dev mailing list