@@ -6577,31 +6577,31 @@ bool LibraryCallKit::inline_digestBase_implCompress(vmIntrinsics::ID id) {
65776577 switch (id) {
65786578 case vmIntrinsics::_md5_implCompress:
65796579 assert (UseMD5Intrinsics, " need MD5 instruction support" );
6580- state = get_state_from_digest_object (digestBase_obj, " [I " );
6580+ state = get_state_from_digest_object (digestBase_obj, T_INT );
65816581 stubAddr = StubRoutines::md5_implCompress ();
65826582 stubName = " md5_implCompress" ;
65836583 break ;
65846584 case vmIntrinsics::_sha_implCompress:
65856585 assert (UseSHA1Intrinsics, " need SHA1 instruction support" );
6586- state = get_state_from_digest_object (digestBase_obj, " [I " );
6586+ state = get_state_from_digest_object (digestBase_obj, T_INT );
65876587 stubAddr = StubRoutines::sha1_implCompress ();
65886588 stubName = " sha1_implCompress" ;
65896589 break ;
65906590 case vmIntrinsics::_sha2_implCompress:
65916591 assert (UseSHA256Intrinsics, " need SHA256 instruction support" );
6592- state = get_state_from_digest_object (digestBase_obj, " [I " );
6592+ state = get_state_from_digest_object (digestBase_obj, T_INT );
65936593 stubAddr = StubRoutines::sha256_implCompress ();
65946594 stubName = " sha256_implCompress" ;
65956595 break ;
65966596 case vmIntrinsics::_sha5_implCompress:
65976597 assert (UseSHA512Intrinsics, " need SHA512 instruction support" );
6598- state = get_state_from_digest_object (digestBase_obj, " [J " );
6598+ state = get_state_from_digest_object (digestBase_obj, T_LONG );
65996599 stubAddr = StubRoutines::sha512_implCompress ();
66006600 stubName = " sha512_implCompress" ;
66016601 break ;
66026602 case vmIntrinsics::_sha3_implCompress:
66036603 assert (UseSHA3Intrinsics, " need SHA3 instruction support" );
6604- state = get_state_from_digest_object (digestBase_obj, " [B " );
6604+ state = get_state_from_digest_object (digestBase_obj, T_BYTE );
66056605 stubAddr = StubRoutines::sha3_implCompress ();
66066606 stubName = " sha3_implCompress" ;
66076607 digest_length = get_digest_length_from_digest_object (digestBase_obj);
@@ -6665,7 +6665,7 @@ bool LibraryCallKit::inline_digestBase_implCompressMB(int predicate) {
66656665 const char * klass_digestBase_name = nullptr ;
66666666 const char * stub_name = nullptr ;
66676667 address stub_addr = nullptr ;
6668- const char * state_type = " [I " ;
6668+ BasicType elem_type = T_INT ;
66696669
66706670 switch (predicate) {
66716671 case 0 :
@@ -6694,15 +6694,15 @@ bool LibraryCallKit::inline_digestBase_implCompressMB(int predicate) {
66946694 klass_digestBase_name = " sun/security/provider/SHA5" ;
66956695 stub_name = " sha512_implCompressMB" ;
66966696 stub_addr = StubRoutines::sha512_implCompressMB ();
6697- state_type = " [J " ;
6697+ elem_type = T_LONG ;
66986698 }
66996699 break ;
67006700 case 4 :
67016701 if (vmIntrinsics::is_intrinsic_available (vmIntrinsics::_sha3_implCompress)) {
67026702 klass_digestBase_name = " sun/security/provider/SHA3" ;
67036703 stub_name = " sha3_implCompressMB" ;
67046704 stub_addr = StubRoutines::sha3_implCompressMB ();
6705- state_type = " [B " ;
6705+ elem_type = T_BYTE ;
67066706 }
67076707 break ;
67086708 default :
@@ -6720,21 +6720,21 @@ bool LibraryCallKit::inline_digestBase_implCompressMB(int predicate) {
67206720 ciKlass* klass_digestBase = tinst->klass ()->as_instance_klass ()->find_klass (ciSymbol::make (klass_digestBase_name));
67216721 assert (klass_digestBase->is_loaded (), " predicate checks that this class is loaded" );
67226722 ciInstanceKlass* instklass_digestBase = klass_digestBase->as_instance_klass ();
6723- return inline_digestBase_implCompressMB (digestBase_obj, instklass_digestBase, state_type , stub_addr, stub_name, src_start, ofs, limit);
6723+ return inline_digestBase_implCompressMB (digestBase_obj, instklass_digestBase, elem_type , stub_addr, stub_name, src_start, ofs, limit);
67246724 }
67256725 return false ;
67266726}
67276727
67286728// ------------------------------inline_digestBase_implCompressMB-----------------------
67296729bool LibraryCallKit::inline_digestBase_implCompressMB (Node* digestBase_obj, ciInstanceKlass* instklass_digestBase,
6730- const char * state_type , address stubAddr, const char *stubName,
6730+ BasicType elem_type , address stubAddr, const char *stubName,
67316731 Node* src_start, Node* ofs, Node* limit) {
67326732 const TypeKlassPtr* aklass = TypeKlassPtr::make (instklass_digestBase);
67336733 const TypeOopPtr* xtype = aklass->as_instance_type ();
67346734 Node* digest_obj = new CheckCastPPNode (control (), digestBase_obj, xtype);
67356735 digest_obj = _gvn.transform (digest_obj);
67366736
6737- Node* state = get_state_from_digest_object (digest_obj, state_type );
6737+ Node* state = get_state_from_digest_object (digest_obj, elem_type );
67386738 if (state == nullptr ) return false ;
67396739
67406740 Node* digest_length = nullptr ;
@@ -6765,13 +6765,20 @@ bool LibraryCallKit::inline_digestBase_implCompressMB(Node* digestBase_obj, ciIn
67656765}
67666766
67676767// ------------------------------get_state_from_digest_object-----------------------
6768- Node * LibraryCallKit::get_state_from_digest_object (Node *digest_object, const char *state_type) {
6768+ Node * LibraryCallKit::get_state_from_digest_object (Node *digest_object, BasicType elem_type) {
6769+ const char * state_type;
6770+ switch (elem_type) {
6771+ case T_BYTE: state_type = " [B" ; break ;
6772+ case T_INT: state_type = " [I" ; break ;
6773+ case T_LONG: state_type = " [J" ; break ;
6774+ default : ShouldNotReachHere ();
6775+ }
67696776 Node* digest_state = load_field_from_object (digest_object, " state" , state_type);
67706777 assert (digest_state != nullptr , " wrong version of sun.security.provider.MD5/SHA/SHA2/SHA5/SHA3" );
67716778 if (digest_state == nullptr ) return (Node *) nullptr ;
67726779
67736780 // now have the array, need to get the start address of the state array
6774- Node* state = array_element_address (digest_state, intcon (0 ), T_INT );
6781+ Node* state = array_element_address (digest_state, intcon (0 ), elem_type );
67756782 return state;
67766783}
67776784
0 commit comments