< prev index next >

src/hotspot/share/opto/library_call.cpp

Print this page
rev 54289 : 8220198: Lots of com/sun/crypto/provider/Cipher tests fail on x86_32 due to missing SHA512 stubs
Reviewed-by: kvn


6336     stubName = "sha1_implCompress";
6337     break;
6338   case vmIntrinsics::_sha2_implCompress:
6339     assert(UseSHA256Intrinsics, "need SHA256 instruction support");
6340     state = get_state_from_sha_object(sha_obj);
6341     stubAddr = StubRoutines::sha256_implCompress();
6342     stubName = "sha256_implCompress";
6343     break;
6344   case vmIntrinsics::_sha5_implCompress:
6345     assert(UseSHA512Intrinsics, "need SHA512 instruction support");
6346     state = get_state_from_sha5_object(sha_obj);
6347     stubAddr = StubRoutines::sha512_implCompress();
6348     stubName = "sha512_implCompress";
6349     break;
6350   default:
6351     fatal_unexpected_iid(id);
6352     return false;
6353   }
6354   if (state == NULL) return false;
6355 



6356   // Call the stub.
6357   Node* call = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::sha_implCompress_Type(),
6358                                  stubAddr, stubName, TypePtr::BOTTOM,
6359                                  src_start, state);
6360 
6361   return true;
6362 }
6363 
6364 //------------------------------inline_digestBase_implCompressMB-----------------------
6365 //
6366 // Calculate SHA/SHA2/SHA5 for multi-block byte[] array.
6367 // int com.sun.security.provider.DigestBase.implCompressMultiBlock(byte[] b, int ofs, int limit)
6368 //
6369 bool LibraryCallKit::inline_digestBase_implCompressMB(int predicate) {
6370   assert(UseSHA1Intrinsics || UseSHA256Intrinsics || UseSHA512Intrinsics,
6371          "need SHA1/SHA256/SHA512 instruction support");
6372   assert((uint)predicate < 3, "sanity");
6373   assert(callee()->signature()->size() == 3, "digestBase_implCompressMB has 3 parameters");
6374 
6375   Node* digestBase_obj = argument(0); // The receiver was checked for NULL already.


6408     break;
6409   case 1:
6410     if (UseSHA256Intrinsics) {
6411       klass_SHA_name = "sun/security/provider/SHA2";
6412       stub_name = "sha256_implCompressMB";
6413       stub_addr = StubRoutines::sha256_implCompressMB();
6414     }
6415     break;
6416   case 2:
6417     if (UseSHA512Intrinsics) {
6418       klass_SHA_name = "sun/security/provider/SHA5";
6419       stub_name = "sha512_implCompressMB";
6420       stub_addr = StubRoutines::sha512_implCompressMB();
6421       long_state = true;
6422     }
6423     break;
6424   default:
6425     fatal("unknown SHA intrinsic predicate: %d", predicate);
6426   }
6427   if (klass_SHA_name != NULL) {



6428     // get DigestBase klass to lookup for SHA klass
6429     const TypeInstPtr* tinst = _gvn.type(digestBase_obj)->isa_instptr();
6430     assert(tinst != NULL, "digestBase_obj is not instance???");
6431     assert(tinst->klass()->is_loaded(), "DigestBase is not loaded");
6432 
6433     ciKlass* klass_SHA = tinst->klass()->as_instance_klass()->find_klass(ciSymbol::make(klass_SHA_name));
6434     assert(klass_SHA->is_loaded(), "predicate checks that this class is loaded");
6435     ciInstanceKlass* instklass_SHA = klass_SHA->as_instance_klass();
6436     return inline_sha_implCompressMB(digestBase_obj, instklass_SHA, long_state, stub_addr, stub_name, src_start, ofs, limit);
6437   }
6438   return false;
6439 }
6440 //------------------------------inline_sha_implCompressMB-----------------------
6441 bool LibraryCallKit::inline_sha_implCompressMB(Node* digestBase_obj, ciInstanceKlass* instklass_SHA,
6442                                                bool long_state, address stubAddr, const char *stubName,
6443                                                Node* src_start, Node* ofs, Node* limit) {
6444   const TypeKlassPtr* aklass = TypeKlassPtr::make(instklass_SHA);
6445   const TypeOopPtr* xtype = aklass->as_instance_type();
6446   Node* sha_obj = new CheckCastPPNode(control(), digestBase_obj, xtype);
6447   sha_obj = _gvn.transform(sha_obj);




6336     stubName = "sha1_implCompress";
6337     break;
6338   case vmIntrinsics::_sha2_implCompress:
6339     assert(UseSHA256Intrinsics, "need SHA256 instruction support");
6340     state = get_state_from_sha_object(sha_obj);
6341     stubAddr = StubRoutines::sha256_implCompress();
6342     stubName = "sha256_implCompress";
6343     break;
6344   case vmIntrinsics::_sha5_implCompress:
6345     assert(UseSHA512Intrinsics, "need SHA512 instruction support");
6346     state = get_state_from_sha5_object(sha_obj);
6347     stubAddr = StubRoutines::sha512_implCompress();
6348     stubName = "sha512_implCompress";
6349     break;
6350   default:
6351     fatal_unexpected_iid(id);
6352     return false;
6353   }
6354   if (state == NULL) return false;
6355 
6356   assert(stubAddr != NULL, "Stub is generated");
6357   if (stubAddr == NULL) return false;
6358 
6359   // Call the stub.
6360   Node* call = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::sha_implCompress_Type(),
6361                                  stubAddr, stubName, TypePtr::BOTTOM,
6362                                  src_start, state);
6363 
6364   return true;
6365 }
6366 
6367 //------------------------------inline_digestBase_implCompressMB-----------------------
6368 //
6369 // Calculate SHA/SHA2/SHA5 for multi-block byte[] array.
6370 // int com.sun.security.provider.DigestBase.implCompressMultiBlock(byte[] b, int ofs, int limit)
6371 //
6372 bool LibraryCallKit::inline_digestBase_implCompressMB(int predicate) {
6373   assert(UseSHA1Intrinsics || UseSHA256Intrinsics || UseSHA512Intrinsics,
6374          "need SHA1/SHA256/SHA512 instruction support");
6375   assert((uint)predicate < 3, "sanity");
6376   assert(callee()->signature()->size() == 3, "digestBase_implCompressMB has 3 parameters");
6377 
6378   Node* digestBase_obj = argument(0); // The receiver was checked for NULL already.


6411     break;
6412   case 1:
6413     if (UseSHA256Intrinsics) {
6414       klass_SHA_name = "sun/security/provider/SHA2";
6415       stub_name = "sha256_implCompressMB";
6416       stub_addr = StubRoutines::sha256_implCompressMB();
6417     }
6418     break;
6419   case 2:
6420     if (UseSHA512Intrinsics) {
6421       klass_SHA_name = "sun/security/provider/SHA5";
6422       stub_name = "sha512_implCompressMB";
6423       stub_addr = StubRoutines::sha512_implCompressMB();
6424       long_state = true;
6425     }
6426     break;
6427   default:
6428     fatal("unknown SHA intrinsic predicate: %d", predicate);
6429   }
6430   if (klass_SHA_name != NULL) {
6431     assert(stub_addr != NULL, "Stub is generated");
6432     if (stub_addr == NULL) return false;
6433 
6434     // get DigestBase klass to lookup for SHA klass
6435     const TypeInstPtr* tinst = _gvn.type(digestBase_obj)->isa_instptr();
6436     assert(tinst != NULL, "digestBase_obj is not instance???");
6437     assert(tinst->klass()->is_loaded(), "DigestBase is not loaded");
6438 
6439     ciKlass* klass_SHA = tinst->klass()->as_instance_klass()->find_klass(ciSymbol::make(klass_SHA_name));
6440     assert(klass_SHA->is_loaded(), "predicate checks that this class is loaded");
6441     ciInstanceKlass* instklass_SHA = klass_SHA->as_instance_klass();
6442     return inline_sha_implCompressMB(digestBase_obj, instklass_SHA, long_state, stub_addr, stub_name, src_start, ofs, limit);
6443   }
6444   return false;
6445 }
6446 //------------------------------inline_sha_implCompressMB-----------------------
6447 bool LibraryCallKit::inline_sha_implCompressMB(Node* digestBase_obj, ciInstanceKlass* instklass_SHA,
6448                                                bool long_state, address stubAddr, const char *stubName,
6449                                                Node* src_start, Node* ofs, Node* limit) {
6450   const TypeKlassPtr* aklass = TypeKlassPtr::make(instklass_SHA);
6451   const TypeOopPtr* xtype = aklass->as_instance_type();
6452   Node* sha_obj = new CheckCastPPNode(control(), digestBase_obj, xtype);
6453   sha_obj = _gvn.transform(sha_obj);


< prev index next >