diff -r f3806614494a -r cfd05ec74089 src/share/vm/opto/runtime.cpp --- a/src/share/vm/opto/runtime.cpp Fri Sep 13 22:50:47 2013 +0200 +++ b/src/share/vm/opto/runtime.cpp Wed Sep 18 14:34:56 2013 -0700 @@ -795,11 +795,20 @@ const TypeFunc* OptoRuntime::array_fill_Type() { + const Type** fields; + int argp = TypeFunc::Parms; + if (CCallingConventionRequiresIntsAsLongs) { // create input type (domain): pointer, int, size_t - const Type** fields = TypeTuple::fields(3 LP64_ONLY( + 1)); - int argp = TypeFunc::Parms; - fields[argp++] = TypePtr::NOTNULL; - fields[argp++] = TypeInt::INT; + fields = TypeTuple::fields(3 LP64_ONLY( + 2)); + fields[argp++] = TypePtr::NOTNULL; + fields[argp++] = TypeLong::LONG; + fields[argp++] = Type::HALF; + } else { + // create input type (domain): pointer, int, size_t + fields = TypeTuple::fields(3 LP64_ONLY( + 1)); + fields[argp++] = TypePtr::NOTNULL; + fields[argp++] = TypeInt::INT; + } fields[argp++] = TypeX_X; // size in whatevers (size_t) LP64_ONLY(fields[argp++] = Type::HALF); // other half of long length const TypeTuple *domain = TypeTuple::make(argp, fields);