hotspot/src/share/vm/interpreter/interpreterRuntime.cpp
changeset 37152 29e68f1d35bb
parent 36392 f2f1892bfa98
child 37179 4dbcb3a642d2
equal deleted inserted replaced
37053:4eac559b9503 37152:29e68f1d35bb
   171   thread->set_vm_result(obj);
   171   thread->set_vm_result(obj);
   172 IRT_END
   172 IRT_END
   173 
   173 
   174 
   174 
   175 IRT_ENTRY(void, InterpreterRuntime::anewarray(JavaThread* thread, ConstantPool* pool, int index, jint size))
   175 IRT_ENTRY(void, InterpreterRuntime::anewarray(JavaThread* thread, ConstantPool* pool, int index, jint size))
   176   // Note: no oopHandle for pool & klass needed since they are not used
       
   177   //       anymore after new_objArray() and no GC can happen before.
       
   178   //       (This may have to change if this code changes!)
       
   179   Klass*    klass = pool->klass_at(index, CHECK);
   176   Klass*    klass = pool->klass_at(index, CHECK);
   180   objArrayOop obj = oopFactory::new_objArray(klass, size, CHECK);
   177   objArrayOop obj = oopFactory::new_objArray(klass, size, CHECK);
   181   thread->set_vm_result(obj);
   178   thread->set_vm_result(obj);
   182 IRT_END
   179 IRT_END
   183 
   180 
  1412   } else {
  1409   } else {
  1413     thread->set_vm_result(NULL);
  1410     thread->set_vm_result(NULL);
  1414   }
  1411   }
  1415 IRT_END
  1412 IRT_END
  1416 #endif // INCLUDE_JVMTI
  1413 #endif // INCLUDE_JVMTI
       
  1414 
       
  1415 #ifndef PRODUCT
       
  1416 // This must be a IRT_LEAF function because the interpreter must save registers on x86 to
       
  1417 // call this, which changes rsp and makes the interpreter's expression stack not walkable.
       
  1418 // The generated code still uses call_VM because that will set up the frame pointer for
       
  1419 // bcp and method.
       
  1420 IRT_LEAF(intptr_t, InterpreterRuntime::trace_bytecode(JavaThread* thread, intptr_t preserve_this_value, intptr_t tos, intptr_t tos2))
       
  1421   const frame f = thread->last_frame();
       
  1422   assert(f.is_interpreted_frame(), "must be an interpreted frame");
       
  1423   methodHandle mh(thread, f.interpreter_frame_method());
       
  1424   BytecodeTracer::trace(mh, f.interpreter_frame_bcp(), tos, tos2);
       
  1425   return preserve_this_value;
       
  1426 IRT_END
       
  1427 #endif // !PRODUCT