< prev index next >

src/hotspot/share/opto/library_call.cpp

Print this page




 284                                       uint new_idx);
 285 
 286   typedef enum { LS_get_add, LS_get_set, LS_cmp_swap, LS_cmp_swap_weak, LS_cmp_exchange } LoadStoreKind;
 287   MemNode::MemOrd access_kind_to_memord_LS(AccessKind access_kind, bool is_store);
 288   MemNode::MemOrd access_kind_to_memord(AccessKind access_kind);
 289   bool inline_unsafe_load_store(BasicType type,  LoadStoreKind kind, AccessKind access_kind);
 290   bool inline_unsafe_fence(vmIntrinsics::ID id);
 291   bool inline_onspinwait();
 292   bool inline_fp_conversions(vmIntrinsics::ID id);
 293   bool inline_number_methods(vmIntrinsics::ID id);
 294   bool inline_reference_get();
 295   bool inline_Class_cast();
 296   bool inline_aescrypt_Block(vmIntrinsics::ID id);
 297   bool inline_cipherBlockChaining_AESCrypt(vmIntrinsics::ID id);
 298   bool inline_counterMode_AESCrypt(vmIntrinsics::ID id);
 299   Node* inline_cipherBlockChaining_AESCrypt_predicate(bool decrypting);
 300   Node* inline_counterMode_AESCrypt_predicate();
 301   Node* get_key_start_from_aescrypt_object(Node* aescrypt_object);
 302   Node* get_original_key_start_from_aescrypt_object(Node* aescrypt_object);
 303   bool inline_ghash_processBlocks();

 304   bool inline_sha_implCompress(vmIntrinsics::ID id);
 305   bool inline_digestBase_implCompressMB(int predicate);
 306   bool inline_sha_implCompressMB(Node* digestBaseObj, ciInstanceKlass* instklass_SHA,
 307                                  bool long_state, address stubAddr, const char *stubName,
 308                                  Node* src_start, Node* ofs, Node* limit);
 309   Node* get_state_from_sha_object(Node *sha_object);
 310   Node* get_state_from_sha5_object(Node *sha_object);
 311   Node* inline_digestBase_implCompressMB_predicate(int predicate);
 312   bool inline_encodeISOArray();
 313   bool inline_updateCRC32();
 314   bool inline_updateBytesCRC32();
 315   bool inline_updateByteBufferCRC32();
 316   Node* get_table_from_crc32c_class(ciInstanceKlass *crc32c_class);
 317   bool inline_updateBytesCRC32C();
 318   bool inline_updateDirectByteBufferCRC32C();
 319   bool inline_updateBytesAdler32();
 320   bool inline_updateByteBufferAdler32();
 321   bool inline_multiplyToLen();
 322   bool inline_hasNegatives();
 323   bool inline_squareToLen();


 819 
 820   case vmIntrinsics::_multiplyToLen:
 821     return inline_multiplyToLen();
 822 
 823   case vmIntrinsics::_squareToLen:
 824     return inline_squareToLen();
 825 
 826   case vmIntrinsics::_mulAdd:
 827     return inline_mulAdd();
 828 
 829   case vmIntrinsics::_montgomeryMultiply:
 830     return inline_montgomeryMultiply();
 831   case vmIntrinsics::_montgomerySquare:
 832     return inline_montgomerySquare();
 833 
 834   case vmIntrinsics::_vectorizedMismatch:
 835     return inline_vectorizedMismatch();
 836 
 837   case vmIntrinsics::_ghash_processBlocks:
 838     return inline_ghash_processBlocks();


 839 
 840   case vmIntrinsics::_encodeISOArray:
 841   case vmIntrinsics::_encodeByteISOArray:
 842     return inline_encodeISOArray();
 843 
 844   case vmIntrinsics::_updateCRC32:
 845     return inline_updateCRC32();
 846   case vmIntrinsics::_updateBytesCRC32:
 847     return inline_updateBytesCRC32();
 848   case vmIntrinsics::_updateByteBufferCRC32:
 849     return inline_updateByteBufferCRC32();
 850 
 851   case vmIntrinsics::_updateBytesCRC32C:
 852     return inline_updateBytesCRC32C();
 853   case vmIntrinsics::_updateDirectByteBufferCRC32C:
 854     return inline_updateDirectByteBufferCRC32C();
 855 
 856   case vmIntrinsics::_updateBytesAdler32:
 857     return inline_updateBytesAdler32();
 858   case vmIntrinsics::_updateByteBufferAdler32:


6613   stubAddr = StubRoutines::ghash_processBlocks();
6614   stubName = "ghash_processBlocks";
6615 
6616   Node* data           = argument(0);
6617   Node* offset         = argument(1);
6618   Node* len            = argument(2);
6619   Node* state          = argument(3);
6620   Node* subkeyH        = argument(4);
6621 
6622   Node* state_start  = array_element_address(state, intcon(0), T_LONG);
6623   assert(state_start, "state is NULL");
6624   Node* subkeyH_start  = array_element_address(subkeyH, intcon(0), T_LONG);
6625   assert(subkeyH_start, "subkeyH is NULL");
6626   Node* data_start  = array_element_address(data, offset, T_BYTE);
6627   assert(data_start, "data is NULL");
6628 
6629   Node* ghash = make_runtime_call(RC_LEAF|RC_NO_FP,
6630                                   OptoRuntime::ghash_processBlocks_Type(),
6631                                   stubAddr, stubName, TypePtr::BOTTOM,
6632                                   state_start, subkeyH_start, data_start, len);





























6633   return true;
6634 }
6635 
6636 //------------------------------inline_sha_implCompress-----------------------
6637 //
6638 // Calculate SHA (i.e., SHA-1) for single-block byte[] array.
6639 // void com.sun.security.provider.SHA.implCompress(byte[] buf, int ofs)
6640 //
6641 // Calculate SHA2 (i.e., SHA-244 or SHA-256) for single-block byte[] array.
6642 // void com.sun.security.provider.SHA2.implCompress(byte[] buf, int ofs)
6643 //
6644 // Calculate SHA5 (i.e., SHA-384 or SHA-512) for single-block byte[] array.
6645 // void com.sun.security.provider.SHA5.implCompress(byte[] buf, int ofs)
6646 //
6647 bool LibraryCallKit::inline_sha_implCompress(vmIntrinsics::ID id) {
6648   assert(callee()->signature()->size() == 2, "sha_implCompress has 2 parameters");
6649 
6650   Node* sha_obj = argument(0);
6651   Node* src     = argument(1); // type oop
6652   Node* ofs     = argument(2); // type int




 284                                       uint new_idx);
 285 
 286   typedef enum { LS_get_add, LS_get_set, LS_cmp_swap, LS_cmp_swap_weak, LS_cmp_exchange } LoadStoreKind;
 287   MemNode::MemOrd access_kind_to_memord_LS(AccessKind access_kind, bool is_store);
 288   MemNode::MemOrd access_kind_to_memord(AccessKind access_kind);
 289   bool inline_unsafe_load_store(BasicType type,  LoadStoreKind kind, AccessKind access_kind);
 290   bool inline_unsafe_fence(vmIntrinsics::ID id);
 291   bool inline_onspinwait();
 292   bool inline_fp_conversions(vmIntrinsics::ID id);
 293   bool inline_number_methods(vmIntrinsics::ID id);
 294   bool inline_reference_get();
 295   bool inline_Class_cast();
 296   bool inline_aescrypt_Block(vmIntrinsics::ID id);
 297   bool inline_cipherBlockChaining_AESCrypt(vmIntrinsics::ID id);
 298   bool inline_counterMode_AESCrypt(vmIntrinsics::ID id);
 299   Node* inline_cipherBlockChaining_AESCrypt_predicate(bool decrypting);
 300   Node* inline_counterMode_AESCrypt_predicate();
 301   Node* get_key_start_from_aescrypt_object(Node* aescrypt_object);
 302   Node* get_original_key_start_from_aescrypt_object(Node* aescrypt_object);
 303   bool inline_ghash_processBlocks();
 304   bool inline_base64_implEncode();
 305   bool inline_sha_implCompress(vmIntrinsics::ID id);
 306   bool inline_digestBase_implCompressMB(int predicate);
 307   bool inline_sha_implCompressMB(Node* digestBaseObj, ciInstanceKlass* instklass_SHA,
 308                                  bool long_state, address stubAddr, const char *stubName,
 309                                  Node* src_start, Node* ofs, Node* limit);
 310   Node* get_state_from_sha_object(Node *sha_object);
 311   Node* get_state_from_sha5_object(Node *sha_object);
 312   Node* inline_digestBase_implCompressMB_predicate(int predicate);
 313   bool inline_encodeISOArray();
 314   bool inline_updateCRC32();
 315   bool inline_updateBytesCRC32();
 316   bool inline_updateByteBufferCRC32();
 317   Node* get_table_from_crc32c_class(ciInstanceKlass *crc32c_class);
 318   bool inline_updateBytesCRC32C();
 319   bool inline_updateDirectByteBufferCRC32C();
 320   bool inline_updateBytesAdler32();
 321   bool inline_updateByteBufferAdler32();
 322   bool inline_multiplyToLen();
 323   bool inline_hasNegatives();
 324   bool inline_squareToLen();


 820 
 821   case vmIntrinsics::_multiplyToLen:
 822     return inline_multiplyToLen();
 823 
 824   case vmIntrinsics::_squareToLen:
 825     return inline_squareToLen();
 826 
 827   case vmIntrinsics::_mulAdd:
 828     return inline_mulAdd();
 829 
 830   case vmIntrinsics::_montgomeryMultiply:
 831     return inline_montgomeryMultiply();
 832   case vmIntrinsics::_montgomerySquare:
 833     return inline_montgomerySquare();
 834 
 835   case vmIntrinsics::_vectorizedMismatch:
 836     return inline_vectorizedMismatch();
 837 
 838   case vmIntrinsics::_ghash_processBlocks:
 839     return inline_ghash_processBlocks();
 840   case vmIntrinsics::_base64_implEncode:
 841     return inline_base64_implEncode();
 842 
 843   case vmIntrinsics::_encodeISOArray:
 844   case vmIntrinsics::_encodeByteISOArray:
 845     return inline_encodeISOArray();
 846 
 847   case vmIntrinsics::_updateCRC32:
 848     return inline_updateCRC32();
 849   case vmIntrinsics::_updateBytesCRC32:
 850     return inline_updateBytesCRC32();
 851   case vmIntrinsics::_updateByteBufferCRC32:
 852     return inline_updateByteBufferCRC32();
 853 
 854   case vmIntrinsics::_updateBytesCRC32C:
 855     return inline_updateBytesCRC32C();
 856   case vmIntrinsics::_updateDirectByteBufferCRC32C:
 857     return inline_updateDirectByteBufferCRC32C();
 858 
 859   case vmIntrinsics::_updateBytesAdler32:
 860     return inline_updateBytesAdler32();
 861   case vmIntrinsics::_updateByteBufferAdler32:


6616   stubAddr = StubRoutines::ghash_processBlocks();
6617   stubName = "ghash_processBlocks";
6618 
6619   Node* data           = argument(0);
6620   Node* offset         = argument(1);
6621   Node* len            = argument(2);
6622   Node* state          = argument(3);
6623   Node* subkeyH        = argument(4);
6624 
6625   Node* state_start  = array_element_address(state, intcon(0), T_LONG);
6626   assert(state_start, "state is NULL");
6627   Node* subkeyH_start  = array_element_address(subkeyH, intcon(0), T_LONG);
6628   assert(subkeyH_start, "subkeyH is NULL");
6629   Node* data_start  = array_element_address(data, offset, T_BYTE);
6630   assert(data_start, "data is NULL");
6631 
6632   Node* ghash = make_runtime_call(RC_LEAF|RC_NO_FP,
6633                                   OptoRuntime::ghash_processBlocks_Type(),
6634                                   stubAddr, stubName, TypePtr::BOTTOM,
6635                                   state_start, subkeyH_start, data_start, len);
6636   return true;
6637 }
6638 
6639 bool LibraryCallKit::inline_base64_implEncode() {
6640   address stubAddr;
6641   const char *stubName;
6642   assert(UseBASE64Intrinsics, "need Base64 intrinsics support");
6643   assert(callee()->signature()->size() == 6, "base64_implEncode has 6 parameters");
6644   stubAddr = StubRoutines::base64_implEncode();
6645   stubName = "implEncode";
6646 
6647   if (!stubAddr) return false;
6648   Node* base64obj = argument(0);
6649   Node* src = argument(1);
6650   Node* offset = argument(2);
6651   Node* len = argument(3);
6652   Node* dest = argument(4);
6653   Node* dp = argument(5);
6654   Node* isURL = argument(6);
6655 
6656   Node* src_start = array_element_address(src, intcon(0), T_BYTE);
6657   assert(src_start, "source array is NULL");
6658   Node* dest_start = array_element_address(dest, intcon(0), T_BYTE);
6659   assert(dest_start, "destination array is NULL");
6660 
6661   Node* base64 = make_runtime_call(RC_LEAF,
6662                                    OptoRuntime::base64_implEncode_Type(),
6663                                    stubAddr, stubName, TypePtr::BOTTOM,
6664                                    src_start, offset, len, dest_start, dp, isURL);
6665   return true;
6666 }
6667 
6668 //------------------------------inline_sha_implCompress-----------------------
6669 //
6670 // Calculate SHA (i.e., SHA-1) for single-block byte[] array.
6671 // void com.sun.security.provider.SHA.implCompress(byte[] buf, int ofs)
6672 //
6673 // Calculate SHA2 (i.e., SHA-244 or SHA-256) for single-block byte[] array.
6674 // void com.sun.security.provider.SHA2.implCompress(byte[] buf, int ofs)
6675 //
6676 // Calculate SHA5 (i.e., SHA-384 or SHA-512) for single-block byte[] array.
6677 // void com.sun.security.provider.SHA5.implCompress(byte[] buf, int ofs)
6678 //
6679 bool LibraryCallKit::inline_sha_implCompress(vmIntrinsics::ID id) {
6680   assert(callee()->signature()->size() == 2, "sha_implCompress has 2 parameters");
6681 
6682   Node* sha_obj = argument(0);
6683   Node* src     = argument(1); // type oop
6684   Node* ofs     = argument(2); // type int


< prev index next >