--- old/src/cpu/x86/vm/sharedRuntime_x86_64.cpp 2017-09-21 09:17:52.604998398 +0200 +++ new/src/cpu/x86/vm/sharedRuntime_x86_64.cpp 2017-09-21 09:17:52.492998399 +0200 @@ -483,6 +483,7 @@ assert((i + 1) < total_args_passed && sig_bt[i + 1] == T_VOID, "expecting half"); // fall through case T_OBJECT: + case T_VALUETYPE: case T_ARRAY: case T_ADDRESS: case T_VALUETYPEPTR: @@ -893,7 +894,7 @@ int off = sig_extended.at(next_arg_comp)._offset; assert(off > 0, "offset in object should be positive"); size_t size_in_bytes = is_java_primitive(bt) ? type2aelembytes(bt) : wordSize; - bool is_oop = (bt == T_OBJECT || bt == T_ARRAY); + bool is_oop = (bt == T_OBJECT || bt == T_VALUETYPEPTR || bt == T_ARRAY); has_oop_field = has_oop_field || is_oop; gen_c2i_adapter_helper(masm, bt, next_arg_comp > 0 ? sig_extended.at(next_arg_comp-1)._bt : T_ILLEGAL, size_in_bytes, regs[next_arg_comp-ignored], Address(r11, off), extraspace, is_oop); @@ -1152,7 +1153,7 @@ int off = sig_extended.at(next_arg_comp)._offset; assert(off > 0, "offset in object should be positive"); size_t size_in_bytes = is_java_primitive(bt) ? type2aelembytes(bt) : wordSize; - bool is_oop = (bt == T_OBJECT || bt == T_ARRAY); + bool is_oop = (bt == T_OBJECT || bt == T_VALUETYPEPTR || bt == T_ARRAY); gen_i2c_adapter_helper(masm, bt, prev_bt, size_in_bytes, regs[next_arg_comp - ignored], Address(r10, off), is_oop); } } while (vt != 0); @@ -1247,6 +1248,10 @@ BasicType bt = sig_extended.at(index)._bt; if (bt == T_VALUETYPE) { has_value_argument = true; + } else if (bt == T_VALUETYPEPTR) { + // non-flattened value type field + sig_str[idx++] = type2char(T_VALUETYPE); + sig_str[idx++] = ';'; } else if (bt == T_VOID) { // Ignore } else { @@ -4200,7 +4205,7 @@ __ movflt(to, r_1->as_XMMRegister()); } else if (bt == T_DOUBLE) { __ movdbl(to, r_1->as_XMMRegister()); - } else if (bt == T_OBJECT || bt == T_ARRAY) { + } else if (bt == T_OBJECT || bt == T_VALUETYPEPTR || bt == T_ARRAY) { __ store_heap_oop(to, r_1->as_Register()); } else { assert(is_java_primitive(bt), "unexpected basic type"); @@ -4237,7 +4242,7 @@ __ movflt(r_1->as_XMMRegister(), from); } else if (bt == T_DOUBLE) { __ movdbl(r_1->as_XMMRegister(), from); - } else if (bt == T_OBJECT || bt == T_ARRAY) { + } else if (bt == T_OBJECT || bt == T_VALUETYPEPTR || bt == T_ARRAY) { __ load_heap_oop(r_1->as_Register(), from); } else { assert(is_java_primitive(bt), "unexpected basic type");