< prev index next >
src/share/vm/code/nmethod.cpp
Print this page
rev 13052 : 8185334
@@ -2543,36 +2543,39 @@
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()) {
+ 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[sig_index++] = t;
+ sig_bt[sizeargs++] = t;
if (type2size[t] == 2) {
- sig_bt[sig_index++] = T_VOID;
+ sig_bt[sizeargs++] = 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);
+ int arg_index = ((m->is_static() || has_value_arg) ? 0 : -1);
bool did_old_sp = false;
- for (SignatureStream ss(m->signature()); !ss.at_return_type(); ) {
+ 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 >