< prev index next >

src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp

Print this page

        

*** 36,45 **** --- 36,46 ---- #include "memory/resourceArea.hpp" #include "oops/arrayOop.hpp" #include "oops/methodData.hpp" #include "oops/method.hpp" #include "oops/oop.inline.hpp" + #include "oops/valueKlass.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" #include "runtime/arguments.hpp" #include "runtime/deoptimization.hpp" #include "runtime/frame.inline.hpp"
*** 438,447 **** --- 439,453 ---- // Restore stack bottom in case i2c adjusted stack __ ldr(esp, Address(rfp, frame::interpreter_frame_last_sp_offset * wordSize)); // and NULL it as marker that esp is now tos until next java call __ str(zr, Address(rfp, frame::interpreter_frame_last_sp_offset * wordSize)); + + if (state == atos && ValueTypeReturnedAsFields) { + __ store_value_type_fields_to_buf(NULL, true); + } + __ restore_bcp(); __ restore_locals(); __ restore_constant_pool_cache(); __ get_method(rmethod);
*** 564,573 **** --- 570,580 ---- case T_INT : __ uxtw(r0, r0); break; // FIXME: We almost certainly don't need this case T_LONG : /* nothing to do */ break; case T_VOID : /* nothing to do */ break; case T_FLOAT : /* nothing to do */ break; case T_DOUBLE : /* nothing to do */ break; + case T_VALUETYPE: // fall through (value types are handled with oops) case T_OBJECT : // retrieve result from frame __ ldr(r0, Address(rfp, frame::interpreter_frame_oop_temp_offset*wordSize)); // and verify it __ verify_oop(r0);
< prev index next >