< prev index next >
src/cpu/x86/vm/sharedRuntime_x86_64.cpp
Print this page
@@ -481,10 +481,11 @@
break;
case T_LONG:
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:
if (int_args < Argument::n_int_register_parameters_j) {
regs[i].set2(INT_ArgReg[int_args++]->as_VMReg());
@@ -891,11 +892,11 @@
ignored++;
} else {
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);
}
} while (vt != 0);
@@ -1150,11 +1151,11 @@
ignored++;
} else {
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);
}
}
@@ -1245,10 +1246,14 @@
sig_str[idx++] = '(';
for (int index = 0; index < length; index++) {
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 {
if (bt == T_ARRAY) {
bt = T_OBJECT; // We don't know the element type, treat as Object
@@ -4198,11 +4203,11 @@
Address to(rax, off);
if (bt == T_FLOAT) {
__ 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");
size_t size_in_bytes = type2aelembytes(bt);
__ store_sized_value(to, r_1->as_Register(), size_in_bytes);
@@ -4235,11 +4240,11 @@
Address from(rax, off);
if (bt == T_FLOAT) {
__ 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");
size_t size_in_bytes = type2aelembytes(bt);
__ load_sized_value(r_1->as_Register(), from, size_in_bytes, bt != T_CHAR && bt != T_BOOLEAN);
< prev index next >