< prev index next >
src/hotspot/cpu/x86/stubGenerator_x86_64.cpp
Print this page
@@ -414,13 +414,21 @@
__ ret(0);
// handle return types different from T_INT
__ BIND(is_value);
if (ValueTypeReturnedAsFields) {
- // Handle value type returned as fields
- __ store_value_type_fields_to_buf(NULL);
- __ movptr(r13, result);
+ // Check for flattened return value
+ __ testptr(rax, 1);
+ __ jcc(Assembler::zero, is_long);
+ // Initialize pre-allocated buffer
+ __ mov(rbx, rax);
+ __ andptr(rbx, -2);
+ __ movptr(rbx, Address(rbx, InstanceKlass::adr_valueklass_fixed_block_offset()));
+ __ movptr(rbx, Address(rbx, ValueKlass::pack_handler_offset()));
+ __ movptr(rax, Address(r13, 0));
+ __ call(rbx);
+ __ jmp(exit);
}
__ BIND(is_long);
__ movq(Address(r13, 0), rax);
__ jmp(exit);
< prev index next >