< 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,14 +5309,25 @@
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,
+ 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,13 +5497,22 @@
// Call the stub.
address stubAddr = StubRoutines::updateBytesCRC32();
const char *stubName = "updateBytesCRC32";
- Node* call = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::updateBytesCRC32_Type(),
+ 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,13 +5538,22 @@
// Call the stub.
address stubAddr = StubRoutines::updateBytesCRC32();
const char *stubName = "updateBytesCRC32";
- Node* call = make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::updateBytesCRC32_Type(),
+ 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,21 +5786,37 @@
// 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,14 +6061,24 @@
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,
+ 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 >