< 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 >