< prev index next >

src/share/vm/opto/graphKit.cpp

Print this page
rev 10518 : Tobias' flattened array
rev 10544 : call to __Value methods can't pass fields as arguments

*** 1728,1756 **** //-------------------------set_arguments_for_java_call------------------------- // Arguments (pre-popped from the stack) are taken from the JVMS. void GraphKit::set_arguments_for_java_call(CallJavaNode* call) { // Add the call arguments: ! uint nargs = call->method()->arg_size(); ! for (uint i = 0, idx = 0; i < nargs; i++) { ! Node* arg = argument(i); if (ValueTypePassFieldsAsArgs) { if (arg->is_ValueType()) { ValueTypeNode* vt = arg->as_ValueType(); // We don't pass value type arguments by reference but instead // pass each field of the value type ! idx += vt->set_arguments_for_java_call(call, idx + TypeFunc::Parms, *this); } else { ! call->init_req(idx + TypeFunc::Parms, arg); idx++; } } else { if (arg->is_ValueType()) { // Pass value type argument via oop to callee arg = arg->as_ValueType()->store_to_memory(this); } ! call->init_req(i + TypeFunc::Parms, arg); } } } //---------------------------set_edges_for_java_call--------------------------- --- 1728,1763 ---- //-------------------------set_arguments_for_java_call------------------------- // Arguments (pre-popped from the stack) are taken from the JVMS. void GraphKit::set_arguments_for_java_call(CallJavaNode* call) { // Add the call arguments: ! const TypeTuple* domain = call->tf()->domain_sig(); ! uint nargs = domain->cnt(); ! for (uint i = TypeFunc::Parms, idx = TypeFunc::Parms; i < nargs; i++) { ! Node* arg = argument(i-TypeFunc::Parms); if (ValueTypePassFieldsAsArgs) { if (arg->is_ValueType()) { ValueTypeNode* vt = arg->as_ValueType(); + if (domain->field_at(i)->is_valuetypeptr()->klass() != C->env()->___Value_klass()) { // We don't pass value type arguments by reference but instead // pass each field of the value type ! idx += vt->set_arguments_for_java_call(call, idx, *this); } else { ! arg = arg->as_ValueType()->store_to_memory(this); ! call->init_req(idx, arg); ! idx++; ! } ! } else { ! call->init_req(idx, arg); idx++; } } else { if (arg->is_ValueType()) { // Pass value type argument via oop to callee arg = arg->as_ValueType()->store_to_memory(this); } ! call->init_req(i, arg); } } } //---------------------------set_edges_for_java_call---------------------------
< prev index next >