< prev index next >

src/share/vm/code/nmethod.cpp

Print this page
rev 13052 : 8185334

*** 2543,2578 **** m->print_value_on(stream); stream->cr(); } if (m.not_null() && !is_osr_method()) { ResourceMark rm; ! int sizeargs = m->size_of_parameters(); ! BasicType* sig_bt = NEW_RESOURCE_ARRAY(BasicType, sizeargs); ! VMRegPair* regs = NEW_RESOURCE_ARRAY(VMRegPair, sizeargs); ! { ! int sig_index = 0; ! if (!m->is_static()) ! sig_bt[sig_index++] = T_OBJECT; // 'this' ! for (SignatureStream ss(m->signature()); !ss.at_return_type(); ss.next()) { BasicType t = ss.type(); ! sig_bt[sig_index++] = t; if (type2size[t] == 2) { ! sig_bt[sig_index++] = T_VOID; } else { assert(type2size[t] == 1, "size is 1 or 2"); } } - assert(sig_index == sizeargs, ""); - } const char* spname = "sp"; // make arch-specific? intptr_t out_preserve = SharedRuntime::java_calling_convention(sig_bt, regs, sizeargs, false); int stack_slot_offset = this->frame_size() * wordSize; int tab1 = 14, tab2 = 24; int sig_index = 0; ! int arg_index = (m->is_static() ? 0 : -1); bool did_old_sp = false; ! for (SignatureStream ss(m->signature()); !ss.at_return_type(); ) { bool at_this = (arg_index == -1); bool at_old_sp = false; BasicType t = (at_this ? T_OBJECT : ss.type()); assert(t == sig_bt[sig_index], "sigs in sync"); if (at_this) --- 2543,2581 ---- m->print_value_on(stream); stream->cr(); } if (m.not_null() && !is_osr_method()) { ResourceMark rm; ! int sizeargs = 0; ! BasicType* sig_bt = NEW_RESOURCE_ARRAY(BasicType, 256); ! VMRegPair* regs = NEW_RESOURCE_ARRAY(VMRegPair, 256); ! Symbol* sig = m->signature(); ! bool has_value_arg = false; ! if (ValueTypePassFieldsAsArgs && m->adapter()->get_sig_extended() != NULL) { ! // Use extended signature if value type arguments are passed as fields ! sig = m->adapter()->get_sig_extended(); ! has_value_arg = true; ! } else if (!m->is_static()) { ! sig_bt[sizeargs++] = T_OBJECT; // 'this' ! } ! for (SignatureStream ss(sig); !ss.at_return_type(); ss.next()) { BasicType t = ss.type(); ! sig_bt[sizeargs++] = t; if (type2size[t] == 2) { ! sig_bt[sizeargs++] = T_VOID; } else { assert(type2size[t] == 1, "size is 1 or 2"); } } const char* spname = "sp"; // make arch-specific? intptr_t out_preserve = SharedRuntime::java_calling_convention(sig_bt, regs, sizeargs, false); int stack_slot_offset = this->frame_size() * wordSize; int tab1 = 14, tab2 = 24; int sig_index = 0; ! int arg_index = ((m->is_static() || has_value_arg) ? 0 : -1); bool did_old_sp = false; ! for (SignatureStream ss(sig); !ss.at_return_type(); ) { bool at_this = (arg_index == -1); bool at_old_sp = false; BasicType t = (at_this ? T_OBJECT : ss.type()); assert(t == sig_bt[sig_index], "sigs in sync"); if (at_this)
< prev index next >