< prev index next >

src/hotspot/share/opto/library_call.cpp

Print this page

        

*** 303,313 **** --- 303,315 ---- Node* inline_counterMode_AESCrypt_predicate(); Node* get_key_start_from_aescrypt_object(Node* aescrypt_object); Node* get_original_key_start_from_aescrypt_object(Node* aescrypt_object); bool inline_ghash_processBlocks(); bool inline_base64_encodeBlock(); + bool inline_base64_decodeBlock(); bool inline_digestBase_implCompress(vmIntrinsics::ID id); + bool inline_sha_implCompress(vmIntrinsics::ID id); bool inline_digestBase_implCompressMB(int predicate); bool inline_digestBase_implCompressMB(Node* digestBaseObj, ciInstanceKlass* instklass, bool long_state, address stubAddr, const char *stubName, Node* src_start, Node* ofs, Node* limit); Node* get_state_from_digest_object(Node *digestBase_object);
*** 859,868 **** --- 861,872 ---- case vmIntrinsics::_ghash_processBlocks: return inline_ghash_processBlocks(); case vmIntrinsics::_base64_encodeBlock: return inline_base64_encodeBlock(); + case vmIntrinsics::_base64_decodeBlock: + return inline_base64_decodeBlock(); case vmIntrinsics::_encodeISOArray: case vmIntrinsics::_encodeByteISOArray: return inline_encodeISOArray();
*** 6412,6421 **** --- 6416,6458 ---- stubAddr, stubName, TypePtr::BOTTOM, src_start, offset, len, dest_start, dp, isURL); return true; } + bool LibraryCallKit::inline_base64_decodeBlock() { + address stubAddr; + const char *stubName; + assert(UseBASE64Intrinsics, "need Base64 intrinsics support"); + assert(callee()->signature()->size() == 5, "base64_decodeBlock has 5 parameters"); + stubAddr = StubRoutines::base64_decodeBlock(); + stubName = "decodeBlock"; + + if (!stubAddr) return false; + Node* base64obj = argument(0); + Node* src = argument(1); + Node* offset = argument(2); + Node* len = argument(3); + Node* dest = argument(4); + Node* isURL = argument(5); + + src = must_be_not_null(src, true); + dest = must_be_not_null(dest, true); + + Node* src_start = array_element_address(src, intcon(0), T_BYTE); + assert(src_start, "source array is NULL"); + Node* dest_start = array_element_address(dest, intcon(0), T_BYTE); + assert(dest_start, "destination array is NULL"); + + Node* call = make_runtime_call(RC_LEAF, + OptoRuntime::base64_decodeBlock_Type(), + stubAddr, stubName, TypePtr::BOTTOM, + src_start, offset, len, dest_start, isURL); + Node* result = _gvn.transform(new ProjNode(call, TypeFunc::Parms)); + set_result(result); + return true; + } + //------------------------------inline_digestBase_implCompress----------------------- // // Calculate MD5 for single-block byte[] array. // void com.sun.security.provider.MD5.implCompress(byte[] buf, int ofs) //
< prev index next >