7027232: JSR 292: wrong numeric value returned by MH on solaris-sparc

Mon, 21 Mar 2011 02:30:49 -0700

author
twisti
date
Mon, 21 Mar 2011 02:30:49 -0700
changeset 2664
3ef1a1866a60
parent 2642
fc5ebbb2d1a8
child 2665
9dc311b8473e

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:

mercurial