< prev index next >

src/hotspot/share/opto/library_call.cpp

Print this page




 288 
 289   typedef enum { LS_get_add, LS_get_set, LS_cmp_swap, LS_cmp_swap_weak, LS_cmp_exchange } LoadStoreKind;
 290   bool inline_unsafe_load_store(BasicType type,  LoadStoreKind kind, AccessKind access_kind);
 291   bool inline_unsafe_fence(vmIntrinsics::ID id);
 292   bool inline_onspinwait();
 293   bool inline_fp_conversions(vmIntrinsics::ID id);
 294   bool inline_number_methods(vmIntrinsics::ID id);
 295   bool inline_reference_get();
 296   bool inline_Class_cast();
 297   bool inline_aescrypt_Block(vmIntrinsics::ID id);
 298   bool inline_cipherBlockChaining_AESCrypt(vmIntrinsics::ID id);
 299   bool inline_electronicCodeBook_AESCrypt(vmIntrinsics::ID id);
 300   bool inline_counterMode_AESCrypt(vmIntrinsics::ID id);
 301   Node* inline_cipherBlockChaining_AESCrypt_predicate(bool decrypting);
 302   Node* inline_electronicCodeBook_AESCrypt_predicate(bool decrypting);
 303   Node* inline_counterMode_AESCrypt_predicate();
 304   Node* get_key_start_from_aescrypt_object(Node* aescrypt_object);
 305   Node* get_original_key_start_from_aescrypt_object(Node* aescrypt_object);
 306   bool inline_ghash_processBlocks();
 307   bool inline_base64_encodeBlock();

 308   bool inline_digestBase_implCompress(vmIntrinsics::ID id);

 309   bool inline_digestBase_implCompressMB(int predicate);
 310   bool inline_digestBase_implCompressMB(Node* digestBaseObj, ciInstanceKlass* instklass,
 311                                         bool long_state, address stubAddr, const char *stubName,
 312                                         Node* src_start, Node* ofs, Node* limit);
 313   Node* get_state_from_digest_object(Node *digestBase_object);
 314   Node* get_long_state_from_digest_object(Node *digestBase_object);
 315   Node* inline_digestBase_implCompressMB_predicate(int predicate);
 316   bool inline_encodeISOArray();
 317   bool inline_updateCRC32();
 318   bool inline_updateBytesCRC32();
 319   bool inline_updateByteBufferCRC32();
 320   Node* get_table_from_crc32c_class(ciInstanceKlass *crc32c_class);
 321   bool inline_updateBytesCRC32C();
 322   bool inline_updateDirectByteBufferCRC32C();
 323   bool inline_updateBytesAdler32();
 324   bool inline_updateByteBufferAdler32();
 325   bool inline_multiplyToLen();
 326   bool inline_hasNegatives();
 327   bool inline_squareToLen();
 328   bool inline_mulAdd();


 844   case vmIntrinsics::_mulAdd:
 845     return inline_mulAdd();
 846 
 847   case vmIntrinsics::_montgomeryMultiply:
 848     return inline_montgomeryMultiply();
 849   case vmIntrinsics::_montgomerySquare:
 850     return inline_montgomerySquare();
 851 
 852   case vmIntrinsics::_bigIntegerRightShiftWorker:
 853     return inline_bigIntegerShift(true);
 854   case vmIntrinsics::_bigIntegerLeftShiftWorker:
 855     return inline_bigIntegerShift(false);
 856 
 857   case vmIntrinsics::_vectorizedMismatch:
 858     return inline_vectorizedMismatch();
 859 
 860   case vmIntrinsics::_ghash_processBlocks:
 861     return inline_ghash_processBlocks();
 862   case vmIntrinsics::_base64_encodeBlock:
 863     return inline_base64_encodeBlock();


 864 
 865   case vmIntrinsics::_encodeISOArray:
 866   case vmIntrinsics::_encodeByteISOArray:
 867     return inline_encodeISOArray();
 868 
 869   case vmIntrinsics::_updateCRC32:
 870     return inline_updateCRC32();
 871   case vmIntrinsics::_updateBytesCRC32:
 872     return inline_updateBytesCRC32();
 873   case vmIntrinsics::_updateByteBufferCRC32:
 874     return inline_updateByteBufferCRC32();
 875 
 876   case vmIntrinsics::_updateBytesCRC32C:
 877     return inline_updateBytesCRC32C();
 878   case vmIntrinsics::_updateDirectByteBufferCRC32C:
 879     return inline_updateDirectByteBufferCRC32C();
 880 
 881   case vmIntrinsics::_updateBytesAdler32:
 882     return inline_updateBytesAdler32();
 883   case vmIntrinsics::_updateByteBufferAdler32:


6394   Node* base64obj = argument(0);
6395   Node* src = argument(1);
6396   Node* offset = argument(2);
6397   Node* len = argument(3);
6398   Node* dest = argument(4);
6399   Node* dp = argument(5);
6400   Node* isURL = argument(6);
6401 
6402   src = must_be_not_null(src, true);
6403   dest = must_be_not_null(dest, true);
6404 
6405   Node* src_start = array_element_address(src, intcon(0), T_BYTE);
6406   assert(src_start, "source array is NULL");
6407   Node* dest_start = array_element_address(dest, intcon(0), T_BYTE);
6408   assert(dest_start, "destination array is NULL");
6409 
6410   Node* base64 = make_runtime_call(RC_LEAF,
6411                                    OptoRuntime::base64_encodeBlock_Type(),
6412                                    stubAddr, stubName, TypePtr::BOTTOM,
6413                                    src_start, offset, len, dest_start, dp, isURL);

































6414   return true;
6415 }
6416 
6417 //------------------------------inline_digestBase_implCompress-----------------------
6418 //
6419 // Calculate MD5 for single-block byte[] array.
6420 // void com.sun.security.provider.MD5.implCompress(byte[] buf, int ofs)
6421 //
6422 // Calculate SHA (i.e., SHA-1) for single-block byte[] array.
6423 // void com.sun.security.provider.SHA.implCompress(byte[] buf, int ofs)
6424 //
6425 // Calculate SHA2 (i.e., SHA-244 or SHA-256) for single-block byte[] array.
6426 // void com.sun.security.provider.SHA2.implCompress(byte[] buf, int ofs)
6427 //
6428 // Calculate SHA5 (i.e., SHA-384 or SHA-512) for single-block byte[] array.
6429 // void com.sun.security.provider.SHA5.implCompress(byte[] buf, int ofs)
6430 //
6431 bool LibraryCallKit::inline_digestBase_implCompress(vmIntrinsics::ID id) {
6432   assert(callee()->signature()->size() == 2, "sha_implCompress has 2 parameters");
6433 




 288 
 289   typedef enum { LS_get_add, LS_get_set, LS_cmp_swap, LS_cmp_swap_weak, LS_cmp_exchange } LoadStoreKind;
 290   bool inline_unsafe_load_store(BasicType type,  LoadStoreKind kind, AccessKind access_kind);
 291   bool inline_unsafe_fence(vmIntrinsics::ID id);
 292   bool inline_onspinwait();
 293   bool inline_fp_conversions(vmIntrinsics::ID id);
 294   bool inline_number_methods(vmIntrinsics::ID id);
 295   bool inline_reference_get();
 296   bool inline_Class_cast();
 297   bool inline_aescrypt_Block(vmIntrinsics::ID id);
 298   bool inline_cipherBlockChaining_AESCrypt(vmIntrinsics::ID id);
 299   bool inline_electronicCodeBook_AESCrypt(vmIntrinsics::ID id);
 300   bool inline_counterMode_AESCrypt(vmIntrinsics::ID id);
 301   Node* inline_cipherBlockChaining_AESCrypt_predicate(bool decrypting);
 302   Node* inline_electronicCodeBook_AESCrypt_predicate(bool decrypting);
 303   Node* inline_counterMode_AESCrypt_predicate();
 304   Node* get_key_start_from_aescrypt_object(Node* aescrypt_object);
 305   Node* get_original_key_start_from_aescrypt_object(Node* aescrypt_object);
 306   bool inline_ghash_processBlocks();
 307   bool inline_base64_encodeBlock();
 308   bool inline_base64_decodeBlock();
 309   bool inline_digestBase_implCompress(vmIntrinsics::ID id);
 310   bool inline_sha_implCompress(vmIntrinsics::ID id);
 311   bool inline_digestBase_implCompressMB(int predicate);
 312   bool inline_digestBase_implCompressMB(Node* digestBaseObj, ciInstanceKlass* instklass,
 313                                         bool long_state, address stubAddr, const char *stubName,
 314                                         Node* src_start, Node* ofs, Node* limit);
 315   Node* get_state_from_digest_object(Node *digestBase_object);
 316   Node* get_long_state_from_digest_object(Node *digestBase_object);
 317   Node* inline_digestBase_implCompressMB_predicate(int predicate);
 318   bool inline_encodeISOArray();
 319   bool inline_updateCRC32();
 320   bool inline_updateBytesCRC32();
 321   bool inline_updateByteBufferCRC32();
 322   Node* get_table_from_crc32c_class(ciInstanceKlass *crc32c_class);
 323   bool inline_updateBytesCRC32C();
 324   bool inline_updateDirectByteBufferCRC32C();
 325   bool inline_updateBytesAdler32();
 326   bool inline_updateByteBufferAdler32();
 327   bool inline_multiplyToLen();
 328   bool inline_hasNegatives();
 329   bool inline_squareToLen();
 330   bool inline_mulAdd();


 846   case vmIntrinsics::_mulAdd:
 847     return inline_mulAdd();
 848 
 849   case vmIntrinsics::_montgomeryMultiply:
 850     return inline_montgomeryMultiply();
 851   case vmIntrinsics::_montgomerySquare:
 852     return inline_montgomerySquare();
 853 
 854   case vmIntrinsics::_bigIntegerRightShiftWorker:
 855     return inline_bigIntegerShift(true);
 856   case vmIntrinsics::_bigIntegerLeftShiftWorker:
 857     return inline_bigIntegerShift(false);
 858 
 859   case vmIntrinsics::_vectorizedMismatch:
 860     return inline_vectorizedMismatch();
 861 
 862   case vmIntrinsics::_ghash_processBlocks:
 863     return inline_ghash_processBlocks();
 864   case vmIntrinsics::_base64_encodeBlock:
 865     return inline_base64_encodeBlock();
 866   case vmIntrinsics::_base64_decodeBlock:
 867     return inline_base64_decodeBlock();
 868 
 869   case vmIntrinsics::_encodeISOArray:
 870   case vmIntrinsics::_encodeByteISOArray:
 871     return inline_encodeISOArray();
 872 
 873   case vmIntrinsics::_updateCRC32:
 874     return inline_updateCRC32();
 875   case vmIntrinsics::_updateBytesCRC32:
 876     return inline_updateBytesCRC32();
 877   case vmIntrinsics::_updateByteBufferCRC32:
 878     return inline_updateByteBufferCRC32();
 879 
 880   case vmIntrinsics::_updateBytesCRC32C:
 881     return inline_updateBytesCRC32C();
 882   case vmIntrinsics::_updateDirectByteBufferCRC32C:
 883     return inline_updateDirectByteBufferCRC32C();
 884 
 885   case vmIntrinsics::_updateBytesAdler32:
 886     return inline_updateBytesAdler32();
 887   case vmIntrinsics::_updateByteBufferAdler32:


6398   Node* base64obj = argument(0);
6399   Node* src = argument(1);
6400   Node* offset = argument(2);
6401   Node* len = argument(3);
6402   Node* dest = argument(4);
6403   Node* dp = argument(5);
6404   Node* isURL = argument(6);
6405 
6406   src = must_be_not_null(src, true);
6407   dest = must_be_not_null(dest, true);
6408 
6409   Node* src_start = array_element_address(src, intcon(0), T_BYTE);
6410   assert(src_start, "source array is NULL");
6411   Node* dest_start = array_element_address(dest, intcon(0), T_BYTE);
6412   assert(dest_start, "destination array is NULL");
6413 
6414   Node* base64 = make_runtime_call(RC_LEAF,
6415                                    OptoRuntime::base64_encodeBlock_Type(),
6416                                    stubAddr, stubName, TypePtr::BOTTOM,
6417                                    src_start, offset, len, dest_start, dp, isURL);
6418   return true;
6419 }
6420 
6421 bool LibraryCallKit::inline_base64_decodeBlock() {
6422   address stubAddr;
6423   const char *stubName;
6424   assert(UseBASE64Intrinsics, "need Base64 intrinsics support");
6425   assert(callee()->signature()->size() == 5, "base64_decodeBlock has 5 parameters");
6426   stubAddr = StubRoutines::base64_decodeBlock();
6427   stubName = "decodeBlock";
6428 
6429   if (!stubAddr) return false;
6430   Node* base64obj = argument(0);
6431   Node* src = argument(1);
6432   Node* offset = argument(2);
6433   Node* len = argument(3);
6434   Node* dest = argument(4);
6435   Node* isURL = argument(5);
6436 
6437   src = must_be_not_null(src, true);
6438   dest = must_be_not_null(dest, true);
6439 
6440   Node* src_start = array_element_address(src, intcon(0), T_BYTE);
6441   assert(src_start, "source array is NULL");
6442   Node* dest_start = array_element_address(dest, intcon(0), T_BYTE);
6443   assert(dest_start, "destination array is NULL");
6444 
6445   Node* call = make_runtime_call(RC_LEAF,
6446                                    OptoRuntime::base64_decodeBlock_Type(),
6447                                    stubAddr, stubName, TypePtr::BOTTOM,
6448                                    src_start, offset, len, dest_start, isURL);
6449   Node* result = _gvn.transform(new ProjNode(call, TypeFunc::Parms));
6450   set_result(result);
6451   return true;
6452 }
6453 
6454 //------------------------------inline_digestBase_implCompress-----------------------
6455 //
6456 // Calculate MD5 for single-block byte[] array.
6457 // void com.sun.security.provider.MD5.implCompress(byte[] buf, int ofs)
6458 //
6459 // Calculate SHA (i.e., SHA-1) for single-block byte[] array.
6460 // void com.sun.security.provider.SHA.implCompress(byte[] buf, int ofs)
6461 //
6462 // Calculate SHA2 (i.e., SHA-244 or SHA-256) for single-block byte[] array.
6463 // void com.sun.security.provider.SHA2.implCompress(byte[] buf, int ofs)
6464 //
6465 // Calculate SHA5 (i.e., SHA-384 or SHA-512) for single-block byte[] array.
6466 // void com.sun.security.provider.SHA5.implCompress(byte[] buf, int ofs)
6467 //
6468 bool LibraryCallKit::inline_digestBase_implCompress(vmIntrinsics::ID id) {
6469   assert(callee()->signature()->size() == 2, "sha_implCompress has 2 parameters");
6470 


< prev index next >