< prev index next >

src/share/vm/opto/library_call.cpp

Print this page
rev 8499 : 8086069: Adapt runtime calls to recent intrinsics to pass ints as long

*** 5309,5322 **** final_sync(ideal); #undef __ Node* z_start = array_element_address(z, intcon(0), T_INT); ! Node* call = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::multiplyToLen_Type(), stubAddr, stubName, TypePtr::BOTTOM, x_start, xlen, y_start, ylen, z_start, zlen); } // original reexecute is set back here C->set_has_split_ifs(true); // Has chance for split-if optimization set_result(z); return true; --- 5309,5333 ---- final_sync(ideal); #undef __ Node* z_start = array_element_address(z, intcon(0), T_INT); ! Node* call = NULL; ! if (CCallingConventionRequiresIntsAsLongs) { ! Node* xlen_I2L = ConvI2L(xlen); ! Node* ylen_I2L = ConvI2L(ylen); ! Node* zlen_I2L = ConvI2L(zlen); ! call = make_runtime_call(RC_LEAF|RC_NO_FP, ! OptoRuntime::multiplyToLen_Type(), ! stubAddr, stubName, TypePtr::BOTTOM, ! x_start, xlen_I2L XTOP, y_start, ylen_I2L XTOP, z_start, zlen_I2L XTOP); ! } else { ! call = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::multiplyToLen_Type(), stubAddr, stubName, TypePtr::BOTTOM, x_start, xlen, y_start, ylen, z_start, zlen); + } } // original reexecute is set back here C->set_has_split_ifs(true); // Has chance for split-if optimization set_result(z); return true;
*** 5486,5498 **** // Call the stub. address stubAddr = StubRoutines::updateBytesCRC32(); const char *stubName = "updateBytesCRC32"; ! Node* call = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::updateBytesCRC32_Type(), stubAddr, stubName, TypePtr::BOTTOM, crc, src_start, length); Node* result = _gvn.transform(new ProjNode(call, TypeFunc::Parms)); set_result(result); return true; } --- 5497,5518 ---- // Call the stub. address stubAddr = StubRoutines::updateBytesCRC32(); const char *stubName = "updateBytesCRC32"; ! Node* call = NULL; ! if (CCallingConventionRequiresIntsAsLongs) { ! Node* crc_I2L = ConvI2L(crc); ! Node* length_I2L = ConvI2L(length); ! call = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::updateBytesCRC32_Type(), ! stubAddr, stubName, TypePtr::BOTTOM, ! crc_I2L XTOP, src_start, length_I2L XTOP); ! } else { ! call = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::updateBytesCRC32_Type(), stubAddr, stubName, TypePtr::BOTTOM, crc, src_start, length); + } Node* result = _gvn.transform(new ProjNode(call, TypeFunc::Parms)); set_result(result); return true; }
*** 5518,5530 **** // Call the stub. address stubAddr = StubRoutines::updateBytesCRC32(); const char *stubName = "updateBytesCRC32"; ! Node* call = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::updateBytesCRC32_Type(), stubAddr, stubName, TypePtr::BOTTOM, crc, src_start, length); Node* result = _gvn.transform(new ProjNode(call, TypeFunc::Parms)); set_result(result); return true; } --- 5538,5559 ---- // Call the stub. address stubAddr = StubRoutines::updateBytesCRC32(); const char *stubName = "updateBytesCRC32"; ! Node* call = NULL; ! if (CCallingConventionRequiresIntsAsLongs) { ! Node* crc_I2L = ConvI2L(crc); ! Node* length_I2L = ConvI2L(length); ! call = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::updateBytesCRC32_Type(), ! stubAddr, stubName, TypePtr::BOTTOM, ! crc_I2L XTOP, src_start, length_I2L XTOP); ! } else { ! call = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::updateBytesCRC32_Type(), stubAddr, stubName, TypePtr::BOTTOM, crc, src_start, length); + } Node* result = _gvn.transform(new ProjNode(call, TypeFunc::Parms)); set_result(result); return true; }
*** 5757,5777 **** --- 5786,5822 ---- // compatibility issues between Java key expansion and SPARC crypto instructions Node* original_k_start = get_original_key_start_from_aescrypt_object(aescrypt_object); if (original_k_start == NULL) return false; // Call the stub, passing src_start, dest_start, k_start, r_start, src_len and original_k_start + if (CCallingConventionRequiresIntsAsLongs) { + Node* len_I2L = ConvI2L(len); + cbcCrypt = make_runtime_call(RC_LEAF|RC_NO_FP, + OptoRuntime::cipherBlockChaining_aescrypt_Type(), + stubAddr, stubName, TypePtr::BOTTOM, + src_start, dest_start, k_start, r_start, len_I2L XTOP, original_k_start); + } else { cbcCrypt = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::cipherBlockChaining_aescrypt_Type(), stubAddr, stubName, TypePtr::BOTTOM, src_start, dest_start, k_start, r_start, len, original_k_start); + } } else { // Call the stub, passing src_start, dest_start, k_start, r_start and src_len + if (CCallingConventionRequiresIntsAsLongs) { + Node* len_I2L = ConvI2L(len); + cbcCrypt = make_runtime_call(RC_LEAF|RC_NO_FP, + OptoRuntime::cipherBlockChaining_aescrypt_Type(), + stubAddr, stubName, TypePtr::BOTTOM, + src_start, dest_start, k_start, r_start, len_I2L XTOP); + } else { cbcCrypt = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::cipherBlockChaining_aescrypt_Type(), stubAddr, stubName, TypePtr::BOTTOM, src_start, dest_start, k_start, r_start, len); } + } // return cipher length (int) Node* retvalue = _gvn.transform(new ProjNode(cbcCrypt, TypeFunc::Parms)); set_result(retvalue); return true;
*** 6016,6029 **** state = get_state_from_sha_object(sha_obj); } if (state == NULL) return false; // Call the stub. ! Node* call = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::digestBase_implCompressMB_Type(), stubAddr, stubName, TypePtr::BOTTOM, src_start, state, ofs, limit); // return ofs (int) Node* result = _gvn.transform(new ProjNode(call, TypeFunc::Parms)); set_result(result); return true; --- 6061,6084 ---- state = get_state_from_sha_object(sha_obj); } if (state == NULL) return false; // Call the stub. ! Node* call = NULL; ! if (CCallingConventionRequiresIntsAsLongs) { ! Node* ofs_I2L = ConvI2L(ofs); ! Node* limit_I2L = ConvI2L(limit); ! call = make_runtime_call(RC_LEAF|RC_NO_FP, ! OptoRuntime::digestBase_implCompressMB_Type(), ! stubAddr, stubName, TypePtr::BOTTOM, ! src_start, state, ofs_I2L XTOP, limit_I2L XTOP); ! } else { ! call = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::digestBase_implCompressMB_Type(), stubAddr, stubName, TypePtr::BOTTOM, src_start, state, ofs, limit); + } // return ofs (int) Node* result = _gvn.transform(new ProjNode(call, TypeFunc::Parms)); set_result(result); return true;
< prev index next >