Mon, 21 Mar 2011 02:30:49 -0700
7027232: JSR 292: wrong numeric value returned by MH on solaris-sparc
Reviewed-by: kvn, never
src/cpu/sparc/vm/methodHandles_sparc.cpp | file | annotate | diff | comparison | revisions |
1.1 --- a/src/cpu/sparc/vm/methodHandles_sparc.cpp Fri Mar 18 01:44:15 2011 -0700 1.2 +++ b/src/cpu/sparc/vm/methodHandles_sparc.cpp Mon Mar 21 02:30:49 2011 -0700 1.3 @@ -775,9 +775,13 @@ 1.4 switch (ek) { 1.5 case _adapter_opt_i2l: 1.6 { 1.7 - __ ldsw(arg_lsw, O2_scratch); // Load LSW 1.8 - NOT_LP64(__ srlx(O2_scratch, BitsPerInt, O3_scratch)); // Move high bits to lower bits for std 1.9 - __ st_long(O2_scratch, arg_msw); // Uses O2/O3 on !_LP64 1.10 +#ifdef _LP64 1.11 + __ ldsw(arg_lsw, O2_scratch); // Load LSW sign-extended 1.12 +#else 1.13 + __ ldsw(arg_lsw, O3_scratch); // Load LSW sign-extended 1.14 + __ srlx(O3_scratch, BitsPerInt, O2_scratch); // Move MSW value to lower 32-bits for std 1.15 +#endif 1.16 + __ st_long(O2_scratch, arg_msw); // Uses O2/O3 on !_LP64 1.17 } 1.18 break; 1.19 case _adapter_opt_unboxl: