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
|