< prev index next >

src/cpu/x86/vm/interp_masm_x86.cpp

Print this page

        

*** 30,39 **** --- 30,40 ---- #include "memory/vtBuffer.hpp" #include "oops/arrayOop.hpp" #include "oops/markOop.hpp" #include "oops/methodData.hpp" #include "oops/method.hpp" + #include "oops/valueKlass.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" #include "runtime/basicLock.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/sharedRuntime.hpp"
*** 1126,1137 **** --- 1127,1152 ---- bind(no_reserved_zone_enabling); } if (load_values) { // We are returning a value type, load its fields into registers + #ifndef _LP64 super_call_VM_leaf(StubRoutines::load_value_type_fields_in_regs()); + #else + load_klass(rdi, rax); + movptr(rdi, Address(rdi, ValueKlass::unpack_handler_offset())); + Label skip; + testptr(rdi, rdi); + jcc(Assembler::equal, skip); + + // Load fields from a buffered value with a value class specific + // handler + call(rdi); + + bind(skip); + #endif // call above kills the value in rbx. Reload it. movptr(rbx, Address(rbp, frame::interpreter_frame_sender_sp_offset * wordSize)); } leave(); // remove frame anchor pop(ret_addr); // get return address
< prev index next >