< prev index next >

src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp

Print this page
@@ -39,10 +39,11 @@
  #include "oops/arrayOop.hpp"
  #include "oops/method.hpp"
  #include "oops/methodCounters.hpp"
  #include "oops/methodData.hpp"
  #include "oops/oop.inline.hpp"
+ #include "oops/inlineKlass.hpp"
  #include "oops/resolvedIndyEntry.hpp"
  #include "prims/jvmtiExport.hpp"
  #include "prims/jvmtiThreadState.hpp"
  #include "runtime/arguments.hpp"
  #include "runtime/deoptimization.hpp"

@@ -469,10 +470,15 @@
    // Restore stack bottom in case i2c adjusted stack
    __ ldr(rscratch1, Address(rfp, frame::interpreter_frame_last_sp_offset * wordSize));
    __ lea(esp, Address(rfp, rscratch1, Address::lsl(Interpreter::logStackElementSize)));
    // 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 && InlineTypeReturnedAsFields) {
+     __ store_inline_type_fields_to_buf(nullptr, true);
+   }
+ 
    __ restore_bcp();
    __ restore_locals();
    __ restore_constant_pool_cache();
    __ get_method(rmethod);
  

@@ -584,10 +590,11 @@
    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_PRIMITIVE_OBJECT: // 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 >