equal
deleted
inserted
replaced
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 |