8043274: Test compiler/7184394/TestAESMain.java gets NPE on solaris

Wed, 21 May 2014 12:16:41 -0700

author
kvn
date
Wed, 21 May 2014 12:16:41 -0700
changeset 6697
0342d80559e0
parent 6696
273a462437e9
child 6698
ee8b93466869

8043274: Test compiler/7184394/TestAESMain.java gets NPE on solaris
Summary: save cipher len after registers are saved
Reviewed-by: kvn
Contributed-by: shrinivas.joshi@oracle.com

src/cpu/sparc/vm/stubGenerator_sparc.cpp file | annotate | diff | comparison | revisions
     1.1 --- a/src/cpu/sparc/vm/stubGenerator_sparc.cpp	Wed May 28 07:59:23 2014 -1000
     1.2 +++ b/src/cpu/sparc/vm/stubGenerator_sparc.cpp	Wed May 21 12:16:41 2014 -0700
     1.3 @@ -3653,9 +3653,9 @@
     1.4      const Register len_reg = I4; // cipher length
     1.5      const Register keylen = I5;  // reg for storing expanded key array length
     1.6  
     1.7 -    // save cipher len before save_frame, to return in the end
     1.8 -    __ mov(O4, L0);
     1.9      __ save_frame(0);
    1.10 +    // save cipher len to return in the end
    1.11 +    __ mov(len_reg, L0);
    1.12  
    1.13      // read expanded key length
    1.14      __ ldsw(Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT)), keylen, 0);
    1.15 @@ -3778,9 +3778,9 @@
    1.16      // re-init intial vector for next block, 8-byte alignment is guaranteed
    1.17      __ stf(FloatRegisterImpl::D, F60, rvec, 0);
    1.18      __ stf(FloatRegisterImpl::D, F62, rvec, 8);
    1.19 -    __ restore();
    1.20 -    __ retl();
    1.21 -    __ delayed()->mov(L0, O0);
    1.22 +    __ mov(L0, I0);
    1.23 +    __ ret();
    1.24 +    __ delayed()->restore();
    1.25  
    1.26      __ align(OptoLoopAlignment);
    1.27      __ BIND(L_cbcenc192);
    1.28 @@ -3869,9 +3869,9 @@
    1.29      // re-init intial vector for next block, 8-byte alignment is guaranteed
    1.30      __ stf(FloatRegisterImpl::D, F60, rvec, 0);
    1.31      __ stf(FloatRegisterImpl::D, F62, rvec, 8);
    1.32 -    __ restore();
    1.33 -    __ retl();
    1.34 -    __ delayed()->mov(L0, O0);
    1.35 +    __ mov(L0, I0);
    1.36 +    __ ret();
    1.37 +    __ delayed()->restore();
    1.38  
    1.39      __ align(OptoLoopAlignment);
    1.40      __ BIND(L_cbcenc256);
    1.41 @@ -3962,9 +3962,9 @@
    1.42      // re-init intial vector for next block, 8-byte alignment is guaranteed
    1.43      __ stf(FloatRegisterImpl::D, F60, rvec, 0);
    1.44      __ stf(FloatRegisterImpl::D, F62, rvec, 8);
    1.45 -    __ restore();
    1.46 -    __ retl();
    1.47 -    __ delayed()->mov(L0, O0);
    1.48 +    __ mov(L0, I0);
    1.49 +    __ ret();
    1.50 +    __ delayed()->restore();
    1.51  
    1.52      return start;
    1.53    }
    1.54 @@ -3992,9 +3992,9 @@
    1.55      const Register original_key = I5;  // original key array only required during decryption
    1.56      const Register keylen = L6;  // reg for storing expanded key array length
    1.57  
    1.58 -    // save cipher len before save_frame, to return in the end
    1.59 -    __ mov(O4, L0);
    1.60      __ save_frame(0); //args are read from I* registers since we save the frame in the beginning
    1.61 +    // save cipher len to return in the end
    1.62 +    __ mov(len_reg, L7);
    1.63  
    1.64      // load original key from SunJCE expanded decryption key
    1.65      // Since we load original key buffer starting first element, 8-byte alignment is guaranteed
    1.66 @@ -4568,10 +4568,9 @@
    1.67      // re-init intial vector for next block, 8-byte alignment is guaranteed
    1.68      __ stx(L0, rvec, 0);
    1.69      __ stx(L1, rvec, 8);
    1.70 -    __ restore();
    1.71 -    __ mov(L0, O0);
    1.72 -    __ retl();
    1.73 -    __ delayed()->nop();
    1.74 +    __ mov(L7, I0);
    1.75 +    __ ret();
    1.76 +    __ delayed()->restore();
    1.77  
    1.78      return start;
    1.79    }

mercurial