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