--- a/hotspot/src/share/vm/opto/runtime.cpp Tue Jan 14 14:51:47 2014 +0100
+++ b/hotspot/src/share/vm/opto/runtime.cpp Tue Jan 14 17:46:48 2014 -0800
@@ -814,12 +814,18 @@
const TypeFunc* OptoRuntime::aescrypt_block_Type() {
// create input type (domain)
int num_args = 3;
+ if (Matcher::pass_original_key_for_aes()) {
+ num_args = 4;
+ }
int argcnt = num_args;
const Type** fields = TypeTuple::fields(argcnt);
int argp = TypeFunc::Parms;
fields[argp++] = TypePtr::NOTNULL; // src
fields[argp++] = TypePtr::NOTNULL; // dest
fields[argp++] = TypePtr::NOTNULL; // k array
+ if (Matcher::pass_original_key_for_aes()) {
+ fields[argp++] = TypePtr::NOTNULL; // original k array
+ }
assert(argp == TypeFunc::Parms+argcnt, "correct decoding");
const TypeTuple* domain = TypeTuple::make(TypeFunc::Parms+argcnt, fields);
@@ -856,6 +862,9 @@
const TypeFunc* OptoRuntime::cipherBlockChaining_aescrypt_Type() {
// create input type (domain)
int num_args = 5;
+ if (Matcher::pass_original_key_for_aes()) {
+ num_args = 6;
+ }
int argcnt = num_args;
const Type** fields = TypeTuple::fields(argcnt);
int argp = TypeFunc::Parms;
@@ -864,13 +873,16 @@
fields[argp++] = TypePtr::NOTNULL; // k array
fields[argp++] = TypePtr::NOTNULL; // r array
fields[argp++] = TypeInt::INT; // src len
+ if (Matcher::pass_original_key_for_aes()) {
+ fields[argp++] = TypePtr::NOTNULL; // original k array
+ }
assert(argp == TypeFunc::Parms+argcnt, "correct decoding");
const TypeTuple* domain = TypeTuple::make(TypeFunc::Parms+argcnt, fields);
- // no result type needed
+ // returning cipher len (int)
fields = TypeTuple::fields(1);
- fields[TypeFunc::Parms+0] = NULL; // void
- const TypeTuple* range = TypeTuple::make(TypeFunc::Parms, fields);
+ fields[TypeFunc::Parms+0] = TypeInt::INT;
+ const TypeTuple* range = TypeTuple::make(TypeFunc::Parms+1, fields);
return TypeFunc::make(domain, range);
}